离职后我休整了一段时间,在这个期间内我自己从网上收集整理了一些Android 相关知识点进行梳理,为后面的岗位面试做准备。我3月初离职的,在3月中旬开始了我的投简历面试之旅。一口气我投了十几家,中间包括一些大厂,如:华为、百度、拼多多、网易 等这些公司。但收到面试通知的不是很多。
下面给大家分享的是我印象比较深刻的几家公司面经:
================================================================
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分钟
-
自我介绍
-
你认为什么样的代码是最好的?你会注意些什么?
-
手写代码
判断一个字符串是否为一个合格的密码,一个合格的密码需要满足如下条件:
- 长度必须大于 6;
- 首字母必须为大写字母
- 只能包含 ‘a ~ z’ 或 ‘A ~ Z’ 或 '_‘或’0~9’
- 至少有两种不同类型的字符
-
github账号有么?
-
使用什么编译器进行开发?gradle了解么?关于他的配置文件你简单介绍下
-
设计模式你在日常开发过程中用到过什么?有没有特别印象深刻的设计模式
-
手写代码:有一个类似于exel的列命名规则的字符串,现在给你这样的一个字符串,需要你给出这个串后面的串是什么?
-
你看过哪些源码?你在里面学到了什么?
-
当时为什么选择volley这个http库?
-
你在项目中开发的话,有什么很难解决的bug吗?你是怎样解决的
-
平时你是怎么学习的?
-
你有什么想问我的?
3面 40分钟
-
自我介绍
-
你所在的实验室叫什么名字?
-
你在实验室的话,没有让你出去实习,那么平时你是怎样学习进步的
-
你们现在研究生毕业不考虑到高校任职?现在一流大学去当老师都是什么要求
-
本科和研究生对比的话,你感觉你的成长或者感悟在哪里
-
本科同学的毕业去向
-
玩游戏么?王者荣耀什么级别?现在不玩了等级不下降?
-
现在有几家offer
-
百度的测开岗位你有什么看法,你对这个岗位满意么
-
concurrent包下的一些类有了解么?
-
画一下concurrentHashMap的结构和hashMap的结构
-
对于concurrentHashMap来说的话,同时两个线程的put操作会有什么影响?
-
对于concurrentHashMap来说的话,同时两个线程的put和get操作会有什么影响?
最后
小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料⬅专栏获取
你有什么想问我的?
3面 40分钟
-
自我介绍
-
你所在的实验室叫什么名字?
-
你在实验室的话,没有让你出去实习,那么平时你是怎样学习进步的
-
你们现在研究生毕业不考虑到高校任职?现在一流大学去当老师都是什么要求
-
本科和研究生对比的话,你感觉你的成长或者感悟在哪里
-
本科同学的毕业去向
-
玩游戏么?王者荣耀什么级别?现在不玩了等级不下降?
-
现在有几家offer
-
百度的测开岗位你有什么看法,你对这个岗位满意么
-
concurrent包下的一些类有了解么?
-
画一下concurrentHashMap的结构和hashMap的结构
-
对于concurrentHashMap来说的话,同时两个线程的put操作会有什么影响?
-
对于concurrentHashMap来说的话,同时两个线程的put和get操作会有什么影响?
最后
小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-vDgMdLkZ-1719096756393)]一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料⬅专栏获取