记录下面试过程,帮自己总结与进步。考虑到不必要麻烦先把公司名称隐藏。
自己经历过的面试题
@(面试)
记录下面试过程,帮自己总结与进步。
猫眼面试:
- java虚拟机的内存分配
- GC回收机制:什么时候触发回收,GCRoot可以是什么,堆和栈中分别存放哪些
- ThreadLocal的作用,它是如何保证唯一性的,violate关键字在内存中做了什么
- 在项目中如何使用MVP,它的好处是什么
- Android 6.0的权限问题,如果用户在弹出权限dialog后没有允许开启权限并勾选了不再弹出提示该怎么处理。
- RecyclerView如何将某个item滑动到顶部
- 将一个app分成多个module开发有什么好处
- 手写生产者/消费者模型
作业盒子
2018.3.15
- 演示下自己的app
- 手写代码实现自定义个圆形进度条
- 实现动画的方式有哪些?骨骼动画是什么?
- 通过属性动画实现将一个button放大两倍
- 事件传递机制:1.如何向右滑动能够退出Activity。2。如果此时Activity有个能横向滚动的Horizontal ListView 那么当我手指在它上面滑动会出现事件冲突吗? 3.如何解决这个Activity和Horizontal ListView的事件冲突。
爱奇艺
2018.3.19
第一轮:
- 手写个二分查找
- 内存优化方式,使用过的工具有哪些,解决过哪些内存溢出的问题
- 事件传递整个过程,如果屏幕上的某个View没有处理点击事件,最终这个事件是交由谁处理的。
- Window源码里有什么
- ViewRootImp和window之间是怎么交互的
- 自定义实现的控件有哪些说下步骤
- 使用ScrollX和translationX后对控件的影响有什么
- Context源码
第二轮
- 手写个个单列表
- 手写生产者/消费者模型
- 看过的三方库和Android系统的哪些源码
- 说下通过注解实现findViewById的思路
- ThreadLocal如何使用的,作用是什么,举个android源码中使用到他的例子
- JVM和Dvk的区别
- JVM实现内存回收的方式,如何确定一个对象没有被引用了
- 四种引用分别是那几个,不同点是什么
第三轮
- 优化App的启动方式有哪些
- 优化App的渲染方式有哪些,造成画面卡顿的原理是什么
- 在一个Linearlayout 中竖直方向放三个View,他们的子View以及父View的MeasureMode以及具体值得变化过程
- 如何通过onDraw自己绘制个ViewGruop来进行渲染优化
- recyclerView整体的机制
- 画出hashMap的结构图,以及hashMap与hashTable的区别,hashMap为何会出现线程安全问题
阿里影业
电话面试:
-
Handler:
- 一个Handler对应几个Looper,在主线程中创建的Handler对应的Looper叫什么。
- 在一个线程中创建多个Handler会有几个MessageQueue
Intent能否传递图片,如何传递。
内部类有哪些,使用内部类的优势,内部类中能创建静态函数和变量吗?
一个App开启两个线程,会有创建几个Application
arr里面具体有哪些东西,So是什么
谈谈Android的so
mvp使用中碰到的问题,如果View被销毁,那么此时p中有异步回来的消息要view处理,那么怎么解决这个问题
Android中Serializable和Parcelable序列化的区别
序列化使用Parcelable使用的是内存效率高,但不适合对象过大,不能写到磁盘不能持久化,持久化用Serializable
- 模块开发中,两没有依赖关系的module之间怎么进行轻量级的数据传递和重量级的数据通讯
- 如何监听ANR异常
一种监听ANR方案
Android自定义捕获Application全局异常 - 动态代理和静态代理的区别
- 如何封装一个网络框架
- 内存优化:使用过哪些工具。
支付宝
一面:
- 手写线程安全的单例,为什么要双重判空
- 组件化中如何解决资源冲突,R文件本质是什么,8ge16位进制数字分别代表什么
- AOP思想,怎么实现的数据统计,了解过无痕实现数据统计吗
- 类加载器分哪几种,看过对应源码吗?
- piscsso,glide,fresco,区别,缓存机制是怎么实现的
- IntenService的具体使用
- 通过组件化如何搭建项目
二面:
- 性能优化(发现问题--如何解决问题--解决后性能提高多少),使用的工具是什么
- 对存储了10000个整数类型的数组进行排序,算法复杂度为$O(n)$(手写哈希排序)
人人车
电话面试:
- Activity的生命周期
- Handler的实现机制
- Activity的启动流程
一面:
手写个你在你开发中使用的单列
EventBus实现原理
Handler实现机制
Activity启动源码分析
IntentService使用
Hook
-
本地广播和全局广播的区别,以及本地广播的实现原理
本地广播通过LocalBroadcastManager统一管理
LocalBroadcastManage存放了intentFilter和之对应的BroadcastReciver
通过handler来实现发送消息 项目中的知识点
二面:
- Activity启动过程
- JVM内存分布
- DVM和ART的区别
http://liuwangshu.cn/application/performance/ram-1-dvm-art.html - dex-->odex在什么时候
Dalvik虚拟机执行程序dex文件前,系统会对dex文件做优化,生成可执行文件odex,保存到data/dalvik-cache目录,最后把apk文件中的dex文件删除。
- 插件化占坑是什么意思
声明空Activity信息到AndroidManifest的行为,我们就叫做占坑了
拉勾
问了很久,范围比较广,但是不是很深。
360
一面:
- Apk瘦身
- 插件化
- 性能优化
- 单元测试
二面:
- 自己开发一个广告SDK需要注意事项
三面:
- 项目框架搭建
四面:
- 个人规划
好未来
都是些需求的事项思路,没怎么问具体技术点
京东
一面
- 绘制流程
- Handler 原理
- Activity启动流程
- 事件传递流程
二面
- 写个快排
- ANR如何定位,解决
- 插件化
- IntentService源码
- EventBus实现原理
三面:
- java基础
- 手写一些需求,主要考察你对风险的预估
新浪
一面:
笔试:6张纸的面试题,
10道多选:比较基础
四道解答题:
- 通过Handler实现两个子线程进行通讯,
- 自己实现AsyncTask,
- 写出Service的2启动方式,及生命周期
两道算法题:
二面:
- 计算机网络知识
- okhttp源码
- jvm内存分配
- 类加载机制
总结:
高频考点:
-
并发:
- 四种常用线程池,各自优缺点
- Handler实现原理,源码,静态内部类优化写法
- IntentService的源码,应用场景
- ThreadLocal,volatile原理
- 实现线程安全的方式有哪些,类锁和对象锁的区别
- 写出线程安全的单例
- 手写消费者/生产者模式
-
UI
- 绘制流程,自定义个View,invalated和requestLayout的区别
- 事件传递流程及事件冲突解决方式
- 属性动画
- ViewRootImp
-
源码
- Activity启动流程
- app启动流程
- Handler源码
- 三方库
- glide 与其他库的对比,缓存原理
- eventbus 实现原理
- Arouter:module间的通讯
- okhttp
插件化:实现原理,ClassLoader
组件化:
性能优化:如何定位问题,如何解决问题,性能提高多少
计算机网络:三次握手,四次分手
jvm内存分配模式
-
算法
- 哈希排序
- 快排
- 二分查找
-
数据结构
- 手写单链表
- hashMap的结构
- 栈的结构