1. 没有接触过的问题,直接告知没有了解过,不能强答
2. 先答基本的,优化或进一步的部分等待面试官发问再答
3. 掌握主动权:
(1)我们的项目中没有用 X ,用 Y 也能实现这个功能(引导到其他话题)
(2)比起 X 我更倾向 Y(有自己的见解),X 的原理是…
4. 如何讲好项目经历:
(1)背景(让对方能听懂)
(2)冲突(要有技术难度,顺便可引导对方陷入自己熟悉的技术领域)
(3)强调自己的作用(解决问题的过程)
(4)要有收益(结果,是否解决了问题,最好可量化)
5. 见解型问题
为什么dex文件比class文件更适合移动端?
- 针对移动端优化的个人见解
- 内存有限
- 安装包体积不宜太大
- 频繁 I/O 操作会带来卡顿
Java的数组为什么不支持泛型?
- 泛型的类型擦除机制
- Java泛型设计上的取舍
你遇到过哪些经典的设计模式使用案例?
- 使用设这个计模式的背后,所要解决的代码问题是什么?
- OOP原则
6. 意识型问题
如何实现一个能加载海量数据的列表?
- 内存优化意识
- 内存优化三板斧(回收、复用、压缩)
堆内存治理的主体方向是:减少新申请内存大小 + 减少已分配内存大小

- 避免 String 拼接导致内存抖动
- Bitmap 图片相关,图片格式,压缩重采样,缓存(LRU, Glide),Bitmap 对象的复用(inBitmap = poolBitmap & inMutable = true)减少 Bitmap 对象的频繁创建
- 避免自动装箱类,避免GC
你做过组件化吗?
- 复用
- 隔离
- 依赖抽象
- 代码边界
如何用工程手段,提高写代码的生产力?
- 代码自动生成
- 字节码修改
- 找出样板代码,只写高级逻辑、归纳低级逻辑
内存抖动:高频、快速分配大量的对象,GC会执行频繁,如1000次for循环内执行new一万个对象
GC在执行时会停止其他所有线程,stop the world , 这样界面就会卡顿
stop the world:
在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。
Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。
做算法题时,不要自己闷头想再表达,可以一边想一边自言自语的把想法说出来
AOP + AspectJ 处理动态权限申请
- 可以通过AspectJ框架去切Actvity中添加了指定注解的方法(也就是需要先申请权限的方法)
- @Around切点方法执行前,通过注解拿到权限列表和requestCode,启动一个透明的Activity,
- 在该Activity中申请权限并回调到织入类,
- 可以在业务Activity中通过注解指定申请失败的方法,然后在织入类的回调处反射调用。
AOP还能实现埋点日志上传、统计方法耗时等。还可以在现有代码的执行过程中插入或者预埋代码。(代码插桩)
动态代理应用场景
- 权限集中申请
- 日志集中打印
- 底层屏蔽具体网络请求,Retorfit 网络请求
- RPC即远程过程调用
- 需要对较难修改的类方法进行功能增加
2468

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



