最近和很多粉丝聊了聊最近找工作的情况,发现很多人也是最近都在忙着跳槽换工作,针对这个情况,我把大家所有面试问题都整理了下,也算是给大家开个小灶,帮助你们在面试的时候更有底气,话不多说几百道一线大厂面试真题都给你们准备在了下面。
腾讯 PCG 看点一面
- 项目
- APK 的入口在哪里
- Activity 的启动模式
- 列表闪动的问题怎么解决的?
- ListView 使用可以改进的问题,包括布局优化、异步加载资源的闪动问题等等。
- Glide
- LRU 算法的思想?
- 怎么设计一个图片加载工具?
- 为什么使用 Gson?
- 知道哪些排序?快排和冒泡的思想?Arrays.sort 方法的排序?
- 对项目的总结感受?
- 反问环节,问了下流程的时间问题,以及看点这边优先级比较高需要提前学习的内容。
PCG 看点二面
- 介绍项目
- 客户端发送信息给服务端去控制台灯,怎么保证台灯也能收到指令?联调怎么做的?
- 为什么要进行布局优化的,从什么地方产生的这个需求?
- 为什么使用 Websocket,而不用 Socket?
- 获取图像然后使用 SDK 之前,有对图像进行处理吗。
- OkHttp 当中学习过什么内容,网络请求是在哪里发起的?有哪些拦截器?
- 原生的网络请求方法?
- APP 框架怎么搭的?
- 为什么使用 Fragment?Fragment 相比 Activity 的优势。
- HashMap 是线程安全的吗?
- 实验室相关?
- 个人兴趣爱好?
网易一面
- 自我介绍
- 为什么选择找安卓实习?
- 简单介绍项目?
- 使用到 Websocket 进行长连接,这个长连接实现的原理是什么?有什么好处呢?
- OkHttp 看过源码吗?它的设计方法是什么?有哪些拦截器的?
- HTTP 的常用响应码和 HTTP 的请求头?
- 自定义 View 有哪些步骤?
- View 的视图绘制过程中的几个方法都有些什么作用?
- 项目中实现的自定义 View 是实现了什么功能,实现了哪些方法?
- 事件分发的流程?产生的事件会经过哪些处理完整的讲一下?
- 布局优化做了什么内容?
- 内存泄露产生的原因?以及还有哪些场景?
- 提到引用,那么 Java 当中的引用的区别都是什么?
- JVM 运行时数据区?
- Java 当中 Error 和 Exception 的区别?具体的 Error 和 Exception 常见的有哪些?
- 打包的流程?
- Activity 的启动模式?
- 尺寸单位 dp、sp、px 的区别?
- Activity 生命周期以及区别?
- 反问环节,问了下部门的工作,用到的技术这些。
网易二面
- 自我介绍
- 讲下项目觉得亮点的地方
- 讲下项目当中二维码怎么实现的?
- 如果要自己实现,怎么使假设一个 url 生成一个对应二维码?
- 刚刚提到了加密,那就说下知道的加密方式?
- 常用的对称加密有哪些?
- 公钥私钥都是做什么的?
- 项目里面用到了一个 MPAndroidChart,那么这个框架怎么画图的有了解过吗?
- 假设有一批数据,要画柱状图,怎么实现?
- HTTPs 的加密会话的过程?
- MotionEvent 有几种事件?
- ScrollTo 和 ScrollBy 方法?
- SurfaceView 和普通 View 的区别?
- requestLayout 和 invalidate 方法的区别?
- 死锁怎么发生的?
- 了解银行家算法吗?目的是什么?思路是什么?
- res 目录和 asset 目录的区别?
- 虚拟机的垃圾回收机制?
- 新生代老生代的回收算法有什么不一样啊?
- GCRoot 怎么定义的?
- 写个代码,两个线程轮流给变量 i +1?
斗鱼一面
- 自我介绍
- 讲下项目
- Java 引用类型
- 说下项目当中怎么选择抽象类和接口
- MVP 架构模式的使用,MVP 关系
- String、StringBuilder、StringBuffer 的区别?
- 那它的线程安全怎么做到的?
- 数组和 ArrayList、LinkedList 的区别?
- volatile 关键字保证了原子性吗?
- 内存回收机制?
- jar 包当中的一个 class 提供了一个功能,现在要对这个 class 进行一个扩展,那么有什么方式可以对这个 class 提供的功能做一个增强?
- 那么对动态代理了解吗?
- InputStream 和 BufferedInputStream 涉及到的设计模式?
- 那么讲下装饰者模式,实现逻辑是怎样的?
- 布局时 include、merge、viewstub 分别的作用?
- 那么 ViewStub 在源码当中跟 View 有什么区别?为什么能做到懒加载?
- 讲下 View 的绘制流程?
- 项目当中遇到的一些问题?
- 项目当中出现 OOM 或者 ANR 问题怎么解决?什么方式 and 什么工具?
- 反问环节,问了下建议,面试官说回答不太连贯,虽然都在点上。然后问我对斗鱼有什么问题吗,就问了下斗鱼这边准备实习需要学习的内容?
富途一面
- 开始是聊了下
- 然后是做了一些题,代码编程题智力题这些。
- 深拷贝与浅拷贝
- 内存对齐
- 浏览器输入 URL 会发生什么
美团一面
- 工厂模式的使用场景。
- 虚拟内存如何管理
- OSI 七层模型。
- 三次握手四次挥手 https 的握手。
- 数据库的范式和事务
快手一面
- 自我介绍
- 先介绍项目,项目里主要做的工作有哪些呢?
- 项目里面提到的图像采集的部分是怎么做的呢?
- Websocket 长连接是怎么做的?
- Java 的基本类型有哪些?
- 它们的长度分别是多少呢?
- 自动装拆箱?
- final 关键字的用法?知道哪些用法,在什么场景表示什么意思?
- 对象的比较涉及的 == 和 equals 方法,它们之间的区别?
- 为啥 hashcode 方法也要被重写呢?
- 觉得 Java 当中哪些要素体现了面向对象的思想?以及项目当中是怎么应用的?
- 怎么样理解多态呢?
- String =“abc”和 String = new String(“abc”) 这两种创建字符串之间的区别?
- String a =“abc”+“def”这个字符串拼接过程中 + 的过程是怎么实现的?编译期是个什么过程呢?
- 用过 StringBuilder 吗?什么情况下会用这个?
- 那么 StringBuffer 呢?和 StringBuilder 有什么区别吗?
- Java 的引用类型有哪些?分别在什么场景下用,有些什么特点呢?
- 内部类有哪些?又有什么不同呢?
- 刚刚提到匿名内部类,那它有构造器吗?
- 那么匿名内部类可以显式声明一个构造器吗?
- (上面回答了不可以)然后问如果要做一些初始化工作怎么办?
- finally 的用法?
- 知道异常链吗?
- 项目当中有创建线程吗,创建线程都有哪些方法呢?
- 线程池的类型都知道哪些?
- 觉得线程安全的本质是什么?
- 用过哪些手段保证线程安全?
- synchronized 可以用在什么地方呢?
- volatile 关键字了解过吗,作用是什么呢?原理呢?
- 死锁是怎么产生的?
- 怎么去打破死锁呢?
- juc 包中了解哪些工具呢?
- 那对 ConcurrentHashMap 了解哪些呢?
- ConcurrentHashMap 内部的数据中每个桶是怎么组织的呢?
- 那怎么扩容呢?旧的结点转移到新的位置,是怎么确定这个位置怎么对应呢?
- Android 当中的 LaunchMode 有哪些?
- Activity 的声明周期有哪些?
- 前面提到的 AsyncTask 做异步任务,它的实现原理是怎样的?怎么更新 UI?并发执行任务和顺利执行任务分别是怎么实现的?
- invalidate() 和 requestLayout()
- 视图绘制机制?
- Android 当中的 Handler 和 Looper 是怎样的一个关系呢?
- 可以在一个进程当中创建多个 Looper 吗?
- 假如现在有一个 Button,用户点击这个 Button,那么这个 Button 对这个触摸的响应,整个事件处理过程是怎样的?
- Surface、SurfaceView、SurfaceFlinger 的关系?
- 说下自定义 View,举一些例子,说下是怎么做的?
- 有自定义绘制的一些过程吗?那自定义绘制的时候有些什么需要注意的地方吗,比如效率方面等?
- Binder 通信机制相关,做安卓应用的时候进程间通信都用过哪些呢?Binder 实现原理是怎样的呢?
- Binder 是怎样在进程隔离的情况下通过哪些手段进行通信的呢?
- 知道 MemoryMap 吗?
- Fragment 使用中用到的 beginTransaction() 的意义?
- 了解 RxJava 吗?那了解其中的 map 操作符是做什么用的吗?
- 讲下对内存泄露的理解吧!
- Java 当中的垃圾回收都有哪些了解呢?
- DVM 和 ART 的区别
- HTTP 和 TCP 是什么关系呀?
- TCP 的三次握手是什么过程呀?
- HTTPs 和 HTTP 的区别是什么呢?安全层会话建立的过程是什么样的?
- Java 当中 List 会有些不同的实现,那么 ArrayList 和 LinkedList 有些什么区别呢?结构,性能,效率等?使用的时候会怎么选择呢?
- 平衡二叉树的概念?
- 平衡二叉树的具体实现有哪些呢?
- 怎么判断链表当中是否存在一个环呢?
- 那怎么计算一个环的大小呢?
- 写代码,反转链表。
- 反问环节,问了下实习需要提前学习什么内容,以及问了下一些读源码的时候的对于代码细节不记得就感觉没有内容去支撑自己去讲述某一个代码的逻辑的这个困扰,然后面试官也是说前面回答发现我有些在乎代码的细节,方法名啥的记得很清楚这些,就给出了一些的建议。
快手二面
- 了解局部性原理吗,有哪些例子
- CPU 访问寄存器的速度和访问内存的速度
- 那 CPU 的 Cache 是什么原理
- 写出 HashMap 的 put 过程,后面是根据代码当中的内容提问,也就是 HashMap 当中的一些操作
- 多生产者消费者模式实现
- 如何确定对象是否会被回收
- 可达性分析算法对应的是什么数据结构
- 指出自己写的多生产者消费者模式实现代码当中哪些是 GCRoot
- 工作内存和主内存当中分别都有些什么
- hapens-before 原则是什么,具体是什么
- invalidate 方法
- Matrix 了解吗
- 我向面试官询问可以努力的地方(理论知识掌握了,但是实践没有跟上理论,没有很好的融会贯通)
- 面试官问我觉得自己有什么优点
- 面试官问我觉得自己什么地方需要是需要改善的
字节一面
- 项目相关:计时部分如果时间特别长,怎么保证进程不被杀死呢?
- 其他项目相关的问题。
- Handler
- Looper 为什么不会阻塞
- HandlerThread
- 怎么拿到当前线程的 Looper 呢?
- ThreadLocal
- 遇到过其它内存泄露吗?
- 怎么判断对象是否能被回收?
- 哪些可以作为 GCRoot?
- OkHttp 学习过程中有什么收获吗?
- 对于提到的设计模式说下有什么好处?
- Android 当中应用到职责链模式的最突出的地方是哪个机制?
- 滑动冲突是怎么解决的呢?
- 往浏览器当中输入一个 https 的 url,之后会发生什么?
- 如果想一次性新建许多线程,每个线程都去发送一个网络请求,然后想等这十个网络请求的返回解析完成之后再去做别的事情,怎么去做这件事情呢?
- 一个线程做十个事情和十个线程分别做一件事情,总的 CPU 时间,哪个方式更快?
- 使用多线程访问共享资源需要加锁,那么为什么 Java 当中会有这个访问冲突呢?
- 那么为什么会有主内存工作内存这样的设计呢?
- 写题目:题目是英文的,找出数组中最大的 k 个数?
我中间是写了个快排。
- 如果是这个数组特别大,k 的值特别小呢?
- 反问环节:问了下面试官对我面试过程中暴露的一些问题有什么建议?面试官说很多底层的问题也有接触,回答的过程比较详细了,但是对于一些场景问题反应不够快,实践稍微缺少一些,也给了一些建议,说我准备得还是比较充分。问了下部门是做些什么内容?讲了下培养机制等等。然后又问了下我对新技术的了解这些。
字节二面
- 自我介绍提到了项目
- 然后就开始问项目是什么样的,是课设毕设还是什么?然后说下项目。
- 然后开始问什么时候接触安卓的,开始学习 Java 的时间,学校学习的课程等,实验室的情况等,以及做完项目以后学了些啥?
先问了这些情况以后,面试官说挺好的,然后接着问问题了。
- ArrayList 怎么扩容?
- HashMap 内部结构什么样的了解吗?1.7 到 1.8 为什么要做这样的改动呢?插入的时间复杂度等。
- 了解 SparseArray 吗?提到的一些结构,它的作用是什么?
- volatile 这个关键字是做什么用的呢?
- 多线程操作加锁怎么用?
- Synchronized 和 Lock 的区别?这两种锁的使用场景又是什么呢?怎么做选择?
- Java 的动态代理了解吗?
- 代码过程中用到了 Synchronized 和 Lock 吗?提了下项目当中涉及的生产者消费者模式的运用。
- Synchronized 是可重入的吗?
- Throwable、Error、Exception 他们之间有什么区别啊?
- 怎么样让一个异常变成 CheckException 呢?怎么让别人调用你的方法必须加 try catch 呢?
- 如果 try catch 的是 Throwable,这个时候程序执行到这抛出一个 Error,能够 catch 住吗?
- Android 的事件分发机制?提到的拦截是在哪个方法?View 有这个方法吗?
- MotionEvent 中的 CANCEL 事件这个事件时怎么产生的呢?
- Activity 的生命周期,oncreate、onstart、onresume 分别代表什么时机呢?
- 这三个当中哪个能够做耗时操作呢?
- 点个按钮,ActivityA 到 ActivityB 期间,生命周期的转换。
- 说下做了什么自定义控件?父类是什么,做了哪些处理,什么效果?用了啥?
- invalidate 和 postInvalidate
- View 绘制的流程?
- 然后开始问我什么时候可以去实习,大四有课吗?
- 问数据库了,group by 关键字作用?join?三个范式的定义?
- 设计模式了解哪些?
- 思考问题:序列当中正负数都有,怎么要求的一个最大和的连续序列?讲了思路以后写代码。
- 反问:问了面试官可提高的地方,建议知识点可再细化一些,and 算法这块动手前可以想的清楚一些。
字节三面
- 自我介绍,讲下项目
- 问了下采集图像信息以后要分析的话模型怎么训练的?
- 项目当中遇到的问题。
- 事件分发
- 事件分析,UP 事件怎么确定最后传递给哪个 View 进行处理。
- 如果说手指滑动出一个 View,并没有出发一个 Click 事件,这个时候是怎么处理的呢?
- OkHttp 的设计觉得有些什么好的特点?说了下设计模式、连接管理、连接复用这些。然后说了下 HTTP 当中的一些内容
- 刚刚提到的是 HTTP1 当中的内容,那么 HTTP/ 2 有哪些不同呢?
- 说完以后,面试官说没关系,答得不是太好吧。然后面试官说前面两面偏基础的东西问了很多了,然后问我 Android 这个方面的学习主要是通过一些什么途径呢?
- 现阶段最大的困难是什么呢?
- 可以实习到多久?
- 实验室的项目做到最后是个什么状态呢?是个 demo 还是说实际上有用到?
- 发过一些专利或者著作什么没有?或者关于一些项目当中比较好的点。
- 然后开始做题,题目大概就是一个二位字符数字,然后搜索某个单词是否在这个二维数组当中以任何位置开始存在路径能够匹配这个单词。
- 反问环节:
也是问面试官从面试过程看有什么地方需要提高,但是面试官说关于缺点这个问题,很短时间内没办法回答,但是给我提了一些建议,聊了下 Android 体系当中的一些分支,深入源码等内容,学习渠道最新进展架构 Jetpack 等。
欢聚
- 自我介绍,然后开始讲项目。
- 因为项目里面用到了 MPAndroidChar,然后这里围绕绘图啊,假如说自己去实现一个图表怎么封装等等问了很久。柱状图、饼状图、标识等等。
- 写过的自定义控件介绍下。
- invalidate 和 requestLayout 方法的区别?
- 为什么 invalidate 不需要经过测量和布局呢?
- 那 invalidate 的过程这个 View 也不确定位置有没有变,怎么考虑呢?
- synchronized 和 Lock 的区别?开始没听清,然后面试官给写出来,面试的时候经常要给我写一些东西,每次说“我打在公屏上吧”,感觉特出戏啊哈哈。
- 那么公平锁和非公平锁怎么实现的呢?
- ArrayMap,SparseArray 的结构和操作等等。
- volatile
- Fragment 生命周期
- 那前面弹个对话框出来,这时生命周期会怎么走?
- Activity 的启动模式
- 了解 Kotlin 吗?说下扩展函数吧?
- 写下快排。
- 反问环节:问了下面试官在面试过程中发现的一些问题的建议等等,面试官说有的地方思维有点乱,可以再总结好一点;然后框架设计的方面再思考下。