前言
一眨眼又到到了5月份了,金三银四转瞬即逝,到这个时候,没有找到工作的我们都应该反思一下自己,这些天都做了什么?之前的面试总结了吗?我们接下来应该怎么做。
虽然新冠疫情的已经过去不少时间,但是还是有很多程序员都失业了,不少公司倒闭,现在更多的公司依旧不景气。导致今年的互联网环境太差,需要自己有足够的知识储备,才能够应对这凌冽的寒风。
在这里我自己整理了一下在科大讯飞面试中的一、二、三面被问到的问题,现在分享给大家,希望能帮助到各位求职的小伙伴。
一面
一面问的问题大多是开放性问题,主要是看个人思路吧。
1.手撕依赖关系树扫描算法(期间提了不重复扫描、优化时间复杂度等要求)
2.简述如何实现未知长度的数组翻转?
3.简述内存泄漏,你处理过哪些内存泄漏?
4.以100ms/张的间隔时间播放100张图片,且每张图片需要400ms进行加载,如何设计?
5.如何在无序数组中快速找到最小值(手撕二分查找算法)
6.简述Android中的ANR,以及为什么会出现ANR?
7.简述Handler消息机制(深挖内部实现原理)
二面
1.手撕一个有序数组的二分查找算法
2.列举一个你在实际项目中所进行的性能优化(深挖具体细节)。
3.简述单例模式的实现方式,且单例模式有什么优缺点?
4.简述Java的异常处理机制
5.多线程间如何进行信息通信?
6.多线程如何保证线程安全?
7.简述线程池
8.简述HashMap实现机制,如何解决HashMap的线程安全问题?
9.TCP和UDP的区别,分别有哪些应用场景?
10.简述七层网络模型
11.简述Android点击事件的分发机制
12.画一个BLE APP的功能架构图
三面
三面相当于是综面和HR面和在一起了,主要问题也是分两个模块。
业务类问题:
1.手绘Class间依赖关系图
2.聊聊如何处理并发编程
3.手撕消费者模型代码,主要线程安全、队列等情况。
4.简述Android系统的类加载机制
5.Activity的生命周期通过什么机制来通知?
HR类问题:
1.聊聊个人的职业规划
2.你最大的优点是什么?
3.你有哪些方面待改进?
4.简述你大学所做的事情
5.说说你大学里最遗憾的事情
如果你和舍友产生了矛盾,如何处理?
文末
更多的最新Android中高级面试题汇总+解析扫码免费领取!
![](https://i-blog.csdnimg.cn/blog_migrate/6fdb4e5d7ed8e6e34116063d53f5bfc1.png)
由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要 Android中高级面试必知必会 完整文档的可以加微信 即可免费领取!(承诺:100%免费)
接下来我们针对【字节跳动】、【腾讯】、【阿里巴巴】一线互联网大厂等最新收集整理 Android 中高级面试展开的完整面试题
一. Android面试相关
1.Activity
● 说下Activity生命周期
● Activity A 启动另一个Activity B 会调用哪些方法?如果B是透明主题的又或则是个DialogActivity呢
● 说下onSaveInstanceState()方法的作用 ? 何时会被调用?
● Activity的启动流程
● onSaveInstanceState(),onRestoreInstanceState的掉用时机
● activity的启动模式和使用场景
● Activity A跳转Activity B,再按返回键,生命周期执行的顺序
● 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的 Activity,弹出Dialog时Activity的生命周期
● onStart 和 onResume、onPause 和 onStop 的区别
● Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案
● Activity的onNewIntent()方法什么时候会执行
● 显示启动和隐式启动
● scheme使用场景,协议格式,如何使用
● ANR 的四种场景
● onCreate和onRestoreInstance方法中恢复数据时的区别
● activty间传递数据的方式
● 跨App启动Activity的方式,注意事项
● Activity任务栈是什么
● 有哪些Activity常用的标记位Flags
● Activity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的
2.Service
● service 的生命周期,两种启动方式的区别
● Service的两种启动方式?区别在哪
● 如何保证Service不被杀死 ?
● Service与Activity怎么实现通信
● IntentService是什么,IntentService原理,应用场景及其与Service的区别
● Service 的 onStartCommand 方法有几种返回值?各代表什么意思?
● bindService和startService混合使用的生命周期以及怎么关闭
● 用过哪些系统Service ?
● 了解ActivityManagerService吗?发挥什么作用
3.BroadcastReceiver
● 广播的分类和使用场景
● 广播的两种注册方式的区别
● 广播发送和接收的原理
● 本地广播和全局广播的区别
4.ContentProvider
● 什么是ContentProvider及其使用
● ContentProvider的权限管理
● ContentProvider,ContentResolver,ContentObserver之间的关系
● ContentProvider的实现原理
● ContentProvider的优点
● Uri 是什么
5.Handler
● Handler的实现原理
● 子线程中能不能直接new一个Handler,为什么主线程可以主线程的Looper第一次调用loop方法,什么时候,哪个类
● Handler导致的内存泄露原因及其解决方案
● 一个线程可以有几个Handler,几个Looper,几个MessageQueue对象
● Message对象创建的方式有哪些 & 区别?
● Message.obtain()怎么维护消息池的Handler 有哪些发送消息的方法
● Handler的post与sendMessage的区别和应用场景
● handler postDealy后消息队列有什么变化,假设先 postDelay 10s, 再postDelay 1s, 怎么处理这2条消息
● MessageQueue是什么数据结构
● Handler怎么做到的一个线程对应一个Looper,如何保证只有一个MessageQueue ThreadLocal在Handler机制中的作用
● HandlerThread是什么 & 好处 &原理 & 使用场景
● IdleHandler及其使用场景
● 消息屏障,同步屏障机制
● 子线程能不能更新UI
● 为什么Android系统不建议子线程访问UI
● Android中为什么主线程不会因为Looper.loop()里的死循环卡死
● MessageQueue#next 在没有消息的时候会阻塞,如何恢复?
● Handler消息机制中,一个looper是如何区分多个Handler的
● 当Activity有多个Handler的时候,怎么样区分当前消息由哪个Handler处理
● 处理message的时候怎么知道是去哪个callback处理的
● Looper.quit/quitSafely的区别
● 通过Handler如何实现线程的切换
● Handler 如何与 Looper 关联的
● Looper 如何与 Thread 关联的
● Looper.loop()源码
● MessageQueue的enqueueMessage()方法如何进行线程同步的
● MessageQueue的next()方法内部原理
● 子线程中是否可以用MainLooper去创建Handler,Looper和Handler是否一定处于一个线程