面临入学,幡然醒悟

能考上武汉大学,从高考问题来说,我不算是一个差生。但刚上大一的他因为没有及时适应短少管教的学习环境,想着大学轻易玩玩就能够了,于是自控力不强的我开始了逃课打游戏的放荡生存。后期越悠闲,前期就越苦楚。第一学期不仅挂了科,满分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.设计模式