Young87

当前位置:首页 >个人收藏

【面试题】-java高级面试题汇总

花大笔墨整理的一些java高级程序猿必会的面试题,其中有很多都是大厂面试题.


目录

1.spring IOC原理

2.spring bean生命周期

3.spring aop原理

 4.spring mvc原理

5.Mybatis原理

6.servlet原理 

7.netty原理

8.dubbo原理

9.HashMap原理/ConcurrentHashMap原理

10.线程池原理

11.redis集群 

12.mongodb集群

13.zookeeper集群

14.msyql 集群(主从模式) 

15.nginx集群 

16.mycat集群 

17.spring cloud 集群 

18.springboot的部署如何区分测试环境/生成环境

19.springboot 和 spring 区别

20.jvm的类加载机制 

21.jvm的内存模型

22.jvm的垃圾回收器

23.jvm调优

24.jvm的垃圾回收算法.

25.什么时候会发生minor gc, full gc?

26.TCP三次握手,TCP,TCP/IP协议,http协议,http1.0,http1.1,http2.0

27.各种设计模式

28.自定义注解

29.死锁/活锁/饿锁/分布式锁/乐观锁/悲观锁 分别是什么,如何实现.

30.jdk1.7-1.11新特性以及lambda表达式使用.


1.spring IOC原理

IOC即控制反转,其实现主要依托于IOC容器,IOC容器有很多种,这里只提两种,一种是BeanFactory容器,另外一种是ApplicationContext容器,其中BeanFactory容器的初始化过程:

①读取bean.xml配置文件

②创建BeanFactory(new DefaultListableBeanFactory)

③创建资源读取器(new xmlBeanDefinitionReader,并将其与BeanFactory关联.

④将bean.xml中的信息解析成BeanDefinition元数据对象,并注册到IOC容器(BeanFactory)中,也就是将解析后的对象存入BeanDefinitionMap中.

ApplicationContext容器要比BeanFactory容器要高级一些,提供了一些额外的附加功能:支持不同的信息源,支持应用事件等.

至此,配置在bean.xml中的bean就被容器管理起来了,在注入时,通过扫描注解然后获取对应的bean进行注入即可.

2.spring bean生命周期

①Bean实例的创建

②为Bean实例设置属性

③初始化Bean的接口方法

④应用通过IOC容器获取Bean

⑤当容器销毁时,调用Bean的销毁方法doclose().

3.spring aop原理

spring aop是基于动态代理实现的,在此之前,你需要先了解设计模式-代理模式.

不同的是,spring aop更加智能,动态代理有2种实现方式,一种是通过JDK提供的代理,一种是通过CGLIB实现,前者要求被代理对象必须实现接口,或者则要求被代理对象必须可以被继承,如果加了final修饰则不行.

spring aop在对对象进行代理前会自行判断使用Jdk动态代理还是cglib,部分代码片段如下:


	@Override
	public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
		if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {
			Class<?> targetClass = config.getTargetClass();
			if (targetClass == null) {
				throw new AopConfigException("TargetSource cannot determine target class: " +
						"Either an interface or a target is required for proxy creation.");
			}
                        //判断如果是接口,或者是被代理的类,则使用JDK动态代理
                        if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) {
				return new JdkDynamicAopProxy(config);
			}
                        //否则用cglib动态代理,(没有实现接口的类)
                        return new ObjenesisCglibAopProxy(config);
		}
		else {
			//默认使用jdk动态代理
                        return new JdkDynamicAopProxy(config);
		}

 4.spring mvc原理

Spring mvc是以DispatcherServlet为核心实现的,具体的工作原理如图所示:

①用户发送请求至DispatcherServlet

② DispatcherServlet根据请求信息调用HandlerMapping,由HandlerMapping查找与请求匹配的Handler.

③找到Handler后,由对应的HandlerAdapter来调用真正的处理器来处理业务.

④处理完返回Model/View至Dispatcher.

⑤调用ViewResolver处理view,根据逻辑找到相应的View并返回

详见:

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: Linux-套接字I/O模型-epoll

下一篇: 如何查看CPU信息、CPU占用率和内存占用

精华推荐