2020.3.31更新:
- 美团、腾讯、搜狗新一轮面经
- 复习提纲详细版(在最底下,一个快速复习的大体路线)
背景
二月初开始准备面试,刚开始准备的时候确实一头雾水,觉得自己什么都不会,踌躇了很久也没有头绪。
985水硕,没实习没竞赛没论文没好的项目。
好在后来慢慢地看书、看课程做笔记总结,然后再看一些面经,多参加一些面试,慢慢有了自己的节奏
(别焦虑,焦虑没用,慢慢从头开始)。
很感谢带我毕设,现在在阿里的一个学长(可能我去阿里的希望渺茫了)。
学长从二月就开始帮我们实验室的几个同学弄内推的事,帮我们看简历改简历,指导我们复习,对我们帮助很大。
也要感谢牛客网,看面经和做题都在上面,甚至好多公司面试也在上面,所以面了这么多场之后,觉得要把自己总结的面经分享到上面,希望能帮到更多的人。
关于面试中一些问题的解答,都写在我的博客里了:
https://blog.csdn.net/weixin_43925277/category_9751729.html
还有在牛客网上刷剑指offer的解答和思路:
https://blog.csdn.net/weixin_43925277/category_9752121.html
面的都是Java岗
字节跳动
已拿offer
一面
自我介绍
介绍第一个项目
项目的目的,项目的整体架构,负责模块的简单介绍
x实现(这一部分可能我没表述清楚,面试官问了很久。。。)
算法题:
给定两个数组,求两个数组的交集,且重复多少次,就打印几次
比如:[1,2,2,3,5,7]和[1,1,2,2,2,2,3,3,5,7,8],结果[1,2,2,3,5,7]
JVM内存结构?
OOM的场景?堆和栈的一些区别?
HashMap的扩容机制?存储的方式?hash后码相同时怎么处理?
线程池是什么?怎么用?有什么好处?线程池的核心参数?
数据库的索引结构?B+树的结构?与B树的区别?
Redis了解过吗?Redis的数据结构?缓存击穿是什么?怎么解决?
事务的隔离机制?四种事务隔离级别的分别是什么意思,有什么区别?事务隔离机制里用了AOP,是如何用的?
Linux的top指令可以查看什么信息?top中的load指的是什么?网络相关的指令用过哪些?查端口号用哪一个?
乐观锁和悲观锁?在数据库里怎么实现一个乐观锁?乐观锁在数据库中的实现形式?
TCP的滑动窗口机制?
Jenkins自动化部署的流程?
有什么问题要问?
二面
自我介绍
项目的需求背景,以及项目的架构,项目的实现细节
数据库的第三范式
有没有对自己开发的模块做过压测?如果让你去做压测,你会如何去做?
如果数据规模增大几个数量级,可以有什么优化?
联合索引的使用,减少回表次数
Redis缓存
如何去设计缓存
redis中常用的数据结构?缓存击穿和缓存穿透
开源的DevOps平台用过吗,CICD平台?
算法题:拿糖问题
给一个数组{1,3,5,7,8,10},每个位置上数字代表每个位上有几个糖
不能拿相邻的糖,最终怎么拿最多的糖
volatile关键字的功能
Linux的buffer内存和cache内存
虚拟内存、常驻内存、共享内存
路由器,交换机工作在哪一层?
ConnectTimeOut ReadTimeout异常的区别?Unknown host是什么原因导致的?
浏览器输入 www.xxx.com 最终展现网页,整个过程
观察者模式
说一下zookeeper和ES
对发展方向有什么想法
你有什么想问的?
三面
询问毕业时间,询问GPA和研究生研究方向
项目具体细节,介绍负责的模块,醒目的具体架构?
什么是DevOps?DevOps的使用场景?
微服务是什么?微服务的粒度?怎么去划分?
询问项目的细节
面对百万级的数据,你的模块需要怎么优化?
开发时使用的技术?有没有深入了解?
说一下GC算法?G1和CMS分别是什么,区别?
你还有什么问题?
HR面
自我介绍,对公司面试的评价,实习时间
为什么转专业?
你认为你有什么优点?有什么缺点?有什么兴趣爱好?
在团队中习惯充当什么样的角***r>遇到过比较困难的事情是什么?觉得自己很幸运的事情是什么?
对于未来的规划?有没有使用过公司的其他产品?有没有转正想法?
阿里系
阿里云块存储提前批面试
自我介绍
== 和equals的区别?类的hashcode是什么?如果两个对象的hash码相同,equals一定为true吗?
抽象类和普通类的区别?抽象类和接口的区别?抽象类中一定会有抽象方法吗?
Java的IO模型?BIO、NIO、AIO概念和区别?
线程和进程的区别?有几种创建线程的方法?
如果超过线程池的任务上限怎么办?线程池中一个线程抛出异常,其他线程受影响吗?如果在try…catch…结构中,线程池中有3个线程抛出异常,catch运行几次,finally运行几次?
Java怎么保证多线程的安全?synchronized和volatile的区别?synchronized是悲观锁吗?
介绍一下ThreadLocal?有什么用处?
Java反射是什么?反射的用处?为什么要用Ioc这种方式?AOP了解过吗?AOP切面可以实现异步吗?
HashMap和Hashtable的区别?介绍一下concurrentHashMap?Hashtable和concurrentHashMap分别适合哪些场景?
Spring Boot的Bean是什么?调用接口时可以修改Bean吗?Bean有哪些种类?Bean的生命周期?
Spring Boot的过滤器,拦截器?哪个在先哪个在后?
ORM框架用过哪些?Hibernates循环插入怎么会比较快?自定义SQL语句是什么意思?
DevOps中构建是怎么实现的?代码管理如何实现的?代码改变可以触发自动构建吗?
介绍一下项目,具体负责的工作?
介绍一下服务发现?服务发现?
k8s的负载均衡?主从节点的切换?主从节点数据库数据冲突会不会造成脏读?
WebSocket怎么保证数据可靠性?
你有什么问题要问?
阿里新零售事业部供应链、蚂蚁金服花呗、淘系增长技术部
这些都只进行了电话一面,问的问题也和其他地方大同小异
由于最后内推只选择了一个部门,其他部门的下一面都回绝了。。。
阿里新零售事业部供应链
三面没问什么技术问题,只聊了一下,三面挂
美团
已接到 OC
一面
自我介绍
项目介绍(10分钟左右)
权限管理设计的解决方案,K8S原理,pod是什么?
websocket是用tcp还是udp?websocket怎么实现的?
Java并发访问HashMap,怎么保证线程安全?
HashMap查询最坏情况?
怎么保证HashMap整体赋值并发安全?
Java运行时数据结构与内存模型?堆和栈保存的内容?
栈空间在什么时候进行回收?Java的栈大小是多少?能不能把栈中的数据都分配在堆上?什么时候进行full GC?GC为什么要分代?
SpringBoot怎么监控接口成功率?
有什么要问的
二面
自我介绍
项目介绍(包括其中用到的一些技术等)
介绍Http协议,如何做权限校验?有状态还是无状态?
设计token时的注意要点?
单点登录了解过吗?
Socket网络编程IO模型?
手写一个HashMap数据结构,实现put函数?
有没有实习经历?拿了哪些offer?说一下职业规划
你还有什么想问的?
三面+HR面
全程只问了项目另加一些类似HR的问题,没有问基础知识,只问了项目管理的一些问题
项目细节(10分钟)
项目的需求以及目的?项目的团队规模?项目的整体架构介绍一下?
你负责的模块挑战有哪些?怎么克服的,项目中做了哪些优化?
QPS有测试过吗?项目的规模?用了几台服务器?出过什么故障吗?
代码编写怎么去管理的,有没有代码审查?用户数量有多少?
做了项目有什么较大的收获?项目中的角色都有哪些?多人团队的进度节奏怎么统一的?
重新部署项目的过程会不会遇到困难,怎么去优化这个部署过程?
技术点出现分歧如何达成共识?中间件技术栈不一致如何解决的?
有其他offer吗,其他offer是什么岗位?
学校中课设或大作业中担任的角色?与团队成员产生冲突时怎么做的?如果有团队成员掉队怎么办?
项目中负责人到参与者的角色转变对你心态的影响?
现在在实验室做的工作有哪些?
项目进行当中有设置时间点和里程碑吗?
你还有什么问题吗?(探讨了一下不同公司对软件过程管理的态度以及原因)
CVTE
CVTE一面
一面电话面试,大概半个多小时,问的基本上是一些基础问题和项目,没有详细记录
只记得问了一个sql语句,让我说如何去写
二面视频面试
自我介绍
项目介绍,CVTE这边问的基础问题一直都围绕着项目问的
怎么理解DevOps的?
SpringBoot shiro了解过吗?为什么不用这个?
怎么在平台中获取用户的信息?token如何实现?jwt由哪些部分组成?
hibernate和mybatis区别?为什么要用hibernate?
在项目中怎么运用的sql语句的优化?
覆盖索引的B+树结构中叶子结点存的是什么数据?不同查询场景走聚簇索引和非聚簇索引的情况?
k8s集群怎么搭的?NFS用来做什么了?
MySQL和mongoDB的区别?
mq队列中消费方怎么保证不重复消费消息?怎么实现分布式事务?
http和websocket性能区别?
http1.0 1.1 2.0的一些区别,考虑这些之后与webscoket有什么其他不同吗?
最近有没有在学一些新的技术?有没有看过Java核心的一些源码?
synchronized和lock的源码,介绍一下
做了这些项目,你遇到的比较大的挑战有哪些?
有什么要问的?
HR面
先是填一个补充简历问题,里面的问题。。。可以说是灵魂拷问了(我不会告诉你里面的问题比面试还难回答)
其实就是一些HR常见问题,但是可能挖掘的比较深,自己平时也没仔细想过,突然一思考容易陷入 哲学 中。。。
让你最自豪的一件事?
目前为止对你影响最大的人?
最困难的时期是什么时候,怎么度过的?
期望工作的城市?
期望的实习薪资?
如果工作多年后实现财富自由了,想干什么
其他的记不太清楚了。。。
腾讯
一面
自我介绍
项目介绍,使用语言(10分钟)
覆盖索引的优化
高并发场景项目中有吗?
MySQL和MongoDB和redis的区别?
redis的数据结构?
对后台开发的理解,做server还是数据处理?(没懂这个问题啥意思)
进程和线程的区别?
Java线程和计算机的核怎么对应的?
三道题(大概意思):
1.区间躲避问题,要躲避的区间是[2,5][4,6],如果插入1,可以直接插到1,如果插入3,只能插到7,因为要避开上面两个区间,要求不申请额外空间
2.两个链表的第一个相交结点
3.400万条帖子数据,一台机器能处理10万条帖子,找到最近发布的1000条帖子
有什么要问的
一面2.0
自我介绍
项目介绍
写个代码(三个线程分别打印ABC,一直按序打印ABC)
刚开始用Lock锁加condition做突然脑子懵了,翻车了,最后改回用synchronized做的,浪费了不少时间。。。
原子变量类有了解过吗?实现的机制?
描述CAS操作?线程池怎么工作的?Java的公平锁和非公平锁的区别?
Java的集合有哪些?说一下你了解的集合?
List以及Set的底层如何实现?扩容的过程?数据元素以及内存如何变化?
Java的GC如何实现的,介绍一下GC算法?
介绍一下springboot。IOC的启动的机制是什么样的?
介绍一下MySQL的索引,MySQL的事务。
(此时美团约三面的电话来了,后面记不太清楚了,大概又问了10分钟左右的样子)
MySQL可重复读的实现原理?事务的实现原理?
没有问太多项目细节和实现
二面
全程围绕项目,问细节问题
询问开学时间,自我介绍和项目介绍
项目中的难点以及挑战?
最近在看什么技术书籍?
说一下读过 JVM相关书籍的收获?
并发编程中各种锁的特点以及实现原理?
对实习和后面的职业发展有什么期待?实习想做什么,偏向技术中台还是业务逻辑?
有什么想问的?实习时间?
搜狗一面(80min)
目前为止面过的时间最长的一次。。。
询问实习时间?其他offer的意向?
介绍项目以及项目问题(10分钟)
Java基础部分
IO核心数据结构,说一下BufferByte,NIO和IO的区别,NIO处理同一份数据的问题?
Java中怎么才能让所有子线程都执行完才执行主线程?多线程控制执行顺序与交互流程?
描述一下Java从写完类到运行起来的整个流程?
如果自己写String类可以把原来的String类覆盖吗?
两个版本不同的jar包(例如1.1和1.2)同时加载,哪个先被加载?为什么?
介绍一下线程的锁,介绍synchronized和Lock类以及volatile,它们的区别?
synchronized修饰代码块、非静态方法、静态方法的不同情况锁住的都是什么?哪个性能更好?
锁的粒度?偏向锁、自旋锁、轻量级锁、重量级锁以及锁粗化,转换的场景?
介绍一下concurrentHashMap类,put加锁了吗,get加锁了吗?
List对象,一边遍历一遍删除可以吗?从头到尾还是从尾到头可以实现边遍历边删除?
Java内存泄漏的场景?举几个例子?OOM的场景?怎么去追踪?
异常的类型,分别介绍一下?有没有自己定义过业务异常?异常出现时是怎么处理的?
Java的内存结构,结合GC一起说一下,Java虚拟机怎么设置堆内存的大小?堆内存扩容之后回缩回去吗?为什么?
ThreadLocal是干什么的?为什么有了volatile还要ThreadLocal?
SpringBoot相关
tomcat怎么改线程池大小?springboot去修改tomcat的参数在哪里改?
spring boot的AOP原理?Java动态代理和cglib的区别?spring IOC容器和流程?
springboot可以用xml配置吗,配置类bean和xml的bean能混用吗?
计算机网络部分
多个副本的Web程序,怎么保证Session不失效?token怎么实现的?除了token还有哪些能支持单点登录?
HTTP1.0,1.1,2.0的区别?keep-alive保证长连接,多个连接占用资源怎么办?
服务器上有很多wait状态的连接是怎么造成的?描述一下三次握手之后的连接状态中传输数据的过程?四次挥手的每个状态都叫什么?
TCP连接的Ddos攻击?
设计模式
设计模式的模板模式和策略模式?除了单例模式,还熟悉哪些设计模式?描述一下你熟悉设计模式?
数据库
MySQL的like查询会走索引吗?写sql的常见注意事项有哪些?MySQL的隔离级别有哪些?分别描述一下。事务是怎么实现的?
说一个写过的最复杂的sql语句?having 可以单独用吗?
其他
k8s怎么用的?service的类型?端口怎么暴露出去?访问时会怎么去寻找?
最近在看什么技术书?看过JDK源码吗?会不会go语言?
口述了一个算法题(excel中的列按数字转换,例如整数1对应A,26对应Z,27对应AA,28对应AB,输入一个数字返回相应字符串)
有没有转正意愿?什么时候可以实习?
你还有什么问题?
目前的进度
阿里 三面挂
腾讯 等待HR面
美团 接到OC
CVTE HR面结束,还没消息,可能挂了
360 笔试结束
快手 笔试结束
搜狗 一面结束
招行卡中心 笔试结束
猿辅导 投错了,转实习岗中
百度 笔试结束
其他的还投了很多公司(京东、华为、网易、小米、猿辅导、招行卡中心等等,一开始就是海投),都暂时还没有消息
总结
总的来说不要惧怕面试,面试官们都是从学生过来的,很了解我们,也都很和蔼,不用怕。
大多数面试官是真的很和蔼,不会因为学生身份没做过啥有深度的项目鄙视你,语气也是一种交流探讨的感觉,你回答问题也会积极回应你,答得不好的也会给你引导。
面试时可能会问具体场景问题,而不是死板地去问某些知识点,上面记得问题都是我复盘时候思考过再给出的问题,所以需要把基础知识消化形成体系再去拿出来。
比如问分布式事务,面试官可能问的是在不同服务器上的不同线程中的操作怎么保证原子性?
下面是我觉得 无论在面试,学习还是工作中,比较重要的几点吧:
第一点 心态
不论干什么,心态都很重要,摆正态度,不卑不亢,找实习/工作这些可能本身就参杂着一些运气成分,遇到困难,微笑面对。
不要因为这些事情过于影响心情,得不偿失,如果是因为疫情在家的同学们,多陪陪自己的父母,真的好不容易有这样一段时间,以后真工作了当了社畜,可能就更身不由己了,我的想法还是先学会生活,再学会挣钱
第二点 回顾
每次面试都是一场考验,不仅是对大脑记住的知识的重用和消化,也是对身心的磨练(面试真的,口感舌燥,面完很累)。
那每面过一场,要想想自己哪里答得还可以,说明那部分知识掌握的不错;哪些面的不行,是掌握了没说出来还是根本就是知识盲区?
建议有条件的面试都做记录,方便后面总结疏漏的知识点和常见的面试问题
第三点 节奏
作为没有特别突出的技术能力、强大的竞赛背景、高大上的奖项论文的人,我们能做的就是
- 好好打磨自己的简历,在现有的基础上,尽量突出自己的优势
- 复习好基础知识,基础知识扎实比什么都重要
- 多向别人学习,吸取经验
每个人的情况都是不同的,我写的这些只作为参考,希望能从我的一些经验中有一点点收获,那我就很高兴啦
你应该找到属于自己的“节奏”,沉下心来慢慢面对这些
最后
一份复习的知识要点
Java基础部分
JVM虚拟机
Java运行时数据区域和内存模型
- 内存布局以及特点
- OOM异常、Stackoverflow异常的场景
- 垃圾收集算法、分代理论、常见GC场景、可达性分析、常见垃圾收集器
- Java内存模型
类文件结构
- 了解即可
类加载机制
- 类加载时机和类的生命周期
- 类加载过程(加载、验证、准备、解析、初始化)
- 类加载器、双亲委派模型、Java模块化
Java内存模型与线程
- Java主内存和工作内存、内存交互操作
- volatile型变量相关以及原子性、可见性和有序性
- 线程的实现与调度、状态转换
线程安全与锁优化
- Java线程安全及实现方法
- CAS操作以及问题
- 锁优化(自旋锁、自适应自旋、锁消除、锁粗化、轻量级锁、偏向锁)
附上一份读书笔记 https://blog.csdn.net/weixin_43925277/article/details/104313943
Java基础
基础知识
- 面向对象概念、Java语言的特性、封装多态继承和抽象
- 基本数据结构、拆箱装箱
- HashCode方法以及equals和“==”
- Java异常处理机制
- Java反射机制
- Java注解和JDK8之后的新特性
基础集合类源码
Integer、String
List接口及实现类
HashMap、HashSet以及TreeMap
ConcurrentHashMap以及HashTable
java.util.concurrent包下,重入锁,闭锁和原子类,ThreadLocal,线程池
语言应用
- 锁在Java编程的应用
- IO操作在Java的应用以及网络编程
MySQL数据库
SQL语句执行过程
- 客户端、server层及存储引擎
- 连接器-查询缓存-分析-优化-执行步骤
- 各种引擎的区别
log文件
- redolog 和binlog以及undolog
- 两阶段提交
- binlog的写入机制和策略
事务隔离
- 隔离性和隔离级别
- 事务隔离的实现 MVCC
- 事务启动方式
- 幻读以及如何解决
索引
- 常见索引存储模型
- InnoDB为什么用B+树
- 聚簇和非聚簇索引、回表操作、索引维护
- 索引覆盖和最左前缀原则、索引下推
- 索引的选择与优化问题
- change buffer
- 自增主键和普通主键
锁
- 全局锁、表锁和行锁
- 视图的作用
- 两阶段锁和死锁
- 间隙锁和索引联系起来的规则
其他
- 刷脏页时刻
- 重建表的注意事项
- 表的备份与恢复,保证主备一致性及并行复制
- 全字段排序以及rowid排序
- 磁盘临时表、优先队列算法和归并排序算法
- 长连接和连接池
- 慢查询怎么追踪问题所在
- 读写分离方案的设计
- 临时表的使用场景和特性
语言使用
- join的使用注意事项,执行的原理及优化
- “%”、group by 、order by 等使用注意事项
- having 和 where and 的使用
- limit 怎么用的
计算机网络
整体架构
- 各种分层模型以及区别
- 网络协议的目的
物理层和链路层
- 链路层都有哪些设备?
- MAC的含义,多路访问协议
- IP和MAC如何关联
- 交换机和Hub,交换机的拓扑结构
- 网关的作用
网络层
- ICMP(Internet Control Message Protocol)协议格式和目的,查询报文和差错报文
- ping是怎么工作的
- IP怎么来的,DHCP的工作原理,子网掩码和网段含义
- 路由策略与动态路由协议(OSPF和BGP),了解即可
传输层
- UDP和TCP含义、特点及区别
- UDP包格式及使用场景
- TCP包格式、三次握手和四次挥手各步骤状态图
- TCP顺序和丢包的解决方案、超时重传、流量控制、拥塞控制及滑动窗口机制
应用层
- Socket套接字及连接过程,细节问题
- Http协议格式,内容
- Http1.0,1.1,2.0区别,与websocket的区别
- Https怎么实现,具体内容,与Http的区别
- 流媒体协议、P2P、DNS协议以及CDN(了解即可)
其他
- 云原生网络通信 Flannel和Calico
- RPC协议,SOAP协议
- 描述从输入网址到获得网页结果的整个过程
操作系统
进程线程
- 进程和线程的区别
- 实现方式
死锁
- 原因、条件及处理方法
内存管理
- 常驻、虚拟、共享内存,如何映射
- 分页分段管理、缺页
- 内核态和用户态切换
其他
- IO模型(BIO/NIO/AIO)
- 零拷贝
- Linux的基础知识
数据结构与算法
- 了解常用数据结构(链表、队列、栈、树、图等),原理特点和实现
- 刷题
- 剑指offer
- leetcode 热题Top100
拓展的
以下部分不再属于基础方面,每个部门都可以延伸出很多知识
NoSQL数据库
- Redis和MongoDB各自特点,区别,使用场景
- 数据结构及底层原理
- 使用实践
框架
Spring Boot、Netty、TomCat、RocketMQ、RabbitMQ、Dubbo等
以springBoot为例
- 介绍,优势、好处、IOC及AOP的原理
- 自动配置和起步依赖的原理
- 源码(拓展)
设计模式
明白原理,一些简单实现
分布式
- 分布式锁和事务
- zookeeper、Spring Cloud组件以及对比
云原生
- k8s、docker的原理及实现
- docker和虚拟机的异同
开源中间件
gitflow项目开发流程
以上,希望能够帮到在找实习/工作的你
悄悄地帮女朋友许个愿,希望她也早点拿到心仪的实习offer,加油┗|`O′|┛ 嗷~~
全部评论
(23) 回帖