九月份工作面试总结(转)

    完全感觉自己就是个渣渣。不过还有一年的时间努力。下面是正文。转自:http://user.qzone.qq.com/568370002


9月份基本都是在忙碌的找工作中度过,这也是对自己上了近20年学的一个交代。一共参加笔试、面试的公司有:百度、腾讯、阿里巴巴、华为、搜狗、360。

拿到offer:百度、腾讯、阿里巴巴、搜狗、360

Special:百度、阿里巴巴、搜狗

按时间顺序对 面试进行下总结:

 

百度(一面):

软件研发(系统部)。问了很多技术基础知识,有C/C++、网络、操作系统、linux等。 能够想起来的有:C程序的几个段,bss如何映射,ELF的基本格式,虚函数如何实现 、ajax底层原理。rip和ospf的原理、linux中 route命令有哪些内容、数据库建立索引有哪些利弊,建立索引应该注意哪些,其他的和网络编程有关,记不大清了。

 

百度(二面):

介绍项目,linux中虚拟化(LCX)的实现,epoll高效的原因,内核CFS的实现。给你一个数组,问怎么在里面放上运算符,让前n-1个数运算完以后等于最后一个数。其他记不清了。

 

百度(三面):

项目介绍,百度地图中的一些算法,R树及其原理,兴趣,爱好,期望工作地点等等 。

百度面试感觉知识面涉及的还比较多的 。每一面大概四五十分钟。

 

阿里(一面):

 

阿里之前拿到实习offer,说的直接终面 ,不知道为什么上来是个技术面。

问的有linux内核方面,内核线程的特点,怎么切换。A*算法,写了一个回文最小切割(两次dp),java常用的垃圾回收算法,什么利弊(这个简历写错方向了,本来想面C++,结果面的java,还好java也有基础)。后来又回过头来问了一点项目,问如果你现在再架构一次,你会怎么做等等,所以,做过的项目不仅要知道项目的难点在哪,也要知道当时做项目时的不足等等。 其他的记不清了。

 

阿里(二面):

我以为这次要hr了,结果还是技术面,因为开始以为是hr,就不怎么想说技术,但是后来 发现是技术面。问了自己对SDN的看法和理解,进程切换时内核是如何执行的,内核进程调度算法中CFS和 O(1)调度策略的优劣。 MapReduce的思想 ,问了下GFS,外部排序问题,内存管理等 。其他的记不清了。

 

阿里(终面):

终面是hr和技术总监一起面。介绍项目, 说了一下项目中遇到的困难,如何解决。当 CPU负载很大,利用率却很少可能会是哪些原因,对linux病毒的了解。数据库各种索引优缺点。hr也问了一些。后来问我有什么想问的。我就问了说好的终面,为什么让我面三轮,hr很无奈说辛苦了,这是最后一轮。 后来知道加面可以加钱。

拿到阿里云的offer。

 

腾讯(一面):

后台研发。进程的栈多大,堆多大,线程栈多大。线程和进程的区别,多对对模型如何实现。问了些c++底层实现,写了两个代码,区间重合和topk,分析复杂度。问了一个概率问题。其他的记不清了。总体感觉面试挺匆忙,可能一面人多的原因。

 

腾讯(二面):

这是让我唯一感觉有压力的面试。自我介绍都没直接开问。一个客户端发数据,服务端一直sleep,将会产生哪些问题。不用循环实现将一个int的m位到n位置0.如何模仿GDB打印函数的调用链 。证明洗牌算法。红黑树的插入删除。B*树和B+树的优缺点。证明卡特兰。如何用C来实现java的接口。怎么样减少编译文件依赖 。给了一段代码让用循环不变式分析,证明程序的正确性。给了一段代码让分析汇编过程,cdecl什么情况 ,stdcall什么情况,fastcall什么情况。写一个判断int相加溢出的函数,unsigned相加溢出的函数,相乘溢出的函数。其他的记不清了。中午没什么人,一下面了一个多小时,直到面试官说我基本功很不错才松了口气。

 

腾讯(hr面):

自己的优缺点,说一个公司录用你的理由,其他的忘了。

 

华为(一面)

没问什么技术,说了下项目。

 

华为(二面)

也没问什么技术,问了下个人情况,拿到什么offer。(华为最后莫名其妙的挂了)

 

360(一面)

后台开发。360后台面的还是比较难的, 每一面都有一个多小时。上来就问内核源码的一些实现,之后写算法:给你一个表,里面是ip和访问时间,找出所有十分钟内访问超过100次的ip;给你一系列公交车的路线,找到从一个站点到某一个站点换乘次数最少的路线(不要求路径最短)。页机制和段机制的实现,页表放在哪里,如何调入内存 。其他的记不清了。

 

360(二面):

使用进程池要注意哪些,和线程池有什么不同。如何解决网络编程中的惊群问题,如何防止select冲突。内核如何实现保护模式 ,如何处理已存在的僵尸进程。又问了两个算法。说有一排N个格子,其中有k个坏了(不指定是哪k个),一个人从左跳格子跳到右,每次可以跳一个,也可以跳2个,坏的格子不能站,问他能成功从左跳到右的概率。 一个长方型碰撞检测代码。

 

360(hr面):

介绍项目,个人倾向工作地等。

 

搜狗:

搜素部门。搜狗只有一面,表现差一点的加面。问的大都是开放性问题,写一个字符串转整形,但字符串是由罗马数字组成的。 问了搜素引擎的一些原理,PageRank的基本思想,相似性hash。几大分词算法,说了几种经典。面试官又问如果字典是不断更新的咋办,字典词不够咋办,第一个字典是怎么做出来的。。。然后问了adboost原理,马尔科夫链原理,主成分分析原理。。。gps如何定位。

 

阿里实习(一面)

项目介绍,画了个tcp状态转换图,内核收到一个tcp或者udp报文如何知道交给那个进程,这个我说根据端口号,他又问具体怎么实现,怎么找到对应端口号的进程,网络的内核部分看的不多,就胡乱说了点,什么红黑树,bitmap,写红黑树插入代码。

 

阿里实习(二面)

项目介绍,MFC消息机制,java垃圾回收如何实现。还有一个算法题,说有n个节点n条边组成一个圈,每个节点上面有一个数,边上有一个+或*,如果消掉某条边,其相邻两个节点就用这个运算符合并。这样一路消边到底,问用什么过程能让最后得到的数最大(dp题).

 

感受:找工作主要是靠积累,厚积才能薄发。平时思考问题要注意有深度,只看书是不能理解太深的,要有实践。不否定一些人天天拿着书看最后可能也能找到差不多的工作,但是我始终觉得书上的太肤浅,需要自己通过项目去实践去感悟去钻研。再一个学习一定要有深度,例如c++你仅仅停留在按照inside上的画个内存布局、虚函数表肯定是不行的,这样你最多和你的对手差不多,找工作是选拔性的,你需要比大多数人强至少一个档次。如果算法仅仅停留在什么“剑指offer”“编程之美”这种烂大街的而且只能授人与鱼不能授人与渔的水平,很明显你也不能在一群人中脱颖而出。相反你需要有扎实的基本功,组合数学、具体数学,看一些授人予渔的书,比如Cracking the coding interview、编程珠玑、算法导论、算法艺术与信息学竞赛等等。如果有时间看一下计算机程序设计艺术更好。有了这些基础可以没事刷刷题,可以从稍简单的leetcode入手,然后poj、NOCOW 、Careercup等。

然后就是基础,基础很重要,但是这个有很宽泛,什么是基础,比如当你看到一段程序,脑海里知道对象的内存布局,程序的编译连接装载过程、程序的分段,这就是基础。操作系统的原理,如进程调度,内存管理这就是基础。再一个就是思想,MapReduce是思想、PageRank是思想、MVC是思想、设计模式也是思想。这些只看书是没用的,虽然也能看懂,但是看懂可领悟相差很远,比如effective的55个条款,没什么难懂的,但是真正领悟是需要很多的代码量和实践经验来的。
    开阔眼界很重要,不要觉得自己学C++,看java就是浪费时间,如果项目需要你用java,利用这个机会学习一下相信反过来对比C++会有更好的认识。操作系统也是如此,通过学习windows对比linux的实现会让你理解更透彻。总之,自己的知识不应该是一个个孤立的点,而要形成面。 

我不建议一个新生入学就把心思花在找工作上,首先,这就如同一个大一新生入学就开始准备考研一样,即使最后考上了,但是四年的时间你可能少学到很多,你所知道的仅仅是零零碎碎的书本知识,以后工作实践起来可能需要很长时间的恶补;再次缺少实践对于计算机专业是很不好的,很多东西是需要从实践项目中体会的,而且最重要的是通过做项目可以培养一个人的自学能力。最后学东西不要贪多,多的前题时扎实。本科加上研究生各种技术书籍大概看了有近百本,其中精读过的大概有30本左右,每本不同时期读过三到五遍,每一遍都有不同的收获,所以这是一个漫长积累的过程,所以如果时间有限一定不要贪多。

 

感受:奔波大半个月感觉身心俱皮,对外企、国企 、银行也没什么兴趣,也不想再去面了,  也 不想再用offer去证明什么。忽然觉得这样也 没什么意义,毕竟只能选择一家,想想hr面 聊的好好的最后还要拒掉这些offer确实也很 纠结。接下来应该思考下自己的选择,调整 几天好好投入到实验室的项目中了。


0 条评论

    发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注