很荣幸能够得到这个机会面试微信企业号后台开发的职位,结果可能并不如人所愿,自己总结了一下,之前由于担心在数据结构方面的生疏,一直在准备这方面的资料和知识,忽略了自己本身的项目回顾总结,以至于在聊到自己所做的项目时思维比较混乱,导致了之后一连串的连锁反应。
先说说流程,因为是内推(这里很感谢陈总提供了这个机会),去到的时候直接给了一份测试题做,一共5个题目,在此罗列一下:
1.一组有序的序列存放在一个循环数组中,尽可能高效的找出最小值所在位置。(比如:数组是456123)
2.给一个数学算式,里面只有加减乘除(例:3+2*5-4/2+1),编写函数算出其值。(之后追问如果有括号的情况下呢,如果包括右结合的表达式呢)
3.尽可能高效的在字符串S1中删除字符串S2中包含的字符。
4.编写函数判断两个树的包含关系。(有可能树1包含树2,也有可能树2包含树1)
5.将一组有序序列构建为有序二叉树。
其实题目很简单,只是从学生时期就一直把心思放在linux内核,驱动,系统这一块,忽略了在算法上的积累,导致自己写这些题目的时候思路正确,但在小细节错误很多(真是后悔没有好好学)。
之后面试官会详细的问你每一题的思路,每一题的测试用例应该怎么设计,每一题有没有更高效的解法。
在一轮的算法折磨后,面试官请了我去腾讯广研的餐厅吃饭,虽然饭菜不怎么样,但是很感谢面试官,面试官人还是很nice的,在这期间我们聊了很多关于项目的话题,怎么去定位一个bug,怎么去管控一个项目开发周期,怎么去学习新的知识。之后便问了我关于多线程和多进程的区别,我抓住机会,在这个点上大谈特谈,聊到ELF文件结构,虚拟内存区间结构,分页、分段,程序如何加载到内存了,为什么要共享内存,多线程比多进程的优势在哪,哪些时候使用多进程比多线程更具优势等。最后他问了一个我到现在都无法回答的问题,有一个程序运行过程中,使用vmstat命令发现他的虚拟内存占用率很高,但是实际内存使用率又很少,是什么原因?(我答在堆中分配了大内存但一直没使用被换出内存,他说没有使用swap,最后我问他答案是什么他也不清楚。。。)
之后到他们的主管来进行面试,也是一个很nice的人,很亲切,但是我还是很紧张。他主要从我做的项目入手去提问题,然后针对项目提出他自己的见解和疑问,会问你为什么要这样设计这个架构,在这里也很后悔自己没能好好准备自己的项目,项目很详细的地方我印象已经有点模糊了,所以回答得非常乱,之后问了我一个思维题:有一个球1~41克,给你任选4个任意重量的砝码,怎么选择才能够测出这个球的重量。由于之前回答项目那时候的慌乱导致这题没能想出来,其实稍微列一下公式答案就能够出来了的。
总结一下:其实还是实力原因,没到那个能力,而且准备也不够充分,突击几天复习了一下数据结构,很懊恼没有把握住这次机会,但是也是通过这次机会我清楚了自己的不足在哪,哪里还需要提高,打算好好积累知识,半年后再去挑战。需要积累的知识:数据结构(树、图),设计思想,架构设计,高并发服务器设计。