腾讯PCG移动客户端开发面经(2020暑期实习)
一面 时间:2020.05.22 面试时长:1h
1. 自我介绍
2. 笔试题1:删除无序链表中的重复结点(能否优化)
例:输入3 -> 2 -> 4 -> 3 -> 5 输出3 -> 2 -> 4 -> 5
解释:3结点重复,将第二个’3’结点删除(这边的重复指的是结点的值重复)
3. 笔试题2:先说一下二叉树的有哪些遍历方法。写一个二叉树前序遍历的非递归形式。
4. 讲一下Java的内存。
5. 创建一个字符串对象,这个对象分配在哪里?
6. String str = “123” + “456”;会创建几个对象。
7. 问了操作系统的问题,没学过,所以也忘了问了什么。
8. 数据存储有学过吗?数据库和文件保存有什么区别?
9. Activity有哪些启动模式?
10. 有什么要问的?
二面 时间:2020.05.23 面试时长:1h
1. 上一轮面试做了哪2到面试题?
2. 会哪些编程语言?
3. 想做哪个方向?为什么?Android
4. 对Android比较感兴趣,都学了些什么?我答了活动的启动模式、Handler。
5. ListView源代码有看过吗?没看过。
6. 想一下ListView应该是怎么实现的?链表?
7. ListView滑动页面如何实现页面的复用?队列?后来经过面试官的引导,有了思路。一开始往下滑,为了不影响用户体验,下面的数据,需要先预加载,这样往下滑的时候,就可以快速地显示内容。如果往下滑了之后,又想要往上滑,采用移出页面的内容,就把相应的数据销毁掉,等需要再显示的时候重新加载,比较费时;可以在一开始往下滑的时候,移出页面的内容,将相应的UI数据(不是实际的内容数据,这个一直在存储空间中)压到一个栈里面,等要往回滑的时候,再出栈,恢复数据,这样就比较快。因此在做滑动页面的操作的时候,需要上下预留出一定量的项的数据,超过这个量,再把这些数据释放掉,具体需要留多少,一个是跟页面能显示多少有关,可以通过大量测试,看看多少比较合适。还跟用户的使用习惯有关,动态调节,可以引入机器学习的方法。
8. 给你2个线程,如何产生死锁?为什么会产生死锁?
9. 外存有一定量的数据,需要读取到内存中处理,但是内存的大小是不知道的,要求如何能够读取尽量少的次数,才能处理完全部的数据?
核心是试探内存的大小,假如要处理100M、数据
思路一:先用一个较小的数,比如1M的数据,看看内存能不能存得下,可以的话,2M,可以,4M,……如此指数增长地尝试,希望能找出一个比较大地和内存容量比较接近的值。假如得到了内存的大概大小,然后每次就以这个数来读取外存的数据,读取次数应该会比较少。
思路二:和思路一类似,不同的是一开始选的数偏大,比如5M,然后每次按固定值增长,即线性增长。后面的操作就类似了。
思路三:从大往小试探,先看50M能不能存得下,不行25M,可以37M,每次处理37M,3次就够了。
假如内存分成了50M、25M、10M、5M,如何找到第65M内存?
10. 实习想要达到什么样的期望?基础能力得提升,想能独立做出几个App。
11. 如何达到你得期望?基础要扎实,看安卓源代码,在实际场景中做练习。想要在多少时间达到这样一个目标?实习完,能独立开发几个应用;正式入职,深入了解安卓,新发布的技术也要及时了,工作个1-2年,看看能不能当个小组leader。
在这方面花更多精力,学新知识,不断解决问题、总结,遇到问题向同事请教,成长更快。
12. 有看过Github得源码吗?
13. 提问环节:问了面试官是做什么方向的?做了很多方向。
14. 还问了Kotlin在公司的普及度,现在是否有必要学习?现在主要还是以Java为主,少数也在做,毕竟Java沉淀了这么多年。所以还是Java方面先学好。
15. 自己选方向,还是分配方向?比较想做安卓。都做了哪些努力?看书、看博客。
16. 周围有同学投腾讯的吗?有做客户端、前端的吗?
5.26 面试环节变成HR面了,可是一直没接到HR的电话。
5.27 晚上10点多,可能是HR打电话过来,可是手机设置了静音,那时我正在骑车回宿舍,完美错过。
5.28 终于接到HR打来的电话,问我明天有空面试吗?我说没有,要出去有点事,然后就约了晚上22:30面试,然而HR议程有延迟,所以就推迟了面试时间。
5.29 又一次把面试时间定在了晚上22:30。
面了40min
1. 自我介绍。
2. 从我做的项目里学到了什么?
3. 我有什么优势?什么劣势?
4. 还参加了哪些公司的面试?
5. 各公司的面试体验怎么样?
6. 在学校参加过哪些活动?