安卓工程师:21家公司的面试真题总结

拼多多 学霸提前批Android研发工程师 offer

笔试

基于给定接口实现ImageLoader框架

一面

自我介绍 

静态变量和实例变量的区别 

重写equals()方法的注意事项;两个list是怎么判断是否相等的? 

HashTable和HashMap的区别;是否允许键为null 

数据同步的方法;synchronized可以在对象上加锁吗?在方法上加锁是加在哪个对象上? 

进程间读写文件的同步方式 

了解哪些加密算法;AES和RSA的区别 

HTTP响应码 

进程优先级;Android进程优先级

如何使一个Service处于另一个进程中;进程的服务保活

Touch事件分发机制

如何实现客户端长连接的?重试策略是怎样的?如何监控HTTP请求的? 

提问问题 

二面

三道题选两道

大顶堆和栈的概念 

最短路径算法概念 

如何缓存HTTP 

HR面

也不能算是HR面吧,简单聊了聊。 

项目介绍;担任的角色 

家庭情况;期望薪资

在哪里实习?实习的时候拿到过哪些offer 

介绍了拼多多的待遇以及工作制度 

三面

自我介绍;项目问了些 

如果安卓是单线程的,那么如何处理界面刷新和网络操作两个模块 

算法题。

CVTE TE计划 Android开发工程师  

一面  电面

自我介绍 

Activity的launchMode,每种的概念;singleInstance用在什么情形 

转动屏幕时会发生什么?如果有一个进度条,转动屏幕时会发生什么?如何是自定义的进度条,怎么办? 

Thread和HandleThread有什么区别;MessageQueue的结构 

进程和线程的区别;Android的多进程通信方式;aidl是怎么使用的 

多线程的问题。每个线程一个单例,怎么做?ThreadLocal怎么用的? 

浏览器输入www.google.com之后用到的协议;NAT是怎样的? 

内存泄漏的情况;Handler泄漏的具体场景,如何避免;GC的过程;强软弱虚引用 

如何复用View;ViewHolder是如何使用的;ListView是如何复用View的

事件分发机制;dispatchTouchEvent和onTouchEvent的区别;

了解过哪些开源框架;OkHttp和HttpURLConnection的区别

职业规划 

二面 视频面

自我介绍 

长连接如何实现的;TCP粘包怎么处理的;协议改进的方法;MINA、Netyy框架 

OkHttp的源码,拦截器一块的源码;有没有自己实现拦截器;OkHttp这样设计的好处;Volley缓存一块的设计;UIL如何管理请求的;

Android的性能优化;

为什么有滑动冲突;怎么处理;涉及的主要方法有哪些;dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent分别用在什么地方 

Binder的机制;aidl;服务端如何确定调用的是哪个方法;Binder线程池,线程安全指什么; 

RxAndroid用在哪里;用到了哪些操作符;map和flatMap的区别 

项目中用到了哪些设计模式;模板方法是怎么使用的

手写代码,实现一个数据结构:栈,考虑扩容,加入线程同步。 

写过博客吗?主要内容是哪块;参与过开源项目吗? 

了解过Android的最新动态吗?有没有用Kotlin做过项目;如何学习一门新语言

了解过CVTE吗?以后的职业规划 

终面HR  QQ视频面

面了两次CVTE的hr面,总结了会问的问题。如下: 

前面的面试如何,打个分 

职业规划;工作时间 

家庭情况;性格都是怎样的,对你的性格有什么影响 

如果CVTE给你offer了,如果不会来,会是什么原因

目前拿到了哪些公司的offer?CVTE也给你offer了,你会选哪;还会在投其他公司吗

宿舍关系怎么样?人生中压力最大的事情

远景能源  

由于实习的时候拿到了实习offer,所以走的绿卡流程。在上海实习的,就直接去公司面试的。 

一面技术

自我介绍 

说了下?做的是什么? 

使用的UI自动化测试框架的原理是怎么样的?讨论了下iOS是如何进行UI自动化测试的 

对热修复的理解;能否修复so包? 

GC;碰到的OOM情况;聊到了参加的阿里中间件比赛,说了下当时的思路;如何进行内存分析

TCP编程时的协议是如何制定的;有什么改进的地方;PB的编码方式是如何的,如何可以节约空间的。 

聊了聊RN以及对技术框架选取的一些看法 

HR面

HR面比较简单 

通过技术面后做了两个测评,类似心理、情商评价之类的。 

高管面

高管面比较简单,就QQ视频了5分钟,简单聊了下实习的氛围和以后的打算。 

offer

有赞

一面  Android开发工程师

自我介绍 

如何学习Android 

如何设计一套图片加载框架;三级缓存。为什么选择LruCache? 

了解过launchMode吗?使用过的具体模式的场景?微博分享页面应该使用哪种launchMode? 

知道内存泄漏吗?了解的内存泄漏?Handler在哪种情况下会引起内存泄漏?什么好的工具可以检测内存泄漏? 

IntentService原理 

用过WebView吗? 

如何实现一个图片浏览器的思路? 

有什么想要问的? 

有赞 Java开发工程师

一面

自我介绍 

项目提问 

TCP连接;为什么不是两次;为什么不是三次 

HTTP请求报文结构;GET与POST请求;HTTP版本知道哪些,区别是什么 

进程调度算法有哪些;死锁的必要条件;如何消除;如何避免;银行家算法; 

Java的集合;HashMap的结构;为什么改成红黑树;阻塞队列一般用在什么地方 

Java泛型;泛型擦除;任何情况下都会发生泛型擦除吗? 

双亲委派机制;两个类被不同的类加载器加载,是同一个类吗? 

如何实现一个线程;线程的状态机;什么情况会使线程阻塞;ThreadLocal;几种线程池;如何自己设计一个线程池

二面

自我介绍 

自己做的app是怎么做的; 

Java的GC;ActiveMq看过源码吗?MySql学习过吗? 

使用过哪些设计模式?

编程。主要考察编程能力和编程习惯。一个字符串,统计某个字母出现最多次;写好之后,改了需求,找出出现次数最多的十个字母 

双亲委派模型;为什么要双亲委派模型

提问问题 

头条 Android开发工程师  offer

终面

实习项目介绍;如何实现的;为什么使用反射;XML解析的方式;DOM和SAX解析的区别;注解的分类;ButterKnife实现原理 

MVP模型是怎么样的;如何实现的;P层是怎么实现的 

为什么选用OkHttp库;拦截器链是如何实现的;自己实现的拦截器是用于哪里的;是如何做DNS的; 

处于onResume的activity a启动activity b按照时间顺序生命周期是如何调用的;onSaveInstanceState方法会在什么情况下调用

View的事件分发机制;ACTION_CANCEL什么时候被调用,一般switch-case中如何处理; 

Android常见引起内存泄漏的情况;Handler引起的内存泄漏是怎样的一个过程;使用过哪些工具进行内存泄漏问题;LeakCanary的工作原理是怎样的;MAT如何进行内存泄漏分析; 

HTTP2和HTTP1.1的区别。

手写算法题。一个二维数组,左到右有序,上到下有序,如何找一个值。剑指offer原题。

看过哪些源码;如何看源码;如何学习Android 

一个月后拿到了意向书,互娱部门,做抖音。

阿里文娱 优酷 Adnroid开发工程师  

终面

自我介绍,项目介绍 

阅读类APP有没有后台?没有后台的话,每一个app都要去获取多余内容可以怎么改进?爬虫怎么做的?

ImageLoader怎么实现的?三级缓存怎么做的?保存图片在内存中会发生OOM吗? 

MVP模式的理解 

信息推送怎么实现的?协议怎么设计的?AES算法是怎样的?如何保证数据的正确性和不遗漏消息? 

实习的项目是如何做的?怎么去匹配XML和TXT中的字段? 

UML了解吗?软件开发流程是怎样的? 

设计模式了解吗?如果一个支付的模块,会调用不同银行的接口,不同银行的接口所需参数和返回参数均不同,使用哪种设计模式? 

Android机型适配怎么做?如何捕获Crash?

本科和研究生均不是计算机的,怎么学习的? 

HR问了工作地点的意向;投了哪些公司;目前拿到了哪些offer

提问了面试官关于Android APP测试的问题,了解了行业情形

1v2,技术经理和HR,HR是远程实时听录音的 

半个多月后问hr,挂了。真是坑比啊,由于把我简历锁着,我一直报不了杭州这边的阿里,笔试面试都没有机会。日了狗了

网易 内推 Android开发工程师  

一面

自我介绍;除了Android还做了其他的哪些项目; 

Activity的lauchMode;用过哪些;说了一个他们遇到的问题,让帮分析分析 

知道的网络库有哪些;Volley和OkHttp分别适合用在什么场景下 

ImageLoader的三级缓存是怎么实现的;磁盘缓存是怎么实现的;知道哪些图片加载框架 

内存泄漏如何检测;LeakCanary的原理;Handler是如何造成内存泄漏的;内部类都会造成内存泄漏吗? 

参加的阿里中间件比赛是怎样的;简单实现一个生产者-消费者 

Java的线程池有哪几种;需要定时任务使用哪种;CachedThreadPoolExecutor是怎样的 

应用通信是如何确保安全的;Https是怎样的;Android如果采用Https通信的话,客户端这边需要有什么 

提问问题 

二面

TCP的连接为什么是三次握手,不是两次也不是四次   

对Android框架层了解吗?AMS和WMS了解吗? (说了了解AMS,噩梦由此开始) 

Fragment用过吗?Activity如何传参给Fragment?为什么用setArgument传参,而不是使用带有参数的构造器? 

知道系统杀进程吗?如果栈中从底到顶现在是A,B,C,然后系统把应用杀了,重新点击,显示的是哪个Activity?这时如果C里面有Fragment是怎样恢复的?(中途解释了为什么要用setArgument传参,说在走Activity的生命周期之前会先有一个恢复过程,反正听的云里雾里)栈下面的A,B存不存在 

Binder机制;为什么Binder是一次拷贝   

Activity和Service有什么区别;Service是谁管理的;bindService需要使用到Binder吗?系统服务和自定义服务启动有什么区别? 

对协议的理解 

秋招正式批的时候,又做了网易笔试,后来又通知去笔试,但由于已确定去51信用卡了,就没有再去杭州面试。

360 Java工程师  

一面  18min

自我介绍 

String和StringBuffer的区别;StringBuffer在传参时用final修饰,可变吗? 

HashMap与HashTable的区别;HashMap在插入自定义类时,要重写哪些方法,为什么 

volatile关键字 

Java虚拟机,了解多少说多少 

锁的类别;用过吗 

数据库了解吗?sql语句

用的什么IDE;Linux熟吗?项目有部署到Linux上吗

项目中使用到什么框架没

项目中用过哪些设计模式 

二面

自我介绍 

关于项目提问的   

数据库了解吗 

线程安全的集合类有哪些;迭代器模式是怎样的 

设计模式了解吗?哪些是构建型的 

优势在哪里;以后的职业规划 

提问问题 

三面 HR

自我介绍 

期望薪资;期望工作地 

目前投了哪些公司;会去哪家公司 

有什么问题提问

三面完gg,估计在武汉要的钱太多了

商汤科技

面试前发现岗位是测试工程师,结果一面是个测试面的;而且那边网信号很差,听不到声音,全程打字,好尴尬。

一面 测试(因同名而导致信息错误)

写一个Http请求 

写一个文件读写,从一个文件读,然后写入另一个文件 

android 的顶部banner用什么控件实现;核心代码 

不想做测试,更想做开发?对商汤的了解 

提问问题

后来参加笔试,过了笔试,由于不想去北京,所以拒了面试。

新美大 Android开发工程师  offer

一面

自我介绍 

为什么选用OkHttp?为什么用MVP模式? 

ImageLoader的三级缓存怎么做的;OkHttp的磁盘缓存怎么做的? 

如何删除文章的广告之类的?有遇到不符合的情况吗? 

HashMap是线程安全的吗?HashMap线程不安全会造成什么现象?如何使HashMap变为线程安全的? 

Java的内存模型;GC;遇到过OOM情况吗?有什么可以检测内存泄露的工具 

文章列表用的什么什么控件?ListView如何优化?RecyclerView用过吗?和ListView的区别 

应用中有几个Activity;ViewPager嵌套Fragment怎么用,遇到过什么坑没?

自定义View时自定义属性该怎么做?

印象最深刻的项目,或难点

二面

自我介绍 

界面展示用的ListView还是RecyclerView?如何做文章的过滤的?如果改成别的网站需要怎么做? 

ImageLoader怎么实现的?内存缓存使用的是什么策略? 

项目中TCP+HTTP+JSON是怎么回事? 

android ui自动化测试 

实习的项目 

对Kotlin的了解;准备让用Kotlin写一个界面的 

给了一个布局,让说说看怎么编写 

了解啥新技术

问问题 

三面

自我介绍 

为什么选用AES加密? 

全程没聊技术,介绍他所在部门做的事情,问我感不感兴趣,我也提问了一些问题,聊得比较投机 

手上的offer 

HR面

问了一些基本信息,手上offer情况,对薪资的要求。由于三面全程没问技术,心里比较虚。 

小红书 Android开发工程师

自我介绍;项目提问 

为什么使用AES加密,不使用HTTPS?AES本地加密,如何防止apk被反编译?TCP协议报文是如何定义的?如何解决分包的问题的?对HTTP2.0有什么了解? 

Launcher->A->B->C->D->A(singleTop)->B(singleTop)->C(singelTop)->D(singleTop)->A(singeTask)->B(singleTask)->C(singleTask)->D(singleTask)->A(singeInstance)->B(singleInstance)->C(singleInstance)->D(singleInstance)后,返回栈里有几个Activity,分别是怎样的?有几个任务栈?

编程题。n元,一瓶汽水1元,一个瓶盖0.2元,问可以喝多少瓶汽水。 

提问

说一面通过,10月中旬再进行面试

招银网络 软件开发工程师

自我介绍 

项目提问 

AES加密算法 

MVP模式 

GET和POST区别 

静态变量和成员变量的区别 

获得Class对象的方法 

笔试做的怎么样

提问问题

一面后没有继续去现场继续面试

斗鱼 Android开发工程师 

现场首先一个小时做一套卷子,然后笔试过了再面试。 

一面

自我介绍 

对着卷子中问问题;一个栈不可能的出栈顺序;算法题的思路;快排是什么 

Java基础 

二面

二面技术官是个话痨,全程不聊技术,就聊Android以后的走势之类的。 

HR面

HR也就是聊了聊意向地,优缺点,希望工作地、薪资等等。 

之前说斗鱼比较难进,但是这个面试真的是太水了,据说今年涨薪了,希望能拿到这样一个offer,在武汉还是挺有竞争力的。最后估计因为直播看的不多,以及人招的确实少,挂了。和我一起的一个阿里大佬也挂了 

ThoughtWorks 软件开发工程师  

内推的,首先做了一个网上作业,两三天做完

一面

自我介绍 

就做的网上作业,增加新需求,有一些日子有打折活动。对于我这种扩展性很强的代码而言,简直so easy 

项目提问 

MVP模式;ImageLoader哪几级缓存,怎么实现的; 

之前参加的结对编程比赛,怎么看 

HR面

HR主要就项目遇到的困难,个人性格问题进行提问,英文简单问了两句。主要是考察价值观和thoughtworks是否相同,要表现地善于合作、分享这些吧。 

海康威视 Android开发工程师  offer

一面

项目提问;采用的什么方式解析XML;XML解析的方式有哪些;为什么选用SAX解析方式 

反射涉及涉及哪些方法;如何判断文档结构是否变化的; 

TCP和UDP;HTTP报文协议 

AES加密算法;什么是对称加密算法、非对称加密算法;知道哪些非对称加密算法 

HR面

聊了期望薪资,工作地点和手上的offer情况。

贝贝网 Android开发工程师  offer

一面

自我介绍 

三级缓存怎么做的;内存缓存的大小怎么定的; 

实习为什么选择**公司;实习项目是怎么做的 

阿里中间件比赛是怎样的

问问题 

一面比较轻松,二面比较深,毕竟技术合伙人面试的,感觉不太好 

二面

自我介绍 

用了哪些开源库;对Android哪些热点技术研究了;热修复的原理是什么,看过源码吗 

模块化了解吗?如果自己实现怎么实现 

图片三级缓存怎么做的;如何避免OOM;

有没有对性能优化进行过研究;overdraw如何解决 

HR面

家在哪里;对贝贝的了解;手上的offer;七天出消息 

兴趣爱好 

offer给分配了Java开发一职。

腾讯 Android开发工程师  

一面

自我介绍

学院多少人;编程水平排名如何;最近一次不是为了找工作而编程是什么时候;给offer后可以实习吗?抽烟吗?喝酒吗?兴趣爱好? 

谈谈Java的GC;内存泄露的引起原因;优化内存方面写代码有什么注意的,有什么实际应用 

一道多线程设计题;从文件A和B中每次读1K数据,然后将这两块组合起来发到网络上,怎么设计,提示从多线程考虑;给出了解决方案后,问了下BlockingQueue的底部实现原理;然后问网络上传数据有哪些方式;如何制定自己的TCP协议 

一道算法题。一个字符串,中间有类型"\哈哈"表示一个表情,然后让你把字符串区分出类型,比如文本->某某表情->文本...这样一个形式 

Android掌握的怎么样;然后问了一道关于事件拦截的题;一个ViewGroup,它的每个子View都是可以随意拖动的,该怎么实现 

提问问题 

二面

二面就是聊天,全程没技术,然后把我挂了。腾讯从此粉转路。不想招人就别叫我去面试啊,逗。成为了面试官KPI的牺牲品

51信用卡 Android开发工程师  offer

一面

自我介绍 

注解的类型;编译时注解和运行时注解的区别;如何实现编译时注解;有没有自己实现过 

浏览器输入一个网址经历过的流程;DNS具体过程;DNS拦截知道吗?如何解决DNS拦截? 

HTTPS过程;如何防止HTTP请求被监听; 

HTTP Get请求的字节限制数是多少?HTTP缓存是怎么做的;如何浏览器请求了一个没被修改过的响应,返回码是多少 

OkHttp的流程;Socket复用是如何实现的;OkHttp是如何管理连接池的;Okio是如何实现的;和传统IO有什么区别;NIO和BIO的区别;Retrofit了解吗? 

如何更改移动一个View;属性动画的原理;Interpolator的设计模式是什么;如何实现一个圆形的ImageView 

Activty、Window、View的理解;Activity的onCreate()可以获取View的宽高吗?如何在onCreate()里获取View的宽高?子线程可以更新UI吗?一定不可以吗? 

Activity的启动流程;如何启动一个没在Mainfest中注册的Activity 

热修复技术了解过吗?Tinker为何是全量dex?Android的类加载机制是怎样的?如何加载一个dex?   

提问问题

二面

实习期间做的项目;用到什么框架没; 

做的APP是怎么做的;如何实现文章抓取的;删除了哪些标签; 

三级缓存是如何实现的?LruCache的实现原理?加载图片的一个过程;HTTP请求时,如果响应没有修改,返回哪个响应码;还遇到过哪些响应码;如果删除策略修改了,怎么办? 

阿里中间件比赛,谈了谈体会;对开辟线程的看法;线程池数量的设置 

应用中遇到开发问题怎么解决的;对安卓的看法

为什么选用MVP模式开发?好处是什么?应用中有多少个Fragment 

双重检查锁的好处;如果不用双重检查锁,那么会出现什么问题;synchronized加在方法上有什么影响 

项目采用的架构 

三面 现场

终面是赶到现场面的,主要算是聊了聊。包括项目团队如何写作的,项目是如何实现的,对app性能优化方面的认识,对app加固混淆方面的了解;优缺点 

HR面

主要聊了下之前的面试感觉、期望薪资、三方什么时候发放、能否实习,其他一些忘记了。

挖财  Android开发工程师

一面

自我介绍 

应用的心跳机制和断线重连机制怎么实现的?用的Socket是java层的还是jni层的?心跳包是如何设计的?如何监测网络变化的?在新版本中,不能使用广播,该如何实现? 

jvm的堆、栈和方法区有什么区别;sleep和wait有什么区别 

双重检查锁的单例模型;为什么要用volatile修饰,如果不的话,会有什么问题 

25匹马,5个赛道,决出前3名 

Activity启动流程;View绘制发生在哪个阶段 

登录过程,如何保证密码安全传输 

解决hash冲突的方法有哪些;链表插入查找时间复杂度多少;如何提升到log(n) 

二面 现场

二面的面试官是个年轻女性,我一开始还以为是HR呢。 

自我介绍 

项目是怎么做的;有没有用单测;gradle用过吗? 

Github上最喜欢的一个库 

还有一些其他问题忘记了,面完说hr不在,会电话联系我,不知道是不是被套路了 

后来打电话去问,说二面过了,等hr面,不过hr迟迟没来。

酷家乐  Android开发工程师

博客上春招面试经历,为什么面了那么多公司,最后拿了哪几家的offer 

自我介绍 

MVP模式;RecyclerView中的Adapter放在哪一层;放在View层和放在Model层有什么区别

android的动画;4.4之后activity的transion动画属于哪种;Path动画用过没 

Handler消息机制;view.post()与Handler.post()有什么区别;

事件传递机制;OnTouchListener和onTouchEvent()是怎样一个具体流程 

Android优化了解哪些;include和merge有什么区别;viewstub使用时需要注意什么地方; 

内存泄露是什么

Java的集合框架;HashSet的内部实现;为什么使用HashMap实现hashSet;SparseArray源码 

提问问题;问了下公司规模和开发氛围

一面挂。不过说实话,面了这么多公司,一面挂的也就酷家乐了

总结

准确的讲,找工作是从春招开始的,因为当初的找实习也是为了秋招找工作增加经验。最终出于工作地点的考虑和卡中心的福利,选择了去卡中心实习,也顺利转正了。由于比较想去杭州发展,所以重点投了杭州的一些独角兽公司,比如51信用卡、有赞、挖财、贝贝等等,也算有幸拿到了两家的offer,所以最后也选择了51信用卡。

关于校招,想说的很多,经验也有不少,总体来说:基础(算法、语言、网络、操作系统...)+项目+面试表现。

基础

算法

至于基础的话,算法很重要,因为算法渣,很难过笔试,关于这方面,掌握基础算法(排序,查找,树和图的遍历等),把剑指offer刷一遍,再刷些leetcode应该差不多了。(秋招,没过的笔试有百度、搜狗、蘑菇街、滴滴、搜狐、新浪,有些公司不招人那就没办法了)

语言

java的搞java,c++的搞C++,现在源码问的很多,看几篇面经和博客就可以了。

网络

网络的话,主要就是TCP、UDP、HTTP1.1/2.0、HTTPS。TCP设计连接、断开连接、拥塞控制、流量控制等等;HTTPS设计证书下发,加密算法等等。最好有网络编程的经验,对TCP的分包粘包这种概念理解更深,以及TCP协议的设计和序列化,这里可以了解下protocolbuffer序列化方式。

对于Java开发者,Netty源码可以看看;对于Android开发者,OkHttp可以看看,可以加深对HTTP协议的理解。

操作系统

春招时,被阿里问到了进程管理,当时没看操作系统,然后就白瞎了。我认为主要掌握进程管理、内存管理,这是问的比较多的。其他部分的话,追求越高,自然懂的也就要越多 

项目

项目就仁者见仁,智者见智了,不过建议是可以放到github上,包装包装。 

其他

面试表现=80%基础+20%临场发挥,所以基础很重要,基础很重要,基础很重要。

关于比赛和论文,这些都是我没有的,这些也都是加分项。之前参加了阿里中间件比赛,进了复赛,面试中也被问到过几次,还没找工作的朋友们可以准备准备,还来得及。

最后祝大家都能找到一个满意的工作,满意是针对你自己的水平和期望而言的。水平是根据你的天赋和付出而言的,什么都不做而拿不到好的offer而说不满意,这是不对的。心态很重要,认识自己很重要。

你可能感兴趣的:(面试,Android,Android开发,开发经验)