前言:作为一名21年大学毕业的Java服务端开发工程师,从19年10月份(大三上)开始进行日常实习面试,期间获得小米、快手、领英、Tencent等offer,因疫情爆发无法准时入职,20年3月份春招成功进入Tencent实习(20.03-20.09),Tencent转正答辩完后进行秋招(20.09-20.11),最后成功获得腾讯、阿里、快手、百度等offer,综合各方面原因选择了回归老东家Tencent。整个求职期间共经历了将近50次面试,在这里将自己的个人面经综合总结一下,希望能够帮助到面试的小伙伴们!
操作系统
1. 进程、线程、协程
1. 进程和线程的区别?一个进程中有两个线程a,b,a线程出现算数异常,请问ab的状态是怎么样?
2. 协程的实现原理
3. 线程通信的方法,管道是不是有序的,消息队列是怎么实现的?
4. 信号量是什么
5. 线程共享了进程什么东西
2. 同步、异步
1. 同步、异步的区别,优缺点
2. io多路复用,NIO模型
3. epoll和select的区别
4. AIO NIO BIO 的区别
3.内存
1. Linux共享内存是怎么实现的
2. Linux的内存管理是怎么实现的?
3. 在一个文件中找一个字符串是基于什么原理
4. 文件管理怎么找到制定文件?写文件是先刷新磁盘还是内存?
5. 虚拟内存的三个特性
6. Linux怎么查看系统的状态,怎么查看线程状态
并发
1. 死锁,死锁的产生条件,死锁的预防, 乐观锁悲观锁,优缺点
2.线程池的实现原理,线程池的参数,线程池的执行过程,拒绝策略
3. Lock和Sychronized的区别
4. sleep与wait的区别
5. Sychronized的实现原理,锁静态方法,代码库,普通方法的区别
6. volatile的原理
7. Java创建线程有几种方法?
8. 线程不安全的概念
9. ThreadLocal的作用和使用场景
10. 讲讲cas
11. Java如何让三个线程同一时间并发执行?
12. Java线程间的通信方式
13. AtomicInteger的实现原理
14. 设计让线程先并发执行几个任务,再串行执行
15. 锁的降级升级
16. 讲讲互斥锁,使用互斥锁实现读写锁
17. 锁是锁在堆还是栈,为什么不是栈?
18. 并发集合有哪些?
JVM虚拟机
1. 线程CPU占用率较高,怎么定位到具体是哪一行代码?
2. Java的垃圾收集,调用System.gc()后会进行垃圾收集吗?
3. 什么时候进行垃圾收集(新生代+老年代)?垃圾清除算法有哪几种,优缺点?新生代为什么用复制算法?垃圾收集器
4. 虚拟机的内存划分
5. string存储在内存中是怎么存储的
6. Java线程模型(多对一,一对多,多对多等)
7. 类加载机制
8. Java的平台无关是怎么实现的?jdk8有方法区吗?没有的原因?
9. 内存溢出问题的定位与排查,根据什么指标排查的?排查过程是怎么样的?
10. 了解寄存器吗?
11. 怎么自定义一个类加载器?
12. JVM参数调优
13. jvm频繁的full gc该怎么解决?
14. 双亲委派模型,还了解其他模型吗?
15. 什么时候会栈溢出?static修饰的变量会栈溢出吗
16. 虚拟机内存溢出(Stackoverflowerror & outofMemoryError)和内存泄漏
17. 对象的内存分配?什么时候对象会进入老年待?
Java基础
1. 集合
1. HashTable和HashMap和ConcurrentHashMap查找速度,各自区别
2. ArrayList和LinkedList的对比
3. HashMap长度为8转化为为红黑树,6转化为链表的原因
4. HashMap.get()的时间复杂度是多少
5. HashMap的hash值是怎么得到的
6. ConcurrentHashMap怎么保证安全,size怎么计算的?分段锁的维度?扩容机制
7. 迭代器是怎么用的, 原理
2. 基础
1. float a =3.14 正确吗?该如何修改?
2. switch可以存什么类型
3. char可以存储汉字吗
4. 短路与和逻辑与的区别
5. 序列化是什么
6. int有几个字节?在32位和64位有什么区别?char有几个字节
7. ==和equal的区别
8. equal与hashcode重写
9. Java是值传递还是引用传递,String呢?
10. C语言中struct和union的区别
11. jdk8的新特性,新的优点
12. new一个字符串有几个变量产生?一定是两个吗?
13. jdbc连接的步骤,事务开启
14. 动态规划的实现
15. lambam表达式的理解
16. final 底层原理,作用
17. String能不能被继承
18. 浅拷贝和深拷贝的区别
19. java启动有哪几种方式,参数有哪几种?分别是什么意思?
3. 设计模式
1. 单例模式(懒汉,饿汉)
2. 工厂模式
3. 责任链模式
4. 观察者模式
5. 适配器模式
框架
1. SpringBoot & Spring
1. 为什么要有SpringBoot?
2. Spring的Bean的生命周期
3. Spring的特性
4. Spring的IOC是怎么实现的
5. springboot的@SpringBootApplication是怎么实现类加载的
6. Spring AOP的实现原理
2. SpringMVC
1. springmvc拦截器的实现
2. SpringMVC的执行流程
3. 讲讲springmvc常用的五个注解
3. Mybatis
1. #和$的区别
2. mybatis的缓存
数据库
1. Mysql
1. Mysql存储引擎的区别
2. ACID具体是什么,原子性场景的具体举例,一致性是怎么实现的?
3. 聚集索引与非聚集索引的实现
4. Mysql索引什么场景加?什么时候会失效?索引的优缺点?实现原理(b+树),不使用B树和hash的原因,覆盖索引是怎么实现的?
5. 关系性与非关系性数据库的区别
6. 主键与外键的区别
7. sql优化等方法,具体场景
8. 左连接和内连接的区别
9. 事务是什么?特性?隔离级别,带来的问题
10. 讲讲MVCC,间隙锁
11. group by常与什么搭配使用
12. 使用sql书写:获取一个班级排名第三,性别为男的所有的信息
2. Redis
1. 为什么要有Redis
2. 缓存击投是什么?怎么解决?
3. 消息队列是怎么实现的?
4. Redis的基本数据结构,zset的实现原理,跳表时间复杂度?间隔改变了时间复杂度会不会改变?
5. Redis持久化方式(RDB,AOF讲详细,RDB是将所有数据同步回硬盘吗)
6. Redis用在什么场景?有哪几种基本类型?与数据库数据不一致该怎么解决?
7. 在Redis集群中使用上百万个数据,应该怎么查找一些数据
网络
1. TCP&UDP
1. 详细TCP与UDP,TCP的可靠性是怎么实现的?
2. TCP第三次握手失败客户端和服务端分别会出现什么情况?
3. TCP拥塞控制
4. TCP的三次握手
5. Tcp数据完整性,怎么确认数据的完整性?怎么确认一个TCP连接断开(四次挥手)
2. 其他
1. 网络七层模型:作用,协议,五层模型
2. DNS递归和迭代的区别
3. HTTP协议
4. ping的实现原理
5. cookie和Session的区别,Session的创建过程
6. GET和POST的区别
7. HTTP和TCP的区别,为什么有了HTTP还要有TCP?
8. HTTP的状态码
9 转发与重定向的区别
10. 在浏览器输入url会发生什么
11. Http和Https的区别,Http数据完整性怎么保证
分布式
1. 分布式事务的实现原理
2. zookeeper的作用,选举机制,数据同步机制
3. 一致性hash的实现原理
4. Nginx负载均衡的实现原理,具体算法
5. 服务治理是怎么实现的
Git&Maven
1. git常用命令
2. maven版本冲突该怎么解决
3. git操作:rebase,pick
4. maven和gradle
数据结构
1. 大数据场景
1. 10亿数据是怎么实现存储的,字符串hash是怎么实现的?映射原理?
2. 100亿数据找出一千个最大的数,博主答了堆,堆的时间复杂度,还有别的方法吗?二分
3. 在开头为187的上亿个电话号码中除去重复的,限定在一个500兆的文件中操作?
4. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url
5. 求两个数组的交集,大数据量
6. 10个g的文件数据,怎么按出现请求次数从高到低排序
7. 一个100w行的文件怎么查看第四列的值?
2. 基本算法
1. 快速找出两个数组中相同的数
2. 反转链表+变量名驼峰转换
3. 二叉树的遍历方法
4. 深度和广度,深度和广度分别对应栈和队列的什么
5. 字符串中的最长回文子串
6. 百分之六十的人喜欢篮球,70喜欢足球,80喜欢排球,求同时喜欢足球和篮球的概率
7. 红黑色与b+树的查找删除效率
8. 抛硬币计算概率问题,轮流抛谁先抛到正面谁赢?
9. 找到无序数组中最小的k个数(二分)
10. 求出有序数组的平方个数
11. 了解哪些加密算法
12. 冒泡的时间复杂度是多少?时间复杂度该怎么算?
13. 数据结构由什么组成(三大特性)
14. 快排原理,时间复杂度
15. 求数组的最大异或数
16. 赛马问题
17. 实现一个抽奖系统
18. 哈夫曼树怎么求路径之和
19. 找出一组字符串中重复且只出现一次的字符串
20. 堆排序的实现原理
21. 爬楼梯
22. leetcode1054条形码
23. 判断包含括号的字符串是否有效
24. 给定一个循环递增数组a[],有n个元素,如a[]={ 10, 13, 16, 20, 25, 2, 5, 8},给定一个元素num,找出可以把num插入到数组a[]中的位置,让插入num后的a[]仍然是循环递增的
25. 实现一个字符串反转
26. 写一个将两个二进制字符串相加的函数
27. 反转链表
28. 链表中删除所有相同的节点
29. 如何确定一个链表是否有环
30. 用数组实现栈
31. 两个递增数组找出第k小的数
32. 翻转数组找到其中一个数的下标
其他
1. Tomcat调优
2. 项目的具体架构,访问量
3. 项目中订单模块的实现
4. 项目中消息通知模块的实现
5. 项目中那个地方用到线程池
6. 单体架构的瓶颈(cpu, io, 带宽)与如何优化,为什么访问量多了会占据cpu资源
7. uml有哪几种图?用例图有什么特点?转化为类图有哪那个步骤?
8. 开发模型有哪几种?瀑布开发模型有哪几个过程?
9. 单点登录的实现,与移动端配合使用过吗?
10. 简单实现下单扣库存的代码 高并发,解决库存超卖
11. 讲一下项目的数据库架构
12. cpu大端序小端序
13. 前后端分离是什么
花了一天时间将之前的面试中所遇到的问题全部总结出来,后续会整理一份答案(查看我的下一篇文章),希望能够帮到各位同学!欢迎大家访问我的个博:个人博客