2017实习【Java研发】面经

标签: 实习 面经 Java研发 阿里、腾讯、华为

找2017暑假实习,经历过被腾讯拒绝的无奈,也有拿到阿里和华为offer的喜悦,找实习过程也有一段时间了,在此把之前的面试知识点和经历做个小总结,以鞭策自己更加努力前进。

1 腾讯

腾讯投的是研发岗位,原来就知道对于Java系的人想去腾讯搞研发估计难度太大,但这次自己是切切实实体会到了。3月初,请教了在腾讯工作的师兄把简历改了又改,由N页浓缩为一页的精华,师兄帮忙内推之后过了好久都没消息,最后发现简历评级太低(B级),没过,实在是很忧伤。据说简历评级在A以上才有机会面试,自认为个人虽然不是大神级别的水平但能力还是有的,简历不至于被残忍丢掉吧。其他同学是Java系的也有简历顺利过的,后面一对比,人家除了搞Java外,还对PHP、python、C++等非Java系语言有项目开发经验,我就纯Java,有可能有这方面的因素。当然也有可能确实是简历没有写好。就在放弃腾讯之际,腾讯社交网络质量部却给我发了邮件表示接收了我的简历。经了解这是腾讯的一个测试部门,虽然不会去但是抱着学习长经验的心态,于是就有了接下来的测试和面试。

社交网络质量部专项笔试:

题目1:有用户反馈手机QQ的图片传输的速度比微信慢。分析原因并提交实验数据和最终报告。

题目2:有用户反馈手机QQ的耗电比微信多。分析原因并提交实验数据和最终报告。

笔试二选一,三天内完成。

    表示之前没有过类似的抓包分析经验,但是直觉告诉我可以去干。然后选择了题目一,手机系统是ios的,抓包工具用了fiddler和Wireshark。借同学的手机平板,用iPad和iphone开了几个微信小号和QQ小号分别做抓包分析,也让同学在移动网和室内wifi不同环境做了相应的测试。最后得到的结果是微信mmtls和QQ https所使用的安全协议直接或间接导致的。提交报告后得到的回应是确实有这方面的原因。笔试通过后等了2周接到面试。


腾讯面试都是现场面试。

一面:

1)问:自我介绍。

2)问:印象最深的项目。谈谈你的贡献和解决的技术难点。
这里面由项目展开,一连串的追问。比如他会问你项目哪里最难,怎么解决的,执行效率如何,有没有出现什么问题,怎么样处理,如何维护和升级等等。需要对个人做的项目比较熟悉,平时对项目多思考才可以答得好这些问题。我对自己做过的项目还是比较熟悉的,所以回答的感觉良好。这里聊了十多分钟。

3)问:你之前做过的社交网络质量部专项笔试【有用户反馈手机QQ的图片传输的速度比微信慢】,你当时是怎么思考和行动的?
这里就开始聊之前做的笔试,回答方向主要集中在怎么设定实验环境、怎么实现抓包及分析哪些关键内容、最后如何得出结论等等。最后面试官说这个题目其实是有一定难度的,我提交的报告的结论确实是有那方面原因(内心嘚瑟了一下,起码答案是通过了^^)。

4)问:现场写出使用递归逆序一个整数的代码。
面试官给了我纸和笔,询问了一些边界问题和具体要求后就开写了。这里需要注意的是面试现场写代码,首先自己不要慌张,要沉住气相信自己,其实题目不是很难的,冷静下来一般可以写出来。这也说明我们平时有机会还是要在纸上写写代码,不至于那么陌生。

5)问了一道智力题。
心里是千万只草泥马在奔腾的,面试的时候问智力题真是要坑人啊。这种问题要是不会就很难自己想出来的,不过可以换个角度思考问题,面试官人家不一定非要你回答出来,说不定更多的是考察你对问题的思考方式和过程,有什么疑惑的地方和面试官交流,你可以引导让他给你问题范围,甚至是给出答案的提示等等。总之智力题之类的,除非平时刷中题目,不然还是好好思考不知道结果时怎么回答才能让面试官印象也不错吧。

6)问:你有什么问题想要问的吗?
问自己想知道的问题,要表现得真诚、积极、有上进心、有求知欲。最后在面试前针对性的准备一些合适的问题。

一面面了四十多分钟。可能是测试岗位的原因,并没有问很多具体技术的问题。


二面:

     第三天收到二面的通知,很不幸在前一天吃错东西搞得上吐下泻,还发烧了。顶着疲惫的身躯去二面,感觉是不太妙的,但是心想这次面试本来就是抱着学习长经验的态度来的,个人也不希望最后选择测试岗位,心里就平衡了一些。

1)问:请作一下自我介绍。

2)问:说出对Java内存分配的机制。

3)问:JVM垃圾回收的主要算法。

4)问:收获最大的项目是哪个,为什么?
结合自身项目谈吧。

5)问:对TCP/IP的理解。是否有相关的项目经历?
这里主要想考察你对计算机网络的相关协议的熟悉程度。平时要针对复习。

6)问:你对未来的规划是什么样的?
从理想、学习、就业、家庭、生活等各个方面说自己的规划和行动。

7)问:你有什么想问我的吗?
这种问题需要提前做些功课,准备一下。

    由于身体原因,个人二面面试的时候状态不是很好。面试过程面试官让人觉得很舒服,这可能和腾讯的企业文化有关吧。临走之前面试官说会有人联系我进行最后一轮终面,但是最后却没有收到面试的通知,而是收到【岗位不合适】信息,可能面试官看出了我的心思最后改变了主意吧。有点小遗憾,不过本来也不打算去,经验已经赚到了。

2 阿里

阿里的面试都是电话面试,前后经历了4次面试,每次面试时间长度都在40至50分钟左右,从3月底到4月底也经过了一个月才出结果。

一面

1)问:请作一下自我介绍。
答:结合自己教育经历、项目、技能简要介绍,重点突出自己的特点和特长。

2)问:请说说什么是事务?
答:我回答时突出事物原子性操作,要么都做,要么撤销回滚都不做。
问:详细介绍事务的ACID特性。
答:分别介绍原子性、一致性、隔离性和持续性(持久性)四大特性内容。

3)问:对乐观锁和悲观锁的理解。
答:当时对这一部分内容不是很了解,但是大概说出了自己的理解。悲观锁是在并发环境中操作的时候,假设每一次操作都会有并发进行,每次执行都需要加锁解决潜在的多线程并发问题,在执行的时候比较“悲观”,认为操作都会遇到并发问题。相反乐观锁在执行的时候就比较“乐观”,认为操作时不会或很少遇到并发问题,所以只在最后提交操作的时候检查和处理并发问题。
问:介绍它们是如何实现的。
答:我回答的时候举了数据库乐观锁和悲观锁的例子。悲观锁通过加上表锁、行锁、读锁和写锁等实现,乐观锁通过版本控制(使用时间戳或递增的整数)等手段实现该机制。

4)介绍Java的集合,list、set和map的区别。
答:从它们的作用、用法、底层的数据结构、初始化容量和扩容规则、被继承的父类、是否多线程安全等角度去回答。

5)问:HashMap和HashTable的区别。
答:这里和回答集合类的思路是类似的。
问:HashMap底层是由什么数据结构实现的?
答:使用哈希表实现,用链地址法处理冲突碰撞......
问:那么HashMap如何实现具体的底层put操作和get操作,请详细介绍。
答:HashMap内部使用Entity对象存储键值对,先说put操作......
问:好,那HashMap是线程安全的吗?
答:非线程安全的。
问:那你如何实现HashMap的线程安全?
答:使用Collections集合包装类的静态方法synchronizedHashMap包装,实现hashMap的线程安全......
问:该方法实现的HashMap安全线程执行效率如何?
答:由于使用synchronize关键字实现同步,在多并发环境执行线程必须持有对象锁等才能执行同步代码,在大量并发时效率不高......
问:有没有执行效率更好的办法?
答:使用concurrentHashMap实现同步map,效率会更高。
问:好,说说看concurrentHashMap的实现机制,它为什么会效率更高?
答:concurrentHashMap使用锁分段技术实现同步机制,在并发时使用的锁粒度会更小,可以处理更大量的并发数......
hashMap这块追问了好久,幸好所以这部分内容还算比较了解,答得还算过得去。所以如果还有什么不会的,赶紧要熟知才行,最好是边看源码边体会其中的奥妙之处。

6)问:Java如何实现类加载?
答:根据类加载器的类别、作用以及类查找和加载等方面回答。

7)问:看你也做了不少项目,说说对你印象最深的一个。
答:结合自身项目回答,突出自己在其中的角色和起到的作用,自己的什么方法解决了什么问题,性能和效率怎么样,最后自己学到了什么,以后可以优化和升级的方向等。

8)二叉搜索树的查找时间复杂度?已排序数组查找一个元素的时间复杂度?

9)如果你和你同学在讨论项目的时候意见无法统一,你该怎么做?

10)你有什么问题想要问的吗?


二面:

二面主要就是面做的项目,简历上的项目都问了,而且有些地方还问的很细。所以既然你敢写上简历,那么上面的每部分内容都有比较清楚才行。

1)问:请做一个简要的自我介绍吧。

2)问:请你依次说说你做的每一个项目。
答:我在简历上写了三个项目,然后面试官一个一个项目慢慢问,而且问得很仔细。比如其中提到了一个定位算法,就问我是怎么设计的,根据什么如何有效建模,并且是怎么样验证算法有效性,如何处理边界特殊情况等等。一句话,简历上面出现的内容,自己是要真的要知道并且能说出所以然,如果是似懂非懂的内容,不是很建议写到简历,不然面试官一个简单追问就可能答不上来,就有点尴尬了。项目这一块大概面了二十多分钟,问得很详细,所以聊的时间久了一些。

3)问:在写shell脚本的时候,怎么样判断一个文件是否存在?

4)问:Linux系统下如何查看一个端口的占用情况?查看进程呢?

5)问:Linux系统下怎么样查看系统的运行状况?
这里我回答了top命令,然后就被追问loadaverage的几个数值的含义,还追问了这个命令其他操作。

6)问:如何修改主机名?如何查看本机的ip?
我在回答查看ip的时候说了ipconfig,面试官很友好的提醒让我再想想。这才尴尬地发现自己说成了Windows下的DOS命令,赶紧改口说出了ifconfig。这里不得不感慨一下阿里的面试官真是nice,让人感觉交流很舒服,丝毫没有高高在上的架子。

7)问:怎么样对数据库查询进行优化?
主要说了索引的优化,包括复合索引以及创建索引、使用索引关键字查询的顺序等该注意的问题。

8)问:说说你对concurrentHashMap的理解。
这个问题在一面的时候涉及到了,在那之后仔细看了这部分的源码和资料,所以这里回答得比较顺利。可见,concurrentHashMap是一个非常重要的知识点,需要特别关注。

9)问:JVM的内存结构?
这里需要对JVM有一定的了解,从JVM内存的Java栈、Java堆、本地方法栈、程序计数器、方法区的结构以及对应的作用等方面回答。

10)最后问了一道智力题,当时脑袋一时转不过来了,面试官很耐心的引导还是没有答出来,不过面试官很友好的告知了答案。

最后结束的时候面试官说让我等待接下来的面试,听到这个还是挺开心的,这意味着二面过了,准备三面吧。

三面:

三面等了一个多星期才来,某天晚上十点离开实验室的时候突然来了电话,不得不说阿里的面试官也是蛮拼的,这么晚了还要面试。

1)问:我是阿里巴巴的面试官,请你先作一下自我介绍。
自我介绍多了感觉回答的要点和套路都比较清楚了,这就是所谓的经验积累了。

2)问:说说对你印象或收获最多的项目。
结合自己的项目具体介绍,突出自己在项目中起到的作用和收获,最好说说自己在项目前、中、后是如何思考的。

3)问:你对未来是怎么样规划的?

4)问:你现在是在武汉,那么假设你是武汉市消防相关部门的负责人,没有任何数据的前提下你认为武汉需要部署多少个消防站?
这种题目应该是开放性的,个人觉得最重要的一点就是要表现出你是如何思考的。

5)问:你是如何与身边的人相处的?有矛盾的时候怎么处理?

6)问:你有什么想要问的吗?

三面聊了30到40分钟这样,没有涉及很多技术的问题,说的主要是项目和其他非技术问题,聊完之后面试官就让我等下一轮面试了。


四面:

等了一个多星期,某个晚上八点多终于等到了阿里HR的面试电话。

1)请作一下自我介绍吧。

2)你研究生是保研的吗?

3)从本科开始到研究生你是怎么学习的?有没有什么变化?

4)你平时的日常生活是如何安排的?

5)我看到你有参加过学院的篮球比赛,除了篮球外有没有什么爱好?你如何调节学习和娱乐的时间分配?

6)我看到你有班干部的经历,请问组织活动的时候你是如何组织同学保证活动有序进行的?

7)你对你自己的未来有没有什么规划?

8)你有什么想问的吗?

四面HR面的比较快,才三十多分钟就结束了。面试的时候感觉面试官比较急,可能是还要面试很多人吧。有些话我这边还没说完就被面试官抢过去了,明显感觉面试官在赶时间想要快点结束这一轮面试,不过阿里的HR MM也是辛苦,晚上还要加班面试。

焦急等待了接近一周之后,就收到阿里的offer了,这是找实习收到的第一个offer,瞬间觉得这前前后后2个月的准备也算是有了一份回报,马上抱起篮球怀着激动的心情和同学去了篮球场大战三百六十回合。

3 华为

三月份经过华为的笔试(三道编程题),顺利进入面试环节。不过听说华为的笔试不刷人,反正面试现场人上人海的,热闹非凡。华为面试一天就结束,效率比较高,个人相对比较偏好这种一面试结束就可以知道结果的方式。

一面:

1)问:自我介绍。

2)问:interface和abstract class的区别。
从修饰类的关键字、类声明方式、类变量、方法体、继承、实现、功能及用法等方面阐述。

3)问:对关键字assert的理解。
断言机制。围绕测试时使用,项目发布时停用具体描述。

4)问:JVM的内存结构模型。
Java栈、Java堆、本地方法栈、方法区、程序计数器。

5)问:垃圾回收算法和执行机制。
主要有标记-清除、标记-整理、复制算法、分代回收算法等,和串行回收、并行回收等。

6)问:哪些对象在何时会被回收?如何精确定位具体的对象?
不再被引用的对象就会成为垃圾对象,即不在引用链上的对象将被回收,通过引用链可以确定垃圾对象。

7)问:GC ROOT对象有哪些?和引用链的关系怎么理解?
围绕静态对象、常量对象、方法区对象等分析。

8)问:如果是在方法里面创建的本地对象,它会创建在内存结构的哪个地方?如何访问该对象?
在Java栈的栈帧里面创建了对象的引用,在堆上创建了对象,栈帧里的引用指向堆中的对象。这里一开始的时候面试官描述的不是很清楚,交流的时候有了一些争论,随着讨论深入,问题范围缩小后就可以准确回答了。这里聊了十多分钟,最后面试官很满意的说了几个字“完全正确”,直接让我去下一轮面试了。

据现场了解,华为的一面刷人不少。在等待开始二面开始之前,被一个HR小姐姐带到机房去做测试去了。我以为是现场考编程,后面一看是做性格测试题,瞬间感觉有戏了。做完四十分钟的性格测试后准备二面,听说就是直接终面了。

二面:
面试官看起来就是部门位高权重的领导,看上去都有五十多了,年纪挺大的,一副领导的架子,感觉有点小压抑。

1)问:自我介绍。

2)问:对做过的项目做个简单介绍。
这里有些地方想详细深入讲解,面试官直接对我挥挥手,示意【不用】,此刻我的内心是翻腾的= =。

3)问教育经历。

4)问对未来的规划。为什么选择深圳?

5)问学生工作和班干部的经历
结合经历具体介绍,突出自己在决策、组织和领导等各方面的能力。

6)问兴趣爱好
我平时比较喜欢打篮球,也参加了学院组织的比赛,最后面试官和我聊起了NBA。还讨论了今年季后赛的几组对战,当时还是在季后赛首轮,面试官还让我预测东西部冠军,预测最后总决赛对战双方(汗颜)。

就这样二面结束了,注重的不是技术考察而是个人的综合素质。在我离开的时候,门口的工作人员让我回去等通知了,说是在十个工作日内会有通知。我知道,华为有戏!过了一个星期,收到了华为的offer。


最终决定实习去杭州。

posted @ 2017-05-18 14:10  FEFJay  阅读(5501)  评论(0编辑  收藏  举报