去年12月冬日的某一天午后的,我像往常一样,习惯吃完饭去实验室外面的操场上闲步,刷刷微博,或者是和家里人打个电话,阳光比较温热,想着自己的小论文实验做的还比较顺利,就开始准备春招了,于是计划从1月初开始,一边进行论文投稿,一边开始重新刷leetcode,期间一直到开学后,开始整理项目,写简历,以及背八股文,再到3月17日开始面试,一直到4月25日,算是结束了这个阶段的任务,整个春招下来,渐渐明白了很多东西,也觉得对于面试,不仅需要扎实的专业基础知识,坚持,机遇与选择都是共存的,同时要相信运气,由于我春招准备的时间很晚,到真正面试的时候,其实一些大厂都已经没有hc了,这些也是我事后才明白的,以下纪录了我春招面试的整个过程,希望对在看的同学有些帮助
0.自我介绍,聊简历项目
1.说一下TCP和UDP的区别
2.TCP如何保障可靠传输
3.项目中用了多进程,那就聊下多进程和多线程,理解有多深
4.进程的状态,创建的整个过程
5.进程的调度算法
6.分析下抢占式调度和非抢占式调度
7.聊mysql的索引
8.口述快排,进行复杂度分析
9.场景题,给4亿个整型数字,和2G物理内存,找出其中不重复的数字
10.算法题
有序数组中的单一元素
一个半小时,6道单选,6道多选,3道算法题
1.自我介绍,聊简历项目
2.聊聊http(从http1.0聊到http3.0)
3.聊下tcp和udp
4.redis底层的数据结构(例如sds,ziplist,skiplist)
5.redis备份数据(AOF和RDB)
6.聊下对Mysql中的数据结构的理解(聊了索引部分的数据结构,B+Tree和hash索引)
7.对websocket的理解
8.websocket的长连接和http1.1之后的长连接,之间区别
9.tcp如何保障可靠传输
10.反问环节
0.自我介绍,聊简历项目
1.觉得自己笔试题做怎么样,之前没有模拟过吗
2.为什么想从算法转到搞后端
3.想考虑做开源吗
4.了解哪些阿里开源中间件(我说了RocketMQ,Dubbo,EasyExcel),然后面试官让我挑一个讲讲对这个产品认识,解决了什么问题,看过源码没
5.浏览器访问一个域名的全过程
6.说下http和https的区别
7.https如何保证安全传输,怎么加密的,底层机制
8.聊下ca证书
9.聊下TCP/IP的三层网络协议(网络层-传输层-应用层),每一层都详细说下
10.应用层你说到了DNS,聊下对DNS协议设计的看法,DNS域名解析过程
11.说下根域名服务器在哪里
12.除了websocket可以推消息给客户端,还了解哪些?
13.TCP如何保障可靠传输
14.你对Web安全的理解(聊了下对SQL注入,XSS,DDOS的看法)
15.项目中用到的多进程技术体现在哪里,如何实现
16.项目上线情况
17.遇到过什么线上问题,怎么排查
18.项目中你认为的难点
19.后面如果还接触这个项目,你怎么去做
20.平时怎么学习的,后面有什么规划
21.反问环节
1.自我介绍
2.面试官:聊下你 简历上的实习经历
3.OS,计网,数据库,缓存,挑一个板块和面试官聊(选了缓存)
4.缓存解决了什么问题,不要局限于自己的项目,展开聊聊
5.缓存保存的是什么的一致性(我说了主存变量和工作线程变量的一致性,想往JVM线程模型这方面靠靠,面试官觉得不满意)
6.聊下CPU里的L1-L3缓存,L1缓存里头的是什么
7.聊缓存穿透和缓存雪崩以及对应的结局方案(布容过滤器,分隔key的过期时间)
8.数据库一致性,写缓存成功,写DB失败回滚了,如何保障数据一致性?
9.项目是不是分布式的,(不是)
10.假如一个redis结点内存打满了,这个时候系统是阻塞的,怎么复制到其他节点上(内存淘汰策略)
11.TCP的拥塞控制算法
12.TCP报文大小,头部参数
13.那你给我说下http3.0吧
13.你说到了http2.0的IO多路复用,那就说下对IO多路复用的认识(Reactor线程模型)
14.面试官: 给我讲下你科研中用到的算法
15.训练集中如果数据来源不一样,会影响模型效果吗
16.你的时序预测模型怎么评价模型好坏
17.你迄今为止有没有一直在坚持做的事情,坚持了多久,会一直坚持下去吗
18.平时上什么网站,关注什么行业前沿趋势(掘金,机器之心)
19.阿里巴巴过往的一些“事情”你怎么看
20.平时休息的时候干什么,爱好是什么
21.自我评价,个人优缺点
1.面试官让我开钉钉共享简历,边看简历边做自我介绍
2.介绍自己的实习经历
3.深挖做过的项目,介绍团队中每个人的职责,项目的职责,面临的挑战,最后的收获
4.讲下本科到研究生阶段的所有重大项目经历
5.本科到研究生阶段,在计算机专业上的学习过程
6.为什么选择读研,你的毕业时间是多少
7.为什么选择阿里巴巴,未来职业发展规划
8.阿里巴巴最吸引了你哪一点
9.何时到岗
10.其他offer有拿没
免笔试
1.自我介绍
2.介绍研究生期间的项目
3.项目中遇到的最大的难点,项目用户量
4.项目中如何处理并发场景下,数据不一致的问题
5.怎么理解线程同步
6.未来的职业发展规划,平时看什么技术网站
7.算法题,输入一个数组的长度n和一个数x,循环输入直到达到n次,最少需要用多少步才能确定x是数组的中位数,数组是奇数长度,类似leetcode里面的数据流的中位数,为了不让彼此等太久尴尬,我直接来了个暴力复杂度n * nlog(n),面试官说需要优化,之后用了大小堆复杂度nlog(n),说了下思路
8.leetcode刷了多少
1.自我介绍
2.聊项目,项目规模,项目难点
3.聊主管所在的部门情况
1.自我介绍
2.写一个数据库SQL
3.了解哪些排序算法(聊了快排,堆排,归并排序)
4.进程,线程,golang的协程模型
5.计算机网络的七层模型,TCP/IP在哪一层
6.项目中MQ的作用
7.redis的数据类型,动态字符串底层
8.nginx的访问权限配置
9.用过的Linux的命令
10.用过的docker命令
11.如果你是root,需要注意哪些linux命令(chmod,chown)
1.看我用过go, 就聊了下自己写在简历上的一个用gin写的项目
2.了解TiDB吗
3.未来职业发展规划
4.对360了解
1.OS死锁问题
2.排序算法(堆排序,快排)
3.TCP/IP七层模型 OSI五层模型
4.怎么理解事务
5.怎么理解MVCC多版本并发控制(快照读,当前读,版本号机制,undo log)
6.对互斥锁和乐观锁的认识(我的理解是 互斥锁调用了os底层原语,开销较大,内核需要在程序计数器上纪录执行体的执行位置,所以要进行线程上下文切换的过程,在大并发场景下比较耗时,乐观锁是基于CAS的写时复制的,AQS维护一个双端链表,保证线程以FIFO的形式,每次通过自旋互斥进行写操作,读操作无需加锁,但是乐观锁会消耗cpu片且容易出现ABA问题,需要结合业务架构场景,对流量进行合理的负载均衡与Web服务升降级控制,并且在服务细节方面同时考虑适当对锁进行降级,转移等过程(比如动态的根据负载情况将锁在自旋与监视器锁之前切换),我认为好的方式是合理使用用户态执行体去并发访问资源,因为用户态执行体阻塞,相比于内核态执行体,只需要进行cpu切换,私有的栈与操作数无需切换,大并发抢锁过程场景下,可以减少过多的syscall消耗成本)
7.数据库的索引数据结构 B+ 树
8.算法题 有序链表合并 用递归和非递归两种方式实现
1.职业规划
2.行业见解
3.家庭情况
4.面其他公司没
5.简历上的数学建模比赛,团队分工
6.期望实习薪资
1.字节一面(挂)
八股文自我感觉回答的很好,但是算法题没有用最优解做出来,挂,。。,这个真看部门和缘分,有的人算法没写出来也能过,,,
2.阿里(所有面试都过了,排序被挂,无了hc)
这个我很无奈,本来联系好内推人,要投蚂蚁金服的,但是看到阿里集团这边流程比较快,就没有换部门,最后全部面完等了很久,就去问了后面三面面试官(部门boss)和我说了没了hc,也解释了,估计最后比较,学历不行被刷了,无奈的一匹啊…,总结来说,阿里面试对项目要求很高,细节深入骨髓
3.华为(oc)
4.360(二面后再无消息)
两轮面试官经验都很足,二面面试官貌似是boss,和我详细耐心讲了部门业务,部门做的是,内部孵化的业务,做ToB的,买通站主网页流量访问权限,根据网站流量去溯源用户属性,建立用户画像,进行广告投放,商品推广, 部门主要做日志采集这一块,技术栈golang+es+tiDB,其他业务诸如算法层面由其他团队支持,团队业务难点就是要读取ES集群上的日志,大概8千万条,按照条件排序,要优化排序时间以及提升整体服务IO的性能,但是要去北京总部,看北京现在这疫情,估计是G了或者回池子里
5.巴比特(oc)
面试体验是最好的,但是后面HR和我说公司要求实习6个月,我坦诚说了自己只能最多3个月,最后只能友好选择拒掉了
1.算法题>计算机基础>项目准备=竞赛经历
2.早做准备(因为论文原因,我是2月份开始正式准备的,已经很晚了,这个时候已经没有多少hc了,加上今年疫情与裁员波的重锤出击,要早点准备,好在前几天论文已经通知accept了,算是也值得)
3.简历要认真写,多去实战面试,不要吊在一家公司上,失败了也不要紧
4.找战友,多沟通,尽量找靠谱的内推
5.学会坚持,也要学会休息