关于android:面临退学的天才少年多年后一举斩获多个大厂offer

47次阅读

共计 15290 个字符,预计需要花费 39 分钟才能阅读完成。

面临入学,幡然醒悟

能考上武汉大学,从高考问题来说,我不算是一个差生。但刚上大一的他因为没有及时适应短少管教的学习环境,想着大学轻易玩玩就能够了,于是自控力不强的我开始了逃课打游戏的放荡生存。后期越悠闲,前期就越苦楚。第一学期不仅挂了科,满分 4.0 的绩点也只拿了 1.8。

这一状况引起了老师的关注,春节期间老师打电话到我的家中,告知这样的绩点持续继续上来的话,会有入学的危险。我的爸妈在元宵佳节那天亲自送我去车站返校补考,上车之后选了个靠窗的地位坐下,望着父母亲脸上岁月痕迹,忽然感到很愧疚,也是时候我下定决心要做出扭转!

回到学校第一件事就是把手机了的游戏全副卸载,全心投入学习当中,大二择方向时,我抉择了计算机专业(因为我是独生子,想着程序员赚的多)。兴许这就是命运最好的安顿吧,在这里我遇到了一个充斥友爱的小家庭、带着我一起学习的室友、给予我反对的辅导员和有限信赖的导师。

为了不辜负大家的期待,我开始踊跃调整本人的状态。在大三的时候,获得了靠近满分 4.0 的绩点。

一举斩获大厂 offer!

因为我在学校做过几个我的项目,都是前后端都做,大三实习期间又深刻做 android、ios 开发,所以我这次大四校招投的都是本人最善于的 android 开发岗位,刚开始面试的时候很缓和,但经验了十分密集的面试,也先后面了各种大厂,缓缓的也就没那么缓和了,上面我会把我的面经分享进去,大多局部都是面试问到的真题。

百度

百度一面

一面问的问题大多是开放性问题,次要是看集体思路吧。
1、手撕依赖关系树扫描算法(期间提了不反复扫描、优化工夫复杂度等要求)
2、简述如何实现未知长度的数组翻转?
3、简述内存透露,你解决过哪些内存透露?
4、以 100ms/ 张的间隔时间播放 100 张图片,且每张图片须要 400ms 进行加载,如何设计?
5、如何在无序数组中疾速找到最小值(手撕二分查找算法)
6、简述 Android 中的 ANR,以及为什么会呈现 ANR?
7、简述 Handler 音讯机制(深挖外部实现原理)

我是在线视频面试的,面完了面试官让我等一下,意思应该就是过了,等下一轮面试,让我不要走开
好多个问题 一面一小时半特地长

百度二面

1、手撕一个有序数组的二分查找
2、列举一个你在理论我的项目中所进行的性能优化(深挖具体细节)。
3、简述单例模式的实现形式,且单例模式有什么优缺点?
4、简述 Java 的异样解决机制
5、多线程间如何进行信息通信?
6、多线程如何保障线程平安?
7、简述线程池
8、简述 HashMap 实现机制,如何解决 HashMap 的线程平安问题?
9、TCP 和 UDP 的区别,别离有哪些利用场景?
10、简述七层网络模型
11、简述 Android 点击事件的散发机制
12、画一个 BLE APP 的性能架构图

二面差不多经验了 45 分钟,面试官就说够了不须要再问了,我就晓得应该是过了,就持续坐着等三面。

百度三面

1、是个 boss 面试我的,一上来就问我有没有理解过哪些开源框架,我先说,而后说的长轮询和轮询的区别,如果始终没音讯,服务器始终 hold 住连贯占用资源怎么解决的
2、让我本人做一个下载库,怎么实现,进度条要以什么模式发送进来
3、问我 android 开发时候有没用过什么框架或者什么设计模式,我如同就用过 1 种模式,就是 MVP,问我(protocol)是怎么实现的,为什么要用这个模式
4、问我其中一个我的项目(IM 即时通讯)是如何存用户连贯的,如果是 tcp/socket 长连贯,是如何治理连贯的
5、问我平时 app 外面 用 http 常常不,tcp 呢
6、问我有没有接触过 openGL,对他什么了解
7、问我心愿在哪个城市工作
8、问我经不常常用 linux,平时开发用什么零碎,linux 异步和同步 i / o 是怎么实现的,实际上就是在问 linux select、poll 等的原理

百度每次面试完都会问我有什么问题,都会尽量答复我,每个面试官态度都很 nice,会常常笑一笑缓减一下我的缓和。二面面试官说百度是如果三面技术面都过了,会放到池外面,每个部门本人筛选,要的话该部门会本人分割我,如果没人要,也算挂了,也有可能会有多个部门都给我发 offer,到时候就能够本人抉择了。每个面试大略距离 40-50 分钟,效率不错。

腾讯

腾讯一面(电话面试)

1、handler 机制(十分具体,必须对源码很理解)
2、Android 动画,属性动画流程
3、Binder 机制
4、除了 Binder 还有什么能够用来通信
5、内存透露问题(Android 内存透露和 Java 内存透露)
6、View 的绘制流程,draw 和 onDraw 的区别
7、我的项目里的并发编程是怎么实现的
8、讲讲 AIDL
9、经典 HashMap(扩容,办法,大小,线程平安等)
10、currentHashMap(扩容,办法,如何保障的线程平安,1.7 和 1.8 的区别)
11、接口和抽象类
12、volatile 底层原理(两头提到了 JMM,而后又问 JMM 的问题)
13、JMM(刨根问底)
14、JVM 内存回收,新生代又是以什么比例分的
15、过程和线程区别(经典)
16、过程间通信
17、为什么 android 不必传统的过程通信形式而应用 binder 呢?区别是什么?
18、如何调用操作系统办法?
19、如何陷入操作系统内核态?
20、换页算法

腾讯二面

数组向右挪动 k 步,O(n)工夫写完了,而后被告知要一次循环搞定。。。。
自我介
1、你感觉一面面完你有哪些有余呢?
2、一面面试官说你看过 handler 源码,那我问一下为什么 next()阻塞调用的是 native 的办法而不是 wait 呢?
3、那 native 的阻塞是怎么实现的呢?你看过这部分源码吗?
4、不让你调用,你怎么实现阻塞的成果
5、除了 handler 你还有什么办法实现通信?
6、你有看过 flutter 源码吗?为什么 flutter 在某些方面运行成果更好?
7、flutter 的底层原理是什么?
8、你是怎么实现 flutter 与原生通信的?原理是什么?
9、如何在不应用任何工具的状况下,找出内存透露的起因?
10、反诘

总体来说,一面面的还是很根底的,然而二面真的被问的有点懵,以至于我回家看看我到底是报了校招还是社招。。。真的能看进去,大厂的面试官很喜爱问为什么,很多底层的机制问题。

腾讯三面

1、之前面试哪里答的不好,有什么补充的吗?
2、tcp 三次握手,四次挥手,为什么?
3、tcp 拥塞管制,流量管制
4、tcp 滑动窗口
5、什么状况下会造成内存泄露?
6、如何实现一个提早发送接口?
7、一亿个数,有反复,返回最大的 10 个
8、面试很忽然,也照前两面短,求个 offer 吧!

CVTE

一面 - 根底面(50mins)

1、webview 的优化,预加载,资源缓存,h5 和 Java 交互,破绽,API 改变
2、模块化 application 实现,AndroidMenifest 文件合并问题
3、含糊图片优化
4、activity 启动模式
5、线程池
6、自定义 view 的流程,做过哪些简单的 view,怎么实现的
7、ListView 的优化
8、别离介绍汇合
9、哪些汇合是平安的,HashMap 的 put 原理,我讲了前面 Java1.8 之后做得改良
10、如何判断对象是否已死,GC 算法
11、Java 内存模型 JMM
12、多线程通信,wait/notify
13、一道情景题:须要提供一个连续不断的文件,每个文件大略 300k 左右,用完就不要了,应该怎么设计呢?
14、滑动窗口,网络拥塞控制算法
15、讲 OSI 模型中的 TCP/IP,三次握手,四次挥手
16、理解哪些设计模式?
17、举例讲了 Context

二面 - 我的项目组长面(45mins)

1、手画你在学校开发的我的项目的框架图,而后讲讲,这个画得不是很好,导致前面讲的不清晰
2、你自定义 view 过哪些简单的 view 呢?讲讲怎么实现的?有没有自定义过继承 ViewGroup 的简单 view
3、Gradle 构建我的项目的过程,编译其余库的时候有碰到什么问题吗,Gradle 插件版本号跟 Gradle 的关系是怎么的
4、插件化和组件化有理解吗?
5、MVP 开发模式的 P 会呈现接口冗余,这会你须要怎么优化呢?
6、APP 的编译过程
7、谈谈你将来 3 - 5 年的布局
8、如何解决我的项目团队矛盾的问题
9、你感觉 Android 使用层学的比拟难的哪块是什么?
10、有实现过什么比较复杂的动画成果吗?怎么实现的?
11、屏幕适配计划
12、Android 虚拟机的优化
13、手画 Android 零碎架构,你感觉还有哪些档次没有接触到的,Framework 层学到了哪些货色,讲些各类服务
14、手撕代码

总结:一面根底面试比拟稳,然而紧接着就开始二面感觉状态比拟疲乏了,而且面试官气场很大,一直地再给你施加压力感,有些时候会走神,施展得比拟差,我都感觉快聊不上来,面完认为挂了,吃完饭之后忽然收到通过信息,十分侥幸二面通过,可能是手撕代码救了我

三面(40mins,有三个面试官)

1、轮流介绍下本人
2、给前两次面试打分
3、有没有面试过哪些公司了,有收到多少 offer 了,为什么
4、工作的薪资冀望,地点和时长
5、家庭状况,爸妈性情怎么样,你感觉跟谁的比拟像,家里人对工作有什么要求吗
6、有没有女朋友
7、你的幻想谋求,将来布局
8、你的童年印象最骄傲的一件事件
9、最近压力最大的是什么事件,如何调解?我答复高考第二大,找工作第一大
10、有理解过 CVTE 吗,为什么要来面试呢
11、如果你面试没有通过,你感觉是什么起因呢?
12、发问了面试官两个问题

美团

一面

1、tcp/ip 协定,三次握手四次挥手 why?如何保证数据可靠性?数据包没有达到如何保障达到?
2、Ddos 攻打
3、java 域的关键字以及区别
4、hashmap 数据结构以及如何计算 hashcode,以及地址抵触了怎么办?
5、手撕 arraylist 实现
6、泛型以及泛型擦除,编译时还是运行时,擦除之后是什么?(object)
7、content provider
8、https 的 uri 以及过程
9、handler、looper、message 关系,looper 始终运行吗?如何唤醒?敞开屏幕的话 handler 还在吗?
10、anr 是什么,起因,如何监控?
11、内存透露以及 handler 中的内存透露

二面

1、数据库事务是什么?有什么关键字?索引类别?如何优化查问?
2、fragment 和 activity 关系以及长处如何应用生命周期
3、hashmap 数据结构和 hashtable 区别,如何实现 hashmap 线程平安
4、设计模式具体,以及单例模式的实现形式有哪些,手撕单例模式
5、activity 生命周期
6、https 流程以及如何加密,为什么不全副都用非对称加密,非对称加密和对称加密区别
7、数据包在 tcp 中如何传输,OSI 七层模型四层模型,数据包在网络中如何传输?
8、有哪些数据结构?树有哪些树以及特色?树档次遍历和深度遍历怎么用?
9、有哪些排序算法有哪些查找算法
10、手撕疾速排序
11、事件散发以及画图
12、自定义 UI
13、图片有哪些类型,区别是什么?图片第三方库用过哪些?
14、本人的我的项目问题

三面

1、https 函数
2、用过哪些第三方库 android 的,数据库的,网络的
3、区块链我的项目是什么,讲一讲[区块链是什么
4、理解哪些新技术(kotlin、flutter 具体)
5、https 流程
6、遇到难题是怎么去做的
7、遇到新我的项目是怎么做的
8、更偏差应用层还是底层
9、对 android 和 ios 认识
10、对 android 更偏差于做哪些
11、我的项目相干说了很多

四面(HR 面)

1、偏向地点
2、为什么要做 Android
3、拿到哪些 offer
4、对公司要求
5、其余惯例问题

字节跳动

一面

1、activity 启动、生命周期、具体各种状况的生命周期(B 通明 A 还是 stop 吗?A 还可见吗?A-B- A 的生命周期,为什么先 pause 再 stop)
2、启动模式以及利用场景以及首页应用 singleTask 的问题、TaskAffinct 作用、从栈中移除 activity 的时候是不是须要走完生命周期,为什么?
3、service 是什么,做什么用,具体启动形式,如何管制 service,binder 有什么要求、AIDL
4、handler 机制流程、looper 中提早音讯谁来唤醒 looper、ThreadLocal 作用,应用场景,怎么用
5、自定义 view 绘制流程、事件散发、onclick 各种状况、ontouchEvent 和 onTouchListener 优先级
6、线程和过程区别、线程能够管制过程吗?过程能够控制线程吗
7、泛型擦除
8、反射中 ClassLoader.loadClass 和 class.ForName 区别
9、抽象类和接口区别,抽象类能够实现接口吗?
10、AsyncTask
11、下载文件多线程如何实现
12、如何实现断点续传
13、tcp/udp 区别、平时用什么,为什么
14、hashmap 数据结构、初始大小、如何计算 hash,插入在头还是在尾巴,为什么?hash 抵触怎么办
15、算法输出两个无序数组,找出不在数组 B 中的数组 A

二面

1、我的项目一个一个过
2、如何适配屏幕
3、死锁的条件
4、栈和堆,为什么要分成栈和堆
5、七层网络协议,数据包从收回到接管的过程
6、https 和 http 区别
7、https 流程
8、http 申请头
9、Get 和 post 区别
10、如何用两个栈实现队列

  1. 算法在红白蓝球的乱序数组中,如何将色彩一样的放在一起,不能够新建数组。
三面

1、我的项目具体、混同原理,混同了什么,混同作用
2、遇到最艰难的事件、技术的事件
3、数组找呈现次数超过一半的数,map 形式、站岗形式、链表形式、排序形式以及其中的工夫复杂度
4、手撕排序实现找呈现次数最多
5、齐全二叉树层数,递归办法、归纳推理法、数学推导法
6、hashmap 以及其中的 hashcode 批改、equals 批改
7、handler 机制原理、post 形式具体
8、linkedhashmap
9、用过哪些第三方库,原理是什么(okhttp)

阿里

阿里一面(22 分钟)

自我介绍都没有做,上来就问印象最深的一个我的项目,依据我的项目中的知识点发问

1、我的项目中应用了哪些资料设计中的货色?
2、ListView 和 RecyclerView 的区别?为什么应用 RecyclerView,好在哪里?
3、ListView 的优化
4、为什么应用 CardView,好在哪里?
5、我的项目中如何做到后盾监听的?(我的项目中 BroadcastReceive 和 Service 相干问题)
6、应用的是什么数据库?
7、我的项目中应用那么多开源框架,如何获取这些信息的?如何筛选决定要应用这些货色?
8、有没有看过开源的代码?
9、你有什么问题要问?

基本上就是这些,一面整体感觉不错,当天早晨七点半接到二面电话。

阿里二面(24 分钟)

1、自我介绍,同时问了我的项目中的细小的问题;
2、我的项目中如何让 service 常驻后盾?
3、Activity 的生命周期,每个周期随同着什么?
4、Activity 的启动模式,四种办法?
5、播送注册的两种形式,区别,优先级?
6、问了 Layout 的优化的办法?
7、一个 singleton 如何实现线程的同步问题?
8、Java 的垃圾回收机制,垃圾回收算法?
9、平时如何代码是如何练习的?
10、应用过那么多开源框架,有没有看过源代码?(答:联合解析看过 Retrofit、Rxjava、Okhttp 等)
11、你有什么问题要问?

二面问的比拟根底,基本上也都答上来了。二面完结第二天的下午接到三面电话;

阿里三面(45 分钟)

1、自我介绍,同时问了三个我的项目的大略状况,(对混合开发那个比拟感兴趣,问了一下,其余的没有细问)
2、因为其中一个我的项目是负责人,所以问了一下我的项目的整个设计流程
3、又问了我的项目中 service 常驻的办法,(答复和二面一样,然而这次说的比拟清晰)
4、有没有理解过 Realm 的底层数据库是什么?(没有理解过)
5、他问有没有读过开源的源码?(说了一下 Retrofit 和 RxJava 的外部次要实现,这一次也答的比上一次分明多了)
6、又问了 ListView 的优化
7、网络中 Http get 和 post 的区别
8、应用哪种数据传输格局?答 Json,问还有哪些?答 Xml。还有哪些?答:不晓得
9、怎么解析 Json?(答的在线解析生成 Java 类,他示意很感兴趣)
10、怎么在非 UI 线程更改 UI?(答 handle、AsyncTask、RxJava,示意当初我根本不必 handle,间接用 RxJava。)
11、Handle 的工作原理和工作过程?(同时还说了 Handle 会造成内存透露的问题)
12、有没有理解过跨过程通信;(霎时心虚,只是简略说了一下近程 service 的创立和 AIDL 实现近程通信,这里须要感激 CSDN 的郭大神)
13、问了多线程的并发(说了两种重入锁的实现)
14、又问应用 synchronized 关键字的时候底层调用的是哪种锁?(没有理解过不分明)
15、问了一个 JavaEE 的新个性,这个不晓得也没听分明;
16、interface 中定义的变量默认的类型是什么(不加任何润饰)?(说是 default,他反诘 default,我说这是办法中变量中的类型,interface 中应该也一样吧;起初查了一下才晓得,这里是个坑,interface 只能是 public static final 的常量)
17、父类的办法是 public,子类重写后,改为 protect,会不会报错?反过来呢?
18、算法:国际象棋 8 * 8 的格子,马走“日”字,设计算法计算马如果走齐全部格子?(答的回溯法说了一下思路,起初查了根本差不多)
19、你有什么问题要问?

四面(Hr 面:30 分钟)

1. 聊聊集体的职业规划
2. 你最大的长处是什么?
3. 你有哪些方面待改良?
4. 简述你大学所做的事件
5. 说说你大学里最遗憾的事件
如果你和舍友产生了矛盾,如何解决?

之前三面的面试官说第二天会有 Hr 分割我,后果等了一个小假期才等来,这个电话是在中午打来的,Hr 面基本上是聊天,比拟轻松,聊聊以前的实习经验,聊聊我的项目经验之类的。感觉还不错。

华为

一面(60 分钟 +20 口试)

1、相熟哪种语言
2、算法题最大公共前缀。
3、如何学习一门语言
4、讲讲汇合类(讲了 List、Map 等次要实现类,底层数据结构主要参数次要办法)
5、synchronized 润饰代码块以及办法的区别;synchronized reentrantlock 等重入锁以及 readwritelock 的区别?
6、根本数据类型为什么还有包装类
7、如何避免超卖
8、成就最大的我的项目(讲了实习负责整个算法的部署,以及找到新的框架)
9、理解的数据结构或者算法,以及在理论中的利用
10、进一步诘问排序算法原理,何为稳固不稳固,快排是否稳固
11、问了下如何对待开发和测试之间的关系,测试的意义,开发是否须要进行测试的培训

二面(5 分钟 +20 分钟)

1、自我介绍
2、hashMap 介绍下
3、数据库整体,如何优化(加索引)
4、而后没什么问题了 来做做题吧
5、Leetcode 1143 和 1701 第一道很快做进去了,面试官让说下思路而后感觉没啥问题,问我要不要反诘什么。(反诘面试官评估和学习倡议:没给评估,只说转开发没什么关系,放弃学习就能够。)

三面(30+12 分钟)

1、自我介绍
2、较量经验
3、奖学金
4、挑一个最有成就感的经验(较量或者社团)
5、社团,你学到什么,什么最有成就感
6、实习中的播种
7、对艰苦奋斗,长期艰苦奋斗怎么看

面试总结

学习倡议
  • 多看源码,包含 Java 层的代码在 JVM 中的实现源码:如 synchronized 的实现源码,Android Framework 的源码更好意识 Android 层的实现,Android 开源库源码(OKHttp,Retrofit,RxJava,EventBus,Glide,Gson…,更好的学习优良开源库源码,做到用的熟,懂原理);
  • 多问本人为什么,比方两个技术点优缺点别离在哪,各自的应用场景(如单例模式下饿汉与懒汉的优缺点,应用场景),这样能力更符合理论利用开发,针对不同场景应用不同技术点;
  • 及时复盘总结面试中遇到的问题,分为两方面,一是晓得但不能深刻的,这种须要持续多看多总结,另一种是没接触过的,这种能够先理解下,万一面试又遇到了,能够答复下理解到的,之后再去深刻总结(毕竟工夫无限,不可能八面玲珑,只能一直学习总结);
学习资源分享

本人如果有想要去的大公司,肯定要晋升好本人,让本人的能力和素质与公司匹配的上,我也始终置信,机会永远是留给有筹备的人。在春招面试前我也筹备了很久,刷了很多大厂面试题,曾经整理出来分享给大家,算是一个感恩回馈吧:

那么怎么学习能力更好的进大厂呢?

无他,就是靠本人的毅力以及信心。一天不行,一个月;一个月不行,一年;有信心的人,啥学历、或者资格,那些都是借口。

不过除了毅力和信心之外,其实学习还是有效率之差的

互联网时代,其实网上有很多收费学习材料,只有你用点心,也总能找到学习材料。然而,很多时候,效率很重要,网上纵有很多收费音讯,然而 一来破费你的工夫,二来本人摸索也会踩不少坑,三是不够零碎

对于一位开发者来说,基础知识决定了能走走多远,能做多好,甚至是决定了能挣多少,尤其一些大厂十分重视根底,根底是所有的基本,很多面试时候都是问基础知识,只不过问得比拟深刻,而不只是理解,如果没有当时筹备,很容易被淘汰。整顿了一部分知识点,不便大家温习及坚固常识:

Android:(具体答案解析,点击 我的 GitHub能够看到全部内容)

1.Activity

  • Activity 的启动流程
  • onSaveInstanceState(),onRestoreInstanceState 的掉用机会
  • activity 的启动模式和应用场景
  • Activity A 跳转 Activity B,再按返回键,生命周期执行的程序
  • 横竖屏切换, 按 home 键, 按返回键, 锁屏与解锁屏幕, 跳转通明 Activity 界面, 启动一个 Theme 为 Dialog 的 Activity,弹出 Dialog 时 Activity 的生命周期
  • onStart 和 onResume、onPause 和 onStop 的区别
  • Activity 之间传递数据的形式 Intent 是否有大小限度,如果传递的数据量偏大,有哪些计划
  • Activity 的 onNewIntent()办法什么时候会执行
  • 显示启动和隐式启动
  • scheme 应用场景, 协定格局, 如何应用
  • ANR 的四种场景
  • onCreate 和 onRestoreInstance 办法中复原数据时的区别
  • activty 间传递数据的形式
  • 跨 App 启动 Activity 的形式, 注意事项
  • Activity 工作栈是什么
  • 有哪些 Activity 罕用的标记位 Flags
  • Activity 的数据是怎么保留的, 过程被 Kill 后, 保留的数据怎么复原的

2.Service

  • service 的生命周期,两种启动形式的区别
  • Service 启动流程
  • Service 与 Activity 怎么实现通信
  • IntentService 是什么,IntentService 原理,利用场景及其与 Service 的区别
  • Service 的 onStartCommand 办法有几种返回值? 各代表什么意思?
  • bindService 和 startService 混合应用的生命周期以及怎么敞开

3.BroadcastReceiver

  • 播送的分类和应用场景
  • 播送的两种注册形式的区别
  • 播送发送和接管的原理
  • 本地播送和全局播送的区别

4.ContentProvider

  • 什么是 ContentProvider 及其应用
  • ContentProvider,ContentResolver,ContentObserver 之间的关系
  • ContentProvider 的实现原理
  • ContentProvider 的长处
  • Uri 是什么

5.Handler

  • Handler 的实现原理
  • 子线程中能不能间接 new 一个 Handler, 为什么主线程能够 主线程的 Looper 第一次调用 loop 办法, 什么时候, 哪个类
  • Handler 导致的内存泄露起因及其解决方案
  • 一个线程能够有几个 Handler, 几个 Looper, 几个 MessageQueue 对象
  • Message 对象创立的形式有哪些 & 区别?Message.obtain()怎么保护音讯池的
  • Handler 有哪些发送音讯的办法
  • Handler 的 post 与 sendMessage 的区别和利用场景
  • handler postDealy 后音讯队列有什么变动,假如先 postDelay 10s, 再 postDelay 1s, 怎么解决这 2 条音讯
  • MessageQueue 是什么数据结构
  • Handler 怎么做到的一个线程对应一个 Looper,如何保障只有一个 MessageQueue,ThreadLocal 在 Handler 机制中的作用
  • HandlerThread 是什么 & 益处 & 原理 & 应用场景
  • IdleHandler 及其应用场景
  • 音讯屏障, 同步屏障机制
  • 子线程能不能更新 UI
  • 为什么 Android 零碎不倡议子线程拜访 UI
  • Android 中为什么主线程不会因为 Looper.loop()里的死循环卡死 MessageQueue#next 在没有音讯的时候会阻塞,如何复原?
  • Handler 音讯机制中,一个 looper 是如何辨别多个 Handler 的 当 Activity 有多个 Handler 的时候,怎么样辨别以后音讯由哪个 Handler 解决,解决 message 的时候怎么晓得是去哪个 callback 解决的
  • Looper.quit/quitSafely 的区别
  • 通过 Handler 如何实现线程的切换
  • Handler 如何与 Looper 关联的
  • Looper 如何与 Thread 关联的
  • Looper.loop()源码
  • MessageQueue 的 enqueueMessage()办法如何进行线程同步的
  • MessageQueue 的 next()办法外部原理
  • 子线程中是否能够用 MainLooper 去创立 Handler,Looper 和 Handler 是否肯定处于一个线程
  • ANR 和 Handler 的分割

6.View 绘制

  • View 绘制流程
  • MeasureSpec 是什么
  • 子 View 创立 MeasureSpec 创立规定是什么
  • 自定义 Viewwrap_content 不起作用的起因
  • 在 Activity 中获取某个 View 的宽高有几种办法
  • 为什么 onCreate 获取不到 View 的宽高
  • View#post 与 Handler#post 的区别
  • Android 绘制和屏幕刷新机制原理
  • Choreography 原理
  • 什么是双缓冲
  • 为什么应用 SurfaceView
  • 什么是 SurfaceView
  • View 和 SurfaceView 的区别
  • SurfaceView 为什么能够间接子线程绘制
  • SurfaceView、TextureView、SurfaceTexture、GLSurfaceView
  • getWidth()办法和 getMeasureWidth()区别
  • invalidate() 和 postInvalidate() 的区别
  • Requestlayout,onlayout,onDraw,DrawChild 区别与分割
  • LinearLayout、FrameLayout 和 RelativeLayout 哪个效率高
  • LinearLayout 的绘制流程
  • 自定义 View 的流程和注意事项
  • 自定义 View 如何思考机型适配
  • 自定义控件优化计划
  • invalidate 怎么部分刷新
  • View 加载流程(setContentView)

7.View 事件散发

  • View 事件散发机制
  • view 的 onTouchEvent,OnClickListerner 和 OnTouchListener 的 onTouch 办法 三者优先级
  • onTouch 和 onTouchEvent 的区别
  • ACTION_CANCEL 什么时候触发
  • 事件是先到 DecorView 还是先到 Window
  • 点击事件被拦挡,然而想传到上面的 View,如何操作
  • 如何解决 View 的事件抵触
  • 在 ViewGroup 中的 onTouchEvent 中生产 ACTION_DOWN 事件,ACTION_UP 事件是怎么传递
  • Activity ViewGroup 和 View 都不生产 ACTION_DOWN, 那么 ACTION_UP 事件是怎么传递的
  • 同时对父 View 和子 View 设置点击办法,优先响应哪个
  • requestDisallowInterceptTouchEvent 的调用机会

8.RecycleView

  • RecyclerView 的多级缓存机制, 每一级缓存具体作用是什么, 别离在什么场景下会用到哪些缓存
  • RecyclerView 的滑动回收复用机制
  • RecyclerView 的刷新回收复用机制
  • RecyclerView 为什么要预布局
  • ListView 与 RecyclerView 区别
  • RecyclerView 性能优化

9.Viewpager&Fragment

  • Fragment 的生命周期 & 联合 Activity 的生命周期
  • Activity 和 Fragment 的通信形式,Fragment 之间如何进行通信
  • 为什么应用 Fragment.setArguments(Bundle)传递参数
  • FragmentPageAdapter 和 FragmentStatePageAdapter 区别及应用场景
  • Fragment 懒加载
  • ViewPager2 与 ViewPager 区别
  • Fragment 嵌套问题

10.WebView

  • 如何进步 WebView 加载速度
  • WebView 与 js 的交互
  • WebView 的破绽
  • JsBridge 原理

11. 动画

  • 动画的类型
  • 补间动画和属性动画的区别
  • ObjectAnimator,ValueAnimator 及其区别
  • TimeInterpolator 插值器,自定义插值器
  • TypeEvaluator 估值器

12.Bitmap

  • Bitmap 内存占用的计算
  • getByteCount() & getAllocationByteCount()的区别
  • Bitmap 的压缩形式
  • LruCache & DiskLruCache 原理
  • 如何设计一个图片加载库
  • 有一张十分大的图片, 如何去加载这张大图片
  • 如果把 drawable-xxhdpi 下的图片挪动到 drawable-xhdpi 下,图片内存是如何变的。
  • 如果在 hdpi、xxhdpi 下搁置了图片,加载的优先级。如果是 400800,10801920,加载的优先级。

13.mvc&mvp&mvvm

  • MVC 及其优缺点
  • MVP 及其优缺点
  • MVVM 及其优缺点
  • MVP 如何治理 Presenter 的生命周期,何时勾销网络申请

14.Binder

  • Android 中过程和线程的关系, 区别
  • 为何须要进行 IPC, 多过程通信可能会呈现什么问题
  • Android 中 IPC 形式有几种、各种形式优缺点
  • 为何新增 Binder 来作为次要的 IPC 形式
  • 什么是 Binder
  • Binder 的原理
  • Binder Driver 如何在内核空间中做到一次拷贝的?
  • 应用 Binder 进行数据传输的具体过程
  • Binder 框架中 ServiceManager 的作用
  • 什么是 AIDL
  • AIDL 应用的步骤
  • AIDL 反对哪些数据类型
  • AIDL 的要害类,办法和工作流程
  • 如何优化多模块都应用 AIDL 的状况
  • 应用 Binder 传输数据的最大限度是多少,被占满后会导致什么问题
  • Binder 驱动加载过程中有哪些重要的步骤
  • 零碎服务与 bindService 启动的服务的区别
  • Activity 的 bindService 流程
  • 不通过 AIDL,手动编码来实现 Binder 的通信

15. 内存透露 & 内存溢出

  • 什么是 OOM & 什么是内存透露以及起因
  • Thread 是如何造成内存泄露的,如何解决?
  • Handler 导致的内存泄露的起因以及如何解决
  • 如何加载 Bitmap 避免内存溢出
  • MVP 中如何解决 Presenter 层以避免内存透露的

16. 性能优化

  • 内存优化
  • 启动优化
  • 布局加载和绘制优化
  • 卡顿优化
  • 网络优化

17.Window&WindowManager

  • 什么是 Window
  • 什么是 WindowManager
  • 什么是 ViewRootImpl
  • 什么是 DecorView
  • Activity,View,Window 三者之间的关系
  • DecorView 什么时候被 WindowManager 增加到 Window 中

18.WMS

  • 什么是 WMS
  • WMS 是如何治理 Window 的
  • IWindowSession 是什么,WindowSession 的创立过程是怎么的
  • WindowToken 是什么
  • WindowState 是什么
  • Android 窗口大略分为几种?分组原理是什么
  • Dialog 的 Context 只能是 Activity 的 Context,不能是 Application 的 Context
  • App 应用程序如何与 SurfaceFlinger 通信的 View 的绘制是如何把数据传递给 SurfaceFlinger 的
  • 共享内存的具体实现是什么
  • relayout 是如何向 SurfaceFlinger 申请 Surface
  • 什么是 Surface

19.AMS

  • ActivityManagerService 是什么?什么时候初始化的?有什么作用?
  • ActivityThread 是什么?ApplicationThread 是什么? 他们的区别
  • Instrumentation 是什么?和 ActivityThread 是什么关系?
  • ActivityManagerService 和 zygote 过程通信是如何实现的
  • ActivityRecord、TaskRecord、ActivityStack,ActivityStackSupervisor,ProcessRecord
  • ActivityManager、ActivityManagerService、ActivityManagerNative、ActivityManagerProxy 的关系
  • 手写实现简化版 AMS

20. 系统启动

  • android 系统启动流程
  • SystemServer,ServiceManager,SystemServiceManager 的关系
  • 孵化利用过程这种事为什么不交给 SystemServer 来做,而专门设计一个 Zygote
  • Zygote 的 IPC 通信机制为什么应用 socket 而不采纳 binder

21.App 启动 & 打包 & 装置

  • 利用启动流程
  • apk 组成和 Android 的打包流程
  • Android 的签名机制,签名如何实现的,v2 相比于 v1 签名机制的扭转
  • APK 的装置流程

22. 序列化

  • 什么是序列化
  • 为什么须要应用序列化和反序列化
  • 序列化的有哪些益处
  • Serializable 和 Parcelable 的区别
  • 什么是 serialVersionUID
  • 为什么还要显示指定 serialVersionUID 的值?

23.Art & Dalvik 及其区别

  • Art & Dalvik 及其区别

24. 模块化 & 组件化

  • 什么是模块化
  • 什么是组件化
  • 组件化长处和计划
  • 组件独立调试
  • 组件间通信
  • Aplication 动静加载
  • ARouter 原理

25. 热修复 & 插件化

  • 插件化的定义
  • 插件化的劣势
  • 插件化框架比照
  • 插件化流程
  • 插件化类加载原理
  • 插件化资源加载原理
  • 插件化 Activity 加载原理
  • 热修复和插件化区别
  • 热修复原理

26.AOP

  • AOP 是什么
  • AOP 的长处
  • AOP 的实现形式,APT,AspectJ,ASM,epic,hook
  • jectpack
  • Navigation
  • DataBinding
  • Viewmodel
  • livedata
  • liferecycle

28. 开源框架

  • Okhttp 源码流程,线程池
  • Okhttp 拦截器,addInterceptor 和 addNetworkdInterceptor 区别
  • Okhttp 责任链模式
  • Okhttp 缓存怎么解决
  • Okhttp 连接池和 socket 复用
  • Glide 怎么绑定生命周期
  • Glide 缓存机制, 内存缓存,磁盘缓存
  • Glide 与 Picasso 的区别
  • LruCache 原理
  • Retrofit 源码流程, 动静代理
  • LeakCanary 弱援用,源码流程
  • Eventbus
  • Rxjava

Java:(具体答案解析,点击 我的 GitHub能够看到全部内容)

1.HashMap

  • HashMap 原理
  • HashMap 中 put()如何实现的
  • HashMap 中 get()如何实现的
  • 为什么 HashMap 线程不平安
  • HashMap1.7 和 1.8 有哪些区别
  • 解决 hash 抵触的时候,为什么用红黑树
  • 红黑树的效率高,为什么一开始不必红黑树存储
  • 不必红黑树,用二叉查找树能够不
  • 为什么阀值是 8 才转为红黑树
  • 为什么进化为链表的阈值是 6
  • hash 抵触有哪些解决办法
  • HashMap 在什么条件下扩容
  • HashMap 中 hash 函数怎么实现的,还有哪些 hash 函数的实现形式
  • 为什么不间接将 hashcode 作为哈希值去做取模, 而是要先高 16 位异或低 16 位
  • 为什么扩容是 2 的次幂
  • 链表的查找的工夫复杂度是多少
  • 红黑树

2.ArrayList

3.Jvm

  • Jvm 的内存模型, 每个外面都保留的什么
  • 类加载机制的几个阶段加载、验证、筹备、解析、初始化、应用、卸载
  • 对象实例化时的程序
  • 类加载器, 双亲委派及其劣势
  • 垃圾回收机制

4. 多线程

  • Java 中创立线程的形式,Callable,Runnable,Future,FutureTask
  • 线程的几种状态
  • 谈谈线程死锁,如何无效的防止线程死锁?
  • 如何实现多线程中的同步
  • synchronized 和 Lock 的应用、区别, 原理;
  • volatile,synchronized 和 volatile 的区别?为何不必 volatile 代替 synchronized?
  • 锁的分类,锁的几种状态,CAS 原理
  • 为什么会有线程平安?如何保障线程平安
  • sleep()与 wait()区别,run 和 start 的区别,notify 和 notifyall 区别, 锁池, 期待池
  • Java 多线程通信
  • 为什么 Java 用线程池
  • Java 中的线程池参数, 共有几种

5. 注解

  • 注解的分类和底层实现原理
  • 自定义注解

6. 反射

  • 什么是反射
  • 反射机制的相干类
  • 反射中如何获取 Class 类的实例
  • 如何获取一个类的属性对象 & 结构器对象 & 办法对象
  • Class.getField 和 getDeclaredField 的区别,getDeclaredMethod 和 getMethod 的区别
  • 反射机制的优缺点

7. 泛型

8. 设计模式

正文完
 0