来自:nanchen(微信号:nanchen_android) 作者:刘旭 链接:http://blog.csdn.net/liuxu841911548/article/details/79516109
面对着金三银四的黄金时段,耐不住寂寞的我也准备了下跳槽,目标是二线互联网以上公司。,下面总结和分享下最近面试的几家公司的面试题和面试经验。
面试经验分享
美团
状态:二面已挂
参加美团的面试是在年前,途径是通过朋友内推的方式。没有通过的原因是因为自己准备的不足和长时间没有面试的紧张感等原因造成的,总体还是因为自己学艺不精。
一面:一面的面试官很好,当时因为我大概有一年多没有面试了,参加这场面试就显得我特别紧张,简单总结下一面和二面的面试题。
先做个自我介绍?
自我介绍一般来说介绍下毕业的学校,目前所在的公司,工作的职责和经历以及自己擅长的事情就够了,时间控制在3分钟之内。画一下你的最近项目的项目架构?
这个问题要看你是做的应用层的开发还是 SDK(FrameWork 层的开发),应用层的开发一般来说项目架构就从 MVC,MVP,MVVM 的架构上面去说,大体总结下每一层封装的内容,具体细节如果面试官问的话再去说。SDK 的话一般来说都是分层设计,比如我们的地图 SDK 分为应用层,SDK 对外提供的接口层,中间交互层和核心层。面试官要深入了解的话就会问到具体的细节了。看到你项目里面涉及到 NDK 的知识,简单介绍下你对 NDK 的理解以及具体的使用过程?
这个问题可以从 NDK 的发展过程来说,由 .mk 文件到 cmake 文件以及他们的差异。 具体使用过程无非就是 Java 调用 C 和 C 调用 Java,到这来说还是比较基本的,如果你懂的多可以聊一些 NDK 的高级用法,比如与多线程的结合,接口多的时候的封装逻辑,以及动态库如何链接静态库等等。描述一下一个类的完整创建过程?
这个问题主要考察对虚拟机的结构的理解和类对象初始化的顺序。说一下
final
,finally
,finalize
的区别?一个变量被final
修饰,变量的初始化在该类的构造函数里面,这样写对吗?请说明原因。Handler
的源码,主要涉及Handler
,Looper
,MessageQueue
的对应关系,主线程向子线程发消息如何发?在子线程 new 一个Handler
需要注意什么?多线程相关的问题,实现多线程的方式?
volitile
关键字的作用?RecyclerView
的源码?RecyclerView
的优化?ListView
和RecyclerView
如何实现的每个 Item 的滑动?事件分发机制的源码?并且出了一个具体的题目。
自定义 View 的源码以及流程,特别问到过
MessageSpec
的几种测量约束方式,为什么这样设计?设计模式的 6 大原则?解释下每种原则,为什么这样设计?具体问到了几种工厂模式的比较,观察者模式等?
SurfaceView
了解吗?了解它的实现原理吗?主要是Surface
的源码。内存优化如何做的?具体问到了一些分析工具的使用以及第三方工具的源码?
反射用过吗?说一下反射的机制?
手写快速排序,说一下你对几种排序算法的理解以及时间复杂度?
Java 基础的一些东西也有问到,集合类和并发包下的一些内容?
线程间通信的方式?可以在非主线程修改 UI 吗?举一些例子具体说明。
你项目中最让你感到骄傲的一件事?最近遇到的解决不了的问题?
总结:有一些问题回答的不好,导致技术面试没有通过,不过交流的过程也是提升的过程,最后我问面试官对我的评价,面试官送我了一句话:知其然并知其所以然。问题大概就这些,可能由于记忆有一些想不起来了。
Luckin Coffee
状态:已给Offer
这也是朋友内推获得的面试机会,感谢朋友!
面试总共三轮,大概需要 30 分钟完成一套笔试题,2 轮技术,一轮 HR。面试官很热情,说是不要当成面试,就当成是彼此的技术交流。
自我介绍,介绍下做过的项目?
WebView
的具体细节,优化,Java 和 js 交互以及一些安全漏洞,最后还聊到了和 React native 的优劣势等等。网络框架问到了
Retrofit
和Rxjava
,聊到了框架的比较以及Rxjava
的优缺点?了解注解吗?聊到了注解框架
Butterknife
和EventBus
?以及使用EventBus
的优缺点?内存泄漏,内存优化,问到了
Leakcanary
的源码?事件分发机制和
Ibinder
机制?设计模式?
两个栈模拟一个队列,手写代码?
热修复技术和插件化技术,几种方案的对比?
如果入职希望做的方向?
期望薪资等等然后就是和 HR 具体聊?
还有涉及到一些公司业务层面,待加强和完善层面的部分相互交流意见
科大讯飞
状态:未回复,估计已挂 这个面试邀请是猎头推荐的,感觉这个猎头不专业,面试体验不太好。
体验不怎么好的面试,因为面试的岗位是新部门,智慧医疗,在北京也没有具体的办公地点,说是要深入基层,面试官级别应该是比较高,给我的名片显示是北方大区负责人。面试时间大概有 3 分钟,地点是在清华大学的一个联合实验室,深入的技术问题没有问。
简单做个自我介绍,自我介绍可能是感觉说的太多,直接打断了,然后就按照他的思路在问。
先问了项目架构?
问了一个 H5 交互的时候加载状态的 session 应该如何写,可能是他们项目中有实际应用场景,但是我确实是没有接触过。
聊了聊我的项目,我跟他说是偏底层,应用层做的比较少,也可能是他们要招偏业务的 Android 开发,然后后面就没有问了。
吐槽一下,给我的感觉就是特别不专业,一言堂,作为大公司来说,你应该至少安排 2 到 3 轮的面试吧,还有你要招应用层的人,我简历上明明写的偏底层,你又为何要约我面试呢?而且你要招 Android,Android 的面试题根本没怎么问到,好吧,就当是开拓下眼界了。
京东生鲜部门
状态:在谈薪资和 Offer
京东的面试还是很专业的,算上 HR 面总共经历了 5 轮,第一轮的面试官应该是做后台 Java 开发的,问的主要是 Java 基础。二面应该是部门内的同事,问的内容是 Android 基础,问的面很全,几乎什么都会问到,第三轮是部门 Leader,问的内容就比较深了,涉及到的源码和 frameWork 层的东西就比较多了,第四轮是大部门负责人,不会问技术了,就是聊聊大方向,最后一轮是 HR,大公司的 HR 都有一票否决权。
总结下问到的技术问题吧。
一面:
Java 的特性?面向对象,继承,多态?着重问了多态的实现方式
接口和抽象类的区别?
常见的 IO 流,简单说下你封装的文件读写流的封装过程?
介绍下你了解的集合类?以及他们的应用场景,线程安全的集合类都有哪些?问到了
HashMap
的源码简单说下多线程的实现方式以及你在项目中多线程的实际应用?
JVM 内存结构,垃圾回收机制以及垃圾回收算法?
并发相关的一些问题?
二面(女面试官):
聊到了 Android 的四大组件?Activity 启动模式?
Java 基础聊到了集合类,IO 流,多线程等?
事件分发机制?
自定义 View 的流程?
网络框架?
提了具体的需求,让我说下实现思路?
三面:
聊到了项目架构?
Handler
的源码?项目用到的和了解的设计模式?
Retrofit
的源码?网络框架封装的逻辑以及优化?插件化技术?实现的原理?
dex 的打包和份包懂吗?
APP 的启动流程?
APP 保活方案?
出了一个具体的算法题,让手写实现?
动画的分类和具体实现?
代码的重构?问了的一个具体的应用细节。
性能优化工具,以及做过的项目性能优化的细节?
四面和 HR 面就不涉及具体技术细节了,主要是大方向和性格等。
这次面试整体还是比较舒服的,有回答的不好的问题面试官都会引导你去说你能理解的东西,越是大公司,越注重基础知识,后面会说到被虐的比较惨的一次面试。不过现在的技术水平还没有达到超一线互联网的水平,再接再厉吧。
陌陌
状态:在谈薪资和 Offer
陌陌总共有 4 面,2 轮技术,1 轮 HR,1 轮大部门 Leader(VP)
陌陌这边的面试问的技术深度很深,面试体验也很好。技术的话这边职位要求是要有 OpenGL 基础,当然 Android 要精通,C++ 要了解。
一面:
先做这个自我介绍?
自我介绍中有提到跨平台开发,聊到了
WebView
的具体技术细节和 NDK 的具体技术细节?说一下你了解的 OpenGL ES 的基础知识点,聊到了坐标转换,OpenGL 的一些专业名词的概念?
说一下 OPenGL ES 的渲染流程?
说一下你是如何封装和使用 Shader 的,主要是指的是 glsl 脚本语言对 OpenGL ES 的封装?
FrameBuffer
你是如何使用的?说一下使用过程?后面还有问到 OpenGL 的一些更深层次的概念?
Android 问到了
RecyclerView
的封装?以及涉及到网络数据的交互是如何封装的?问到了自定义线程池以及线程池的工作原理?
多线程这一块问到了并发?并发包下的关键类,le 关键字如何保证数据对于多个线程是即时可见的?主要是涉及到 DVM 的工作内存和共享内存,保证了数据的什么特性?有序性,原子性还有一个我记不清了。。。。。
内存优化这一块,可以用什么工具对代码进行静态检查?
内存优化的工具以及相关源码和使用?
事件分发机制?
设计模式中项目中使用了哪些?
APP 启动流程的源码?
问到了动画的分类,属性动画的使用过程?
常见的数据结构也有涉及,比如
HashMap
和ArrayMap
的区别,以及他的默认扩容阈值?问了 APP 的默认内存大小,DVM 虚拟机和 ART 虚拟机的区别?
二面:
OPenGL ES 和一面问的差不多
Android 部分主要问了项目架构?
设计模式问了生产者消费者模式?
自定义 View 出了一道具体的题目,说明实现思路?
Gradle
打包的依赖问题?如何解决的?还问了除了 OpenGL 之外还了解其他的图形渲染语言吗?
百度
状态:二面已挂
百度的面试题目我就不贴了,大致说下面试问的范围,OpenGL ES 部门遇到了真正的大神,问的很多深入的知识点我都不清楚,Android 部分项目架构以及项目工作问的特别细,并发部分和算法要求比较高,这次面试也让我认识到了自己的数据结构和算法部分需要使用业余时间好好强化下,当然还有一些更深的技术细节还需要持续精进。
革命尚未成功,还需继续努力啊!
58到家
状态:在谈 Offer
58 到家这边面试总共三轮,2 轮技术,1 轮 HR。这边更偏业务,所以项目逻辑就会问的特别多。我项目涉及地图,导航,定位,所以去面58到家项目这块优势比较大。 简单说下我觉得问到的有技术难度的问题吧
问到了地图 SDK 的具体实现技术细节?
如何实现持续上传轨迹数据,了解过长连接,短链接吗?
TimerTask
使用过程中有没有碰到过适配问题,这个我是真没碰到过,后续才了解了下。APP 保活的 Native 方案,这个聊的比较深聊到了系统层面。
手机如何对 APP 进行管理的,理解了这个问题才能理突破系统的限制,不通过系统白名单的方式进行达到保活效果?
定位时间间隔的问题?
问到了地图中屏幕坐标和地理坐标转换的实现方式,问这个主要是因为我的 SDK 中有涉及和实现?
地图渲染的封装逻辑?
其他的与项目业务关联性比较大就不在此一一列举了。
总结(一些建议)
面试了这几家公司,感受最深的是面试一定要提前准备,尽量让自己在面试过程中条理化,因为面试不只是对技术能力的考察也是对交流,沟通能力的考察,更多的是一个综合能力。下面给正在面试或者准备面试的童鞋提几点建议。
面试的简历一定要精心准备,因为简历是你能否获得面试机会的前提,一定要明确自己的亮点与优势,当然也要知悉自己的弱项,以便强化训练。
简历投递与内推,有朋友能内推一定选择朋友内推,没有朋友内推优先选择简历挂在猎头网站上,只要你够强,猎头会联系你的,之后再选择比如拉勾网,卓聘,猎聘这些网站,有选择性的筛选信息。
面试前的准备工作,最好是自己多写写笔记,做一个善于总结的人,当然面试回来后一定把面试官问到的知识盲点和理解不深的地方认真补充下。
面试时努力克服紧张,可以采用自我暗示和刻意练习的方式。
遇到面试不会的问题不要慌张,在自我知识体系的基础上,分析与推测,或者说出自己的想法,因为这也是你学习能力的一种体现。
面试一定要准时,不要迟到,认真对待每一场面试机会,因为面试也是你提升个人技术与能力的有效途径。
写在最后
最后祝大家在新的一年里,技术可以持续精进,能够实现自己的目标。本文如有问题,欢迎评论指正!
更多精彩,大家还可以直接点击原文链接前往 刘旭 同学的 Blog 哦。
●本文编号299,以后想阅读这篇文章直接输入299即可
●输入m获取文章目录
算法与数据结构
更多推荐《18个技术类公众微信》
涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。