记一次腾讯社招 Android 面试(已拿到 offer 入职)
1.单例设计模式都写写,静态内部类是怎么保证线程安全的?
2.synchronized 底层实现原理,ReentrantLock 公平锁与非公平锁。
3.主线程等待所有线程执行完毕,再执行某个特定任务怎么实现?原理和源码看过没?
4.自定义 view 的一般流程,要注意些什么如何优化,点击事件和长按时间分别是怎么实现的?
5.四种启动模式,在源码分析中的原理是怎样的?
6.讲讲 bindService 的过程,你当初是怎么优化后台服务进程的?
7.开发中你都用到了哪些设计模式?说说当时具体的场景。为什么你要用方法工厂,另外两种呢?
1.讲讲 handler 的底层实现原理?
2.说说你做的日志记录优化?
3.你看过 binder 驱动的源码,说说他的内存映射过程,说说客户端等待服务端处理返回的流程,如果要跨进程传递大内存数据你具体会怎么做?简单写一写吧。
4.在公司做过哪些优化?
5.过程中遇到的一些最难解决的问题?
6.提到了动态修复替换加载 so ,那你知道怎么修复 class 吗?怎么修复资源呢?
7.还有什么要问的?
总的来说,一面的面试官比较亲切,二面面试官要严肃些,说话比较有气场(应该是个 leader),三面的话压力就有点大了。幸运的是最后顺利拿到了 Offer。
下面分享一下面试前的准备技巧和一些 Android 面试要点:
引人注目的简历
准备简历有两点是绝对要记住的:不要等到真正开始找工作前几天才开始准备你的简历,越早准备越有优势!
简历一定要用 PDF 格式,一定要用 PDF 格式,一定要用 PDF 格式!
简历真的很重要很重要,招聘系统或者是邮箱里一天可能会收到几十万份甚至更多的简历,HR 可能打开 10 秒都不够就决定这份简历是不通过还是进入下一阶段了。
简历的目的:让企业的人从整体上了解你是一个具备什么能力的人。
常见的面试小技巧
面试有很多小技巧的,特别是和 HR 对线的时候(HR 看到不要找我呀,害怕.jpg)
不懂不要说不懂:面试官在知识深度上超出我们的掌握范围,如果问到不懂可以参考下面的做法:
可以结合自己的理解去回答,无论正确与否,虚心请教
若是有标准答案的问题但不懂,可以说:“目前还没有接触到这部分知识,面试完以后会去学习,加强理解!”
引导面试官:面试官抛出一个问题时,围绕该点展开回答,可以串联一些其它知识,但不要说太多,引导面试官:
提到 ArrayList 时,提一下 LinkedList,引出 LinkedList
提到 HTTP 时,提一下 HTTPS,引出 HTTPS
手撕代码:切忌抬手就写,要确定题意,对有不理解的地方要敢于提问。解题时跟面试官说自己的思路,以及每一步干什么,一边写一边向面试官解释。
不要一开始就追求最优解,面试官不会太反感粗糙的代码,但他希望你是一个有逻辑、思路严谨的人。
面试官会引导你优化你现有的代码,不必因为一开始写不出最优解而苦恼。
反问环节:要从面试官那儿获得对自己的反馈,比如:
当前企业最主要的技术栈是什么?
公司目前的主要业务是什么?该岗位主要负责什么内容?
Android 面试要点
下面分享一份我之前整理的 Android 面试资料,希望能帮助到有心在技术这条道路上一路走到黑的朋友!
一、Android 基础+进阶
1.Activity 启动模式
2.Activity 的启动过程
3.进程通讯
4.Android Binder 之应用层总结与分析
5.进程保活方法
6.从源码了解 handler looper ,messageQueue 思路
7.handler 如何实现延时发消息 postdelay()
8.Android 中为什么主线程不会因为 Looper.loop()里的死循环卡死?
9.RxJava 原理及如何封装使用
10.okhttp 源码分析
11.retrofit 源码分析
…
12.LeakCanary 核心原理源码浅析
13.LruCache 使用及原理
14.ARouter 原理
15.注解框架实现原理
16.Android 如何编写基于编译时注解的项目
17.RxJava2+Retrofit2+OkHttp3 的基础、封装和项目中的使用
18.Rxjava2.0+Retrofit+Okhttp(封装使用)+MVP 框架搭建
19.Android 插件化和热修复知识梳理
20.Android 开发中比较常见的内存泄漏问题及解决办法
21.如何检测和定位 Android 内存泄漏
22.图片占据的内存算法
23.为什么图片需要用软引用,MVP 模式中的 view 接口用弱引用
24.基于 DataBinding 与 LiveData 的 MVVM 实践
25.App 稳定性优化
26.App 启动速度优化
27.App 内存优化
28.App 绘制优化
29.App 瘦身
30.网络优化
31.App 电量优化
32.安卓的安全优化
33.为什么 WebView 加载会慢呢?
34.如何优化自定义 View
二、Java 基础+进阶
1.HashMap
2.ArrayList
3.LinkedList
4.Hashset 源码分析
5.内存模型
6.垃圾回收算法(JVM)
7.垃圾回收机制和调用 System.gc()的区别?
8.类加载过程
9.反射
1
0.多线程和线程池
11.创建多线程方式、线程池工作原理
12.设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
13.断点续传
14.Java 四大引用
15.Java 的泛型
16.接口、抽象类的区别
17.从 java 容器类的设计讨论抽象类和接口的应用
三、数据结构与算法面试题
1.常用的数据结构有哪些?
2.数组
(1).如何在一个 1 到 100 的整数数组中找到丢失的数字
(2).如何在给定的整数数组中找到重复的数字? (小米)
(3).如何在未排序整数数组中找到最大值和最小值?(字节跳动)
(4).在 Java 中如何从给定数组中删除多重复制?
(5).大数相加(今日头条)
3.链表
(1).那查询第一个跟倒数第二个呢?(这就不一样了,第一个直接给了头结点,倒数第二个需要从倒数第一个开始查询,走两步) (腾讯)
(2).arrayList 底层原理 (滴滴)
(3).如何在一次遍历中找到单个链表的中值?(中国平安)
(4).如何证明给定的链表是否包含循环?如何找到循环的头节点?(优酷)
(5).两个有交叉的单链表,求交叉点 (华为)
(6).如何得到单链表的长度?(360)
(7).如何在不使用递归的情况下逆转单链表?(小米/美团)
(8).怎么判断链表有环? (滴滴)
4.队列 &堆栈
(1).如何使用栈实现队列的功能(广州荔枝 FM)
(2).两个栈实现一个队列(蘑菇街)
(3).两个队列实现一个栈 (腾讯)
(4).对比一下队列和栈,以及它们底部实现 (腾讯)
评论