<> 字节跳动后端开发实习面试一
当我写下这篇博客的时候,我知道,我已经没有二面的机会了。
原计划30分钟的电话面试,最后面了我37分钟。这个面试官不按套路出牌,我以为应该是先让我自我介绍,结果直接上来就是问项目。
先是问了我的一个留言板项目,怎么做的,用了哪些技术。然后问我有哪些数据库表(这个项目我做了好久了,我已经忘了有那几张表,我凭着映像说了一下,然后被他发现有错误,我赶紧打开电脑看了之前写的博客,又和它重新说了一下,估计他觉得这个项目不是我做的吧,毕竟连建立了那几张表都忘了…。)
面试官:你的user表的主键是什么?
我:用了一个id来做主键,id是自增的。
面试官:然后他又问我如果不用auto_increment,我该如何实现id?
我:那就每次新增记录的时候,去user表里查找出最大的id值,然后取id+1做为这个新记录的id。
面试管: 这个每次插数据还要去查表,效率不行,你重新想一个。
我: 我想不出来…
面试官:ARP是什么?ARP内部如何实现?
我: 回答了ARP,但是内部如何实现忘了。
面试官:DNS是什么?内部如何实现?
我: ip地址映射成域名,内部实现忘了
面试官:编译原理学过吗?
我: 还没学。
面试官:行,那我问你操作系统。内存单元的作用是什么?
我:我一听不会,赶紧说操作系统还没考试呢。
面试官:行,那我问你语言吧。java里hashmap是如何实现的?hashArray和list有什么区别?
我:????我只会用,不知道怎么实现的,map应该是和红黑树有关。
面试官:行吧,我考你算法。
面试官: 栈,队列是什么?区别是什么?
算法题1:用栈来实现队列。
我:用两个栈就可以实现了…
算法题2:给你一个数组2 3 1 4
5,有两种操作,把它加进栈里,或者弹出栈,问此时栈里最小的元素是多少?例如先加进去2,此时最小的元素是2,接着加进去3,此时最小的元素还是2,在加进去1,此时最小的是1…,如果去掉栈顶元素1,此时最小元素是2.
我:dp,dp[i]表示前i项的最小值即可。
面试官:能不用数组吗?
我:那我直接新建一个栈吧,每加入一个元素,可以求出当前的最小值,把这个值加入新建的栈即可。这样就可以形成一一对应关系。
面试官: OK,给你一个字符串,里面可能有空格,将空格替换成abc,空间复制度只能为o(1).
我:我一开始没听清他的用意,我就说你直接遍历一遍,遇到空格替换就行了。
他说复杂度太高了,都O(n^2)了,让我换一个,我实在是没理解题目的意思,直接说不会…
总结:操作系统,计网,数据库真是重点,瞎做些项目没啥意义,大公司需要的不是码农,而是程序员。好好搞好基础,学好数据结构算法才是正解。另外,写到简历里面的项目,面试前要好好回忆回忆,用相同技术的项目写一个就行(吃亏了…)。