背景
自疫情放开以来,大量公司进行裁员,广州就业环境变得非常的艰辛,称为互联网寒冬年份一点不过分。与去年每个月收到四五十场面试和十几个offer不同,今年投递大部分是未读和已读不回,岗位开放也非常地少。只收到了寥寥可数的offer。
我最终还是选择了先苟下去再说,选择了一家小企业。
忙活到现在一直没找出时间写文章,现在也总结一下,为以后找工作做个准备。
基本面试内容
Android开发的基础必须要掌握的HashMap原理/并发/JVM/动态代理/TCP三次握手四次挥手,线程最好也要掌握,再就是UI的自定义View/ViewGroup/事件分发原理/RecycleView缓存机制/原理/源码,深层次的东西无非就是Framework源码:Binder/Handler/AMS+ATMS/startActivity启动流程。其次三方库源码,别人家问你个常用网络访问框架是什么你都不知道。最后可能就是性能优化,OMM原理,Apk瘦身,常用内存泄漏检测工具,各类适配问题等等。
面试不仅仅是上面这一点内容,现在的Android开发需要你特别全能,问的不仅特别广,而且特别深,所以能多掌握就多掌握,因为你不确定面试官会问你哪些内容。
还记得有一家面试官是后端的,只问Java层面的知识点,Android方面就是说场景让你提供解决方案,其实公司Android开发用的语言是Kotlin,就是这么神奇。
Flutter
如果对 Flutter 不熟的可以去学习一波,蛮简单的基本5-10小时就能简单掌握,Dart还是比较好掌握的,毕竟了解Dart/Flutter可以增加面试机会。
经验
面试的时候语言表达还是比较重要,做好充足的准备,珍惜每一次机会,切莫焦虑,加油,你我共勉。
平台
投递平台 BOSS/猎聘,我在BOSS投了一大堆简历,在猎聘就投了几个,结果是在猎聘找到的工作,就是这么神奇。
个人面试记录问题
1.Activity生命周期(这个是必问的)
2.Fragment生命周期 (这个有可能会问到,虽然问的机率不是很大)
3.Service生命周期
4.Service启动方式(问到Service,那么一般情况下,这个也是肯定是要问到的)
5.Activity的启动方式(这个问题偶尔会问)
6.Touch事件传递机制
7.介绍下实现一个自定义View的基本流程
8.Android中的动画有哪些
9.ANR是什么?怎样避免和解决ANR
10.如何优化ListView(偶尔会问)
11.设备横竖屏切换的时候,生面周期的变化(这个偶尔会问)
12.AndroidUI的适配
13.RecyclerView和ListView的区别(这个是必问的)
14,Android异步消息处理机制(这个也会经常问到)
15.内存泄漏和内存溢出是什么?一般怎么处理内存泄漏?
16.图片加载框架有哪些?他们之间的区别是什么?(这个也是必问的)
17.熟悉哪些设计模式?
18.三级缓存(这个偶尔会问)
19.Android与服务器交互的方式中的对称加密和非对称加密是什么?
20…
以下是我总结的这200+ 道面试题,几乎都是「必考题」,都能看懂的话,如果去面试就十拿九稳了。刚开始的时候我还觉得这么做是不是帮人「作弊」的嫌疑,最后我想通了,这是一件值得去做的事儿。
就拿我们这份 Android 题来说,你如果能记住其中大部分的答案说明,第一,你很聪明并且记性还很好;第二,说明你有上进心,也愿意学习;第三,有了这份面试题做理论支撑之后,即使你的实践经验没有那么多,但懂得原理的你,做出来的程序也一定不会太差。
所以如果您是面试官,恰好又看到这里,如果条件允许的话,请多给这样愿意学又很聪明的年轻人多一些机会。
说了这么多,直奔主题,我们这份面试题,包含了十三大模块:据结构与算法、Java基础、深入泛型与注解、并发编程、虚拟机原理、反射类、网络编程、Kotlin、高级UI、Framework内核源码、组件内核、性能优化、开源框架 。如下图所示:

可能对于初学者不需要看后面的框架和 Framework模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。
适宜阅读人群
-
需要面试的初/中/高级 Android 程序员
-
想要查漏补缺的人
-
想要不断完善扩充自己 Android 技术栈的人
-
Android 面试官
具体面试题
第一章 算法和数据结构面试题
- 请说一说HashMap,SparseArrary原理,SparseArrary相比HashMap的优点、ConcurrentHashMap如何实现线程安全?
- 请说一说HashMap原理,存取过程,为什么用红黑树,红黑树与完全二叉树对比,HashTab、concurrentHashMap,concurrent包里有啥?
- 请说一说hashmap put()底层原理,发生冲突时,如何去添加(顺着链表去遍历,挨个比较key值是否一致,如果一致,就覆盖替换,不一致遍历结束后,插入该位置) ?
- 请说一说ArrayList 如何保证线程安全,除了加关键字的方式 ?
- 请说一说ArrayList、HashMap、LinkedHashMap ?
- 请说一说HashMap实现原理,扩容的条件,链表转红黑树的条件是什么 ?
- …

第二章 Java核心基础面试题
- Java中提供了抽象类还有接口,开发中如何去选择呢?
- 重载和重写是什么意思,区别是什么?
- 静态内部类是什么?和非静态内部类的区别是什么?
- Java中在传参数时是将值进行传递,还是传递引用?
- 使用equals和==进行比较的区别
- String s = new String(“xxx”);创建了几个String对象?
- …

第三章 Java深入泛型与注解面试题
- 泛型是什么,泛型擦除呢?
- List<String>能否转为List<Object>
- Java的泛型中super 和 extends 有什么区别?
- 注解是什么?有哪些使用场景?
- …

第四章 Java并发编程面试题
- 假如只有一个cpu,单核,多线程还有用吗 ?
- sychronied修饰普通方法和静态方法的区别?什么是可见性?
- Synchronized在JDK1.6之后做了哪些优化
- CAS无锁编程的原理
- AQS原理
- ReentrantLock的实现原理
- …

…
…
…
第十章 Framework内核解析面试题
- Android中多进程通信的方式有哪些?
- 描述下Binder机制原理?
- 为什么 Android 要采用 Binder 作为 IPC 机制?
- Binder线程池的工作过程是什么样?
- AIDL 的全称是什么?如何工作?能处理哪些类型的数据?
- Android中Pid&Uid的区别和联系
- …

第十一章 Android组件内核面试题
- Acitvity的生命周期,如何摧毁一个Activity?
- Activity的4大启动模式,与开发中需要注意的问题,如onNewIntent() 的调用
- Intent显示跳转与隐式跳转,如何使用?
- Activity A跳转B,B跳转C,A不能直接跳转到C,A如何传递消息给C?
- Activity如何保存状态的?
- 请描诉Activity的启动流程,从点击图标开始。
- …

第十二章 程序性能优化与数据持久化面试题
- 一张图片100x100在内存中的大小?
- 内存优化,内存抖动和内存泄漏。
- 什么时候会发生内存泄漏?举几个例子
- Bitmap压缩,质量100%与90%的区别?
- TraceView的使用,查找CPU占用
- 内存泄漏查找
- …

第十三章 开源框架面试题
- 组件化在项目中的意义
- 组件化中的ARouter原理
- 谈一下你对APT技术的理解
- 谈谈Glide框架的缓存机制设计
- 谈谈你对Glide生命周期的理解
- 项目中使用Glide框架出现内存溢出,应该是什么原因?
- …

文章讲述了自疫情以来广州就业市场的严峻形势,特别是互联网行业的困境。作者分享了今年面试经历的变化,强调了Android开发者需要更全面的技术掌握,包括HashMap、并发、JVM等基础知识,以及Flutter等新技能。文章还提到了面试技巧和语言表达的重要性,并推荐了面试题复习,涵盖算法、Java基础、并发编程等多个模块,适合不同级别的Android程序员参考。作者最终在猎聘找到了工作,并鼓励大家积极准备,把握机会。
302

被折叠的 条评论
为什么被折叠?



