2020 这一年的 Android 面经汇总 (百度、腾讯、滴滴,查漏补缺
职位都是:Android 客户端开发
最后有一些 PDF 文档笔记,是准备面试的知识汇总,数据结构,计算机网络啥的基本上都有了。嗯,自己收录、整理和分类的,还请尊重知识产出。大家可以直接去我 GitHub项目中查看:https://github.com/733gh/Android-T3,快速领取请加Android粉丝裙:872206502
====================================================================
1 面 40 分钟
自我介绍
android 进程间通讯机制
binder 详细讲解
性能优化—-日常开发方向
启动优化—虚拟机 android5.0 之前,android5.0 之后、
另类优化:插件化
插件化注意要点
手写代码:View 类的遍历打印子 view
java 中同步锁有几种
单例模式有几种,写其中一种
对称加密和非对称加密
https
代码执行过程(编辑-编译—链接—运行)
从 java 角度来分析上述过程
动态链接和静态链接的区别
物理地址和虚拟地址的区别
2 面 30 分钟
现在有一个不稳定的网络,需要传输数据,如果保证数据包的准确性?
先讲下 TCP 是如何做的
让自己去实现的话,你会去怎么做?
超时重传缺点有哪些?(效率低下,重复收包,去重)
http 的请求报文结构,响应报文结构
现在有一个服务器已经启动,然后在客户端这边不使用 http 协议,仅能使用运输层以及之下的网络协议的情况下,写代码模拟一个类似 http 协议连接的过程以确保与服务器能 ping 通(核心:http 请求头)
3 面 HR 15 分钟
自我介绍
了解安装过链家的 app 么?
你看下 ios 版本的链家 app,说出你的看法
能否来实习
……
面试体验:
链家一面是一个超级超级漂亮的美眉有些像贾静雯。我一开始以为是 hr,,,哈哈,后来上来第一个问题是问我进程间通讯机制,其实当时我脑子里想的是 hr 问的一些问题,有点脑子转不过来。二面是一个不是搞 android 的面试官,人挺好,问了些网络的事情,我的知识点都知道,但是一直没怎么能 get 到他的点子上…三面 hr 是一个男的,恩,第一次遇到男 HR,聊得还好总体来说,链家面试流程和面试官都很 nice
====================================================================
百度电话一面 34 分钟
二叉树的非递归实现(前序、中序、后序)
给一个 N_N 的矩阵,找出 2_2 矩阵的和的最大值,时间复杂度?最优?
android 蓝牙连接(传统蓝牙,BLE 蓝牙),如何连接?
JVM 内存分区(每部分异常会报什么错误?)
JVM 垃圾回收算法(详细介绍)
JVM 垃圾回收器(详细介绍)
https 连接过程,握手过程
对称加密,非对称加密
三次握手过程
android 消息机制
android 事件分发机制
百度二面(一小时 50 分钟)
讲一下你做的这些项目里面哪个印象最深刻
你负责的这些部分讲几个你认为比较重要的点
Volley 框架机制说下,你能抽取出(学到)几个技术点?
android 性能优化说下
binder 实现机制
AIDL 文件的用处,aidl 生成的类有什么用?讲下这个类做的事情和原理
进程之间是相互隔离的,那么从 A 进程到 B 进程使用 binder 进行通讯,那么猜想下到底是怎样做的呢?
View 的消息机制你说下,对于 ViewGroup 和 View 有什么不一样?
事件拦截的话,可不可以从子 View 来进行操作?具体思路说下
考虑一种场景:listView 加上一个 header 实现下拉刷新的功能,你要怎样去实现?说说思路
如果这样的场景下:listView 和 header 属于不同的 view,相互为兄弟 View,外部套一个大的 viewGroup,如何进行事件分发?从初始态到用户拉下出现 header 的过程来依次分析
如果是这样的场景:listView 和 header 属于同一个 view 层,那么下拉刷新又该如何实现?事件拦截又该如何去做?
发过来一个网址,手写代码
根据他提的需求,写代码(主要就是设计模式的使用原则和设计模式的使用):基本上涉及的知识点:策略模式,工厂方法模式。之后根据不同的新需求如何尽可能少的修改原来代码来实现新功能。
对上一步中的抽象类和接口说下优缺点?
为什么 java 是要求是只能单一继承?却可以实现多个接口?说下你的见解
抽象类属性中什么场景下是优点?什么场景下优点又变成了缺点?
使用接口什么场景下是优点?什么场景下优点又变成了缺点?
权利翻转:你有什么需要问的么?…
百度三面(50 分钟)
自我介绍
能不能立即过来实习?
网络分层?7 层,5 层,4 层,具体说下每层干啥
ip 是哪一层协议?
post 与 get 的区别,get 有长度限制么?
为什么要使用 ip 协议?直接使用 mac 地址连接不可以么?
全球这么多厂商,生产的设备如果有重复的 mac 地址,你如何解决这个问题?网络数据包传输会有什么问题
你是网络管理员,从英国的一台电脑要打开中国的一个网页,现在就是连接不上(dns 正常可以解析到正确 IP),你能考虑到哪些问题?
你是衡水的手机号,现在你在湖北,那么北京的手机号打你的手机为什么你可以接到电话?
接着问,你数据结构知道吧?
快排时间复杂度是多少?最差?平均?为什么时间复杂度是 O(N*logN)?怎样推导出来的?
你对 app 推送有什么了解?如果是你来实现的话,你能怎么做?
中国有 13 亿人,对全国身份证号进行排序,你会怎样去做
你上级让你去安排一个日子来举办活动,要求这一天一定不能是周六或者周日,一定要在周一到周五之间,你如何判断一年里面有哪些日子是合适的?
你有什么想问我的?
面试感受:
1 面基本上完美,很舒服。2 面面试官很有深度,并且人超棒,会引导你去如何解决。3 面是经理面。我说错了一句话,嗯,导致失败了吧,其实三面总的来说打得也算是马马虎虎到 70%,一句话失误导致最后失败了吧。。。郁闷了好多天,,,
====================================================================
小米一面 (1 小时 20 分钟)
讲一个你印象比较深刻的项目
讲一下 Volley 框架的实现机制
BLE 蓝牙的使用流程
设计模式你说下
binder 机制应用层面上说下
View 事件分发机制说下
android 性能优化说下(布局优化、内存泄露、bitmap 压缩等等…)
eventBus 框架是干什么用的,实现机制?
ANR 和 crash 遇到过么?怎样解决
编写代码(给一个网址,编写代码)
输入一个 n*n 的正方形矩阵 a,要求填充逻辑代码,将矩阵 a 顺时针旋转 90 度
小米二面(1 小时 20 分钟)
自我介绍
你做的这几个项目挑出一个来讲一下
步态分析器这个项目的话,你感觉核心实现是什么?
讲一下蓝牙有几种方式,你用的 BLE 的蓝牙流程说下
假如说你的 app 现在使用了一个 A 的第三方库,那么为了以后可以容易换成 B 的第三方库,你会怎样去做减少后面的修改难度?
android 的多线程你知道多少?介绍下
asyncTask 的内存泄露你知道么?
给一个网页,手撕代码
题目:一个字符串,开始可能有 0-N 个空格,然后在这个串中每个单词之间有 1-N 个空格,最后的结束也有 N 个空格,现在要求最后的输出结果是开始不能有空格,每个单词之间只能有一个空格,最后全部是空格的格式
一、先实现,无要求
二、空间复杂度要求为 O(1),再优化
武汉现场面三面 40 分钟
自我介绍
讲一个你熟悉的项目
手写代码:一个数组中的数字,有大有小,如何用最少的+1 或者-1 的操作消除数组中的数字差异过大的情况,返回你的操作次数
intentService 了解么?说一下他的用处和原理
intentService 和 service 的区别
intentService 现在要求让他的任务可以并行执行,你会怎样去实现
asyncTask 说下主要的方法
activity 销毁之后,那么 asyncTask 如果还在执行,那么会造成什么问题
activity 的旋转屏幕的生命周期变化
手写代码:一个单链表,每三个节点反转一次
你有什么想问我的么?
面试体验:
小米每次面试基本上必备的就是手撕算法,so,一定要做好点准备,难度都一般,不是难的那种。另外从 android 的技术上来说,从我的面试经历来说都是一点即过,面试官没有多少深入的挖掘知识点。面试官都很 nice,有些算法上卡着了,会一步一步的引导你。赞一个
======================================================================
今日头条 1 面 30 分钟
自我介绍
两个有序数组,求这两个有序数组中最大的 K 个数(要求时间复杂度空间复杂度较低)
对于栈这个数据结构,实现以下几个方法:push,pop,max(要求空间复杂度较低)
今日头条 2 面 1 小时
自我介绍
android 事件分发机制说下
touchSlop,touchDelegate 的理解
viewStub,merge、include 的理解
java 引用级别
用过什么第三方库?(用过 eventBus,Volley。知道 RxAndroid,okHttp 等。。写过 demo)
用过什么编译器
内存泄露原因(从 JVM 开始和他说起)
gcRoot 有哪些?
如何检测内存泄露,有什么方式
算法:一个有序数组,寻找 k 值出现的第一个位置(针对算法要求最优)
算法:每个人都有工作时间区间,现在有 N 个人,他们每个人分别有 K 个工作区间。现在要找到一个大家都空闲的时间段进行开会,那么如何来找到这些空闲时间段?讲出思路和时间复杂度,空间复杂度
面试体验:
武汉现场面,一面不是 android 开发面试官,应该是 java 的,所以就问了算法了。每个算法不是很难,但是会让你写最优,只有思路不行,必须要完整写出来。二面是 android 面试官,嗯,总的情况的话答下来有 80%左右吧。前面都还好,最后我问他问题的时候我问他对我评价如何,然后他说我对技术不热情,问我是不是跨专业?我一脸懵逼,,理由如下:你知道目前的新框架为什么还在项目中用旧的框架?你项目中还有用到 eclipse 的,为什么不用 androidstudio?然后我给他说:我选择框架只选择针对我这个项目合适的框架,并且框架原理相同,我知道了一个原理了其他的也就是一样的了。并且我平时也用过新框架自己搞 demo;第二:我进入实验室的时候就是 eclipse 的项目,我是接锅的。后面的我自己搞得项目就用 androidstudio 了,平时 demo 我也是用 androidstudio 了,有问题么?拿着我的简历然后问我是不是跨专业?呵呵哒,算您会挖苦人。。直接告诉他,今天就到这吧,面不起我还可以躲得起。。
====================================================================
华为优招
一面:
上来是做自我介绍,之后开始问项目,讲项目中的认为的难点,印象深刻的地方。
即时通讯 IM,BLE 蓝牙连接
针对简历继续问
android 消息机制 view 分发机制 android 性能优化 binder 机制 设计模式(包含设计原则)
android 相关:
广播的静态注册与动态注册 广播的有序与无序 service 的如何保持不被杀死 内存泄露(handler 等…)
java:
== 与 equals 区别 stringBuffer 与 stringBuilder 区别 hashmap 的原理
网络:
post 与 get 区别 http 与 https 区别 网络错误码
二面
聊人生。。。
=====================================================================
拼多多 一面(30 分钟)
做自我介绍
android 布局说下
android 四大组件说下
activity 和 activity 传输数据怎么做
使用 intent 传输数据对数据有什么要求
service 和 activity 的区别说下
ANR 了解么?如何解决?
给你一个数组,里面都是 long 类型数据,有重复数字有空格,要求去重,空间复杂度 O(1)。说下思路
跨进程通讯你说说看有哪些
binder 机制说说你知道的
常用的排序算法说下
自定义 View 实现,应该注意什么
View 的生命周期—如果 activity 被重建,那么 view 的生命周期怎样变化
activity 横竖屏切换,对应的 view 的生命周期
activity 横竖屏切换,activity 的生命周期
activity 横竖屏切换,activity 一定会调用 onDestory 方法么?
通过在清单文件中进行设置不让他进行横竖屏切换的话,activity 是如何知道进行了横竖屏切换
有什么想问我的?
二面
lambda 编程知道么?
afinal 框架?呵呵哒
volley 中对 cookie 的处理?呵呵哒
GC 回收算法
http 报文 cookie
GC roots 有哪些
GC roots 遍历递归
同步,异步函数函数修饰符修饰符?future
面试体验:
拼多多一面远程电话面试,基本上都是基础中的基础,没有什么压力。所以很简单的进入了提前批武汉现场技术终面。技术终面那天先面试
的 HR,HR 很 nice。对于技术终面面试官来说,面试体验到巨差:据说是数据挖掘和客户端的 leader,然后我面试客户端方向,我做自我介绍的时候说道 14 年实习的项目,然后他问我 14 年用的框架源码?14 年的框架早就淘汰了好么?我说我可以讲下现在我项目中的网络库 volley 的实现机制,然后他没搭理我,问我 volley 这个库他是如何处理 cookie 的?我勒个去,有没有搞错?volley 没有对 cookie 进行过处理好吧?源码都看过做过解析的,然后他不信。。之后拿出我之前的题目让我做,任务调度的那个题目,一共是三问,面试官问我有没有问题,我在他的提醒下改了前两个题目,第三个题目还没有改就说今天到这结束了,好吧,那就结束吧,我也想结束。。
====================================================================
网易一面:40 分钟
自我介绍……
项目挨个问了下(准备充分,无压力)
volley 框架说下
手写一个生产者消费者
手写 fragment 生命周期和 activity 生命周期,并把生命周期一一对应上。
热修复说下,几种方式?各自原理?
插件化了解么?说下,基本原理知道么?
混合开发了解么?
A 应用如何打开 B 应用的界面?
安卓性能优化有哪些?
recycleView 说下
activity 与 fragment 交互,如何互传数据
binder 说下
activityManagerService 知道么?说下
android 中的广播说下,粘性广播知道么
网易二面:基本没问项目,完全面试官自由发挥。40 分钟
无自我介绍,直接开怼。
popupwindow 中是否可以再创建 popupwindow?为什么?
dialog 中是否可以创建子 window?为什么?
dialog 创建为什么传入 activity 的 context 而不是 applicationContext ?
fragement 和 activity 交互方式
fragment 可不可以在构造函数传递参数?使用 setArgument 的原理?
两个应用程序 A 和 B,A 要用 B 的登录信息,怎么做?
contentprovider 是如何保证操作数据库原子性?
加载进来的 class 类是否可以动态修改?
热修复原理有哪些?说下
binder 是在 jni 层怎样实现的(一次拷贝)?
client 使用 serviceManager 可以找到对应的 service,那么自己写的 service 的话,client 是怎样找到的这个 service?
安卓性能优化你知道有哪些?
一个后台任务栈,从上到下 A B C 三个 activity,内存不足回收。那么从后台到前台打开是哪个界面?为什么,原理?
子线程是否可以更新 UI?那为什么安卓要求不能在子线程更新 UI?
结束,几分钟以后问 hr 小姐姐:很遗憾……
面试体验:
一面面试官很 nice,基本上问的问题也都答上来了。也乐于听你说的话。二面面试官上来没让自我介绍,拿一个笔开始划你的简历,但是基本上也没有问过简历上的项目。问的问题有些很刁钻也很深入。如果在开发过程中没有真的去搞懂一些 api 的话,会很吃亏。感觉面试官技术有深度,对于一些项目 api 中的细节有比较深的认识。有些自负,问问题都声音小的很。最后都不让问问题。很 nb 的样子
======================================================================
美团点评 1 面 40 分钟
自我介绍
手写代码:View 树遍历(有 viewGroup 和 view,打印所有的 view 还有他们对应的层级)
在列表里,如何实现多种不同的布局?有哪些方法
java 语言中的现在的一些新特性你知道有哪些
java 反射和注解你知道么?讲下
EventBus 的原理说下
现在有一个书签,书签有三种类型,现在你需要提供一个功能类,针对于不同的需求进行不同的书签选择,你会如何去实现?
网盘中有 10 个文件,现在用户可以任意拖动这些文件,改变它们的排序,怎么设计上传的接口,使用什么样的数据结构进行存储
你在开发中使用的是哪种结构框架?有几种结构框架,介绍下
平常是如何学习的?
你有什么想问的么?
2 面 40 分钟
自我介绍
你认为什么样的代码是最好的?你会注意些什么?
手写代码
判断一个字符串是否为一个合格的密码,一个合格的密码需要满足如下条件:
评论