-
f. 可不可以调用Abstrut 父类的super方法
-
g. HTTP协议中POST,GET 的区别
-
h. TCP/IP协议栈 i. TCP和UDP的区别
-
j. 三次握手是什么?可以两次握手么
-
k. 进程和线程的区别
-
l. 手写ViewGroup树结构遍历
第一次面试稍微有些紧张,但总体来说发挥还是OK的
二面(1h):
-
a. ArrayList / LinkedList的区别
-
b. HashMap的底层实现原理
-
c. 两个线程分别调用同一个类的实例函数和类函数
-
d. 什么是可见性?举例场景
-
e. volatile关键字的意义
-
f.Class对象
-
g. 线程结束的方法:Interrupt之后需要做什么
-
h. Android Activity切换生命周期
-
i. Activity保存状态的函数
-
j. 子线程对UI的操作方法
-
k. 如何在应用程序远程调用中表明用户身份
-
l. 单例模式、建造者模式、中介模式
-
m. 手写中位数查找算法
中规中矩,就是Activity回答的不是很好
三面(50min):
-
a. 聊聊项目
-
b. Handler和Looper的底层结构
-
c. postRunnable方法的底层实现
-
d. Thread Run和Start的底层调用区别(是否中断陷入)
-
e. BroadCast的使用方法
-
f. Intent的使用方法
-
g. Intent-Filter
-
h. 手写外部排序
上面就是我大致的一个面试过程,能记得的面试内容就这些了,其实面试中问道的还是有很多,问的都比较全面,主要都是从自己简历上填写的项目经历问过去的,顺着还延伸的问了一些。
面试过程其实大部分时候是,面试官或者公司是主导方,大部分的节奏是跟着面试官走,但是我觉得面试其实就是一个相互探讨的过程,不仅是公司在选择你,你也在选择公司、以后工作的同事和leader。
所以我这次面试中,更多的是和面试官探讨,也会反问面试官一些问题,不仅仅是最后面试官说可以问他几个问题,在面试过程中就会询问一些,优秀的面试官会跟你探讨,并且讨论出一个合理的方案或者正确的答案,整个过程非常愉悦,相互都学习到了。
这里概括一下给同伴们的几个小建议:
1、把自身的技能练扎实,
2、找跟你过往经历匹配度非常高的岗位,
3、面试的时候充分展现你个人的软实力硬实力。
关于内推的(同公司应该是hr伙伴的良心建议):
1、内推如果长时间没动静可能是简历没过。
2、投递一些部门没过,可以再投别的部门,甚至有可能会有别的部门看到简历,然后捞起来。
3、面试会有记录,面试前充分准备最好不要留下不好的面评。
我在面试前期做了一些面试准备,全网收集了一下字节跳动今年的面试真题(含解析),希望能帮助到大家学习提升,在面试中能顺利通过。如有需要参考的可以直接去我 GitHub 访问查阅。
下面展示一下部分内容:
1.Activity
1.Activity的启动流程
2.onSaveInstanceState(),onRestoreInstanceState的掉用时机
3.activity的启动模式和使用场景
4.Activity A跳转Activity B,再按返回键,生命周期执行的顺序
5.横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的 Activity,弹出Dialog时Activity的生命周期
6.onStart 和 onResume、onPause 和 onStop 的区别
7.Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案
8.Activity的onNewIntent()方法什么时候会执行
…
2.Service
1.service 的生命周期,两种启动方式的区别
2.Service启动流程
3.Service与Activity怎么实现通信
4.IntentService是什么,IntentService原理,应用场景及其与Service的区别
5.Service 的 onStartCommand 方法有几种返回值?各代表什么意思?
6.bindService和startService混合使用的生命周期以及怎么关闭
…
3.BroadcastReceiver
1.广播的分类和使用场景
2.广播的两种注册方式的区别
3.广播发送和接收的原理
4.本地广播和全局广播的区别
4.ContentProvider
1.什么是ContentProvider及其使用
2.ContentProvider,ContentResolver,ContentObserver之间的关系
3.ContentProvider的实现原理
4.ContentProvider的优点
5.Uri 是什么
5.Handler
1.Handler的实现原理
2.子线程中能不能直接new一个Handler,为什么主线程可以
主线程的Looper第一次调用loop方法,什么时候,哪个类
3.Handler导致的内存泄露原因及其解决方案
4.一个线程可以有几个Handler,几个Looper,几个MessageQueue对象
5.Message对象创建的方式有哪些 & 区别?
Message.obtain()怎么维护消息池的
6.Handler 有哪些发送消息的方法
7.Handler的post与sendMessage的区别和应用场景
8.handler postDealy后消息队列有什么变化,假设先 postDelay 10s, 再postDelay 1s, 怎么处理这2条消息
9.MessageQueue是什么数据结构
10.Handler怎么做到的一个线程对应一个Looper,如何保证只有一个MessageQueue
ThreadLocal在Handler机制中的作用
…
6.View绘制
1.View绘制流程
2.MeasureSpec是什么
3.子View创建MeasureSpec创建规则是什么
4.自定义Viewwrap_content不起作用的原因
5.在Activity中获取某个View的宽高有几种方法
6.为什么onCreate获取不到View的宽高
7.View#post与Handler#post的区别
8.Android绘制和屏幕刷新机制原理
9.Choreography原理
10.什么是双缓冲
…
7.View事件分发
1.View事件分发机制
2.view的onTouchEvent,OnClickListerner和OnTouchListener的onTouch方法 三者优先级
3.onTouch 和onTouchEvent 的区别
4.ACTION_CANCEL什么时候触发
5.事件是先到DecorView还是先到Window
6.点击事件被拦截,但是想传到下面的View,如何操作
7.如何解决View的事件冲突
8.在 ViewGroup 中的 onTouchEvent 中消费 ACTION_DOWN 事件,ACTION_UP事件是怎么传递
9.Activity ViewGroup和View都不消费ACTION_DOWN,那么ACTION_UP事件是怎么传递的
10.同时对父 View 和子 View 设置点击方法,优先响应哪个
11.requestDisallowInterceptTouchEvent的调用时机
8.RecycleView
1.RecyclerView的多级缓存机制,每一级缓存具体作用是什么,分别在什么场景下会用到哪些缓存
2.RecyclerView的滑动回收复用机制
3.RecyclerView的刷新回收复用机制
4.RecyclerView 为什么要预布局
5.ListView 与 RecyclerView区别
6.RecyclerView性能优化
9.Viewpager&Fragment
1.Fragment的生命周期 & 结合Activity的生命周期
2.Activity和Fragment的通信方式, Fragment之间如何进行通信
3.为什么使用Fragment.setArguments(Bundle)传递参数
4.FragmentPageAdapter和FragmentStatePageAdapter区别及使用场景
5.Fragment懒加载
6.ViewPager2与ViewPager区别
7.Fragment嵌套问题
10.WebView
1.如何提高WebView加载速度
2.WebView与 js的交互
3.WebView的漏洞
4.JsBridge原理
11.动画
1.动画的类型
2.补间动画和属性动画的区别
3.ObjectAnimator,ValueAnimator及其区别
4.TimeInterpolator插值器,自定义插值器
5.TypeEvaluator估值器
12.Bitmap
1.Bitmap 内存占用的计算
2.getByteCount() & getAllocationByteCount()的区别
3.Bitmap的压缩方式
4.LruCache & DiskLruCache原理
5.如何设计一个图片加载库
6.有一张非常大的图片,如何去加载这张大图片
7.如果把drawable-xxhdpi下的图片移动到drawable-xhdpi下,图片内存是如何变的。
8.如果在hdpi、xxhdpi下放置了图片,加载的优先级。如果是400800,10801920,加载的优先级。
13.mvc&mvp&mvvm
1.MVC及其优缺点
2.MVP及其优缺点
3.MVVM及其优缺点
4.MVP如何管理Presenter的生命周期,何时取消网络请求
14.Binder
1.Android中进程和线程的关系,区别
2.为何需要进行IPC,多进程通信可能会出现什么问题
3.Android中IPC方式有几种、各种方式优缺点
4.为何新增Binder来作为主要的IPC方式
5.什么是Binder
6.Binder的原理
7.Binder Driver 如何在内核空间中做到一次拷贝的?
7.使用Binder进行数据传输的具体过程
8.Binder框架中ServiceManager的作用
…
15.内存泄漏&内存溢出
1.什么是OOM & 什么是内存泄漏以及原因
2.Thread是如何造成内存泄露的,如何解决?
最后
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
阿里P7Android高级教程
下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。
Android核心高级技术PDF资料,BAT大厂面试真题解析;
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
:特别适合有3-5年开发经验的Android程序员们学习。**
[外链图片转存中…(img-rdvdkceP-1714241600486)]
附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。
Android核心高级技术PDF资料,BAT大厂面试真题解析;
[外链图片转存中…(img-QriCnsdF-1714241600486)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!