Android茫茫半年求职路,终于斩获三个大厂offer,我总结了24家大厂100份面试题
synchronized中的类锁和对象锁互斥么?
讲下Java的双亲委派。
泛型。
反射。
注解。
由于篇幅有限,仅展示部分内容,所有的知识点 整理的详细内容都放在了我的【GitHub】,有需要的朋友自取。
2、Android
- 启动模式,以及常见用法。
①举例说明
②taskAffinity,allowTaskReparting的用法。
③有没有遇到哪些诡异的现象?如何解决的?
- Activity生命周期。
①常见生命周期方法
②A启动B的,然后按back键,执行了哪些方法?如果是A启动B的,然后按home键呢?
③onSaveInstance方法调用时机。
- Bitmap内存优化。
①Bitmap内存如何计算?如何在不改变图片质量的情况下优化?Bitmap内存复用(Options.inBitmap)
②超大图加载(BitmapRegionDecoder)
③跨进程传递大图(Bundle#putBinder)
xhdpi的图片分别显示到hdpi和xxhdpi的手机上,显示的大小和内存是怎样的?
资源文件加载规则。比如说图片存放在drawable-hdpi和drawable-xxhdpi下,xhdpi的手机会加载哪张?如果删除掉drawable-xxhdpi下的图片呢?
Android的进程间通信方式。
①Android为何要自己搞一个binder,使用linux原有的通信方式不行么?(安全、性能好,方便易用)
②binder通信的内存大小限制。(1M和128k)
③binder的架构(Application、ServiceManager、系统Service、binder驱动),以获取系统服务的过程举例分析。
④Application#onCreate里面可以使用binder服务么(可以)?Application的binder机制是何时启动的(zygote在fork好应用进程后,会给应用启动binder机制)?binder机制启动的几个关键步骤。
⑤binder线程池默认最大数量(15)?
⑥binder和AIDL。
⑦oneway。
谈谈你对Android中Context的理解?四大组件里面的Context都来源于哪里。
Application启动流程。
①AMS是如何确认Application启动完成的?关键条件是什么(zygote返给AMS的pid;应用的ActivityThread#main方法中会向AMS上报Application的binder对象)?
②Application#constructor、Application#onCreate、Application#attach他们的执行顺序(132)。Activity和Service呢?
startActivity的具体过程。
Activity#setContentView的具体过程。
①PhoneWindow是何时创建的,它的作用是什么?
②setContentView中传递的资源文件是如何变成View对象的?
③布局文件对应的View对象是添加到哪里的?
④Activity的布局是何时显示出来的?
⑤ViewRootImpl是何时初始化的?它的作用是什么?
⑥Choreography了解么?作用是什么?
Surface的作用是什么?它是何时初始化的?View绘制的数据是如何显示到屏幕上的?
Handler机制:
①应用层,消息的发送、接收、获取和处理;消息是如何存储的?延时消息一定准时么?是如何保证延时时间的?Handler#dispatchMessage细节,如何使用?
②Handler的Framework层。Looper#loop方法为何不会导致ANR?nativePollOnce细节。eventfd和epoll机制了解么?
③IdleHandler了解么?合适调用?如何使用?靠谱么?
④handler里面消息有几种?普通消息、同步消息、消息屏障。如何使用?如何区分普通消息和异步消息?
⑤如何实现给Handler发送一个Runnable,又不通过Handler#post(Runnable run)这个API?(Message#obj属性,或者通过反射设置Message#callback属性)
⑥Message#obtain实现细节了解么?为何要池化?最大限制容量是多少?
ThreadLocalMap的实现。
View绘制流程
①onMeasure、onLayout、onDraw
②MeasureSpec为何如此设计?
③子View的LayoutParams来源。ViewGroup#addView(view)这种添加view的方式,没有给子View设置LayoutParams,那么LayoutParams是谁设置的?
④onMeasure和onLayout为何会执行两次或多次?
⑤View#draw方法细节。
⑥View绘制这一块遇到过什么问题么?如何解决的。
自定义View有哪几种方式?注意事项。你对自定义属性如何理解?
事件分发。滑动冲突如何解决,具体在哪个方法里面解决?如何判断滑动方向?
Apk打包流程。R文件最终会生成什么文件?aapt的作用是什么?
LocalBroadcastReceiver,为何比BroadCastReceiver速度快,LocalBroadcastReceiver的实现。
RecyclerView的缓存。RecyclerView的优势是哪些?都用它做过什么功能?
讲下leakCanary原理。为什么不用虚引用?引用队列里面存的是什么?内存数据是如何dump出来的?
讲下OkHttp的实现。拦截器的顺序,网络拦截器和普通拦截器有什么区别?它的线程池是怎样的?如何管理的?
glide的三级缓存如何做的?
rxjava的原理。rxjava的线程切换如何实现的?map和flatmap操作符区别;zip和merge操作符区别。
ArrayMap和SparseArray的作用和实现细节。
组件化和模块化的区别。
mvp、mvvm。
jetpack组件。
gradle中task的生命周期。
插件化原理。
热修复原理。
由于篇幅有限,仅展示部分内容,所有的知识点 整理的详细内容都放在了我的【GitHub】,有需要的朋友自取。
3、Android性能优化
启动速度优化。冷启动、温启动、热启动了解么。
内存优化
卡顿优化
网络优化
数据库优化
内存泄漏优化
包体积优化
有需要的朋友【点击我】免费获取。
4、http相关
描述一个完整的网络请求流程。
TCP和UDP区别,三次握手与四次挥手的细节;为何建立链接需要三次,断开链接却需要四次。
http和https区别。https的链接过程?
断线续传如何实现。大图分段上传如何实现。关键步骤
分段下载如何实现。
请求重试机制如何实现。
5、设计模式
你熟悉哪些设计模式?请举例说明。为何选用这个设计模式。
策略模式和桥接模式的区别
6、kotlin
说一下kotlin的优缺点。let和with的区别
扩展函数
kotlin的lateinit和by lazy的区别
构造函数有哪几种
协程
7、flutter
flutter的isolate
flutter的优势和劣势
flutter的channel通信方式有哪几种?
flutter的包体积优化
flutter中State的生命周期,didUpdateWidget方法何时调用
8、项目相关
选一个你最熟悉的项目讲解下。
讲一下你的技术栈
你最自豪的项目或者片段
你最擅长哪些部分
你的上份工作经历中,最大的收获是什么?
你的职业规划
面试进行时
1、滴滴
一面
1、View绘制流程。onMeasure、onLayout、onDraw。
2、竖向的TextView如何实现。TextView文字描边效果如何实现。
3、事件分发。冲突解决。
4、动画
5、RecyclerView的特点和缓存
6、SparseArray和ArrayMap。具体实现原理和特性
7、说一下kotlin的优缺点。let和with的区别
8、接口和抽象类的区别,接口中可以有属性么?
9、用过哪些设计模式?策略模式和桥接模式的区别
10、多线程如何实现?有哪些方式?
11、线程池的参数
12、你如何自己实现一个LRUCache?Android里面的LRUCache是如何实现的?
13、synchronized和volatile的区别?为何不用volatile替代synchronized?类锁和对象锁互斥么?
14、gcroot的类型
15、jvm的运行时数据结构。栈帧中会有什么异常?方法区里面存放的是什么数据?
16、动态代理的实现。
17、Gradle的实现,gradle中task的生命周期。
18、Aop、AspectJ、ASM了解么
19、组件化和模块化的区别。ARouter的缺点。
20、MVP、MVVM的优缺点,jetpack中的组件
21、okhttp源码。
22、glide缓存
23、你对flutter的理解
二面
1、react的单向数据流
2、redux的状态管理,如何实现的?关键角色有哪些?
3、flutter的channel通信有哪几种?你用的哪种?插件你如何实现的?
4、flutter的包体积优化
5、自定义View的关键步骤,注意事项,你的理解
6、MeasureSpec讲一下
7、包体积优化
8、混淆的步骤和原理
9、module间的资源文件merge后,生成过多的R文件,处理过么?如何处理?
10、Bitmap内存大小,注意事项,如何优化
11、启动速度优化
12、glide中对Bitmap做了哪些操作?三级缓存?为何在有了内存缓存后,还要持有ActivityRef这个呢?
13、gradle声明周期,task,插件
14、注解:Source和Class、Runtime注解的区别
15、卡顿优化
16、内存泄漏检测及优化
17、RecyclerView的缓存,局部刷新用过么?
18、List的滑动卡顿如何优化
19、Activity中的Window的初始化和显示过程
20、Application中可以显示Dialog么?为什么?
21、泛型擦除,为何会有擦除?擦除的时机。通配符。
下面这段代码有问题么?有什么问题?为何会有这个问题?
List<? extends Object> list = new ArrayList<>();
list.add(123);
Object obj = list.get(0);
22、synchronized的同步原语
23、锁的几种状态
24、Android热修复原理,tinker的patch文件如何生成,patch文件是全部加载dex文件首部么?
25、插件化原理
26、两个用单链表表示的大数相加,求他们的和。单链表元素的值为0~9。
三面
1、选一个你的项目讲一下
2、技术选型是如何做的
3、优化内存
4、上传的重试机制
5、OOM和内存泄漏
6、包体积优化
7、你最擅长的点
8、你的职业规划
2、度娘
晚上八点半,在雨中打着伞接到电话,进行电话面试,一面就挂了。
Bitmap 使用时候注意什么?
Oom 是否可以try catch ?
内存泄露如何产生?
适配器模式,装饰者模式,外观模式的异同?
ANR 如何产生?
String buffer 与string builder 的区别?
如何保证线程安全?
java四中引用
Jni 用过么?
多进程场景遇见过么?
关于handler,在任何地方new handler 都是什么线程下
sqlite升级,增加字段的语句
bitmap recycler 相关
强引用置为null,会不会被回收?
glide 使用什么缓存?
Glide 内存缓存如何控制大小?
如何保证多线程读写文件的安全?
面试官声音略显慵懒疲惫……我怀疑他是不是面了太多人已经麻木了
3、京东物流
一面
1、模块化,组件化,开发中要点有哪些。组件间如何去除强依赖。
2、Android11有没有适配
3、flutter中State的生命周期,didUpdateWidget方法何时调用
4、包体积如何优化
二面
1、上家公司期间你的技术亮点,期间遇到什么问题,如何解决的,原理深挖。
2、View的绘制流程。MeasureSpec,关键方法,
3、LRU如何实现的?LinkedHashMap如何实现的?LinkedHashMap是否线程安全?如何实现线程安全?有序还是无序?
4、ThreadLocal干嘛的?用法和原理。
5、HashMap讲一下,数据结构、hash过程、扩容、加载因子为何是0.75等。
6、Handler讲一下。Message#what的不同值,会影响Message在MessageQueue中的顺序么?
7、讲下Java的双亲委派
8、插件化和热更新原理
9、讲一下锁,synchronized和Lock。CAS原理
10、事件分发
三面
1、对vue的掌握程度
2、现有项目情况
3、包体积优化细节
4、画现有项目的架构图
5、后端交互过程中有遇到什么难以解决的问题么?如何解决的。
6、讲下你觉得最好或者最自豪的项目
四面
1、讲下hashmap;链表转红黑树的限制为何是8;红黑树的时间复杂度;红黑树转链表的限制为何是6;current hashmap在所有情况下都是线程安全的吗?hashtable呢?
2、synchronized实现。非静态方法A和B在同一个类中,方法A用synchronized修饰,当A方法因为多线程请求有线程阻塞在对象锁上的时候,B方法的访问受不受影响?
3、既然泛型有编译期类型擦除,那么运行时无法获取到具体类型;而反射能在运行时获取到Class的类型;它们一个获取不到,一个可以获取到,这不就是矛盾么?请解释下细节。
4、在同一个手机上,如果把drawable-xxhdpi下的图片移动到drawable-xhdpi下,图片内存是如何变的,解释原理。如果在drawable-hdpi、drawable-xxhdpi下放置了
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
图片,但是手机是xhdpi的,会优先加载哪个,加载优先级是怎样的?如果是400_800,1080_1920这种呢,会如何查找?xhdpi和400*800同时存在时,会如何查找?布局文件呢?
5、图片内存优化;
6、Handler机制。MessageQueue中的Message是如何排列的?Msg的runnable对象可以外部设置么,比如说不用Handler#post系列方法(反射可以实现);
7、application中持有静态的用户信息,有何缺点?如何改进?
8、mvp和mvvm,jetpack
4、字节跳动
一面
1.插件化。启动activity的hook方式。taskAffity。
2.okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称
3.handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。
4.阻塞是怎么实现的?为什么不会阻塞主线程?
5.求二叉树中两个节点之间的最大距离。
6.206含义,未修改资源是哪个,302含义,301含义
7.多进程通信问题。binder优势。aidl生成的java类细节。多进程遇到哪些问题?
8.动态代理传入的参数都有哪些?非接口的类能实现动态代理吗?ASM的原理
9.Application和Activity在Context的继承树上有何区别?二者使用上有何不同?
10.任意一颗二叉树,求最大节点距离
二面
Android茫茫半年求职路,终于斩获三个大厂offer,我总结了24家大厂100份面试题相关推荐
- 硕士毕业半年的茫茫社招路
作者丨胡津铭@知乎 来源丨https://zhuanlan.zhihu.com/p/377154343 编辑丨CVer 原文发在这里. https://github.com/conanhujinmin ...
- android开发学习之路——连连看之加载图片(三)
正如前面AbstractBoard类的代码中看到的,当程序需要创建N个Piece对象时,程序会直接调用ImageUtil的getPlayImages()方法去获取图片,该方法将会随机从res\ dra ...
- 三非本科渣渣2年面试100场成“面霸”,春招补招终斩获大厂offer,这样的Android体系面试必备!
关注我的一个读者,在春招补招中顺利上岸,拿到了大厂 offer,我一直在强调:意识 + 打法是努力的前提. 拿到大厂 offer 再回来感谢的人,以及愿意分享自己这段经历的人,都是真正在我文章中受益的 ...
- 基于Android的招聘求职网站的设计与实现
毕业设计 基于Android的招聘求职网站的设计与实现 1.课题意义及目标 在二十一世纪求职方式跟以前是不同的,与在各个用人单位和招聘会上寻找理想的工作,基于安卓的招聘系统能够提供最好的最丰富及时的招 ...
- 【坎坷求职路】:选择大于努力!一名六次反复经历失败的应届生,最后一刻跻身阿里如愿以偿
背景 一个广州非985/211普通本科生,计算机科学与技术专业.以前老是梦想能考一个厉害一点的学府,学习物理专业(因为初中和高中对物理比较有兴趣),无奈高考考得不尽人意.来到了计算机专业,才知道有C语 ...
- 2021工资翻倍指南:Android面经,历时一个半月,斩获3个大厂offer
历时一个半月,斩获3个大厂offer(京东.新浪.滴滴),这里进行下简单的总结,希望能帮助到大家. 总体来说,面试一般都是基于你的简历来进行的,一般先考察你的基础,然后考察你知识体系的完备程度,接着会 ...
- 从阿里到网易,一位非985/211本科应届生的一年求职路
之所以会想写下这篇文章,是因为最近身边很多同学朋友在春招中挣扎,有的放弃,有的坚持. 我很想对放弃者说"坚持下去吧,会有收获!". 我还记得一年前我春招的时候,有一位工作室的学长A ...
- Android(Xamarin)之旅(三)
Android(Xamarin)之旅(三) 原文:Android(Xamarin)之旅(三) 前面两篇说到了Xamarin的安装和一些简单的控件,今天来说说一些对话框和提示信息,以及简单的布局元素. ...
- android开发学习之路——连连看之游戏逻辑(五)
GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...
最新文章
- 最常见的 35 个 Python 面试题及答案
- 计算机管理未指定错误,win10系统计算机管理打不开显示有“未指定的错误”的方案介绍222...
- Android中Intent传递Object和ArrayListObject对象---笔记
- R语言基础入门(3)之数据类型与相应运算1
- DataList项模板中的div在后台得到方法
- 【configure】如何用automake、autoconf指令生成configure并创建自己的linux tar.gz安装包【初级篇:简单建立-测试】
- React-Router 4 两个常用路由变量
- java中通过反射得到StatusBarManager
- C# 数组、ArrayList、List、Dictionary的用法与区别
- SYSTEM 表空间管理及备份恢复
- C#读写文本文件,字符串截取
- 网站后台目录扫描工具Dirbuster和御剑(脚本小子的最爱)
- 【无捆绑,可修改主页】系统之家 win7 32位64位极度纯净版系统(每月更新)
- psp模拟器完美字库_安卓PSP模拟器评测:假面骑士超巅峰英雄
- 俄油与中石油达成为期10年的协议;苏伊士完成股东联合体收购,苏冰岚履职首席执行官 | 能动...
- [Poi2012]Rendezvous
- OSPF路由协议及工作原理(一)
- android怎么加矩形框,Android shape 矩形框子
- 创建第一个phpstorm项目(phpstorm+Apache)
- U盘损坏,无法识别等问题处理方法
热门文章
- ADS(Authenticated data structure)
- ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年02月22日更新
- Matlab拟合幂律分布
- 《文明6》引言科普 引言出处讲解 【转】
- 站长付个人微信支付宝收款系统如何对接?
- 大学我都是自学走来的,这些私藏的实用工具/学习网站我贡献出来了,建议收藏精品推荐
- win7系统任务栏管理器
- Linux远程控制音乐播放,总结一下linux远程控制方法
- 颜色的前世今生9·HSV色彩空间之父——匠白光
- 火狐浏览器修改默认搜索引擎和添加搜索引擎