四年经验Android开发面试经历分享

我是四年+经验的Android开发社招,毕业于一个一本学校,但是我本人上学的时候基本没有学过,整个大学都是混过去的,大四开始进了一个大外包公司实习。

我于今年年初在外包公司毕业,先后参加过腾讯、滴滴、字节、京东、快手、美团、蚂蚁等大中厂的面试。offer 阶段是在快手、滴滴和京东之间选择了京东。

参加了很多次面试,总结了一些个人对于面试的见解,希望能给大家以后的面试带来些许帮助。本人平时注重总结一些理论知识,所以遇到毕业的情况也不太慌,也建议大家平时要卷安思危以应对未来的多种可能性的发生。下面介绍一下我在面试阶段遇到的部分面试真题与个人总结。

腾讯

一面

  1. 自我介绍
  2. 进程和线程的区别
  3. 进程间的通信方式有哪些(Linux下)
  4. 线程间的通信方式(Linux下)
  5. 输入一个url会经过哪些过程
  6. http和https的区别
  7. get和post的区别
  8. java里的访问修饰符有哪些
  9. 重载和重写的区别
  10. java抽象类和接口的区别
  11. 对于安卓开发你了解什么
  12. 详细讲讲你觉得最有难度的项目
  13. 问项目
  14. 线程池的好处是什么
  15. 设计模式你了解哪些
  16. 什么是中介者模式
  17. 其他的设计模式还了解哪些(手写了一下单例)
  18. 算法题:删除排序链表中的重复元素(力扣82)
  19. 反问

二面

  1. 自我介绍
  2. 问项目
  3. 做这个项目的时候遇到了什么问题
  4. 问项目
  5. Arduino开发和其他的开发有什么区别
  6. 你为什么要做这些项目
  7. 对哪种语言比较熟悉
  8. C++在面向对象里的继承和多态可以讲一下吗
  9. 指针和引用的区别
  10. static关键字有什么作用
  11. C++创建一个线程怎么做
  12. 什么是线程安全,怎么保证线程安全
  13. 浮点数精度问题,为什么会出现这个问题
  14. 用户态和内核态什么时候会发生切换
  15. 操作系统对进程是怎么调度的,都有那些调度算法
  16. http协议请求头里面包括哪些字段
  17. 返回的状态码你都知道哪些
  18. MySql的联合索引能讲一下吗,在创建联合索引的时候要注意哪些问题
  19. 面试官讲了一下部门的业务
  20. 反问

滴滴

一面

算法: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.用过哪些安卓相关的开源框架
反问:

  1. 胜任这个岗位需要哪些技能,如何去学习:去实习
  2. 大公司需要掌握什么样的debug的方法:跟项目有关,实习时候会有人带

京东

一面

  1. 自我介绍(我主要介绍自己会的技术细节和项目经验,至于自己的经历都是一语带过,毕竟后面面试官会问你的)。
  2. 聊我的项目(对自己的项目自己做了一些什么改进,在项目实施中发生困难时怎么去解决它)。
  3. 图片加载库相关,bitmap如何处理大图,如一张30M的大图,如何预防OOM。
  4. 浏览器输入URL发生了什么? TCP和UDP区别? TCP如何保证传输可靠性?
  5. 讲下跳表怎么实现的?哈夫曼编码是怎么回事?非递归且不用额外空间(不用栈),如何遍历二叉树
  6. 后面又问了很多JVM方面的问题,比如Java内存模型、常见的垃圾回收器、双亲委派模型这些
  7. 询问我还有什么问题要问的。

二面

  1. 自我介绍(根据第一次介绍自己的面试官的感觉,在第二次介绍时决定自己要不要进行修改或不变)。
  2. 操作系统的内存管理机制
  3. 进程和线程的区别
  4. 说下你对线程安全的理解
  5. volatile 有什么作用 ,sychronized和lock有什么区别
  6. ReentrantLock实现原理
  7. 用过CountDownLatch么?什么场景下用的?
  8. AQS底层原理。
  9. 造成死锁的原因有哪些,如何预防?
  10. 加锁会带来哪些性能问题。如何解决?
  11. HashMap、ConcurrentHashMap源码。HashMap是线程安全的吗?Hashtable呢?ConcurrentHashMap有了解吗?
  12. 你有什么问题要问吗?

三面

  1. 有没有参加过 ACM 或者他竞赛,有没有拿过什么奖?
  2. 你觉得你有什么优点和缺点?你觉得你相比于那些比你更优秀的人欠缺什么?
  3. 有读过什么源码吗?(我说我读过 Java 集合框架和 Netty 的,面试官说 Java 集合前几面一定问的差不多,就不问了,然后就问我 Netty的,我当时很慌啊!)
  4. 介绍一下自己对 Netty 的认识,为什么要用。说说业务中,Netty 的使用场景。什么是TCP 粘包/拆包,解决办法。Netty线程模型。Dubbo 在使用 Netty 作为网络通讯时候是如何避免粘包与半包问题?讲讲Netty的零拷贝?巴拉巴拉问了好多,我记得有好几个我都没回答上来,心里想着凉凉了啊。
  5. 用到了那些开源技术、在开源领域做过贡献吗?
  6. 常见的排序算法及其复杂度,现场写了快排。
  7. 红黑树,B树的一些问题。
  8. 讲讲算法及数据结构在实习项目中的用处。
  9. 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。

整理不易,白嫖太易!有需要的读者朋友们可以关注一下。以上都可分享~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容