最近和很多粉丝聊了聊最近找工作的情况,发现很多人也是最近都在忙着跳槽换工作,针对这个情况,我把大家所有面试问题都整理了下,也算是给大家开个小灶,帮助你们在面试的时候更有底气,话不多说几百道一线大厂面试真题都给你们准备在了下面。
腾讯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吗?说下扩展函数吧?
- 写下快排。
- 反问环节:问了下面试官在面试过程中发现的一些问题的建议等等,面试官说有的地方思维有点乱,可以再总结好一点;然后框架设计的方面再思考下。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。