我毕业走出学校已有五年了,真想在回到大学时代,去谈一场轰轰烈烈的恋爱…… 而不会像当初是一个没人疼没人爱的独身狗!

在这个五年的时光里,我始终在Android 行业摸爬滚打,待过的公司差不多有五六家了,待得最久的一家时长如同是一年多,根本都是中大型的公司。在进入这些公司前,少不了的必定是面试环节,而在这些年内去面试的公司也比拟多。如何要说具体多少家公司的话,说实话我本人也记得不是很分明了。然而近一年中我去面试的公司,我是有所简略的记录。

想在金三银四面试的这个季度,通过这篇文章分享给大家做个参考,失败和胜利的面经案例都有,咱们一起往下看吧。

面试后期筹备

置信大家在面试前都会一个备战的预习期,因为大家都想把Offer拿到手,而后本人进行去筛选公司,这个周期的长短不宜过长。其实在这个期间最重要的是,给本人做好一份优质的简历,HR或者面试官第一眼见的就是你的简历,从简历中进行筛选确定是否告诉你来面试,这个是最要害的一步。二就是对本人简历中所记录熟知的技术点和我的项目进行温习,从网络下来找相干的面试题进行刷。还有就是回忆之前做的我的项目中遇到的一些问题,本人是如何去解决,这个是面试官跟你聊我的项目中可能会问到的。

面试过程(不分工夫先后)

小米(三面)

一面

两个面试官(一个咱们小组Android的leader,一个是共事),上来先当着他们的面写了一个口试题(都是很根底的题没啥难度,算法题也就是一个list的反转,然而小米比拟重视手写代码的一些细节,所以要思考好该判空的判空,还有避免越界啥的问题),而后就开始问,90%都在问Java根底(GC的机制,GC算法,内存相干的问的比拟多,多线程线程平安问题是如何产生的,HashMap的原理)

二面

咱们组的主管(全程聊我的项目,没有问技术相干的了,而后介绍了一下这个部门的工作内容啊之类的)

三面:

原本应该有三面…三面是咱们部门的领导,然而因为一些其余的起因吧,三面就没有面间接过了

感触:

其实自已算是运气好,遇到的问题算是偏容易的,要多看看算法方面的视频

腾讯音乐(5次技术面)

面试内容:

1.activity和service的生命周期与应用场景

2.thread和服务的差异,单例的类型,多少种?优缺点说一下死锁的起因,与场景,单例的应用场景

3.应用过啥起源框架,有啥特点,为什么,从中学到了什么。

4.kotlin的特点与java的差异,

5.三种架构的区别handler和view的原理,

6.线程池原理与品种

7.javastackoverflow的起因

8.性能优化和卡顿优化的理论案例

9.虚拟机的形成与原理

10.热修复和插件化的区别与原理

11.rxjava源码

12.多线程应该留神的问题

13.databinding原理

14.binder原理

15.网络方面常识

16.平时解决问题的流程

感触:

把握基础知识很重要,算法也有问到,还有就是开放式问题,他想晓得我怎么解决问题的一个过程,怎么发现和定位,平时学习的办法。


美团

1.java的话static变量各种拜访可见性,final关键字的作用,封装继承多态开展问,多线程通信,线程池原理,线程同步形式,jvm内存模型,常见的gc算法,类加载过程

2.网络的话次要是问的https,http1/2/3的区别个性 Android问了一些常见的handler原理,recycleview缓存机制,view事件的散发

3.glide缓存机制

4.而后引申如何实现我LRU。内存泄露和如何预防解决,

5.算法的话,有top-k排序(堆排序,位图法),旋转输入矩阵,链表逆序,hashmap concurrenthashmap原理,线程安不平安,它的锁机制等等


华捷艾米(根底面)

1.冒泡排序,堆排序算法
2.均衡二叉树和红黑树的区别
3.多线程,用过哪些并发api?踩过哪些坑?
4.C++的 指针和援用的区别
5.手写对赋值运算符重载
6.GC 会不会把所有线程暂停?
7.GC不同期间有何区别?
8.说一下Handler Looper的休眠机制
9.设计一个算法,已知某年某月某日是星期几,求另外年月日对应的星期几。

厦门美图

1.多线程

2.handler

3.网络申请

4.性能优化

5.view绘制

6.opengl局部

7.camera相干

8.自定义view

9.asyncTask

10.图片加载框架原理


汇丰银行

1.线程池的工作原理 2.synchronized锁办法和锁静态方法有什么区别
3.锁的了解,什么是乐观锁,乐观锁,可重入锁。
4.View的事件散发流程
5.View的三种测量模式了解,什么时候会产生Excatly
6.HashMap的工作原理。
7.怎么实现多线程下载,断点续传怎么实现。
8.rxjava的背压理解吗
9.kotlin的协程,怎么做到和rxjava的zip操作一样,期待所有后果后再解决。

盒马生鲜

1.bitmap在内存中的大小计算
2.零碎级的全局异样如何捕捉打印堆栈?
3.APT技术原理(这个竟然忘了?)
4.如何中断一个线程?AsyncTask如何中断?(加标记位中断)
5.CoordinatorLayout滑动机制?两个CoordinatorLayout嵌套如何通过事件散发传递解决滑动?父View中嵌套子View,疾速滑动fling状态,如何解决在父View到顶部进行滑动,子View持续滑动?
6.Flutter热重载原理
7.组件化用了什么技术?实现原理是什么?
8.如何剖析主线程中的音讯队列耗时状况
9.绘制优化、APP启动优化,activity跳转启动速度优化?(网络申请可不可以放在setContentView之前?)
10.如何实现旋转动画?(帧动画、属性动画、gif、Lottie动画框架)
11.GC分代回收介绍?Eden和survivor为什么是8:1?老年代存活下来的会进入永恒代么?
12.如何批改JVM内存调配?(AS中在vmoptions批改,gradle.properties) 13.Android9.0暗藏的属性办法是咋反射获取的 (原理居多)

小红书

(1)concurrentHashMap 如何加锁的
(2)measure参数详解,view设置wrap不起作用
(3)Bind service,如何实现保活
(4)两个过程act,如何放慢启动速度 
(5)性能优化(面试官老插嘴,都说不上话) 
(6)Eventbus如何实现线程的切换 
(7)jetpack的Navigation的xml援用,在什么时候调用的?
(8)Inflater.inflate如何实现xml转java的(framework),办法中的各个参数含意。

京东(凉经)

(1)如何设计模块,组件,sdk,如何思考
(2)说说你我的项目的架构,为何这么设计或这么思考
(3) 说说内存透露,越多越好
(4) 说说你的技术难点,如何解决,如何思考
(5)apk平安,你如何思考
(6)act+fragment的齐全生命周期(不是单个说哦)
(7)京东北辰:recyclerView源码,必会,包含缓存如何实现,哪几个缓存,运作流程等;各种notifyXX的原理,触发哪些重绘;如何实现下半局部item不挪动,上半局部的item高度变动的实现?

探探(凉经)

(1)手拖动View,手松开后实现一个泡泡破裂的动画成果(实质是view事件散发机制+动画选型,散发机制哪个办法解决什么参数,之后怎么触发动画成果等,问的灰常具体,吐了) 
(2) 自定义view相干,invalidate,postInvalidate,requestLayout,深刻的说说framework层的流程原理
(3)kotlin 协程深层原理如何实现的
(4)dcl是否线程平安?哪一块出问题,为什么volatile能实现避免指令重排,指令级别如何实现的,对象的创立过程等(多家都问了,很深刻)

shopee基金

shopee一面:

1.java的四种援用剖析
2.synchronize和volatile各自的机制是怎么的
3.handler源码原理相干的问题
4.自定义view的绘制,事件散发机制,怎么解决滑动抵触,activity启动的过程
5.https单向认证,对称加密和非对称加密,在浏览器输出url产生了什么
6.jvm相干,如new一个对象的过程产生了什么,垃圾回收机制
7..问了对于线程池的一些问题
8.跨过程通信有什么计划
9.binder机制
10.hashmap源码
11.用什么计划放大apk体积
12.recyclerview和listview比照
13.做过什么内存优化,性能优化
14.okhttp源码设计原理
15.手写一道算法题,对于DFS+回溯算法的

shopee二面:

1.问了之前的一些我的项目经验,在团队做了什么,次要负责哪一块,抉择一两块本人认为做得最好的开展讲讲,过程中会打断问问题
2.有没有做过插件化,做到什么水平,讲讲原理
3.因为我之前我的项目有用到mvvm和jetpack,问了一些jetpack组件相干的源码,和mvvm跟mvp的比照
4.又问了okhttp,缓存拦截器原理是怎么的
5.我的项目中做过什么性能优化,具体说说
6.平时我的项目中用到什么设计模式,挑几个罕用讲讲
7.聊人生聊职业规划

WPS

1.线程切换(handler机制)
2.多线程,几种锁,有什么区别
3.如何实现线程排队
4.Https加密机制
5.我的项目教训
6.Okhttp原理 7.设计一个线上日志收集零碎
8.我的项目教训
9.Activity启动流程
10.性能优化
11.Viewstub实现原理,本人设计一个相似的
12.Https如何保障平安的,如何避免中间人攻打,能够伪造证书吗
13.Looper死循环为什么不会导致主线程卡死
14.epoll机制是怎么样子的
15.热修复资源id抵触怎么解决
16.AIDL如何实现的
17.Binder原理

字节跳动

一面:

1.SharedPreferences线程平安吗
2.SharedPreferences多过程调用会有问题吗?如果须要多过程调用,怎么实现
3.本人在我的项目代码中写一个java.lang.String类会有问题吗
4.内存透露除了用LeakCanary还有没有其余方法检测
5.如何监控线上内存透露
6.native的内存透露怎么监控
7.如何监控线上OOM,如何晓得是哪里造成的OOM
8.Error和Exception的区别
9.怎么监控利用中的线程,都是在哪创立的(AOP)
10.post一个提早5秒的音讯,怎么做到5秒后才执行的
11.同步屏障原理
12.ContentProvider初始化的机会
13.组件化-A组件要调用B组件的某个性能,怎么调用(答复了接口下沉,AutoService等等)
14.组件化-如果不必接口下沉,没有任何依赖,怎么不便的调用(不让用反射,太麻烦)
15.A过程调用B过程的b办法(AIDL实现的,B过程有个服务),B过程没有创立的状况下,B过程中是b办法先执行还是Application的onCreate办法先执行?16.如果b办法很耗时,A过程会被阻塞住吗
17.算法:写一个二叉树的层序遍历
18.数据库的索引原理
19.B+树和二叉树的区别,性能比照
20.HashMap的毛病,怎么解决
21.ArrayMap的原理,为什么内存耗费低
22.flutter与其余跨平台计划比照,flutter为什么好(除了跨平台),跟原生的性能比怎么样
23.硬件加速的原理

二面:

1.触摸事件中的cancel事件什么时候触发
2.handler延时音讯怎么实现的
3.主线程有好多handler,散发音讯的时候怎么晓得给哪个handler
4.主线程每5秒钟发一个须要执行10秒的音讯到子线程,会产生什么
5.实现了AIDL接口的服务的办法是运行在哪个线程?有多个办法,是不是运行在同一个线程?
6.Binder通信中,客户端调用服务端是阻塞的吗?怎么做到不阻塞?
7.bitmap的像素数据在哪里?始终申请bitmap会oom吗?
8.view的绘制刷新机制是怎么样的?vsync信号收回后怎么触发绘制逻辑的?
9.页面静止的时候,onDraw会执行吗?vsync信号会发吗?
10.vsync信号收回的时候,怎么管制需不需要onDraw?
11.用canvas怎么绘制一个倒影
12.对canvas做矩阵变换的matrix有哪些参数配置
13.做过哪些性能相干的优化
14.怎么剖析anr问题
15.如果是死锁导致的anr,在日志上怎么看
16.利用启动速度怎么优化
17.没有内存透露的状况下,利用占用内存比业内其余利用内存要多,怎么剖析优化
18.布局层级太多怎么优化
19.页面内有一些不须要每次都显示的view,怎么优化
20.recyclerview外面的图片显示速度比较慢,怎么优化
21.做过的最简单的我的项目
22.工作几年中本身晋升比拟大的中央
23.JavaScript中bind,call,apply的区别
24.RxJava中的背压是什么意思
25.flutter有理解吗
26.最近有学习什么
27.mvvm与mvp的区别
28.装璜模式和代理模式的区别

三面:

1.介绍在上一家公司做的app,app的crash率是多少
2.具体介绍最有技术难度的我的项目
3.利用crash的实质起因是什么
4.重写和重载的区别,利用场景
5.hybrid开发中遇到了什么问题
6.线性布局和绝对布局那个性能更优
7.js和java之间传递大对象会怎么样,怎么保障传输性能
8.activity横竖屏切换会产生什么?怎么防止

其实还有几家小型公司的面试,我就不在此一一的阐明了,因为文章篇幅长度无限,所以就筛选了几个本人感觉面的还不错的公司进行跟大家分享,大家能够参考这些面试题,去进行记录学习,可能对你未来面试是有帮忙的。

举荐分享

之前在做面试筹备的时候,从网上查找收集整理了一些 Android 开发相干的学习文档、面试题、Android 外围笔记等等文档,进行刷题温习 Android 相干的常识,通过这次的面试成果检测,也体验出了后果。这次面试能通过一半起因是本人的技术还过的去,另一半的起因就是排汇了这些学习文档精髓。

所以我想拿进去跟大家进行分享,心愿能帮忙到大家学习晋升,在面试中能顺利通过。如有须要参考的能够点击这里即可收费获取