今日头条后台开发面试总结
历经两面,2个多小时。惜败。面试官人不错,面试体验整体不错。
一面
一开始没有自我介绍,因为面试官那里有简历。
面试官问我:你是北航的?我是说,然后他说他也是北航毕业的,但是不是一个系。哈哈哈套了套近乎。
首先还是根据简历来,问题分别如下:
- 你的专业是分布式系统,你讲一下分布式吧。(我一下子就蒙了,然后说了说CAP原理就不知道怎么说了,然后面试官问能不能就一个具体的项目说一下这三个问题的具体体现,我想基于一个区块链的开源系统超级账本来说,说了说也没条理,然后面试官就换了方向)
- 然后又根据简历问了项目,问我在其中做了什么,看到项目中用到mysql,问了一些mysql的东西,具体记不清了......
- 接着还是问项目,问rpc是什么(我说远程过程调用),它的英文单词是什么(脑子一抽只记得中间的一个是啥),然后又问了rpc的调用过程,又问了服务端启动的过程,然后是怎么判断客户端和服务端是一条tpc连接(ip地址加端口号)
- TCP的三握手,详细说明(序列号什么的),然后问了序列号是干什么的
接着问了一些java基础的问题
- 字节(Byte)和位(bit)的区别
- 语言中的一个语句
char c = '中'
是错误的,java里可不可以这么写?(我说可以),
他问为什么,我说可能是因为java里面的char有16位,C语言中的cahr只有8位,而一个汉字需要占16位,他说可能这是一个方面,最主要的是java的编码默认是unicode码,凡是unicode码中的字符char都能放下
- 问了synchronized和lock,实现原理和不同之处,synchorized修饰静态方法和费静态方法的区别
- volatile和cas
- 问了object的hashcode和String类hashcode方法的区别
- 问了集合熟悉不熟悉,然后问了hashmap的put操作(这个地方有点蒙,应该是key值比较,我说成了hashcode,接着他又问了hashcode和equals),问了arraylist和linkedlist有什么不同,问linkedlist是单链表还是双链表(我说单链表,他说不对是双链表)
- 还有的记不清了
后面问了一个算法题:
- 从一个数组中找到所有逆序对的个数。《剑指offer》的原题,用归并排序来做。当时只想到一个暴力解法。
二面
还是问项目
- 简述一下第一个项目,你在这个项目中做了什么,遇到的问题,怎么解决的
- pbft的过程解释一下
- 问了mysql的知识,undolog和redolog,问两个数据库之间怎么保证事务性(分布式事务),问了索引,B+树的特点,使用索引时应该注意什么问题
- 问了protostuff,为什么使用这个,问了hessian2.0和这个哪个效率高
- 问了redis中zset的底层结构
- 其他的记不清了
算法题,问了一个二叉树的层次遍历,只让说了一下,没让写,然后问了一个算法题:
一个有n个数的数组,要求删除m个之后剩下的数组成的数最大,不允许修改数组元素的前后位置。
然后就挂了......
两点:
还有就是一定将知识真正理解,有些东西看似理解了,表达出来就变味了,所以一定要多表达,多说,只有说出来的时候不打哏了,才是真正理解了(当然,说不代表死记硬背,要理解)。
再就是第一次面试,还是太紧张了。