补充一下背景:双非计算机专业,一年纯后端工作经验小白
问题:依旧上来先自我介绍
1然后开始问项目,简单问了下业务,然后看见写了多线程,多线程怎么用的,分布式锁怎么用的,缓存怎么用的
然后开始技术问题
1.上来就问spring底层源码看过吗?看过是吧,那说说spring的启动流程
我的回答:run()方法前先new个springApplication对象,然后开始执行run方法,创建一个监听器,然后加载配置,然后把这些配置加入到监听对象中去,然后就加载上下文,作为run方法的返回,然后就创建容器,刷新上下文,实现stater自动化配置和bean的实例化等工作
2.讲讲springMVC的执行过程?
我的回答:通过servlet,映射适配渲染,具体答不上来
3:mybatis可以不需要写sql就能执行操作,讲讲它的底层执行逻辑
我的回答:加载配置环境,然后生成SqlSession工厂,然后生成SqlSession,然后执行一个getMapper方法,获取mapper,首先会去找一个mapperProxyFactory,这个就是负责动态代理的,然后会生成一个mapperProxy对象,里面有个mapperMathod方法,里面去调了excutor执行器,执行器会去去根据sqlSession动态生成sql,通过几个拦截器实现的,一个statementHandler负责去执行query的,一个paramerHandler去把传参预编译加进去,最后结果通过resultSetHandler进行处理成对象并返回。。
4. 做过报表系统吗,大sql查询怎么优化
我的回答:老套路,先看业务层面能不能解决,不能再按表设计能不能解决,不能再看索引,子查询换为连接或者分批处理等待
5.分布式事务了解吗?怎么解决
我的回答:了解,接触过,没有实操过,比如用消息队列去解决,或者基于2pc或3pc思想,加一个事件调度器。。。
6.讲讲bean的整体过程
我的回答:首先实例化创建然后分配看见,然后初始化设置属性,调用init方法初始化,然后就使用然后就销毁,可以通过那个配置文件中的destroy-method属性进行指定。。。
没了,可能全是问的底层,我答的不够详细把,面试官可能也没兴趣问下去了。。。。整体过程不到20分钟就结束了
写在最后:
准备面试的时候,spring和mp这些的底层好好去看一看记一记,现在面试官是真心喜欢问,Java基础基本都不问你了,前面答的不好后面人家也不想听了。。。。