写点什么

「大厂 Android 面试解析」20 道面试灵魂拷问题,论程序员成长的正确姿势

用户头像
Android架构
关注
发布于: 刚刚
2 、对于 Android 的安全问题,你知道多少

①错误导出组件② 参数校验不严③WebView 引入各种安全问题,webview 中的 js 注入④不混淆、不防二次打包⑤明文存储关键信息⑦ 错误使用 HTTPS⑧山寨加密方法⑨滥用权限、内存泄露、使用 debug 签名

3 、如何缩减 APK 包大小?

代码


保持良好的编程习惯,不要重复或者不用的代码,谨慎添加 libs,移除使用不到的 libs。


使用 proguard 混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安装包的大小。


native code 的部分,大多数情况下只需要支持 armabi 与 x86 的架构即可。如果非必须,可以考虑拿掉 x86 的部分。


资源


使用 Lint 工具查找没有使用到的资源。去除不使用的图片,String,XML 等等。assets 目录下的资源请确保没有用不上的文件。


生成 APK 的时候,aapt 工具本身会对 png 做优化,但是在此之前还可以使用其他工


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


具如 tinypng 对图片进行进一步的压缩预处理。


jpeg 还是 png,根据需要做选择,在某些时候 jpeg 可以减少图片的体积。 对于 9.png 的图片,可拉伸区域尽量切小,另外可以通过使用 9.png 拉伸达到大图效果的时候尽量不要使用整张大图。


策略


有选择性的提供 hdpi,xhdpi,xxhdpi 的图片资源。建议优先提供 xhdpi 的图片,对于 mdpi,ldpi 与 xxxhdpi 根据需要提供有差异的部分即可。


尽可能的重用已有的图片资源。例如对称的图片,只需要提供一张,另外一张图片可以通过代码旋转的方式实现。


能用代码绘制实现的功能,尽量不要使用大量的图片。例如减少使用多张图片组成 animate-list 的 AnimationDrawable,这种方式提供了多张图片很占空间。

4 、Android 与服务器交互的方式中的对称加密和非对称加密是什么?

对称加密,就是加密和解密数据都是使用同一个 key,这方面的算法有 DES。非对称加密,加密和解密是使用不同的 key。发送数据之前要先和服务端约定生


成公钥和私钥,使用公钥加密的数据可以用私钥解密,反之。这方面的算法有 RSA。ssh 和 ssl 都是典型的非对称加密。

5 、设备横竖屏切换的时候,接下来会发生什么?

1、不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次


2、设置 Activity 的 android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次


3、设置 Activity 的 android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法

6、 Android 启动 Service 的两种方式是什么? 它们的适用情况是什么?

如果后台服务开始后基本可以独立运行的话,可以用 startService。音乐播放器就可以这样用。它们会一直运行直到你调用 stopSelf 或者 stopService。你可以通过发送 Intent 或者接收 Intent 来与正在运行的后台服务通信,但大部分时间,你只是启动服务并让它独立运行。如果你需要与后台服务通过一个持续的连接来比较频繁地通信,建议使用 bind()。比如你需要定位服务不停地把更新后的地理位置传给 UI。Binder 比 Intent 开发起来复杂一些,但如果真的需要,你也只能使用它。


startService:生命周期与调用者不同。启动后若调用者未调用 stopService 而直接退出,Service 仍会运行


bindService:生命周期与调用者绑定,调用者一旦退出,Service 就会调用 unBind->onDestroy

7 、谈谈你对 Android 中 Context 的理解?

Context:包含上下文信息(外部值) 的一个参数. Android 中的 Context 分三种,Application Context ,Activity Context ,Service Context.


它描述的是一个应用程序环境的信息,通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个 Activity,发送广播,接受 Intent 信息等

8 、Service 的 onCreate 回调在 UI 线程中吗?

Service 生命周期的各个回调和其他的应用组件一样,是跑在主线程中,会影响到你的 UI 操作或者阻塞主线程中的其他事情

9 、请介绍下 AsyncTask 的内部实现,适用的场景是?
用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
「大厂Android面试解析」20道面试灵魂拷问题,论程序员成长的正确姿势