1、计算机网络
转发表建立过程
ARP过程(同一网段、不同网段)
IP协议族(分层)
应用层协议TCP、UDP
2、DNS原理
DNS的过程(转发与不转发)
3、HTTP
(1)HTTP与服务器建立一个TCP连接是否会在一个Http请求完成后断开?
(2)一个TCP连接中HTTP请求发送可以一起发送吗?
(3)状态码
(4)header选项
4、Spring
https://blog.csdn.net/a745233700/article/details/80959716
(1)Spring初始化过程
(2)bean的生命周期
(3)AOP和IOC
(4)静态代理和动态代理
(5)Spring三种依赖注入方式
(6)Spring循环依赖场景
(7) Resource 是如何被查找、加载的?
(9) Spring 的 AOP 如何配置与使用?
(10)BeanFactory和ApplicationContext有什么区别?
(11)Spring单例bean,线程安全,并发
(12)@Autowired和@Resource之间的区别
(13)Spring事务
(14)解释一下Spring AOP里面的几个名词
(15)Spring MVC 运行流程
(16)前台提交表单和提交json对象
(17)aop里面的cglib原理是什么?
(18)aop切方法的方法的时候,哪些方法是切不了的?为什么?同类调用为什么无法切?怎么样解决(AOPContext)?
1、计算机网络
转发表建立过程
交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表,即转发表。
PC1(192.168.1.1/24)--------(接口1)交换机(接口2)--------PC2(192.168.1.2/24),如果PC1要PING PC2(第一次通信)
PC1先判断出PC2和自己处在同一个网段,由于两台PC是第一次通信,PC1的ARP表项中没有PC2的MAC地址,于是PC1就发一个ARP请求(请求的内容是PC2的MAC地址),这个ARP请求的源MAC地址是PC1的MAC地址,目的MAC地址是全F(广播包),交换机的接口1接收到ARP请求,把PC1的MAC地址加入接口1的MAC地址表,来表示PC1在我接口1下面;同时交换机向除了接口1之外的其他同一VLAN的端口转发这个ARP请求(含接口2),接着PC2接收到到这个ARP请求,发现这个请求就是发给我的,于是生成了一个ARP响应包,来响应这个请求,这个响应数据帧的源MAC地址为PC2的源MAC地址,交换机的接口2接收到这个响应数据帧之后把源MAC地址加入接口2的MAC地址表中。
ARP过程(同一网段、不同网段)
IP协议族(分层)
IP层:ICMP、ARP、RARP、IGMP、IGP(RIP、OSPF–直接用 IP 数据报传送)、EGP()
RIP好消息传的快,坏消息传的慢
应用层协议
TCP:HTTP、FTP、SMTP
UDP:DNS、RIP、DHCP
RIP基于UDP,BGP基于TCP,OSPF和EIGRP基于IP
2、DNS原理
DNS的过程(转发与不转发)
TCP:分区拷贝
UDP:域名解析
3、HTTP
(1)HTTP与服务器建立一个TCP连接是否会在一个Http请求完成后断开?
Http1.0:默认为false
Http1.1:KeepAlive–默认为true
(2)一个TCP连接中HTTP请求发送可以一起发送吗?
Http1.0不可以
Http1.1通过Pipelining技术可以,但存在头部阻塞问题。
Http2.0 可以,多路复用,二进制帧
(3)状态码
1XX:与HTTP服务器沟通时使用
2XX:200成功
3XX:301永久性转移、302Moved Permanently
4XX:400客户端请求错误、401未授权、403禁止获取该资源、404资源未找到
5XX:500服务器内部错误、503服务不可用,稍等
(4)http header选项
request:use-agent、connection、host、Accept、Content-Type、Cookie
response:一般不记
4、Spring
https://blog.csdn.net/a745233700/article/details/80959716
(1)Spring初始化过程
加载resource->为bean生成beanDefinetion->将beanDefinetion注册到容器
(2)bean的生命周期
实例化(分BeanFactory和ApplicationContext)->依赖注入->实现awaire接口->调用前置方法->init->调用后置方法->使用->销毁
(3)AOP和IOC
(4)静态代理和动态代理
静态代理:AspectJ(通过操作字节码,增强相应的方法,在编译期间生成类)
动态代理:JDK动态代理和Cglib动态代理(在运行期间生成)
JDK动态代理 | Cglib动态代理 |
---|---|
只提供接口的代理 | 直接继承父类,重写父类方法 |
final方法无法代理 |
(5)Spring三种依赖注入方式
还有实例工程和静态工厂
field | setter | construction | |
---|---|---|---|
优点 | 固定依赖注入的顺序,不运行循环依赖 | 在需要被注入的时候才会注入 | 方便、可读 |
缺点 | 维护较为麻烦 | 不能将对象设为final的 | 空指针、不能为final、和DI容器耦合度高 |
(6)Spring循环依赖场景
- construction 无法解决循环依赖,会报错
- setter bean的类型是singleton,实例化结束的对象放到一个Map中,并且Spring提供了获取这个未设置属性的实例化对象引用的方法,不会出现循环依赖;
- setter “prototype”作用域的Bean,Spring容器不进行缓存,因此无法提前暴露一个创建中的Bean。
(7) Resource 是如何被查找、加载的?
策略模式
Resource 接口是 Spring 资源访问策略的抽象,它本身并不提供任何资源访问实现,具体的资源访问由该接口的实现类完成——每个实现类代表一种资源访问策略。Spring 为 Resource 接口提供了如下实现类:
UrlResource:访问网络资源的实现类。
ClassPathResource:访问类加载路径里资源的实现类。
FileSystemResource:访问文件系统里资源的实现类。
ServletContextResource:访问相对于 ServletContext 路径里的资源的实现类:
InputStreamResource:访问输入流资源的实现类。
ByteArrayResource:访问字节数组资源的实现类。这些 Resource 实现类,针对不同的的底层资源,提供了相应的资源访问逻辑,并提供便捷的包装,以利于客户端程序的资源访问。
(9) Spring 的 AOP 如何配置与使用?
基于@AspectJ注解或者xml配置
(10)BeanFactory和ApplicationContext有什么区别?
BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。
①BeanFactroy采用的是延迟加载形式来注入Bean的;ApplicationContext,它是在容器启动时,一次性创建了所有的Bean
②相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。
(11)Spring单例bean,线程安全,并发
无状态的Singleton类型的bean是线程安全的,比如service,controller;spring通过threadlocal(一个线程一份拷贝)保证其绝大部分单例bean都是线程安全的。
(12)@Autowired和@Resource之间的区别
(1) @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。
(2) @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。
(13)Spring事务
事务类型:编程式事务、声明型事务
事务的传播行为:7种
隔离级别:同数据库隔离级别,多一个default使用数据库的隔离级别
(14)解释一下Spring AOP里面的几个名词:
(1)切面(Aspect):被抽取的公共模块,可能会横切多个对象。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @AspectJ 注解来实现。
(2)连接点(Join point):指方法,在Spring AOP中,一个连接点 总是 代表一个方法的执行。
(3)通知(Advice):在切面的某个特定的连接点(Join point)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。
(4)切入点(Pointcut):切入点是指 我们要对哪些Join point进行拦截的定义。通过切入点表达式,指定拦截的方法,比如指定拦截add*、search*。
(5)引入(Introduction):(也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。
(6)目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(adviced) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
(7)织入(Weaving):指把增强应用到目标对象来创建新的代理对象的过程。Spring是在运行时完成织入。
(15)Spring MVC 运行流程
- 发起请求到前端控制器(DispatcherServlet)
- 前端控制器请求HandlerMapping查找 Handler( 可以根据xml配置、注解进行查找)–
- 处理器映射器HandlerMapping向前端控制器返回Handler
- 前端控制器调用处理器适配器去具体的处理器handler(即编写的Controller)
- 处理器适配器去执行Handler
- Handler执行完成给适配器返回ModelAndView
- 处理器适配器向前端控制器返回ModelAndView(ModelAndView是springmvc框架的一个底层对象,包括Model和view)
- 前端控制器请求视图解析器去进行视图解析(根据逻辑视图名解析成真正的视图(jsp))
- 视图解析器向前端控制器返回View
- 前端控制器进行视图渲染( 视图渲染将模型数据(在ModelAndView对象中)填充到request域)
- 前端控制器向用户响应结果
Handler 有可能是一个 HandlerMethod(封装了 Controller 中的方法)对象,也有可能是一个 Controller 对象、 HttpRequestHandler 对象或 Servlet 对象,需要调用adpter去处理对应的handler对象。
(16)前台提交表单和提交json对象
form格式是一种“键值对”的数据格式,比如:
a=1&b=2&c=3
而json格式则类似这样:
{“a”:1,“b”:2,“c”:3}
(17)aop里面的cglib原理是什么?
通过ASM字节码生成技术创建对应类。
(18)aop切方法的方法的时候,哪些方法是切不了的?为什么?同类调用为什么无法切?怎么样解决(AOPContext)?
不是调用的代理类的方法,调用自己本身的方法则无法使用。通过AOPContext来动态代理,增强方法。