在wb的这两年多,由于一直做一个项目,对项目已经产生了严重的疲倦感,再加上同事都一个个离开,更加使得我有离职的想法。9月份和10月份都在找工作,找工作的时候让我多少开始正视自己,发现自己尚有很多不足,没有明显的特长和优势,是我处处受挫的根本原因。在wb的这两年多,工作不辛苦,也逐渐养成了我的懈怠之风,没有以前破釜沉舟一定要做好一件事情的决心。
美丽说----三面,顺利拿到offer
美丽说是我的第一次面试,面试之前先是做了一套试卷
(1)mysql索引是哪种数据结构?为什么使用这种数据结构?
(2)http状态妈204,304,404是何含义
(3)session和cookie的区别是什么?cookie禁用后,session是否可用?
(4)比较单词a和单词b,判断b中的单词是否都在c中(不区分大小写)
(5)写出一个timer类,用来统计应用程序的运行时间,并简要写出调用发那个是
(6)设计一个数据表,用来存储url信息,此表会经常查询和插入操作,主要应用场景是:查找某个url是否存在,请写出此表的结构并说明原因。
(7)介绍几个你了解的开源项目
第一面是一个长得很漂亮的姐姐面试官, 简单介绍自己,工作职责,项目功能,项目框架架构,db和缓存的分布式,如何进行扩容,如何协调各个部门删除一个正在用的db字段。对于工作职责和项目经验,因为已经在心中预演了一遍,所以基本顺利,当问到如何对db进行扩容,我想扩容,当然是最好不要动原来的数据,所以翻倍扩容,这样有一半的数据的不会移动,只需要将另一部分的数据进行迁移。谁知道瞎猫碰上死耗子,歪打正着答对了,后来被百度的面试官问过为什么扩容是乘以2,而不是乘以其他的数字,如果是缩减db,如何缩减。我想了想缩减就db的容量除以2,那个面试官一直追问我为什么是2,db分表的数目为什么一直是2的倍数。其实想想,不论扩容还是缩减都是为了保证扩容或者缩减之后,需要改变索引的数据尽可能少。面试官匆匆面完之后,叫来了他们的leader,leader对我的面试也是简单问了项目,然后开始问 我为什么要离职,想要做什么样的项目,对未来的工作有什么样的期望,以及问我还有什么问题。最后是hr面,基本问了下薪资要求,以及对家住哪里,对于公司搬到望京有何要求。
令我没想到的是,美丽说的hr第二天就通知我拿到了offer,也提供给我要求的薪资。但是我感觉我并不为之所动。可能还是眼高手低。
小米面试----四面,拿到offer
当天重感冒,leader让我下午回去休息,我乘着下午休息的“病假”去了小米的面试,小米面试真是持久战,面试了4个多小时,快5个小时,一共面了4面。这4面还不包括hr面。每面都有一个多小时,前三面都是技术面,问了一些简单的基础技术问题。也许是运气好,问的我都知道,不太熟悉的,面试官都对我有所提示,问了一些项目经验,项目架构,并且问了一些数据结构和手写代码,最后是leader面,leader问的都是技术以外的——为什么要离职,薪资要求,能否独当一面,现在项目组的架构和工作内容,后续入职时间是多少,入职你的工作职能。听了leader的描述,感觉小米的工作环境还是很辛苦的。所以并没打算去。虽然hr一再沟通,可能是因为在xl呆的时间久了,总的来说,工作一点也不辛苦,我还有业余的时间跳跳舞,追追剧,看看电影,看看书,谈恋爱。
因为有了这两个offer,我开始和leader谈离职,整个过程不是很愉快,我也真切发现了自己的不擅长沟通,不擅长表现。我没有和leader透露我有offer,因为我这两个offer我都没打算要,因为工作内容与工作强度都是我不想接受的,尽管工资有一点诱人,至少比我现在高出很多。从这一点可以看出我的太过自信,不擅长谈判。后续的各种面试的滑铁卢进一步验证这一点。
滴滴面试和风行面试----一面,被拒
第二天继续感冒,所以向leader请了假,leader直接放了我一天假,所以我决定去滴滴面试。面试之前刚好在家里处理一些问题,本身状态不好,匆忙涂了个口红,吃了个面包,打的去滴滴面试。面试我的是个小哥,小哥非常严肃的让我 写一个矩阵转置的程序,后续又让我如何预防程序crach,如果程序crash了如何快速的恢复。对于商品下单的整个流程如何构造db和cache,从下单到支付的整个过程如何保证事务的原子性和正确性。因为只面了一面,后续的面试就没有了,我就知道面试失败了,第一次面试受挫。
后续是与现在工作的leader的谈话,几番下来,我答应留下来,这也给我后续的面试留了后路。因为我答应留下来,去百度的两场面试只是积累经验,没有拿出破釜沉舟的决心,表现马马虎虎,最终没有拿到offfer,后续也是百度发出声明,不再社招。我也问了百度的hr,为什么我没能成功通过面试,征求各位的面试意见。
过了几天收到了风行面试邀请,虽然我决定留下来,但是还是参加了风行的面试以增加自己的面试经验。风行的面试整个过程很随意,直接技术leader面。 问如何存储各个城市的IP,如何格式化一长串数字。INNODB和MYISAM的区别,DB的索引机制,一道数台阶数的题目(递归和非递归的实现)。风行网我并不打算参加,所以整个面试很懈怠,表现也是非常不好。
两场百度面试---无疾而终
第一场百度面试,随便问了一些问题,一面是个技术面, 让我写一些awk和sed的命令,还让我写一个代码判断两个单链表是否相交,后来又问我一致性hash索引,我非常诚实的说我对一致性hash索引不了解。这也是导致我面试失败的一个原因, 对技术没有很强的好奇心,没有广泛的知识面。面试官说一致性hash是非常有趣的东西,我应该了解下。第二面问了一些 网关和架构的相关问题,以及登录的token机制,可惜这些东西我有接触,都没有进一步深入了解。不得不承认,我工作以后,没有像上学的时候,保持对技术的热情。第三面是一个女研发产品经理,没有问技术,都是拉家常,为什么要离职,希望要什么样的团队氛围,自己的职业规划,预期薪资。在谈到作为一个女工程师,如何在男工程师占大多数的氛围中如何生存。我想我回答的非常生硬,一方面没有表达女工程师认真工作的决心,也没有谈到女工程师可以活跃团队氛围。更没有表达团队协作的重要性。从我的言语中,可以看出我是一个不太合群的人。
第二场百度面试,内心觉得技术面面得还可以,估计最后一个leader面,面的比较糟糕。第一个面试官的问了关于 redis的持久化,服务器的搭建,一致性hash,分库分表,如何实现swap函数不占用空间,linux文本处理命令(查找某个赐的总个数,awk/sed),1kw db记录如何使用10台机器处理完。第一个面试官面的问题都是我平时工作总结的,所以回答的还算顺利,第二个面试官的问题是关于项目的功能和架构, 如何实现10w个并发请求的秒杀,实现php中的print_r函数。php中的数组是如何存储的。微博产品(发微博,点赞,刷feed)这个过程的架构是怎样的。前面几个问题都表达得还算顺利,就最后一个问题表达不清楚。最后一个leader简单问了下项目,然后就是问 网关的离线缓存,问收藏夹的多设备同步(本地和远程),开放平台设计有哪些考虑,这几年工作经验有哪些收获。而我问面试官对我有什么好的建议:表达问题的时候要思路清晰,条分缕析,并且在一个项目中能够独当一面。
参加了6场面试,面试基本过程如下:
(1)简单介绍自己(能力/ 长处,项目经验)
(2)介绍项目功能业务,你所主要负责的职能
(3)项目架构
应用层 ----分层+daemon消耗消息队列
DB层----分库分表+读写分离+主从
Cache/Redis --- 分布式缓存,一致性hash
CGI ----负载均衡Proxy
(4)MVC框架 && PHP框架-----你能用一句话概括吗
(5)Redis & Memcached的区别
(6)mysql的索引,锁表,引擎
(7)INNODB 与MYISAM的区别
(8)php语言常用字符串操作函数
(9)Linux常用命令(awk/sed/xargs/find/sort/wc等)
(10)编程解决一些简单问题——单链表判断是否交叉,实现php的print_r函数,台阶的排列组合问题等
(10)工作中遇到哪些问题,最大挫折是什么,有哪些收获,最大的收获是什么?
(11)你为什么离职,有什么问题要问面试官的?
从面试表现的自我感觉和面试官的反馈来看:
(1)动手编程和linux常用命令比较熟练,对项目比较了解,数据结构和算法基础扎实。
(2)但是对技术缺乏应有的好奇心和热情,因为对一些技术缺乏深度和广度的了解。比如一致性hash,mysql的索引机制,比如redis内部实现机制,比如对系统的进一步改进和完善等。
(3)除此之外,在表达能力上,无法条分缕析,提纲挈领。
(4)从谈吐中可以看出团队合作意识不强,项目经验匮乏,也没有足够领导能力,无法独当一面。
(5)每一场面试都要精神饱满,不可懈怠。
最终因为没有找到满意的工作,也不想太过辛苦,毕竟大学那几年和考研的时候,可能因为“太过用力”,身体素质下降。但是我觉得自己无论如何都得收拾心情,认识到自己的种种不足,重新出发。