时间过得是真TM快,回想自己是16年从学校毕业,现在是出来工作的第五个年头啦。在不同的大小公司都待过,就在前段时间顺利的完成了一次跳槽涨薪,面试了几家公司,最终选择了字节跳动。今特此前来跟大家进行分享,希望对大家有所帮助。
一面(40min):
-
a. 线程池的底层原理
-
b. 四种引用类型
-
c. JAVA GC
-
d. Sychornized关键字
-
e. 静态同步函数
-
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.什么是双缓冲
…
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
最后
光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:
这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。
由于文档内容过多,篇幅受限,只能截图展示部分
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!!!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
》]( )收录**
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算