阿克苏地区建设局网站,wordpress模板添加主题,初学者怎么制作平面图,高埗东莞微信网站建设写在前面
1月初失业#xff0c;找了近2个多月的工作了#xff0c;还没找到心仪的工作#xff0c;感觉心好慌#xff0c;不知道该怎么办了#xff1f;找不到工作的时候压力很大#xff0c;有人说自信会很受打击#xff0c;还有人说会很绝望#xff0c;是人生的低谷………写在前面
1月初失业找了近2个多月的工作了还没找到心仪的工作感觉心好慌不知道该怎么办了找不到工作的时候压力很大有人说自信会很受打击还有人说会很绝望是人生的低谷……尽管很多时候我们自己知道我不是找不到工作只是找不到理想中的好工作。但这也不能改变你的空白期正在一天一天变长不妥协的那份坚定正在一天一天动摇的事实。
朋友推荐给我这份文档狂刷五遍之后最近刚刚获得字节跳动等多家公司的offer今天将这份文档分享给大家希望正在找工作或准备找工作的朋友都可以获得自己心仪公司的offer。
正文如下
Activity面试题Fragment面试题Service面试题Broadcast Receiver面试题WebView面试题Binder面试题Handler面试题AsyncTask面试题HandlerThread面试题IntentService面试题视图工作机制面试题事件分发机制面试题ListView面试题Android项目构建面试题由于篇幅太长今天就先分享到这里ANR面试题OOM面试题Bitmap面试题UI卡顿面试题内存泄漏面试题内存管理面试题冷启动和热启动面试题其他优化面试题架构模式面试题插件化面试题热更新面试题进程保活面试题Lint面试题Kotlin面试题
Activity面试题
1、Activity是什么
Activity是四大组件之一它提供一个界面让用户点击和各种滑动操作这就是Activity
2、Activity四种状态
runingpausedstoppedkilled
3、Activity生命周期
onCreate()onStart()onResume()onPause()onStop()onDestroy()onRestart()
4、进程的优先级
空进程后台进程服务进程可见进程前台进程
5、Activity任务栈
先进后出
6、Activity启动模式
standardsingletopsingletasksingleinstance
7、scheme跳转协议
Android中的scheme是一种页面内跳转协议通过定义自己的scheme协议可以跳转到app中的各个页面
服务器可以定制化告诉app跳转哪个页面App可以通过跳转到另一个App页面可以通过H5页面跳转页面
Fragment面试题
1、Fragment为什么被称为第五大组件
Fragment比Activity更节省内存其切换模式也更加舒适使用频率不低于四大组件且有自己的生命周期而且必须依附于Activity
2、Activity创建Fragment的方式
静态创建动态创建
3、FragmentPageAdapter和FragmentPageStateAdapter的区别 FragmentPageAdapter在每次切换页面的的时候是将Fragment进行分离适合页面较少的Fragment使用以保存一些内存对系统内存不会多大影响 FragmentPageStateAdapter在每次切换页面的时候是将Fragment进行回收适合页面较多的Fragment使用这样就不会消耗更多的内存
4、Fragment生命周期
onAttach()onCreate()onCreateView()onActivityCreated()onStart()onResume()onPause()onStop()onDestroyView()onDestroy()onDetach()
5、Fragment的通信
Fragment调用Activity中的方法getActivityActivity调用Fragment中的方法接口回调Fragment调用Fragment中的方法FragmentManager.findFragmentById
6、Fragment的replace、add、remove方法
replace替代Fragment的栈顶页面add添加Fragment到栈顶页面remove移除Fragment栈顶页面
Service面试题
1、Service是什么
Service是四大组件之一它可以在后台执行长时间运行操作而没有用户界面的应用组件
2、Service和Thread的区别 Service是安卓中系统的组件它运行在独立进程的主线程中不可以执行耗时操作。Thread是程序执行的最小单元分配CPU的基本单位可以开启子线程执行耗时操作 Service在不同Activity中可以获取自身实例可以方便的对Service进行操作。Thread在不同的Activity中难以获取自身实例如果Activity被销毁Thread实例就很难再获取得到
3、Service启动方式
startServicebindService
4、Service生命周期
startService onCreate()onStartCommand()onDestroy() bindService onCreate()onBind()onUnbind()onDestroy()
Broadcast Receiver面试题
1、Broadcast Receiver是什么
Broadcast是四大组件之一是一种广泛运用在应用程序之间传输信息的机制通过发送Intent来传送我们的数据
2、Broadcast Receiver的使用场景
同一App具有多个进程的不同组件之间的消息通信不同App之间的组件之间的消息通信
3、Broadcast Receiver的种类
普通广播有序广播本地广播Sticky广播
4、Broadcast Receiver的实现 静态注册注册后一直运行尽管Activity、进程、App被杀死还是可以接收到广播 动态注册跟随Activity的生命周期
5、Broadcast Receiver实现机制
自定义广播类继承BroadcastReceiver复写onReceiver()通过Binder机制向AMS进行注册广播广播发送者通过Binder机制向AMS发送广播AMS查找符合相应条件的广播发送到BroadcastReceiver相应的循环队列中消息队列执行拿到广播回调BroadcastReceiver的onReceiver()
6、LocalBroadcastManager特点
本地广播只能在自身App内传播不必担心泄漏隐私数据本地广播不允许其他App对你的App发送该广播不必担心安全漏洞被利用本地广播比全局广播更高效以上三点都是源于其内部是用Handler实现的
WebView面试题
1、WebView安全漏洞
API16之前存在远程代码执行安全漏洞该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法远程攻击者可通过使用Java反射机制利用该漏洞执行任意Java对象的方法
2、WebView销毁步骤
WebView在其他容器上时如LinearLayout当销毁Activity时需要在onDestroy()中先移除容器上的WebView然后再将WebView.destroy()这样就不会导致内存泄漏
3、WebView的jsbridge
客户端和服务端之间可以通过Javascript来互相调用各自的方法
4、WebViewClient的onPageFinished
WebViewClient的onPageFinished在每次完成页面的时候调用但是遇到未加载完成的页面跳转其他页面时就会一直调用使用WebChromeClient.onProgressChanged可以替代
5、WebView后台耗电
在WebView加载页面的时候会自动开启线程去加载如果不很好的关闭这些线程就会导致电量消耗加大可以采用暴力的方法直接在onDestroy方法中System.exit(0)结束当前正在运行中的java虚拟机
6、WebView硬件加速
Android3.0引入硬件加速默认会开启WebView在硬件加速的情况下滑动更加平滑性能更加好但是会出现白块或者页面闪烁的副作用建议WebView暂时关闭硬件加速
7、WebView内存泄漏
由于WebView是依附于Activity的Activity的生命周期和WebView启动的线程的生命周期是不一致的这会导致WebView一直持有对这个Activity的引用而无法释放解决方案如下 独立进程简单暴力不过可能涉及到进程间通信推荐 动态添加WebView对传入WebView中使用的Context使用弱引用
Binder面试题
1、Linux内核的基本知识 进程隔离/虚拟地址空间进程间是不可以共享数据的相当于被隔离每个进程被分配到不同的虚拟地址中 系统调用Linux内核对应用有访问权限用户只能在应用层通过系统调用调用内核的某些程序 binder驱动它负责各个用户的进程通过binder通信内核来进行交互的模块
2、为什么使用Binder
性能上相比传统的Socket更加高效安全性高支持协议双方互相校验
3、Binder通信模型 Service服务端通过Binder驱动在ServiceManager的查找表中注册Object对象的add方法 Client客户端通过Binder驱动在ServiceManager的查找表中找到Object对象的add方法并返回proxy的add方法add方法是个空实现proxy也不是真正的Object对象是通过Binder驱动封装好的代理类的add方法 当Client客户端调用add方法时Client客户端通过Binder驱动将proxy的add方法请求ServiceManager来找到Service服务端真正对象的add方法进行调用
4、AIDL 客户端通过aidl文件的Stub.asInterface()方法拿到Proxy代理类 通过调用Proxy代理类的方法将参数进行封包后调用底层的transact()方法 transact()方法会回调onTransact()方法进行参数的解封 在onTransact()方法中调用服务端对应的方法并将结果返回
Handler面试题
1、Handler是什么
Handler通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueue
2、Handler使用方法
post(runnable)sendMessage(message)
3、Handler工作原理
4、Handler引起的内存泄漏
原因非静态内部类持有外部类的匿名引用导致Activity无法释放
解决
Handler内部持有外部Activity的弱引用Handler改为静态内部类Handler.removeCallback()
AsyncTask面试题
1、AsyncTask是什么
它本质上就是一个封装了线程池和Handler的异步框架
2、AsyncTask使用方法
三个参数 Params表示后台任务执行时的参数类型该参数会传给AysncTask的doInBackground()方法 Progress表示后台任务的执行进度的参数类型该参数会作为onProgressUpdate()方法的参数 Result表示后台任务的返回结果的参数类型该参数会作为onPostExecute()方法的参数
五个方法 onPreExecute()异步任务开启之前回调在主线程中执行 doInBackground()执行异步任务在线程池中执行 onProgressUpdate()当doInBackground中调用publishProgress时回调在主线程中执行 onPostExecute()在异步任务执行之后回调在主线程中执行 onCancelled()在异步任务被取消时回调
3、AsyncTask工作原理
4、AsyncTask引起的内存泄漏
原因非静态内部类持有外部类的匿名引用导致Activity无法释放
解决
AsyncTask内部持有外部Activity的弱引用AsyncTask改为静态内部类AsyncTask.cancel()
5、AsyncTask生命周期
在Activity销毁之前取消AsyncTask的运行以此来保证程序的稳定
6、AsyncTask结果丢失
由于屏幕旋转、Activity在内存紧张时被回收等情况下Activity会被重新创建此时旧的AsyncTask持有旧的Activity引用这个时候会导致AsyncTask的onPostExecute()对UI更新无效
7、AsyncTask并行or串行 AsyncTask在Android 2.3之前默认采用并行执行任务AsyncTask在Android 2.3之后默认采用串行执行任务 如果需要在Android 2.3之后采用并行执行任务可以调用AsyncTask的executeOnExecutor()
HandlerThread面试题
1、HandlerThread产生背景
当系统有多个耗时任务需要执行时每个任务都会开启一个新线程去执行耗时任务这样会导致系统多次创建和销毁线程从而影响性能。为了解决这一问题Google提供了HandlerThreadHandlerThread是在线程中创建一个Looper循环器让Looper轮询消息队列当有耗时任务进入队列时则不需要开启新线程在原有的线程中执行耗时任务即可否则线程阻塞
2、HanlderThread的特点、
HandlerThread本质上是一个线程继承自ThreadHandlerThread有自己的Looper对象可以进行Looper循环可以创建HandlerHandlerThread可以在Handler的handlerMessage中执行异步方法HandlerThread优点是异步不会堵塞减少对性能的消耗HandlerThread缺点是不能同时继续进行多任务处理需要等待进行处理处理效率较低HandlerThread与线程池不同HandlerThread是一个串行队列背后只有一个线程。
IntentService面试题
1、IntentService是什么
IntentService是继承自Service并处理异步请求的一个类其内部采用HandlerThread和Handler实现的在IntentService内有一个工作线程来处理耗时操作其优先级比普通Service高。当任务完成后IntentService会自动停止而不需要手动调用stopSelf()。另外可以多次启动IntentService每个耗时操作都会以工作队列的方式在IntentService中onHandlerIntent()回调方法中执行并且每次只会执行一个工作线程
2、IntentService使用方法
创建Service继承自IntentService覆写构造方法和onHandlerIntent()方法在onHandlerIntent()中执行耗时操作
小结
有了这么多优秀的开发工具可以做出更高质量的Android应用。
当然了“打铁还需自身硬”想要写出优秀的代码最重要的一点还是自身的技术水平不然用再好的工具也不能发挥出它的全部实力。
在这里我也分享一份大佬自己收录整理的Android学习PDF架构视频面试文档源码笔记还有高级架构技术进阶脑图、Android开发面试专题资料高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中每个知识点专题都配有相对应的实战项目可以有效的帮助大家掌握知识点。
总之也是在这里帮助大家学习提升进阶也节省大家在网上搜索资料的时间来学习也可以分享给身边好友一起学习
造方法和onHandlerIntent()方法
在onHandlerIntent()中执行耗时操作
小结
有了这么多优秀的开发工具可以做出更高质量的Android应用。
当然了“打铁还需自身硬”想要写出优秀的代码最重要的一点还是自身的技术水平不然用再好的工具也不能发挥出它的全部实力。
在这里我也分享一份大佬自己收录整理的Android学习PDF架构视频面试文档源码笔记还有高级架构技术进阶脑图、Android开发面试专题资料高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中每个知识点专题都配有相对应的实战项目可以有效的帮助大家掌握知识点。
总之也是在这里帮助大家学习提升进阶也节省大家在网上搜索资料的时间来学习也可以分享给身边好友一起学习
如果你有需要的话可以点击这里领取