2020届研究生,Android开发岗。
准备了四个月终于拿到了大厂的几个offer,一共面了字节跳动、腾讯、美团、快手、百度、阿里钉钉部门,offer都拿到了,最后决定了去美团~
字节今日头条
字节面试比较注重基础,包括在线写题,数据结构,Java基础,JVM基础,操作系统等;以下包括实习3面;字节实习面试是一天内走完所有技术面试流程,每一面结束后如果通过则15min左右就开始下一轮面试。
今日头条一面
1、有三个函数 fun A(b) fun B():b fun C():c。其中 A 需要在主线程执行,BC 需要在子线程,且 A 需要等待 B 操作完成的返回值,如果用协程实现这个依赖关系并尽可能快速执行完毕。 开始我用的withContext,面试官又让用async写一下。协程框架的底层是怎么实现的有看过吗?怎么理解suspend关键字?挂起函数一定会被挂起吗?
2、写一个java单例模式(DCL),kotlin中如何实现单例?(object)object的原理是什么?线程安全吗?
3、http协议相关:http和https的区别是什么,加密过程?Get能否修改服务器中数据?
4、点击事件的分发过程?有一个业务需求:想要监听当前界面中的所有事件,该怎么实现?Activity能否拦截事件?
5、Java如何实现泛型的?java和别的语言的泛型有什么区别?解释一下泛型的逆变和协变?kotlin的in和out关键字作用?
6、内部类有哪几种?静态非静态内部类区别是什么?匿名内部类中访问外部类成员变量为什么要用final?不用会怎样?
算法题:给定一个二叉树和一个目标值target,写一个函数判断树中能否有一条路径(根节点到叶子节点)的节点的和为
target
今日头条二面
1、解释一下内存泄漏、handler内存泄漏原因?引用链是什么?虚拟机是如何判断对象是否可被回收的?
2、kotlin相比于Java好处是什么?kotlin对空指针异常是如何处理的?let、with、apply的适用场景?
3、Java异常机制、Error能捕获到吗?
4、我项目中账号密码是保存在本地的,怎么去保证安全?
算法1:给一个数组,找出数组中第k大的元素
思路一:排序
思路二:优先级队列
思路三:使用数据结构堆
算法2:手写快速排序
今日头条三面
- 自我介绍。你的项目中用了kotlin,能说一下kotlin相比于Java好处是什么吗?
- 你的项目中用了LiveData,能说一下它的原理吗?(源码没看过,简单说了一下观察者模式)
- http协议请求头都包括哪些内容?
- 计算机网络、操作系统、数据结构有系统学习过吗?
- 后端、web前端、iOS方面有接触过吗?(学过MySQL和一点点Spring)
- 你看过哪些Android源码?刚刚你提到了Handler,它是用来干嘛的?为什么要有Handler,自己写一个
线程间通信的代码不行吗?你提到了消息队列,它的作用是什么?消息队列和Handler一定要一起使用吗? - 算法题
(1)用二分法在排序数组中找到绝对值最小的元素
(2)螺旋输出二维矩阵中的元素(不一定是方阵) - 能实习多久?什么时候毕业?什么时候能开始实习?
- 反问
(1)大厂对于新技术的看法?敏不敏感?(大厂会第一时间学习新技术,但是真正用在项目中需要时间)
(2)鸿蒙的出现会不会抢了Android开发者的饭碗?(不会,移动端之间转行很容易)
腾讯-腾讯游戏
腾讯面试涉及到的范围也很广,甚至问到了C++,也具有一定挑战性的,腾讯面试过程中的感觉就是很多我不太熟悉的知识点都被问到了,甚至是不知道的知识点,但整体面试官给人的体验还不错,一般会提前打电话沟通面试时间。
腾讯一面
50分钟(腾讯会议视频面试)
- 自我介绍,顺便展示了自己的项目,展示中出现了一个bug(尴尬),面试官问为什么会出现这个bug,
出现bug你会采用什么方式解决(查看log)?如果是企业级应用修复bug,你会怎么做?项目是你自己写的吗?
写了多久? - 有用过Java集合类吗(说了ArrayList、LinkedList、HashMap)?说一下它们各自特点和内部的原理?
- Java中加锁的方式(sychronize和lock)?它们有什么不同?如果是高并发的场景,选哪个比较好,为什么?