leetcode70 爬楼梯
题目描述
1 | 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 |
解答:
递推公式:
设f(n)为n阶楼梯的爬法f(n)=f(n-1)+f(n-2) n>2
f(n)=1 n=1
f(n)=2 n=2
到达第n阶楼梯,有两种方法,一种是从第n-1阶楼梯,走一步到;另一种是从n-2阶楼梯,走两步到。
根据以上的递归公式,我们很容易写出下面的代码:
1 | public int climbStairs(int n) { |
博观而约取 厚积而薄发
题目描述
1 | 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 |
解答:
递推公式:
设f(n)为n阶楼梯的爬法f(n)=f(n-1)+f(n-2) n>2
f(n)=1 n=1
f(n)=2 n=2
到达第n阶楼梯,有两种方法,一种是从第n-1阶楼梯,走一步到;另一种是从n-2阶楼梯,走两步到。
根据以上的递归公式,我们很容易写出下面的代码:
1 | public int climbStairs(int n) { |
1 | public class MyServer { |
XSS攻击即跨站点脚本攻击(cross site script),指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
常见的XSS攻击的类型有两种:
SpringBoot相较于Spring的一大进步就是它简化了配置。SpringBoot遵循”约定优于配置”的原则,使用注解对一些常规的配置项做默认配置,减少或不使用xml配置。Springboot还提供了大量的starter,只需引入一个starter,就可以直接使用框架。
在SpringBoot
启动类上添加的SpringBootApplication
注解。这个注解实际上是一个复合注解。
1 | @Target(ElementType.TYPE) |
我们主要关注@SpringBootConfiguration
,@EnableAutoConfiguration
,@ComponeScan
.@SpringBootConfiguration
注解的底层是@Configuration
注解,即支持JavaConfig的方式来进行配置。
@EnableAutoConfiguration
注解的作用就是开启自动配置功能。
@ComponentScan
注解的作用就是烧苗当前类所属的package
,将@Controller
、@Service
、@Component
、@Repository
等注解所表示的类加载到IOC容器中。
通过对这几个注解的分析,我们可以知道自动配置工作主要是由EnableAutoConfiguration
注解来实现的。
该注解的定义如下:
1 | @Target(ElementType.TYPE) |
该注解使用@Import
向IOC容器中注入了AutoConfigurationImportSelector
类。
该类中提供了获取所有候选的配置的方法:
1 | protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { |
通过loadFactoryNames
方法拿到了一个List
,这个方法中传入了一个getSpringFactoriesLoaderFactoryClass()
,这个方法,实际上就是获取了标记了@EnableAutoConfiguratioin
注解的类。
1 | protected Class<?> getSpringFactoriesLoaderFactoryClass() { |
当我们的SpringBoot项目启动的时候,会先导入AutoConfigurationImportSelector,这个类会帮我们选择所有候选的配置,我们需要导入的配置都是SpringBoot帮我们写好的一个一个的配置类,那么这些配置类的位置,存在与META-INF/spring.factories文件中,通过这个文件,Spring可以找到这些配置类的位置,于是去加载其中的配置。
DispatcherServlet
,它也是一个Servlet
,执行doService
request
对象中。doDispatch(request,response)
方法getHandler
方法获取对应的Handler
getHandlerAdapter
拿到对应的HandlerAdapter
PreHandler
,如果拦截器的PreHandeler
返回false,则直接返回HandlerAdapter
对象的handler
得到ModelAndView
对象postHandle
方法processDispatchResult
对结果进行处理,其内部调用了拦截器的afterCompletion
方法Channel
包含4个状态:
ChannelUnregistered | Channel已经被创建,但还未注册到EventLoop |
---|---|
ChannelRegistered | Channel已经被注册到EventLoop |
ChannelActive | Channel处于活动状态,它现在可以接受和发送数据了 |
ChannelInactive | Channel没有连接到远程节点 |
HTTP重定向负载均衡需要一台重定向服务器。它的功能就是根据用户的HTTP请求根据负载均衡算法选择一个真实的服务器地址,并将服务器地址信息写入到重定向响应中返回给用户浏览器。用户浏览器再获取到响应之后,根据返回的信息,重新发送一个请求到真实的服务器上。
more >>ByteBuf
是Netty的数据容器,它解决了JDK API的局限性,能为网络应用程序的开发者提供更好的API支持。ByteBuf
API的优点如下:
BuyteBuffer
的flip()
方法tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true