2022Android客户端最新面试题

833 阅读6分钟

俗话说是求职金三银四,但是2022年,本人是没有感受到一点点的暖意。最近也在面试一些公司,分享一些面试经验给大家,希望大家可以从中查漏补缺,算法题我统一放到最后了

简单做下本人介绍:卑微程序员,主业Android(搞搞业务界面,跨跨进程,偶尔写一写C/C++代码),副业ReactNative。

公司1

一面

Android:

1.App启动流程,startActivity流程

2.LeackCanary原理分析,有了解过如何解析内存dump文件么?

3.线程池工作原理,为什么线程池的核心Worker线程不会死亡,为什么这么设计线程池

4.Binder通信的方式,Binder的线程池,AIDL中的oneway的实现解决什么问题

5.AOP切面编程原理机制,AspectJ与ASM优劣对比

6.View的事件分发原理,父控件的onInterceptTouchEvent可以拦截到子View所有事件吗?

Java:

1.synchorized锁Class与锁object,锁this的区别

2.ArrayList,LinkedList迭代器for循环的效率一样吗?

3.Https的网络加密请求实现

4.线程的状态,Intercept的作用,如果wait的时候用Intercept会怎么样?

二面

Android:

1.RecycleView缓存机制,如果屏幕上有3种ViewType,RecyclePool的滑动时缓存是怎样改变的的

2.ReactNative的实现机制,JS线程,UI线程,与Java的通信实现

3.SurfaceView调整层级之后,在windows中Surface的排序

4.Binder的mmap,进程间通信的方式种类

5.开发JNI遇到的问题,JNI中调用findClass找不到类怎么办?

6.sp使用问题, commit,Apply区别 ,ANR如何发生

7.ObjectAnimator,ValueAnimator区别

8.Fragment默认构造函数作用,构造传参与Arguement传参的区别

Java:

1.JVM的ThreadLocal变量存在那里,内存管理

2.递归为什么比for循环效率低

3.什么是指令重排,如何避免

公司2

一面

1.ReactNative如何实现JS层与Java通信原理

2.JNI层实现,JavaVm与JavaEnv是什么,extern C 是什么作用

3.Binder实现原理,如何监听进程死亡

4.ViewTouch事件分发流程

5.HashMap内部实现原理,HashMap内存占用过高问题

6.多平台打包如何实现

7.业务中的进程如何保活

8.死锁的条件

9.ViewPager2比ViewPager有什么优势

10.Native的Crash如何监听

二面

1.JNIHelper实现方式,局部引用处理的问题

2.RN实现方式,与JS交互方式,RN组件的生命周期

3.So动态下载实现方式,Hook nativeSoDirectory

4.线程池参数, 你会怎样设计线程池去执行任务

5.自定义View绘制流程,编舞者是干什么用的, 如何实现自定义FlexLayout

6.如果监听线上OOM, 如何减少内存泄漏, 如何提醒开发者会造成内存泄漏(Lint检查)

7.LeakCanary原理

8.进程通信方式,Binder,Socket,共享内存区别,有没有用过共享内存

9.Activity启动流程, Activity栈管理

10.Http(1.0/1.1/2.0),Https(对称加密/非对称加密)

公司3

一面

1.System.loadLibrary()与System.load()区别

2.Binder发送时机,数据大小的限制,Copy from user时机

3.Https加密原理, http请求常见错误码

4.Class.forname("")反射,与调用ClassLoader的区别

5.volitate,synchronized 锁升级

6.线程池参数, 单线程池有什么问题

7.编舞者怎么触发监听Vsync信号

8.LiveData,Observer,mLastVersion有什么作用呢

9.Handler nativePollOnce ,epoll原理

10.App启动涉及到系统服务

二面

1.跨进程如何保证线性执行,以及解决回调不一致的问题

2.解决布局加载缓慢的问题,从那方面入手,如何监听布局卡顿问题

3.Okhttp的链接复用逻辑,定时清理逻辑

4.Http的keep-alive 如何生效,TCP链接如何保持

5.JS渲染 ,Flutter与H5渲染区别等

6.View绘制原理,自定义FlexLayout如何实现

7.Message的同步屏障,为了解决什么问题

公司4

一面

1.JNI的作用,JNIENVfindClass如果找不到怎么办,deleteLocalRef作用

2.Kotlin关键字inline,also,let 协程如何实现的原理

3.线上下ANR如何监控 如何确保能拿到准确的堆栈消息

4.BlockCanary实现的原理,WatchDog了解否,如何处理OOM,自己有什么处理经验

5.Binder通信原理, 内存限制,如何传递Bitmap大图,MemoryFile是什么?

6.100x100的图片 放到View10x10里 ARGB_8888 内存大小是多少

7.物理内存,虚拟内存区别

8.Okhttp用到哪些设计模式

二面

1.线程进程的区别

2.物理内存与虚拟内存的区别

3.JVM内存模型,那些是线程共享

4.synchronized锁升级,如何选择锁

5.JVM内存回收机制,垃圾回收算法,GCRoot对象

6.Cookies与Session区别

7.TCP,UDP区别

8.自定义一个可以拖拽以及解决事件冲突的吸边的ViewGroup

9.RN的渲染是怎么绘制到Android客户端的

10.Http的localDNS 与HttpDNS区别

11.JNI中的Native的LocalRef是什么时候释放的

公司5

一面

1.项目经历

2.项目中解决OOM(原因),内存泄漏,LeakCanary原理,Handler内存泄漏引用链分析

3.JVM如何判断是否可以回收对象,回收算法,GCRoot都有哪些

4.SpareArray不占用空间与HashMap相比优势,SpareLongArray是如何存储的

5.View事件分发流程,ACTION_CANCEL如何产生,如何处理

6.Bitmap占用空间的大小,ARGB_8888(4个字节),ARGB_565(2个字节)

7.onCreate. handler.post({ }) 调用1000次会有什么问题,会造成onCreate卡顿吗

8.Activity启动流程,Activity是如何何时创建的,Looper是什么时候启动的

9.Lock,Synchronized,CAS,锁升级,锁种类, 乐观锁,悲观锁

二面

1.Android音频硬解码,软解码,如何监听Native的crash

2.JNI中的中引用(localRef,globalweakRef,globalRef)

3.JNI静态注册,动态注册的以及优劣

4.Kotilin的优劣,let,with,apply区别,协程的区别

5.RxJava map,flatMap区别 Subject区别

6.View的onMeasure如何判定,受什么影响

7.Fresco是怎么做线程池规划,Fresco与Glide对比

8.ViewModel是如何实现在页面异常销毁后重建的,与onSaveInstance的对比

10.ProtoBuffer是如何编码的,MMKV有了解,如何实现跨进程。

算法

本人大概是在leetCode上刷了200多道题,据面试经验来看,就社招来说除非是面试一些外企来说,我碰到的算法题还是在比较简单的。建议大家还是多刷一刷,掌握一些基本解题思路,不说能见到原题,碰到问题也不必抓瞎只能暴力解决。

image.png

1.用两个栈实现一个队列

2.用两个队列实现一个栈

3.手动实现LRUCache

4.反转链表

5.将一个节点数为size链表从m位置到n位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)

6.螺旋顺时针输出数组

7.跳台阶一次能跳1或者2或者3台阶,问第n层台阶有多少种跳法

8.LeetCode meetingroom1,meetingroom(会议室问题)

9.三个线程交替打印1-100

10.如何判断自底向上判断avl树(自顶会有重复遍历节点的问题)

11.层次遍历二叉树变种题

12.最长回文子串

13.含有重复元素求全排列