写点什么

10 天拿到字节跳动 Android 岗位 offer,2021 金三银四

发布于: 2 小时前

1.要做一个尽可能流畅的 ListView,你平时在工作中如何进行优化的?

①Item 布局,层级越少越好,使用 hierarchyview 工具查看优化。②复用 convertView③使用 ViewHolder④item 中有图片时,异步加载⑤快速滑动时,不加载图片⑥item 中有图片时,应对图片进行适当压缩⑦实现数据的分页加载

2.对于 Android 的安全问题,你知道多少

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

3. 如何缩减 APK 包大小?

代码


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


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


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


资源


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


生成 APK 的时候,aapt 工具本身会对 png 做优化,但是在此之前还可以使用其他工具如 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 操作或者阻塞主线程中的其他事情

最后

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。



开源分享:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》


欢迎大家一起交流讨论啊~

用户头像

VX:vip204888 领取资料 2021.03.16 加入

还未添加个人简介

评论

发布
暂无评论
10天拿到字节跳动Android岗位offer,2021金三银四