前言
每个程序员都拥有大厂梦,我也不例外。2017年,我从本科毕业,在面试大厂不断碰壁后最终选择进入了一家小型的互联网公司工作,一待就是三年。在小厂呆久了,整个人都会变得懈怠,互联网行业日新月异,稍微跟不上步伐就会被淘汰。于是我决定再拼一把!
我开始努力加强技术,提升自我,最终成功接到阿里、京东、腾讯、拼多多等十多家大厂的面试邀约,并且都比较顺利的通过了前期面试,拿到了腾讯和京东的offer。以下,我将把我的个人面试经历以及近年来大厂常见整体整理出来分享给需要的伙伴们!!
(文末有详细的免费领取方式,有需要的朋友可以到文末查看领取方式)
下面进入正文:
框架梳理
- Activity
- Broadcast Receiver
- Service
- ContentProvider
- Intent
- Listview
- Fragment
- Java基础
- 性能优化
- 屏幕适配+AIDL
- AIDL
- 动画
- 事件处理
- 经验
——————————————————————————
Activity
1、什么是 Activity?
2、请描述一下 Activity 生命周期
3、请描述一下Activity的四个状态
4、两个 Activity 之间传递数据,除了 intent,广播接收者,content provider 还有啥?
5、Android 中的 Context, Activity,Appliction 有什么区别?
6、Context 是什么?
7、如何保存 Activity 的状态?
8、横竖屏切换时 Activity 的生命周期
9、两个 Activity 之间跳转时必然会执行的是哪几个方法?
10、如何将一个 Activity 设置成窗口的样式
11、Activity 的四种启动模式,singletop 和 singletask 区别是什么?
12、Activity 的四种启动模式,一般书签的使用模式是 singletop,那为什么不使用 singletask?
13、如何退出 Activity ?如何安全退出已调用多个 Activity 的Application?
14、Activity-Window-View三者的关系
Broadcast Receiver
1.如何注册 BroadcastReceiver
2.Android 引入广播机制的用意
3.两种注册各有什么优缺点
4.广播的类型
5.BrocastReceiver 里能否进行耗时操作
6.描述一下广播 BroadcastReceiver 的理解
7.BrocastReceiver 的生命周期和注意事项
Service
1.Activity 怎么和 Service 绑定,怎么在 Activity 中启动自己对应的Service?
2.描述一下 Service 的生命周期
3.Activity、Intent、Service 是什么关系
4.Service 是否在 main thread 中执行, service 里面是否能执行耗时的操作?
5.Service 和 Activity 在同一个线程吗
6.Service 里面可以弹吐司么?
7.在 service 的生命周期方法 onstartConmand()可不可以执行网络操作?
8.什么是 Service 以及描述下它的生命周期。Service 有哪些启动方法,有什么区别,怎样停用 Service?
9.什么是 IntentService?有何优点?
ContentProvider
1.请介绍下 Android 的数据存储方式
2.如何使用ContentProvider进行批量操作?
3.说说 ContentProvider、ContentResolver、ContentObserver 之间的关系
4.介绍下 ContentProvider 是如何实现数据共享的
5.为什么要用 ContentProvider?它和 sql 的实现上有什么差别?
Intent
1.请描述一下 Intent 和 IntentFilter
2.Intent 传递数据时,可以传递哪些类型数据?
3.Serializable 和 Parcelable 的区别
4.隐式、显式Intent的区别
Listview
1.当 ListView 数据集改变后,如何更新 ListView
2.ListView 如何实现分页加载
3.如何刷新 ListView 中单个 item 的数据,不刷新整个 ListView 的数据?
4.上拉加载和下拉刷新怎么实现?
5.ListView 中如何优化图片?
6.Listview里有Button点不动?
7.ListView 如何提高其效率?
8.ListView 可以显示多种类型的条目吗?
9.ListView 如何定位到指定位置?
10.如何在 ScrollView 中如何嵌入 ListView?
11.ListView 中图片错位的问题是如何产生的?
12.你知道ListView的setEmptyView方法吗?
Fragment
1.如何切换 fragement(不重新实例化)
2.Fragment 的的优点
3.Fragment 如何实现类似 Activity 栈的压栈和出栈效果
4.Fragment 的 replace 和 add 方法的区别
5.Fragment与Activity之间是如何传值的
6.Fragment生命周期
7.ViewPager对Fragment生命周期的影响
Java基础
1.什么是重载,什么是重写,有什么区别?
2.String、StringBuffer 和 StringBuilder 的区别
3.知道的设计模式有哪些
4.TCP/IP 协议簇分哪几层?TCP、IP、XMPP、HTTP、分别属于哪一层?
5.知道的设计模式有哪些
6.继承和实现的区别
7.final,finally,finalize的区别
8.int和Integer的区别
9.Java中==,equal和hashCode的区别
性能优化
1.如何对 Android 应用进行性能分析
2.什么情况下会导致内存泄露
3.内存溢出的几点原因
4.针对 static 的解决方案
5.线程导致内存溢出及解决
6.举例几种OOM 异常情况
7.如何处理图片过大导致 OOM
8.Android 中如何捕获未捕获的异常
9.ANR 是什么?怎样避免和解决 ANR(重要)
10.多线程间通信和多进程之间通信有什么不同,分别怎么实现?
11.Devik 进程,linux 进程,线程的区别
12.Android 线程间通信有哪几种方式
13.如何合理使用内存?
屏幕适配+AIDL
1.基础概念 2.适配方式
AIDL
1.什么是 AIDL 以及如何使用 2.如何工作?能处理哪些类型的数据?
动画
1、Android 中的动画有哪几类 2、动画能组合在一起使用么? 3、插值器的种类有哪些? 4.如何自定义插值器 5.如何修改 Activity 进入和退出动画
事件处理
1、Handler 机制 2、onTouch 和 onTouchEvent 有什么区别 3、子线程中能不能 new handler?为什么? 4、子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么? 5、为什么系统不建议在子线程访问UI?
其他
1.开发中都使用过哪些框架、平台
2.三级缓存的原理:
3.清除缓存是怎么做的?
4.推送的好处:
5.为什么数据要以 json 形式传输?
6.项目流程
7.自定义view关键词
8.自定义view的实现思路
9.retrofit使用
10.组件化的优势
11.插件化的优势
12.打包原理
13.安装流程
14.如何防止反编译(提高反编译难度)
15.v1,v2签名结果
16.Android与服务器交互的方式中的对称加密和非对称加密是什么?
17.进程保活方案
18.Binder机制的优势
19.URI和URL的区别
20.TLS/SSL握手
...
要注意:死背题目绝对不是有效的复习方式,一定要结合知识体系架构系统的复习,扩充和整理出一套自己的题库!!!
基础知识点掌握到85%左右时开始搜索近年的大厂面试真题,结合各个大厂对Android开发要求的偏向性有针对的进行复习。下面是我整理的大厂常见的一些问题,帮助大家查漏补缺:
面试真题
- 自定义View的流程,requestLayout和invalidate的区别
- Handler原理,Handler/Looper/MessageQueue关系
- 子线程可以运行looper吗?多次looper. prepare会不会有问题?怎么进入循环的?looper.loop的关键点?消息延迟怎么实现?延时的依据是什么?为什么?
- 事件分发机制
- 绘制为什么要二级缓冲?一级二级三级演变的原因?
- Aspectj是运行时织入还是编译时织入?
- jvm编译优化是什么意思?
- 启动优化?异步了为什么还要优化?
- 插件化原理,换肤原理,热修复原理,插件化怎么实现把apk渲染成界面的?
- mmkv一般不是做缓存的吗?为什么和启动优化有关系?
- 说下udp、tcp和socket?
- 说下http,以及http是基于tcp还是udp?为什么?
- tcp的可靠性怎么保证的?
- 数组和链表的区别?
- app点击到启动第一个activity的流程?
- 项目是MVVM还是MVP,怎么实现的?有没有引入LiveData?
- 有没有做过Socket和串口通信?
- 有没有用过kotlin?协程有了解吗?
- 有没有用过Flutter?
- 分层架构怎么理解?
- 反射的原理和应用?
- 屏幕适配使用哪个方案?有了解过AutoSize吗?
- onCreate和onPostCreate的区别(onResume和onPostResume的区别)?
- 深拷贝和浅拷贝的区别,序列化是深拷贝还是浅拷贝?
- 贝塞尔曲线怎么实现?
- Activity、Window、View的联系?
- View的绘制流程,测量模式?
- Android的两个特别重要的服务是什么时候启动的?
- start和run的区别?sleep和wait的区别?
- Thread的join方法?
- private static 方法,子类能重写吗?
- Looper.loop为什么不会导致ANR?
- dialog和activity调用getWindow获取到的对象有什么不同?
- Int可以作为线程安全的单位吗?AtomicInteger实现原理?
- Intent的使用中有遇到什么问题吗?如何解决大图传输问题?
- 双向认证的流程?
- 启动模式的应用场景?
- 熟悉的设计模式?
- 异常设计?
- 如何排查内存泄露?
- 红黑树的实现原理?怎么染色的?
- 说下常见的排序算法?
- 说下常见的集合类?
- 说下JVM的特性?
- 浏览器输入一个url点击发送后发生了什么?
- 如何显示一张大图?
- 一些多线程和JVM的问题
- 线程池的实现原理?里面的队列有了解过吗?
————————————————————————————————
现如今市场上初级程序员泛滥,像我们这种Android3-5年的人员,已经处于技术瓶颈的中年人来说,寻求突破更是重中之重。现在都说互联网寒冬,但其实只要你上对车,自身技术能力也足够强,走到哪都是香饽饽!!
最后,希望大家都能够进入心仪的公司,一起升职加薪!!