前言
楼主本科渣211,硕士华科,专业均SE,校招的时候没啥实习经历,进大厂工作两年多,做后端开发的工作,没有涉及到高并发的case,也没有大流量的项目,也没有必须引入某些中间件或者nosql才能解决业务问题的场景,简称“三无”,只能尽量在简历里矮子里面拔将军,写一些可能有些价值点的内容。社招过程中拿过美团、货拉拉、微众、阿里、字节的offer,最终选择字节。
关于社招的最大感受
校招的时候因为没参加过实习,基本全是实验室的玩具项目,业务复杂度跟技术复杂度可能O(1)级别,最多的面试基本就是基础知识,框架原理等,没啥好说的,项目随便讲讲也就过了。
社招的时候如果你做的领域或者方向跟面试的岗位不搭界的话,那么社招面试基本上难度会陡然上升,全靠技术硬实力;如果你是相似的领域,那么可能会项目涉及的很多,技术没有那么难,如果你刚好是他们所需要的一个领域模块,那么你就会有更大的机会面试成功。
社招面试项目很重要,不光是你项目本身的技术复杂度,还有业务复杂度,你本身在项目中担任的什么角色,遇到过什么问题,是技术瓶颈问题,还是业务问题,怎么解决的,这几个问题是非常重要的
很多同学包括我自己一开始也没有头绪,看很多面经都说要对自己的简历滚瓜烂熟,对自己的项目烂熟于心,所以到底是什么算烂熟于心,仅仅是把简历写的内容背下来吗?
下面总结了一些问题,要注意自己一定要在自己的逻辑里面自洽,不能前后矛盾,前因后果要想清楚。也可以自己不要把所有问题都说满,可以故意漏下问题,等面试官提问(面试套路,自己主导问题方向)。总之,不然可能一个不是这个范围的问题把你问到了,你不知道如何回答,会给面试官一个不好的印象(为啥你自己的项目你都没有吃透?)
最后总结下社招面试最主要的几种问题:
1 你项目为什么这么设计?
2 这么设计为了应对什么样的问题?你这样设计有什么好处,获得了哪些收益?
3 这么设计有什么瓶颈吗?遇到了什么问题?这么设计有哪些地方不好的?考虑不周的?
4 针对问题怎么解决的?针对不好的地方怎么去优化?
假如你是大厂出来的,如果面试的时候一问三不知,或者两不知,或者面试被一问,因为自己的问题没有准备好而导致卡壳或者思考不周,那面试就会大打折扣,这时候大厂反而不是光环了,而是一个问题。(大厂应该都还可以,怎么到你这不咋行了呢?)
面试一定要自信。本来应聘就是双向选择的过程,面试的公司也不是非你不进,不要因为你是面试者就姿态很低,一种乞求面试官给你一份工作的姿态,这样是不对的。好的面试应该是你自信表达你自己的理解,即使不会也不要为难,不需要支支吾吾或者瞎说,这是大忌。不会就是不会,可以潇洒的回答,没有关系的,好的公司也不会就你不会的问题一直追问,这也没有意义。
楼主社招面试经历
其实社招对于楼主这种白天加晚上还要干好本职工作,应对需求的情况,还是很不友好的,如果你晚上还要忙着加班,那就更苦不堪言了。楼主从7月8月开始着手复习,其实复习的进度很慢,首先尽可能腾出晚上的时间进行充电,假如10点钟下班到家,再稍事歇息后,就10点20或者10点半开始充电,最好复习一个小时多一点,差不多看到11点半,准备洗漱睡觉。但是如果下班后的通勤时间也很长,感觉可以在路上充电一会。
周末的时候那就更要安排好时间,这是难得的整块的时间。首先你肯定需要列一个大纲,需要复习的内容包含哪些模块,这个周末重点复习哪个模块。然后就是调整好跟女朋友或者家庭的时间,稳固好感情,说明你正在做的事情,不要因为这种事情既影响了你的感情又影响了你的复习进度。
关于简历,对于楼主来说简历很难写,对于技术栈又不敢写精通,不特别懂原理的又不敢多写,所以技术栈看起来也比较薄弱。对于简历的项目,出彩的地方也不多,自己沉淀总结的东西也欠缺一些。但是有些技巧,例如你负责了哪些项目,负责了哪些模块,实现了什么功能,提升了多少性能,可能放一个数字更能体现你的价值,例如:通过xxx的优化,查询速度提升100%;
通过xxxx的优化,实现了xxx秒的无感知扩展;通过xxx的优化,处理速度提升200%等等等语句
关于面试安排,楼主是9月多开始在boss上传了简历,然后就有很多打招呼的,所以你需要在里面筛选出你自己感兴趣的岗位。个人建议,可能需要一些岗位打好前站,例如你就想入职阿里,那么也不能一开始就面试阿里,当然大佬略过哈,因为面试经验也是一个逐渐熟练的过程,状态也是有一个提升的过程,可能对前面的公司不太公平,但的确是有效的方法。然后对于社招且在职且工作任务可能比较多的应聘者来说,是痛苦的过程,面试时间我绝大部分都是安排在晚上,抽出一个小时定好会议室,可能面试完还需要继续工作,或者赶上发布还要更紧张一些,可能还会面临本来需要你这个时间在工位上解决问题,然后你去面试这样的尴尬的境地,还提心吊胆,哎,一言难尽。
所以面试安排也不能每天晚上都有面试,每家公司的面试流程有慢有快,然后你也需要协调每个星期新投几家公司,这个星期可能会有几个原来的面试流程中的面试。楼主个人建议可能一个星期可以2家,这个因人而异,记的每次面试后的总结,问题分析,这个非常非常重要。不要觉得面试完就面完了,觉得面试不好就心灰意冷,面试的问题才是你需要提升的地方,这是快捷有效的提升自己的方式。
基本时间里程就是7月8月准备,9月开始投,前期是积累经验,9月底和10月份开始投自己意向公司,差不多10月底11月份就是最后的阶段,然后就是选择的过程了。
-
面经
可能有的小伙伴就急了,说了这么多,我要的面经干货呢?好的,这就给你备上。其实前面的总结也是一个你如果考虑想出去看更好的机会需要提前思考和规划好的事情,打好第一站是非常重要的。
一、猿辅导一面
算法:用链表模拟大数加法
oracle跟mysql的区别,隔离级别
慢查询如何定位?如何优化?遇见过什么样的case,怎么解决的?
项目用到了分库分表,分库一定会提升性能呢?什么是冷热数据?优化了什么地方?假如出现了数据暴增,怎么处理?有什么扩容的方法?怎么无感知扩容?怎么做到数据实时一致性?
线程池,核心参数,等待队列满了,来任务立即执行吗?
spring boot跟spring的区别,spring boot是用来干什么的?最大的作用是什么?starter是干什么的?
hashmap1.7跟1.8?优化点?红黑树化为什么是8?退化为什么是6?
二、美团
- 一面
项目介绍,难点,怎么遇到的?产生原因?如何解决?为什么要这样分表?跨库join如何解决?数据量突增怎么解决?
如何解决线上问题?cpu狂飙怎么办?频繁minor gc怎么办?可能造成的原因是什么?如何避免?
数据库 隔离级别,怎么实现的?当前读,快照读?MVCC?
算法:两数之和
- 二面
项目难点,如何解决?
分库分表的设计?
分布式事务出现过不一致吗?为什么?怎么解决?有什么方法避免?怎么监控?监控到怎么处理?什么时候需要人工接入
如何优雅的写代码?什么代码算做优雅?什么代码是规范?你们代码规范是什么样的?
如何进行code review?
JVM模型,pc计数器什么时候为空?
算法:之字遍历二叉树
- 三面
对于大流量,高并发怎么看?你们项目有没有?为什么没有?如果有怎么做?
对于你入职以来的工作你怎么看?
怎么能拿一个好绩效?对于你的绩效你怎么看?
对于中间件怎么看?用过哪些中间件?为了解决什么问题?
对于redis怎么理解?适合什么场景?你用它来干什么?解决什么问题?
你怎么看待我们团队?
你对于自己的规划是怎么样的?
为什么这个时候选择离职?
三、微众一面
- 做题,一个题目是自己实现的原子整数类,为啥没实现原子性的;第二个题目是spring bean的生命周期 还有哪些set函数怎么使用?;第三个问题是银行账号A转账B的可能涉及到的问题,死锁?事务?数据库?并发?强一致性?谈一谈
四、酷家乐一面
- 面试形式:电话
项目介绍,分库分表
public private protected区别,放在类上,方法上,接口上,属性上?
不加修饰符是什么?抽象类跟接口的区别,抽象类抽象方法
函数执行时间不定,需要一定时间里返回?怎么实现?
hashmap 红黑树,什么时候扩容?扩容是怎么扩容的?怎么发生环?死循环?1.8优化?
concurrenthashmap 怎么实现的线程安全?100%安全吗?1.7跟1.8区别?为什么这么做?
mysql innodb下,能不能不设置主键?主键可以为空吗?可以允许几个?主键跟非主键的区别?索引存储形式?
联合索引失效问题?索引失效问题?
.java文件都包含什么?.class文件都包括什么?java对象的存储结构
五、有赞
一面
面试形式:电话
项目优化做了哪些?
线程池,参数,怎么设置?callable和runnable?线程间通信?
mysql索引,覆盖索引?回表?B+树叶子节点存储什么?为什么不用AVL树?
数据库锁,乐观,悲观,record lock?next-key lock?
hashmap 1.8优化
gc的时候 young gc只有两个区可以完成吗?有什么问题?
二面
面试形式:微信视频
项目介绍
最有难度的点
高负载,高流量的业务处理
如何数据一致性?
如何减少人工干预?
六、头条
- 一面
算法:找零钱
Redis为什么这么快?多路复用io模型?跟多线程对比?select epoll模型?
epoll怎么实现的?都用了哪些存储结构?什么时候就绪事件?回掉函数在哪里注册?epoll是怎么使用的步骤?epoll wait干了什么?给redis服务端发送get数据请求,是如何处理的?zset数据结构是什么样的?为什么采用跳表?insert一个数据是怎么样的流程?get一个数据是怎么样的流程?多级索引是怎么更新的?如何确定一个数据在第几层?各自的时间复杂度是多少?你觉得还有什么优化的地方?
Redis的高性能是怎么实现的?多主多从?一主多从?各自插入一个key的时候是什么样的流程?主从复制是什么样的?怎么强一致性?什么情况下不适合?主挂了,各自的选举是什么样的?怎么完成主备切换的?如果主挂了,从没复制完全,会出现什么问题?什么样的情况下可以使用这样的组群方式?什么样的情况下不适合?
raft协议 paxos算法
http状态码 300 400 500 499
dos ddos drdos 如何避免?怎么预防?怎么发现?利用了TCP什么特点?怎么改进TCP可以预防?服务端处理不了的请求怎么办?连接数最大值需要设置吗?怎么设置?
Thrift RPC过程是什么样子的?异构系统怎么完成通信?跟http相比什么优缺点?了解grpc吗?
https http1.1 2.0 3.0
hashmap如果的确需要很大容量的数据去操作的时候,怎么办?怎么优化?
- 二面
linux fork子进程 如果在线程中fork会怎么样?如果总共就4g内存,一个进程有10个线程,在线程中fork,能不能fork出来?
TCP连接server端跟client端都有几种状态
linux作为client端可以最多建立多少个tcp连接?作为server端呢?
建立tcp连接时,如何connect时候阻塞了,那么怎么能不阻塞,去干别的事情?
linux怎么监控cpu运行情况?端口连接情况?tcp连接情况?占用了多少内存?
epoll 多个请求怎么处理?fd什么时候可读,什么时候可写?epoll模型有没有用到什么队列去等待的,来一个请求处理一个吗?能写处理流程的一些伪代码吗?
Redis是怎么处理请求的?单机的qps是多少?如果一直用get,你觉得达到qps的顶点,它的限制点在哪里?怎么能够突破峰值qps?怎么用单线程处理的请求?如何解决单机qps达到峰值的问题?
redis分布式锁,怎么样实现?怎么理解?不用redis可以吗?有什么问题?生产上出现过问题吗?为什么会出现?怎么优化?考虑过zk吗?单机redis分布式锁?集群状态下分布式锁?主从下分布式锁?都是什么情况?redlock怎么理解?
系统怎么算高可用?多部署机器能实现什么?有什么弊端?有什么优势?怎么实现高可用?多部署机器能实现高可用吗?熔断机制是什么?怎么实现?
- 三面
算法:两个有序数组间相加和的Topk问题
分库分表 数量级 系统qps 聚合怎么做?
扩容怎么做?
redis 淘汰策略?超过最大内存限制发生什么?redis什么时候会慢?redis持久化机制
nosql es能解决什么问题?hbase呢?
强一致性?弱一致性?适用什么场合?***web端怎么实现强一致性?怎么设计缓存?
七、货拉拉
一面
面试形式:zoom
hashmap
sync跟reentrantlock
redis 基本数据类型,底层如何实现?跳表?为什么单线程会快?有哪些设计?单线程如何处理多个请求?哪些可能会导致redis慢?redis如何实现高可用?哪些命令可能会慢?
线上oom情况?怎么排查?
mysql mvcc 双写机制?binlog跟redo log先后顺序?一个写不成功怎么处理?当前读和快照读?事务隔离级别?线上sql优化经验?
分布式事务?用过哪些方式?还知道哪些方式?怎么实现?有没有想过自己实现?避免哪些坑?
跨库聚合怎么实现?分页?第几页?下一页?
八、阿里
一面
面试形式:电话
特别说明:阿里面试官在面试之前会介绍他们的团队,这次面试的大纲,感觉狠专业
JVM如何和操作系统交互
垃圾回收 回收什么?怎么回收?垃圾回收算法?垃圾回收器?
sync和reentrcntlock
分库分表 聚合查询 limit怎么实现 top的实现
不停机扩容?分表避免冷热?不停机扩库?不停机扩表?跨库事务?
线程池 参数 为什么不用fixed?
redis 淘汰策略 主从 集群 高可用如何实现?
分布式锁
zk实现分布式锁?
算法题:写好发他邮箱 几个线程轮番打印不同花色的扑克牌从小到大
二面
面试形式:电话
分库分表为什么这么设计?数据增长怎么做?怎么扩容?数据不均匀怎么办?冷热数据怎么分离?聚合怎么做?跨库聚合怎么做,查询怎么做?跨库分页怎么做?
mysql 线上的组群模式?一主多从?为什么这样?强一致性如何保证?为了解决读写分离吗?是为了一主多备吗?主库crash掉怎么办?从库呢?
分布式事务怎么做?什么原理?怎么实现的?出现过事务不一致性吗?为什么?怎么解决的?
访问请求暴增怎么做?怎么缓解压力?
redis分布式锁怎么实现的?可靠吗?有什么问题?redlock能解决吗?为什么?怎么优化?
为什么用redis做?cpu飙升怎么处理?load飙升怎么处理?什么情况可能会遇到上述情况?
full gc怎么形成?什么情况会产生这么情况?线上出现怎么排查?
九、百度
- 一面已过,后来没约二面询问hr,hr告诉说不招了,尴尬,面试问题让我给忘了。。。
十、快手
热榜top100怎么做?
最近浏览web端手机端怎么设计?
最喜欢的榜单 怎么设计缓存?
直播间刷一个礼物,怎么让所有人都看到?
设计一个最近看过的作品,数据库跟缓存怎么配合?什么时候更新数据库,什么时候更新缓存?
-
算法题:两个大数相加
写在最后
面经不分时间先后,有可能几面几面的没写全,没写完,因为有的面试面经当时忘记记录,所以就忘记了。
基本后跟楼主设想差不多,反正前面的都不太好,后面的有了经验可能会好一些
另外友情小提示,看准岗位就果断投,很有可能岗位很热,你总想准备的非常好的时候再去面,可能岗位都没了。还有就是大部分的公司都需要算法题的考验,大多来自力扣简单跟中等难度,困难我个人觉得随缘吧。除了最好能ac外,我觉得有些算法思想你要掌握,你如dp怎么玩?回溯怎么玩?递归怎么玩?stack能解决啥问题?fifo能解决啥问题?dfs怎么玩?bfs怎么玩?实在ac不了,谈谈你对算法题的思考过程,选用什么数据结构去解决问题?时间复杂度是多少?但个人感觉如果你没刷过这个题目,现场让你20分钟去做,还是很困难的,毕竟考虑到你的紧张,ide的问题,还要思考,敲代码,还要注意时间复杂度什么的。如果一开始就让你做算法题更是。。给你后面的面试问题都带来很大压力。
-
上面写到的算法题如果写在后面 ,那就是最后在做算法题,如果写在前面,就是一开始就要做。往期:150期面试题汇总
寄语
最后祝大家都能拿到心仪的offer,前程似锦.
如果你想过去更对最新的面试题以及学习资料和视频,可以关注小编的公众号:《Java烂猪皮》,回复【666】即可免费获取
如果你想学好JAVA这门技术,也想在IT行业拿高薪,可以进来看看 ,群里有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。
如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,大家都可以关注作者的公众号:《Java烂猪皮》