写点什么

这些面试题你会吗?月薪 20k+ 的 Android 面试都问些什么?面试必问

发布于: 2021 年 02 月 21 日

前言


工欲善其事必先利其器!在现代 IT 中,每个 Android 程序员都需要最好的工具来提高他们的技能和效率。在 Android 应用程序开发这个残酷的竞争行业中,只有优秀的程序员才能生存下去。你需要向客户展示你拥有的最佳技术和能力。


不仅仅是展示你的设备以吸引客户,还要确保你的 Android 应用程序在高效的时间内以最高质量构建。那么哪些是最好的 Android 开发者工具?有很多选择,但并非所有工具都足够好。在不浪费任何时间的情况下,让我们来看看以下的 Android 应用开发工具。


面经分享


我是那边的朋友帮忙内推的,简历通过后电话约的面试。


当时约的是 10:30 的面试时间,我提前了二十机分钟左右到达公司楼下。公司楼层有点复杂,花了十分钟左右到目的地(约的食堂)。


第一轮是两个面试官轮流问问题。第一面大约面了一个小时到了 11:40 差不多到饭点了。面完我就准备走了,两个面试官要我等会,然后就直接去叫二面的面试官了,我就在食堂看大家吃饭。


大约等了十几分钟第二面的面试官把我叫到了 31 楼。


也是两个面试官,轮流问了大概一个小时。二面后就差不多到了下午一点,面试官带我去食堂吃了个饭,然后帮我约了下午两点的 HR 面。


整个流程下来挺爽的,总共三轮面试,两轮技术面(都是 2 个面试官),一轮 HR 面。


技术一面


  1. 常 见 的 Activity 类 型+描述 Activity 生命周期 Activity 从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回 调方法,这些回调方法包括:onCreate onStart onResume onPause onStop onDestroy 其实这些方法都是两两对应的,onCreate 创建与 onDestroy 销毁; onStart 可见与 onStop 不可见;onResume 可编辑(即焦点)与 onPause。。

  2. 两个 Activity 之间跳转时必然会执行的是哪几个方法?一般情况下比如说有两个 activity,分别叫 A,B,当在 A 里面激活 B 组件的时候, A 会调用 onPause()方法,然后 B 调用 onCreate() ,onStart(), onResume()。 这个时候 B 覆盖了窗体, A 会调用 onStop()方法. 如果 B 是个透明的,或者 是对话框的样式, 就不会调用 A 的 onStop()方法。

  3. 系统是怎么帮我们启动找到桌面应用的我说通过意图,他说怎么找到是哪个意图? 我说 PMS 会解析所有 apk 的 AndroidManifest.xml ,如果解析过会存到 package.xml 中不会反复解析,PMS 有了它就能找到了。

  4. 横竖屏切换时 Activity 的生命周期跟清单文件里的配置有关系。不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生 命周期默认首先销毁当前 activity,然后重新加载。 设置 Activity android:configChanges="orientation|keyboardHidden|screenSize"时,切 屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法。 通常在游戏开发, 屏幕的朝向都是写死的。

  5. 屏幕适配的处理技巧都有哪些手机自适应主要分为两种情况:横屏和竖屏的切换,以及分辨率大小的不同。

  6. 网络优化的问题同一个 ip 同一个端口能复用一个连接,后面问道了 http 2.0 的多路复用,我说一个 tcp 可以多个请求,原理呢?我说不知道。后面让我说了下 https 。

  7. 快排和递归

  8. 数组和链表的区别


技术二面


1.存储数据的几种方式:SharePreference、数据库、文件


2.使用安卓数据库时,有哪些生命周期方法:onCreate、onUpgrade


3.如果要给数据库增加字段,需要怎么做?


  • 方法 1:通过 alter table add column 来做

  • 方法 2:先给旧表改名,然后建一张新表包含新的字段,再将旧表数据迁移过去,最后删除旧表


4.数据库读写是线程安全的吗?


  • 读操作是线程安全的:多个线程或进程读取同一个数据库的内容,是可以的。

  • 写操作多个线程操作会抛异常(我感觉这里不能直接说线程不安全吧,因为 SqlLite 确实是有锁机制的):在多进程或多线程中使用 sqlite,同时操作同一个数据库的话,会导致异常抛出。不同线程或实例化多个 SqliteOpenhelper 来操作同一个数据库,也会导致同样的问题。但不同线程使用同一个 sqliteopenhelper 来获取 SqliteDatabase 进行操作的话,是可以的。


5.SharePreference 的实现原理,是不是线程安全的,apply 和 commit 有什么区别?


commit 方法是有一个 boolean 的返回值,当数据变化进行存储时是一个原子性的操作,当两个 editor 对象同时对一个共享的 preferences 参数进行操作时,永远都是最后一个调用 commit 方法的 editor 变更了最后的数据值。


apply 方法是没有返回值的,当两个 editor 同时对 preferences 对象编辑时,也是最后一个调用 apply 方法的对象编辑数据。apply 的提交操作也是原子性的,但是只提交到内存,速度更快。


6.Handler 机制


7.HashMap、HashTable、ConcurrentHashMap 的原理


8.计算机网络五层模型


9.http 状态码


10.你遇到的最难解决的问题? 我说我们公司项目没有采用动态加载框架,但是后面集成 U3D 项目需要动态加载,但只需要用到 so 和资源动态加载,功能上第三库也不支持我们的需求,我就自己硬着头皮看了各大版本的源码,支持动态修复替换加载 so 和 assets 资源动态修复加载,然后把具体的细节说了一遍。


尾声


一转眼时间真的过的飞快。我们各奔东西,也各自踏上了自己的旅途,但是即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来 35 岁,40 岁从来不是危机,只要永远不要忘记自己为何踏上征程!


最后需要同款资料的,可以 私信我点击【学习】我愿意分享给你!


为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!


再次感谢所有给我提供过题目的朋友们,感谢一路有你!


用户头像

VX公众号:编程进阶路 2020.11.28 加入

还未添加个人简介

评论

发布
暂无评论
这些面试题你会吗?月薪20k+的Android面试都问些什么?面试必问