今天下午面了字节跳动飞书后台的一面,一共面了差不多一个半小时,面试官很耐心,问的有深度有广度。
首先是一段自我介绍
然后问的操作系统和组成原理相关的:
1、线程和进程的区别 答:进程有独立资源,线程是进程的子结构,共享一个进程的资源
2、设计线程和进程的目的 答:线程主要是为了充分利用CPU资源,在耗时操作的时候挂起I/O线程,CPU可以计算其他线程
3、在什么情景下使用多线程什么情景下使用多进程 (I/O密集型场景和计算密集型场景)答:想了半天,I/O密集型场景用多线程,不知道对不对
4、你知道哪些进程调度算法 答:FIFO、短作业优先、优先级调度、多队列优先级调度
5、死锁了解吗,是怎么产生的,如果发生了死锁,操作系统会怎么做 答:线程互相争抢资源,系统有死锁检测,根据资源需求矩阵,成环意味着发生死锁,通过释放资源来解锁,抢占式。
6、堆和栈的区别了解吗 答:不太了解,栈空间主要储存运行时申请的变量和函数调用,堆放一些固定量和全局量(不知道对不对)
7、堆在内存空间中和栈的位置关系 答:好像堆在下面
8、栈分配空间是从低地址向高地址还是高地址向低地址 答:栈应该是向高地址分配(大小端问题,确实没复习到,盲点)
9、并发控制 (讲了一下锁机制,结合自己的项目讲了一下读写锁)
这一段有些问题问的很笼统,在你回答完后面试官会就细节继续问下去,很考验知识广度和理解
接下来问了一些网络相关的
1、5层和7层网络模型说一下 答:OSI五层和七层
2、TCP是哪一层的 答:传输层
3、TCP数据包有哪些字段 答:记得有端口号、序列号其他不记得了
4、讲一下TCP建立连接和释放连接的过程 答:三次握手、四次挥手
5、TCP拥塞控制算法了解吗 答:慢启动、拥塞避免
6、TCP是怎么知道网络拥塞了的 答:应该是根据超时重传来检测,底层可能是ICMP
问完网络接下来就是问编程语言相关了,飞书团队好像技术栈是python和goland,而我说自己硕士期间主要用的python就主要问我python相关
上来先问了几个python2.7的问题,一下子就蒙了,赶紧说我用的都是3.5之后
然后问了一个ASCII和Unicode的区别,Unicode和UTF8什么关系 答:ASCII是一个字节的编码表,0-255对应字符,另外两个不太了解
3、迭代器和生成器了解吗 答:不太了解
4、GIL了解吗 答:全局锁,不能充分发挥多核算力,需要多开CPython解释器解决问题,等于多进程
5、dict的底层是怎么实现的 答:hashtable实现,2/3装填因子会拉长大小,冲突后采用一个伪随机探查法(记不清了)
6、有没有处理过并发 答:简单结合项目说了一下
7、你用python的时候有进行过性能优化吗 答:吹了两个点,一个是for改矩阵运算 还有一个是做实验的时候用多线程读取训练数据。
最后手撕代码,说实话面到这里紧张的很,也很疲惫,导致后面发挥失常
问题是leetcode原题 543 二叉树最长路径,我正好没刷过
一开始讲了一下思路,计算叶子节点间的最长路径即可,想当然认为最长路径必然经过根,快写完了面试官说你这里好像有问题,我才反应过来,后面一下子就蒙了。
几分钟后面试官给提示,其实已经是明示了,问我一棵树和它左右子树的最长路径之间有什么关系,我才反应过来,写完之后。
面试官给了一个例子,然后构建一下这个树,并跑一下写好的代码,用中序+前序的方法构建了,最后跑出来结果还差1,边界条件差了一个地方。
整个手撕代码过程磕磕绊绊的,非常差,对二面不报太大期望了,最后面试官问我有啥想问他的,然后就说有结果会7天内通知。
总结一下,基础知识要牢固,特别是很多细节,不能浮于表面,算法也要多刷,前面面试50多分钟再来考算法真的压力很大,再来一道陌生题可能当场就炸了,可能也是面试经验不足吧