我是四年+经验的Android开发社招,毕业于一个一本学校,但是我本人上学的时候基本没有学过,整个大学都是混过去的,大四开始进了一个大外包公司实习。
我于今年年初在外包公司毕业,先后参加过腾讯、滴滴、字节、京东、快手、美团、蚂蚁等大中厂的面试。offer 阶段是在快手、滴滴和京东之间选择了京东。
参加了很多次面试,总结了一些个人对于面试的见解,希望能给大家以后的面试带来些许帮助。本人平时注重总结一些理论知识,所以遇到毕业的情况也不太慌,也建议大家平时要卷安思危以应对未来的多种可能性的发生。下面介绍一下我在面试阶段遇到的部分面试真题与个人总结。
腾讯
一面
- 自我介绍
- 进程和线程的区别
- 进程间的通信方式有哪些(Linux下)
- 线程间的通信方式(Linux下)
- 输入一个url会经过哪些过程
- http和https的区别
- get和post的区别
- java里的访问修饰符有哪些
- 重载和重写的区别
- java抽象类和接口的区别
- 对于安卓开发你了解什么
- 详细讲讲你觉得最有难度的项目
- 问项目
- 线程池的好处是什么
- 设计模式你了解哪些
- 什么是中介者模式
- 其他的设计模式还了解哪些(手写了一下单例)
- 算法题:删除排序链表中的重复元素(力扣82)
- 反问
二面
- 自我介绍
- 问项目
- 做这个项目的时候遇到了什么问题
- 问项目
- Arduino开发和其他的开发有什么区别
- 你为什么要做这些项目
- 对哪种语言比较熟悉
- C++在面向对象里的继承和多态可以讲一下吗
- 指针和引用的区别
- static关键字有什么作用
- C++创建一个线程怎么做
- 什么是线程安全,怎么保证线程安全
- 浮点数精度问题,为什么会出现这个问题
- 用户态和内核态什么时候会发生切换
- 操作系统对进程是怎么调度的,都有那些调度算法
- http协议请求头里面包括哪些字段
- 返回的状态码你都知道哪些
- MySql的联合索引能讲一下吗,在创建联合索引的时候要注意哪些问题
- 面试官讲了一下部门的业务
- 反问
滴滴
一面
算法:1.反转链表、2.合并两个排序的链表
3.自我介绍
4.安卓学习路线
5.http和https的区别
6.TCP与UDP区别
7.TCP流量控制
8.Cookie与Session的作用与原理
9.进程和线程的区别
10.进程间通信方式
11.多线程里的关键字
12.synchronized应用场景
13.wait() 和 sleep() 的区别
14.Java内存回收机制
15.垃圾收集器有哪些
二面
算法:1.合并两个有序数组、2.合并区间
3.自我介绍
4.选择这个岗位的原因
5.项目盘点
6.当系统内存不足时,会存在单个 Activity 直接被系统回收的情况吗?
7.安卓中的消息机制是什么样的
8.分发给Handler的消息是怎么处理的
9.消息机制中,如何更新UI
10.用过哪些安卓相关的开源框架
反问:
- 胜任这个岗位需要哪些技能,如何去学习:去实习
- 大公司需要掌握什么样的debug的方法:跟项目有关,实习时候会有人带
京东
一面
- 自我介绍(我主要介绍自己会的技术细节和项目经验,至于自己的经历都是一语带过,毕竟后面面试官会问你的)。
- 聊我的项目(对自己的项目自己做了一些什么改进,在项目实施中发生困难时怎么去解决它)。
- 图片加载库相关,bitmap如何处理大图,如一张30M的大图,如何预防OOM。
- 浏览器输入URL发生了什么? TCP和UDP区别? TCP如何保证传输可靠性?
- 讲下跳表怎么实现的?哈夫曼编码是怎么回事?非递归且不用额外空间(不用栈),如何遍历二叉树
- 后面又问了很多JVM方面的问题,比如Java内存模型、常见的垃圾回收器、双亲委派模型这些
- 询问我还有什么问题要问的。
二面
- 自我介绍(根据第一次介绍自己的面试官的感觉,在第二次介绍时决定自己要不要进行修改或不变)。
- 操作系统的内存管理机制
- 进程和线程的区别
- 说下你对线程安全的理解
- volatile 有什么作用 ,sychronized和lock有什么区别
- ReentrantLock实现原理
- 用过CountDownLatch么?什么场景下用的?
- AQS底层原理。
- 造成死锁的原因有哪些,如何预防?
- 加锁会带来哪些性能问题。如何解决?
- HashMap、ConcurrentHashMap源码。HashMap是线程安全的吗?Hashtable呢?ConcurrentHashMap有了解吗?
- 你有什么问题要问吗?
三面
- 有没有参加过 ACM 或者他竞赛,有没有拿过什么奖?
- 你觉得你有什么优点和缺点?你觉得你相比于那些比你更优秀的人欠缺什么?
- 有读过什么源码吗?(我说我读过 Java 集合框架和 Netty 的,面试官说 Java 集合前几面一定问的差不多,就不问了,然后就问我 Netty的,我当时很慌啊!)
- 介绍一下自己对 Netty 的认识,为什么要用。说说业务中,Netty 的使用场景。什么是TCP 粘包/拆包,解决办法。Netty线程模型。Dubbo 在使用 Netty 作为网络通讯时候是如何避免粘包与半包问题?讲讲Netty的零拷贝?巴拉巴拉问了好多,我记得有好几个我都没回答上来,心里想着凉凉了啊。
- 用到了那些开源技术、在开源领域做过贡献吗?
- 常见的排序算法及其复杂度,现场写了快排。
- 红黑树,B树的一些问题。
- 讲讲算法及数据结构在实习项目中的用处。
- TCP与UDP区别与应用(三次握手和四次挥手)涉及到部分细节(如client如何确定自己发送的消息被server收到) HTTP相关 提到过Websocket 问了WebSocket相关以及与socket的区别。
快手
一面
1.自我介绍
2.介绍一下实习经历和项目
3.Activity有几种启动方式?
4.retrofit使用什么设计模型搭建的?
5.okhttp对比原生的网络请求的区别?
6.hashmap和hashtable的区别?
7.hashmap在最佳的情况下的时间复杂度?
8.hashmap在最差情况下的时间复杂度?这时候它是一个什么数据结构?
9.如果hashmap线程不安全如何让其变成线程安全?
10.讲讲git rebase 和git merge的区别
二面
1.c++多态怎么实现的
2.常用的排序算法,快速排序
3.介绍https
4.tcp三次握手、四次挥手的过程
5.介绍自己的项目
6.建模比赛中自己的任务,从中收获了什么
7.实习经历的收获
8.谈谈自己对多线程的理解
9.智能指针的原理和作用
10.自己大学期间有没有学过什么其他的技术
11.是否了解前沿的技术
总结
面试说到底还是两个人沟通的过程,所以表达能力要好,逻辑思维要清晰,要说可以让面试官听懂的话,而不是自己能听懂的话。对于技术知识,技术最终还是要回归到实践,只有真正的实践过,才可以更好的掌握技术,最后希望大家都可以拿到自己心仪的 offer。
整理不易,白嫖太易!有需要的读者朋友们可以关注一下。以上都可分享~