蜜蜂职场文库 > 面试试题 >

安卓面试常见问题_安卓工程师面试题

时间: 小龙 面试试题

  安卓工程师在求职面试中,提前了解面试的常见问题很有必要,那么你知道面试常见问题了吗?下面小编已经为你们整理了安卓面试常见问题,一起来看看吧。

  安卓面试常见问题一

  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的时候,安卓面试常见问题pt工具本身会对png做优化,但是在此之前还可以使用其他工具如tinypng对图片进行进一步的压缩预处理。

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

  策略

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

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

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

  安卓面试常见问题二

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

  对称加密,就是加密和解密数据都是使用同一个key,这方面的算法有DES。

  非对称加密,加密和解密是使用不同的key。发送数据之前要先和服务端约定生成公钥和私钥,使用公钥加密的数据可以用私钥解密,反之。这方面的算法有RSA。ssh 和 ssl都是典型的非对称加密。

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

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

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

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

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

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

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

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

  安卓面试常见问题三

  1.谈谈你对Android中Context的理解?

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

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

  2.Service的onCreate回调在UI线程中吗?

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

  3.请介绍下AsyncTask的内部实现,适用的场景是?

  AsyncTask内部也是Handler机制来完成的,只不过Android提供了执行框架来提供线程池来执行相应地任务,因为线程池的大小问题,所以AsyncTask只应该用来执行耗时时间较短的任务,比如HTTP请求,大规模的下载和数据库的更改不适用于AsyncTask,因为会导致线程池堵塞,没有线程来执行其他的任务,导致的情形是会发生AsyncTask根本执行不了的问题

  4.谈谈你对binder机制的理解?

  binder是一种IPC机制,进程间通讯的一种工具.

  Java层可以利用aidl工具来实现相应的接口.

  5.Android中进程间通信有哪些实现方式?

  Intent,Binder(AIDL),Messenger,BroadcastReceiver

  6.介绍下实现一个自定义view的基本流程

  01、自定义View的属性 编写attr.xml文件

  02、在layout布局文件中引用,同时引用命名空间

  03、在View的构造方法中获得我们自定义的属性 ,在自定义控件中进行读取(构造方法拿到attr.xml文件值)

  04、重写onMesure

  05、重写onDraw

  
看了“安卓面试常见问题”

49552