最近,我在Github上发现了一项极富吸引力的项目分享,由一位谷歌软件开发工程师呈现。他详细描述了个人从一名普通的web开发者成长为谷歌软件开发工程师的经历,并分享了在这一过程中他所阅读的书本、观看的视频以及遇到的面试题。尽管作者提供了部分链接,但某些内容在国内仍然无法访问。
对于想要探索更多细节的朋友们,可以在Github上搜索“coding-interview-university”,并选取中文版进行阅读。
受到启发,我也整理了一些国内一线互联网公司的面试题和面试技巧,特别是对于想要进入BAT(阿里巴巴、百度、腾讯)等顶尖公司的技术人员。让我们来看看,你和这些巨头之间究竟差在哪里!
阿里巴巴
据部分网友反馈,阿里巴巴的面试共分为五轮,前两轮是电话和视频面试,四轮技术面试后有一轮HR面试。大部分候选人在二面止步。
技术面试中,根据候选人所掌握的编程语言和应聘的部门不同,问题自然会有所差异。但无论如何,主编程语言和项目经验都是基础面试题目。对于候选人来说,明确自己的主编程语言并具备工作中的实战经验至关重要。那些试图掩饰自己无主导编程语言却声称精通多种语言的人可能连第一轮都难以通过。
在面试中,关于主编程语言的高级特性、Hashmap、Arraylist、各类排序算法、红黑树、线程、消息队列、分布式、网络编程中的Forward和redirect等知识都是经常被问到的概念。其中,对于蚂蚁金服(上海)来说,数据库和开源相关技术更是重中之重。至于HR面试,问题多为常规类型,如期望薪资、离职原因等。在阿里这样一家富有情怀的企业中,候选人在回答这些问题时应该展现出对阿里的热情与积极性。
百度
百度是一家注重技术基因的公司,特别关注研发人员的代码能力和对算法的了解程度。想要入职百度的研发岗位,候选人需对自身能力有清晰的认识。百度的技术面试共有三轮。在第一轮面试中,候选人需进行自我介绍,手写简单的算法,并回答关于Hashmap、Object类、Finalize、JVM等概念性问题。在二面中,候选人会面临关于项目经历的询问以及算法方面的挑战。至三面,除了进一步的项目经历探讨,还会出现大型的手撕算法题。即便代码思路清晰,候选人下笔的速度也同样重要。因为面试官使用的语言可能不同并且可能会催促候选人回答问题,因此需要保持冷静应对。
腾讯
腾讯的笔试通过率相对较高。前两轮面试主要会考察Hibernate、mysql数据库、Redis、memcache以及Java的full gc等知识点。除了基本的自我介绍和项目介绍外,手撕算法和场景题也是考察的重点。关于算法题就不具体举例了,主要是常见的一些知识。场景题例如:千万用户抢购时如何处理高并发问题以及如何设计系统和数据库以支持此类活动。此类题目旨在考察候选人的系统设计能力和问题解决能力。
网易
网易非常重视研发者的过往项目经验。因此候选人在面试前需要对自己的项目经验进行充分的梳理和准备以便能够清晰展示自己在项目开发过程中遇到的难点以及解决方案。此外分布式事务方面的概念也是网易面试的重点之一。例如设计一个下单系统并处理相关场景如发放优惠券等以展示候选人的系统设计能力和业务处理能力。今日头条:
今日头条对手写算法的能力颇为看重。根据反馈,其面试过程中,涉及数据库优化、联合索引、Java虚拟机等专业技能。更具体地,会考察单例设计模式、nio技术、Linux命令的随机应用等。http协议的状态码、重定向的301和302区别以及服务器错误的502和503差异也是面试的重要知识点。对于Redis数据结构及MySQL集群数据的操作更是常见的手写代码题目。每轮面试都会有此类题目,虽然算法逻辑不难,但细节决定成败。
华为:
华为招聘有一定的学历门槛,应聘前需仔细阅读招聘简章。面试时,需对自己参与过的项目流程了如指掌,包括项目介绍、架构、执行流程以及优化等,这些都是面试中的主要议题。如果学历达标,面试过程相对轻松。
美团:
美团面试前多做面试题练习是非常有帮助的,特别是针对Redis(源码、集群及持久化)、Hashmap(原理和容量)、Hashset源码等高频考点。Object类、hashcode和equals方法、排序算法(如快速排序)、数据库隔离概念及MySQL隔离级别等也是重要的面试内容。若没有提前准备,现场应对算法题的压力会比较大。务必重视面试前的准备,并在回答时适当展示自己的知识面和技能水平。
在面试过程中,不仅要熟练掌握并展示确实擅长的知识,对于不擅长的内容也要坦诚面对并及时学习。计算机系统原理知识、网络通信协议和数据结构与算法是各大厂的必备技能。参与过的重要开源项目或个人博客都能为应聘者加分。无论社招还是校招,项目经验都是求职过程中的重要,务必认真准备。 |