2022
Flutter
- flutter 多线程 、单线程怎么运行的 、如何做并发 Flutter线程模型 www.jianshu.com/p/606389756…
- flutter 三棵树
- flutter wiget 生命周期 widget A 起 widget B 经历了什么
- flutter 与 native 通信 哪几种
- flutter 路由如何做的 ,混合开发路由实现
- flutter key 有哪些,怎么使用的
- provider getX select 使用 原理? conentprovider 包裹的 consmuer 什么情况下用
- flutter 引擎 --> engXX Group
- 反复刷新的话 用什么组件 10.flap 动态化
- 多继承 什么场景下使用 12.flutter 怎么计算控件高度 13.flutter 滚动曝光实现
- flutter didappear 实现
快看漫画
1.java的锁、底层锁的性能差异 2. 注解 3. service loader 实现 4. dex2oat dexopt 5. Arouter 6. bundle 设计思路、原因(内存、binder机制) 7. 线程内存管控
贝壳
1.jvm 内存区域、各个储存 2.handler 3.事件分发
2019
自如
- activity 启动模式
- LeakCanary 原理
- 性能优化具体
- 内存优化
- 自定义View 事件分发
- 自定义View 表盘实现 Canvs方法
- 动画有哪些
- 源码中的设计模式
- 快排
美团
一面:
- int 与 Integer 区别,自动装箱与自动拆箱用的具体方法
- view 事件分发
- 接口与抽象类区别
- 泛型,String 插入到 Integer map里面
- hashmap hashmap的离散算法具体是什么,怎么计算的
- synchronized obj与class 方法和静态方法区别
- glide 三级缓存
- eventbus 原理
- 注解
- ARouter 原理
- LeakCanary 原理
- handler
- kotlin 高阶函数 与java的优势 伴生对象,扩展方法
- ConstraintLayout 、grop的使用和坑
- 组件化设计
- 字节码增强技术 了解多少
- Looper 创建地点
- 什么是死锁,死锁如何避免
- 引用传递与值传递区别,java是什么
- mvp mvvm
- fragment 如何判断显示,hide与show会影响吗
- viewpage 加载fragment 当fragment滑动到后面,生命周期变化
- Instant Run工作原理及用法
二面:
- 内存泄露有哪些场景
- handler 泄露原因,如何解决
- message 创建方式 ,message 内存泄露?
- 保活方式
- opengl的lookup滤镜原理
- hashcode equals 重写
- AIDL 是什么,如何同步,上一句话bindservce 下一句话可以获取 对面进程的进程信息??
三面:
- apk的打包方式,gradle 构建流程
- aapt的作用,R文件的作用,R文件中的id每个的含义
- aar 是否包括R文件,为什么
- manifest 合并是在什么时候
- 1代签名 2代签名 谷歌play 签名
京东云
- 一个对象new之后 的生命周期
- GC算法 最新JVM算法组合 分代
- 锁的升级 synchronized
- 栈是否会将对象放到堆中
- 8大基础类型 字节 1个汉字多少字节
- 线程创建的方式
- 线程池的使用 各种线程池 具体项目中如何使用
- 集合类的关系 接口继承关系
- 类的加载
- bulid 模式 new的地方放在哪 (static 内部类)
- 什么是垃圾
- 设计模式
- 快排
- 堆排序
- 向线程池提交任务的两种方式 execute submit
猎豹
- 线程反复创建会有什么问题
- 创建线程的方式
- handler idelHandler
- surfaceflinger 原理
- surface 渲染原理
- 类的加载
- https http
- 常用的 返回码
- 网络连接框架
- 注解
- binder
- glide原理
- 设计模式
- 自定义view
- 动画
- 内存优化 性能优化
- 网络架构
YY
- 通话流程..
- 如何加载大图,在不压缩的情况下
- 图片加载到手机中内存的大小,ARGB_8888 等
- 约束布局的好处,性能
- 补间动画 和属性动画区别 性能优势
- 事件分发,滑动冲突如何解决
- 矩阵 错切
- handler 底层 native
- hashmap 扩容 离散算法
- synchronized 锁 方法和代码块区别
- 性能优化 工具,不使用工具的时候可以用什么方式
- 内存溢出 排除
- 视频播放
- js与Android调用
阿里
一面:
- 应用启动流程
- 矩阵使用
- 进程间通信 除了AIDL
- 多进程的进程启动 为什么要用frok
- ThreadLoacl
- hash冲突的解决方案有哪些
- 性能优化 步骤
- 内存泄露排查
- synchronized 锁 方法和代码块区别
- 读锁与写锁的区别
二面:
- JIT AOP 是什么
- 进程和线程区别
- classlode 双亲 ClassCastException原理 是否可以load相同的类名 双亲委派机制为什么要这样做
- js为什么写的更快 相对于java
- 组件的抽离 有什么更好的办法
腾讯
算法:
- 单例 多线程考虑
面试题:
-
hashcode 不重写,equals 重写会有什么问题
在存储map中会有重复的对象
-
hashmap 多线程会有什么危害
死锁
-
handler.next 阻塞之后,CPU为什么会休眠... 之类
-
内存泄露监控,原理
-
https 打开浏览器经历了什么
-
APK 打包流程 ,资源打包
- java文件生成过程 aapt生成R文件 aidl将.aidl生成java文件
- 通过aapt工具来生成生成资源索引文件,一般来说生成的文件名是resources.ap_
- 使用jdk中的javac工具,生成class文件
- 通过dx工具生成dex文件,dx工具与aapt存放目录一致。
- 通过apkbuilder打包apk
- 签名,可以使用jarsigner工具签名和apksigner工具签名
- zipaligin,是一个zip文件整理工具用来优化apk文件
-
签名的作用,数字签名的应用,签名的具体流程
- 防伪,应用升级时的标志
- 可以让相同签名的不同应用在相同进程
- 代码或者数据共享
-
dialog 启动后 Activity生命周期
无影响
-
启动透明Activity 生命周期变换
A onPause B onCreate B onStart B onResume
-
类的加载顺序,类里面的参数 静态代码块
(静态变量、静态初始化块)>(变量、初始化块)>构造器
-
public static final 可以反射吗?
可以
-
可见性 具体如何可见
方法操作完会出栈,如果方法A使用到了全局变量X,先入栈A, X拷贝副本进入A栈桢,同时,A内部调用B方法。当B执行完,B先出栈,A再出栈,最后将X刷入主内存
-
一个类 F, X为F的static 成员, Activity A 赋值给 F.X = "abc",Activity A 启动 Activity B ,从 Activity B里取出 F.X 什么时候为null
1.多进程
-
gc 的根具体是什么
- Java栈中的引用的对象
- 本地方法栈中JNI引用的对象
- 常量池引用的对象
- 静态属性引用的对象
GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收。方法区、栈和本地方法区不被GC所管理,因而选择这些区域内的对象作为GC roots,被GC roots引用的对象不被GC回收。
-
view 分发
-
方法签名
由方法名加参数组合,重写需要子类与父类方法签名相同
2017
滴滴
算法:
- 二维数组路径最优(动态规划算法)
- 树的遍历
面试题:
- ThreadLocal
- 多线程三要素
- 锁的概念由来
- synchronized和volatile区别
- hashmap底层实现 算法
- gc原理 底层算法
- view高度
- 泛型
- context区别
猎豹
算法:
- 链表反转
- 快排
面试题:
- 进程如何启动
- view 绘制 ,view 事件分发
- synchronized和volatile区别
- Activity 启动流程
- 多态
- 亲和力 taskAffinity (1.设置 FLAG_ACTIVITY_NEW_TASK allowTaskReparenting 如果有一个已存在的任务具有与新activity相同的亲和力,那么这个activity就被启动并安置到这个已存在的任务中.如果没有这样的任务,才开始一个新的任务.)
- 动画
- classload 原理
- 单例 静态内部类
- 如何保证ContentPrivod的线程安全
- 用户态 内核态