投递的岗位是Java后端开发,八股文背了很多,现在面过三十场,做一个总结,整理出一些我确实被问到的问题。
该准备什么
首先是简历里的项目,一定要好好整理,项目的架构是怎样的,开发过程中遇到的难点,怎么解决的。
感觉大家的项目要么是管理系统、要么是什么秒杀系统,项目提到了什么就着重准备什么,例如vue+springboot的项目就好好背一背spring相关的八股文,bean的自动装配原理,springboot的启动原理,涉及到aop、ioc的东西。
如果项目是分布式架构,用了各种中间件,主要写上自己熟悉的中间件。例如redis、nacos等比较容易说的。。。都会被问到,我被问的多的中间件就是redis(那几种数据类型,用来存什么,怎么用)消息队列的那几个,怎么解决消息丢失、或者顺序问题,怎么解决定时任务的需求。
总之项目是一定会被盘问的,用了什么东西,为什么要用这个东西,为什么不用别的那个东西。。。
频率较高的问题
这些问题建议专门整理相关的内容,而不是只单纯明白问题的答案。
1、不同的排序和对应的复杂度(涉及到平均时间复杂度、稳定性;再进一步了解最好最坏复时间复杂度、空间复杂度、内部排序外部排序相关的东西)
2、一些集合的底层原理(ArrayList的底层用object数组实现,初始容量是10,构造器升成空数组,有元素添加时,扩容为10)(扩容机制,扩容因子)(HashMap的底层是数组加链表,然后转为红黑树)(要了解转换的条件和扩容的相关东西)
最起码这俩集合要搞懂,再进一步的话就要了解为什么要用红黑树、扩容因子为什么是0.75、相比于其他数据结构的优点,还有线程安全的ConcurrentHashMap的底层。
3、你在项目里用到了什么设计模式,这个阿里面试疯狂问。。。我答的不太好。。。在满帮面试的时候也是手写了单例模式的一些实现。这些都需要了解
4、问到mysql必问最左匹配原则,索引失效,如何建索引,给你一个语句索引能不能用到。。。这类型的问题
5、java和其他语言的区别,一般会问你学过哪些语言,然后再问问区别
6、进程和线程的区别
7、synchronized 和 volatile 的用法和二者有什么区别
8、类加载和双亲委派
9、jvm垃圾回收机制
10、tcp和udp的区别(华为面试几次问几次)
11、OSI模型,知道哪些相关的协议
12、三次握手、四次挥手(米哈游当时问了一个如果保证传输不丢失,那么四次挥手能不能改成三次,不能)
13、如何保证可靠传输
14、输入URL 到页面展示的过程
15、常见的状态码
16、栈和队列的区别,用数组或者链表怎么实现(字节问了很多数据结构)
17、MyISAM 和 InnoDB 的区别
18、mysql事务、事务隔离级别、对应的问题、默认的隔离级别、mysql锁
19、mysql索引的实现、三大日志
频率一般的问题
1、jvm内存模型
2、线程池的参数
3、索引失效的条件
4、锁相关
5、内存区域out of memory的问题
6、poll 、 epoll 、select的区别
7、jdbc连接数据库的语句是什么
8、synchronized的锁升级机制
9、创建对象的方式
10、java线程通信的方式
11、java进程通信的方式
12、重写equals()的时候为什么要重写hashcode()
13、java三大特性,举一个多态的例子
14、死锁的条件和解决方法
这些问题其实都很容易在网上查到,我自己总结的其实也不算太全面,所以就不直接放出来干扰大家的思考了。。。我自己写的东西有很多都面试没被问到,当时还觉得挺重要hhh
因为里面涉及到挺多的个性化的例子,例如我实习的东西,可以直接拿来用的信息反而不多,丢在下载里了,上传是因为我比较珍视自己的积累,但是其实多看看javaGuide比看我写的强得多。