最近,笔者在Github上看到了一个非常有趣的项目,来自一位谷歌软件开发工程师的分享,主要讲述了他是如何从一名web开发者蜕变为谷歌软件开发工程师的,这一路走来,他都看了哪些书籍,哪些视频和哪些面试题,只可惜虽然作者给了链接,但部分内容在国内还是无法访问。
(由于此处不便分享链接,所以对该项目感兴趣的可以在Github上搜索coding-interview-university,然后选择中文版本进行阅读)
看完,笔者也有了兴致,便在网上搜集了一些国内一线互联网公司的面试题和面试技巧,特此整理分享给需要的技术人员,看你和BAT之间差了多少!
阿里巴巴
根据部分网友的反馈,阿里的面试共分为五轮,前两轮均为电面(电话和视频),四轮技术一轮HR,大部分网友止步于二面。
技术面试部分,所掌握的编程语言和谋职的部门不同,问题自然也会不同。但是,主编程语言和项目经验是必备基础面试题。
首先是主编程语言,主要指开发者最拿手的,工作中使用的编程语言,不要和面试官说自己没有主编程语言但是会N多种编程语言,甚至是精通N多种语言,这样可能连一面都活不过去。
此外,如果你的主编程语言是确定的,那么接下来一半的问题会围绕主编程语言的高级特性展开,这些相关问题是比较容易在面试中被问到的。
在面试中,Hashmap、Arraylist、各类排序算法、红黑树、线程、消息队列、分布式、Forward和redirect都是常被问到的概念,每个概念又可以展开无数个问题。其中,蚂蚁金服(上海)会更重视数据库和开源相关技术。
HR面试的问题都是一些常见问题,比如期望的薪资、上一家公司的离职原因、为什么选择阿里、最有成就感的事情、项目中遇到的最大挑战以及如何评价自己等,阿里是一家非常有情怀的企业,千万不要小看HR询问的这几个看似常规的问题,或许就可以决定你最终是否被录取。一定要认真、积极、让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的隔离级别)、线程池、Java(内存模型、垃圾回收)、数据库索引......
如果之前刷过题,手写算法题应该问题不大,如果之前没有刷过题,那算法题也不是那种在现场马上就可以很快写出来的。所以,要重视面试前准备。回答面试官问题时,可以适当延伸将自己会的东西表现出来。
结语
1、自己确实会的知识可以多说说,适当延展;自己不是很擅长的也要第一时间大方承认,否则后面一定会跟着无休止的问题。
2、计算机系统原理知识、网络通信协议、数据结构与算法这些基本知识是所有大厂面试必不可少的基本技能。
3、如果你贡献过某个不错的开源项目或者有自己的博客将是很棒的加分项。
4、项目经验很重要,无论是社招还是校招,项目经验都需要认真准备。