概述
前言:最近的半个月都在面试BAT三家公司,自己也比较幸运,面试畅通无阻。遇到的面试官人也都很好,尤其腾讯和阿里一面的面试官,点赞好评。我之所以面试比较顺畅除了些许运气外,还跟我个人准备有关,去年十二月趴了字节跳动就开始准备了,恶补各种基础知识、算法、底层的东西。也总结了面试的一些套路,屡试不爽啊!面试情况如下:腾讯四面、阿里二面、百度二面(offer待定,我觉得没啥希望了)。
话不多说,进入正题,先说腾讯的面试吧。腾讯我一共面了四次,四位面试官都很好,交流也很愉快。
腾讯:
腾讯我投的是暑期实习提前批,投了简历差不多半个月才被捞起来。好不容易hr联系我约面试时间,但被放了一次鸽子,说由于面试安排调整暂时不对我进行面试了,当时收到这个短信挺伤心的,以为没有机会了。后来过了四天,腾讯CDG那边打电话来说问我是否方便做一个电话面试,由于当时正在上课没法立即面试,所以跟他约了另一个合适的时间,这个打电话的人其实就是我一面的面试官,是个挺好的小哥哥。一面大多考察基础,面试官是以你擅长的东西为主导的,逐层深入,直到你答不出来为止,我觉得这样子挺好的。
一面问的问题如下:(连自我介绍都么的)
1.你最熟悉的编程语言是什么?
A:我个人用得比较多的是Java,C、C++和python也有一点编程基础。
2.抽象类和接口有什么区别?(补:stringbuffer和string的区别。前者大小可变,后者固定)
A:基本概念、对比了不同、应用场景、具体实现。
如表:
3.给我解释一下二叉树吧?
A:二叉树的定义、特点、形态
二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。
形态:
建议拓展去看:BST、AVL、红黑树、B、B+树以及它们的应用场景。
4.树的遍历有几种?
A:常说的有前中后,但我觉得层次遍历也算。
5.讲一下层次遍历的具体实现?
A:一种基于递归(要求树的高度)另一种是基于队列。
6.基于队列怎么实现层次遍历呢?
A:取根节点指针入队,然后出队,判断左右子节点是否为空,不为空则把它子节点入队,然后出队。一直重复该过程,直到队列为空。
7.平衡二叉树给我讲一下。
A:平衡二叉树又被称为AVL树,它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
8线程和进程的区别
A:给它举了一个工厂生产车间(进程)和流水线的例子(线程)。并且拓展了与多线程有关的知识以及通信什么的,然后延伸出了下面两个问题。
9.线程安全是什么?举个例子
A:一杯白开水,假如我甲现在要加染色剂A需要等待一段时间染色剂A才会溶解,但如果在等待溶解的这段时间,乙如果往白开水里面加染色剂B,而A还没有溶解,AB就会混合,导致白开水污染,也就是我们常说的数据污染。这样就导致了线程不安全,需要通过加锁或者其它线程同步机制来确保数据不会被污染,这是我对线程安全的理解。(可能我答得意思差不多,面试官给予了肯定)。
10.死锁是什么,举个例子。
A:死锁其实我们可以理解为一个僵持状态,类似于一个死循环。假如我有ABC三人,每个人手上都持有另一方进入下一个状态的资源,比如说A需要进入另一个状态需要得到B的资源,B也要进入另一个状态,但需要的资源在C的手上,C也是如此它需要 资源在A的手上,但ABC都是要拿到另一个资源才会释放自己手上的资源,所以就造成了一个僵持的局面,也就是我们说的死锁。
11.如何避免死锁?
A:我了解到的有三种方法。
-
设置加锁顺序(规定每个线程获得锁的顺序)
-
设置加锁时限(每个线程对锁的持有时间是有限的,不会永久占有)
-
死锁检测(当一个线程获取锁的时候,会在相应的数据结构中记录下来,相同下,如果有线程请求锁,也会在相应的结构中记录下来。当一个线程请求失败时,需要遍历一下这个数据结构检查是否有死锁产生。)
12.快速排序算法讲一下。(思想、具体实现、复杂度)
A:算法基本思想,选取一个基准作为交换元素的条件(选取的方法两种,两边取中和随机取基准),左右两个移动指针,默认右边先开始动,按升序排,比基准小的元素被交换到基准的左边,反之交换到左边,左右指针相遇则完成一趟,继续重复上面的操作直到序列有序为止。但它是不稳定的,我了解到的一个优化方法就是当待排序的序列基本有序的时候选用更适合排序这种基本有序数据的算法,比如插入排序。
13.数据库主键和外键(不会跳过)
14.为什么Java能跨平台?
A:我的理解是Java之所以能跨平台得益于JVM虚拟机,因为Java的程序就是在这个虚拟机上跑的,包括资源的分配等等的工作,也就是说JVM就相当于一个中介,负责和操作系统底层的硬件或者更底层的东西交流。这是我的一点理解。
15.我看你项目里面写了个Java版的QQ,你用的TCP还是UDP?他们有什么区别?
答:TCP,然后对比了TCP的优缺点,以及各种的应用场景。
(1)TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
(2)TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
(3)TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的.UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
(4)每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
(5)TCP首部开销20字节;UDP的首部开销小,只有8个字节。
(6)TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。
16.moro项目讲一下,你遇到了让你印象最深刻的错误?你是如何解决的?
这种属于个人方面的了,建议项目自己多准备几个遇到的问题,以及你用的技术等等相关的。
17.你的个人项目飞机大战有什么你觉得创新的地方吗?
A:虽然是模仿的小时候玩过的飞机大战,但我不单单是模仿,还加入大量的个人元素,比如随机增强buff,或者短暂的无敌状态。
18.我看你简历上有个ACM获奖,是什么样的?
A:讲了一下它的比赛形式、以及题目的批解方式。
19.你平时会看一些科技类的书吗?
A:深入理解Java虚拟机高级特性!
20.能说一下这本书让你最深刻的地方吗?
A:GC垃圾收集机制!我讲了垃圾收集算法的基本思想、内存分配机制、垃圾收集器的具体实现(讲了接近20分钟,最后他听不下去了,把我打断了。)
21.如果以后有机会,你更愿意做研发还是纯测试?
A:热衷于技术,会慢慢偏向于研发。
22.你了解我们这个岗位吗?
A:具体分为开发和测试两个方面。balabala的
23.本次面试就到这里,你还有什么想问我的吗?
问了一下腾讯实习生方面的事情,还有就是让他给我这次面试评分,他说基础挺好的,其它要回去评估一下!
整个面试过程58分02秒,与面试官聊得很愉快~然后当天晚上十一点多的时候收到了二面的邀请(视频面)。
二面:
二面由于是视频面,所以整个人都挺紧张的。刚开始以为是技术大佬,后来是个小姐姐。到了面试那天因为面试官那边的网络较差改为了电话面试,电话面试我发挥更稳定,所以那天真的是走运了!!二面主要考察的是项目,基础知识没有问太多,可能是一面问了很多的关系。话不多说,二面问的问题如下:
1.自我介绍
PS:不要说简历上写的,说一些简历上没有的,比如你来自哪里,有什么兴趣爱好,控制在20s内。
2.详细聊自己的一个项目,引起她感兴趣点就会问你如何去实现反正巴拉巴拉了很多。
3.基础知识知道我基础还行就没有问了。
4.让你实现微信红包,从架构、需求等方面问我。
A:微信红包的本质就是随机产生一个金额,我从随机数产生方面去回答的。回答得一般,因为毕竟我没有这方面的经验。
5,如何测试你写的微信红包,从什么方面?
A:先测试界面吧,一些组件有没有位置异常,然后是测试代码的稳定性和它的性能以及安全性。稳定性的话主要看它会不会因为红包的数量增大导致随机产生的金额差距较大,也就是做一个数据分析,巴拉巴拉说了很多,面试官给予了肯定。
6,让你写一个微信红包测试的程序,你关注的点是什么?
都是比较开放的题目,认真思考都能回答出来的。
7.网络协议这些会吗?答会。就跳过了!
8.数据库了解过吗?答:不,跳过!
9智力题:8个小球一个天平找出最重的,最少需要几次?
2次。网上有这个题解, 3 3 2 分组。
10.问了我能实习多长时间
A:可以立即到岗并稳定实习到暑假结束。(为了offer拼了!)
11你还有什么想问我的?
A:问了一下腾讯实习生导师方面的事情以及对本次面试的评价。面试官说我基础挺好的,沟通能力也还不错。
整个面试过程也差不多一个小时吧。(补:问了协程是什么)
三面:
三面我这辈子都不想体验了!当我收到三面的邀请的时候我以为是hr面了,咸鱼了一天,然后到官网查我的简历状态,居然是GM/EVP/面委会!我当时整个人都是懵逼的,因为从来没有听说过GM面,后来几经询问腾讯的学长学姐,发现GM面就是总监面!那个部门的老大。当时是真的害怕,并且是视频面试。我周三面完二面,周五邀请我三面,因为要面试百度的关系,改到了下周一。三面没有整理面经,所以下面的基本靠回忆来写。三面的面试官是一个看上去就是技术大佬的人,30多岁这样。人也挺好的。下面是问的一些问题:(顺序可能有点乱)
1.自我介绍。(按照二面的套路)
2.你学过哪些课?
A:C++编程设计、操作系统概念、计算机网络、数据结构这些核心课。
3.进程和线程的区别?
4.操作系统调度的最小单位?
5.操作系统有哪些调度算法?
6.Windows的消息队列知道吗?消息队列是每个线程共享还是每个进程共享?
A:我当时完全懵逼,因为不懂,就跟他说我不太了解,但我可以推导,应该是每个线程都有自己的消息队列的,因为每个线程负责处理不同的事物。(面试官点头)
7.TCP、UDP这些了解吗?它们有什么区别?
A:我答了区别以后还答了应用场景。这里我给自己挖了个坑,就是UDP是不care当前网络速率的,只会来多少发送多少,然后它问我如果UDP不管当前速率一直往网络发送数据包,网络会变成什么样子,我答:带宽不变的情况下,网络会变得更拥挤,也就是更加恶化,会有相应的机制来限制它的。(又挖一个坑)
8.你刚才说的相应的机制是哪些机制呢?具体实现?
A:拥塞控制机制(这是TCP流量控制的)硬着头皮答了三种算法,并详细说了其中的一种。
接下来问的都是计网相关的并且很专业,我理解不了只能老实交代我还没学到那里,并且TCP这些都是我自学的,面试官可能看到我这样不忍心继续问了。就跳到了Linux操作系统。
9.Linux系统有学吗?
A:学校没有专门开设这门课,但我们平时做实验都会用到。
10.那就说一下一些常用的Linux指令吧?
A:我把我会的都说完了。
11.Linux进程之间的通信方式有哪些?
A:虽然我没有学过这方面的知识,但我觉得进程间的通信都是相似的,随后答了共享内存、消息传递系统、管道机制。并且比较了它们的特点和应用场景。
12.你刚刚说管道通信适合与父子进程,理由是什么?
A:又给自己挖坑了,答了一些用于父子进程的优点,比如读写速度、数据单向流通。
13.Linux动态库和静态库的区别是什么?
A:我之前有在Windows下做个这个实验,Windows下动态库文件后缀是.dll,Linux下则是.so。静态库都是.lib。然后答了它们的区别以及应用场景。
14.你觉得动态库可以有自己的变量吗?也就是文件存储能力。
A:可以的,动态库可以定义全局变量用于数据存储。
一些细节的问题不太记得了。然后就开始做题了。
15.折半查找了解吗?先给我讲它的基本思想,然后再写代码。
A:折半查找有两种实现方式,一种基于递归一种基于迭代,每次都将待查找的值与区间中间的值比较,小于则往左边找,否则往右边找。
16.开始写代码:实现递归版本的和非递归的。
17.编程题。
1+11+111+......+11....11(2009个1)求总和里面有几个1?
A:没让我编程,让我讲了思路。我当时的回答是Sring+大数加法,因为只有string才有能力表示2009位的数,网上的沙雕方法都是错的,什么暴力遍历不现实。
18.Java的大数加法包了解吗?
A:没有太多的了解,但以前用过,因为ACM比赛的时候是我的队友负责这方面的事情的,所以我理解不深。
19.好,那本次面试就到这里,一小时二十一分钟,幸苦了。没有什么问题就结束吧。
20.您好我有个小请求,就是麻烦您对我本次的面试进行一个评价?
21.概念回答得不错,就是推导能力需要加强。
好的谢谢您,您幸苦了,拜拜。互相道别~
这个GM面没有问你项目,只问你学过的东西,并且很深入的问。面完GM面的时候以为自己要挂了,然后大概30分钟后我查询到我的简历状态更新了hr面试中!!我整个人都乐坏了!感谢GM不杀之恩啊!!
HR面试:
hr面试等了挺久的,差不多等了一个星期,hr才联系我。不过也能理解,毕竟招聘那么忙。第一次接到hr的电话在周三,我当时说我方便面试的,结果她听成了不方便,然后约到了周四晚6点。结果周四晚6点没联系我。第二次被放鸽子。。。然后周日下午hr突然打电话过来问我是否方便面试,不方便也得方便了。hr环节没有问技术相关的,大多问的是你在校园的经历,如下:
1.自我介绍
ps:这个时候你就要把自己介绍的详细一些了,来自哪里、兴趣爱好、性格、在校成绩、担任什么职位。
接下来的问题多是从你的个人介绍里面问的。
2.你说你学习能力强,那你最喜欢的一门课是什么?
3.你刚刚说你观察能力强,可以举个例子吗?
4.为什么选择智能专业?
A:说了我当时以为这个专业是搞算法方面的智能也就是AI,结果不慎入坑,还把hr逗笑了。
5.你有没有参加过什么比赛,其中有没有让你印象深刻的事情呢?
A:我答了去年的那个hackathon,说的很细。
6.比赛之后有没有发现自己和别人的差距在哪呢?觉得自己哪些地方需要改进?
7.有没有为自己做一个职业规划呢?
8.对于一个入门计算机的人,你打算怎么建议他去学习呢?
A:先掌握一门基本的编程语言,具备基本的编程能力,然后可以学习一下计算机底层的东西。
9.你说你对技术比较热衷,主要指哪方面?
A:比较喜欢计算机底层的东西,最近也在读深入理解jvm虚拟机那本书,我觉得一个程序要熟悉底层才会写出效率更高并且性能也稳定的程序,因为很多错误来源于底层。
10.你能实习多久呢?
A:我可以实习到我毕业,如果你们那边允许的话。
11.好,那么本次面试就到这里,你有什么想问我的吗?
问了一下实习生转正的事情以及我符合公司的用人的标准吗?
HR:转正是你的导师对你的日常工作进行评估,如果表现优秀那么是可以获得转正资格的。对于你的话,比大部分的人都优秀了,沟通能力也挺好。
嗯!好的。谢谢您。拜拜~
腾讯的情况大概就是这样。
百度
一面+二面:
百度算是比较好进的大厂了。屁话不多说。直接说面试问的问题吧:
1.自我介绍
2.线程和进程的区别?
3.线程通信机制有哪些?
4.说说你用过的Linux指令?期间还深入了一个grep指令和awk指令。
5.快速排序算法讲一下
A:算法思想、复杂性分析、如何优化、为何不稳定。(让你讲你就扯开来讲!)
6.对我们这个岗位有什么了解吗?
A:分纯测试和开发吧.....巴拉巴拉的
7.黑盒测试和白和测试?
8.给你一个纸杯你怎么去测试呢?
A:我答得不算很好,牛客网有这个。比如压力测试、疲劳测试等等
9.静态库和动态库了解吗?
10.树的遍历有多少种?
11.讲一下你那个moro项目,你负责的哪些模块,如何去实现?
面试评价:基础扎实,沟通能力挺好。
-----------------------分割线-------------------------
自我介绍之后就开始问:
12.什么是C++虚函数
13.内联函数了解吗?可以实现为虚函数吗?
14.动态绑定和静态绑定的区别?
15Java抽象类和接口的区别?
16.Linux下哪个指令可以查看当前目录下占用空间最大的文件目录?
17.403错误?
18.http与https的区别?
19.什么是性能测试?
20.给你一个登陆界面你怎么去测试?
21.简历上的项目都讲一下吧。(除了一个前端的)
22.做这个项目的时候有没有遇到什么让你印象深刻的事情,你是怎么去解决的?
还问了蛮多与岗位有关的知识,回忆不起来了,二面持续了40分钟左右。最让她评价了一下:基础扎实,但是沟通能力有待加强,造成这个的原因是因为我当时知道百度就二面,所以面对二面的面试官过于紧张了,总是会不经意去重复说过的一些东西,因为担心她没有理解我说的。目前是offer待定。
阿里
一面:
阿里蚂蚁金服一面的面试官也是一个很好的小哥哥。当时约的下午五点,结果到了晚上八点半才联系我。饭都没吃一直在等。接到电话以后显示简单的自我介绍。然后开始问相关的问题。也比较简单。如下:
1.详细介绍一下你的某个项目?遇到让你印象最深刻的问题,如何解决?
2.你常用的排序算法有哪些?
A:快排和堆排。这里讲得很细,尤其在讲快排的优化的时候,面试官很称赞,可能他自己也了解这方面的知识。
3.gc回收机制了解吗?
这个必须了解啊。也是分成三点去讲,全程让我讲。大概讲了30分钟!期间跟他的共鸣也蛮多,因为他知道我在讲什么,并且我条理也很清晰。
4.最后问了一个数据结构的题目,map如何保证插入时的数据顺序?
这根本没给机会我讲啊,直接说:做不出来没关系。???你给机会我了嘛?然后就说本次面试就到这里,你有什么想问我的吗?
因为当时白天的时候面了一个百度比较累了,也是让他对我的面试进行评价,他说我是他电话面试这么多个人以来,基础最好的一个,表达能力也较强。一番感谢挂了电话,十分钟后他回电给我说:我觉得你还不错,就直接给你推到二面了。然后给了一个面试时间,当时他说可以改,我没听清楚。结果按照他的那个时间傻傻的等了一天。
二面:
二面的面试官是个小姐姐,也是挺晚才联系我的,她说她面试一天了,手机没电了。阿里二面感觉就是要把你掏空,把你会的东西都掏完。卑微如我!到了二面才知道和别人的差距 = =。不单单是注重基础,更注重业务方面的能力。凭我的回忆去写吧,也不太记得当时问了什么了。
1.你可以给我讲一个你印象比较深刻的项目吗?
这里必须要吐槽一下了,阿里的面试官不像腾讯的面试官,阿里的面试官不会对你项目的技术点感兴趣,想给她说的机会都么得,但腾讯的面试官却摁着你问。也感受到了两个企业文化的差异。。项目介绍还是那种套路:项目背景、项目功能、自己负责的部分、遇到的问题如何解决、收获了什么。
2.TCP、UDP协议的区别?
3.http与https?
主要讲了区别、应用场景、以及https加密过程和加密算法等等方面的东西。
4.HashTable与HashMap的区别?
5.Java的设计模式了解吗?你的飞机大战项目用了哪种设计模式?
6.Java多线程讲一下。
7.你对我们蚂蚁金服的业务了解吗?比如支付宝
8.假如现在有个人要用支付宝扫另一个人的码给他付钱,现在让你来实现这个模块,你准备怎么做?
A:这个我就真的不懂了,凭着经验去答。回答得不算太好。
9.接下就比较过分了。。。你在技术方面还会什么讲一下
A:我把我大学会的东西全说了。
本次面试就到这里,没有什么问题的话就先结束这次面试吧。
面试评价当然是少不了的,她说我基础虽然扎实,但是需要将这个基础转换成生产力为这个部门服务,你基础虽然好,但业务方面的能力还是比较欠缺的。我这边呢还没有面完所有的人,也不确定要不要你,等候进一步通知吧。
互相道谢~然后say goodbye。
以上便是我这段时间以来的面试经历。总结了一下:基础虽然还比较好,但需要补的细节还很多,尤其是数据库方面的知识!基本每次面试都会有到,掌握数据库也是一个很好的加分项。虽然了解TCP的三次握手机制,但它的另一些东西却没有去了解,比如丢包重传。其次发挥还是不够稳定,面对不同的面试官还是不能很稳定的发挥。总之这半个月来的运气都很不错,起码不会遇到像某条的面试官面试过程中还玩手机,一点都不尊重人。希望我的经验能帮到正在春招寻找暑假去处的你们!加油啊!!!
谨记:越努力越幸运!
最后
以上就是昏睡毛巾为你收集整理的BAT三家公司面经分享。只要一直努力,总有走运的那一次。的全部内容,希望文章能够帮你解决BAT三家公司面经分享。只要一直努力,总有走运的那一次。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复