2017 年 Android 曲折的求职之路
2017 Android 暑期实习生面试经验谈
杭州找 Android 工作的点点滴滴
为跳槽的你献计献策(Android)
2017年4月美团Android面试总结
美团:
1 手写算法题。一共有3个,面试官随机选择一个。
猫扑素数;1到n,求1的个数;单词反转。
2 Activity的加载模式。
standard,singleTop,singleTask,singleInstance。
可以参考:
https://developer.android.com/guide/components/tasks-and-back-stack.html
2.1 什么时候会用到singleTask?
在MainActivity的时候用到
3 Handler机制?
MessageQueue,Looper等。
3.1 一个线程是否只有一个Looper?
3.2 如何保证一个线程只有一个Looper?
参考:ThreadLocal
4 多线程的方式有哪些?
1) new Thread()
2) AsyncTask
3) Handler
4) IntentService
5) ThreadPoolExecutor
5 ANR异常发生条件
1)5s内没有响应用户输入事件
2)10s内广播接收器没有处理完毕
3)20s内服务没有处理完毕
5.1 如何分析ANR
log+trace.txt
6自定义View和ViewGroup
说一下自己定义的组件就行
7 事件处理
分发,拦截,处理。只是View没有拦截处理
8 GC算法
标记清除,标记整理,复制,分代收集
参考:
http://www.jianshu.com/p/7c708a66ff42
把上面文章弄懂了,就能刷过GC
9 四大引用
强,软,弱,虚,并说明下合适GC
10 动画
View动画,属性动画,帧动画。再说下View和属性动画区别。
参考:
https://developer.android.com/guide/topics/graphics/overview.html
11 Dalvik和Art区别?(Just In Time和Ahead Of Time)
就这样第一面基本结束。一共问了11个问题,其中美团的手写算法在业界算是比较出名,很多小伙伴可能卡在手写算法上。然后就是一些Android和Java的细节性东西,这些基础内容只要有1年经验的都基本能说出个一二三。
大概过了10分钟,接下来是
第二面
1 OkHttp原理?
2 Retrofit原理?为何用代理?代理的作用是什么?
3 ButterKnife原理?用到反射吗?为什么?
4 ANR异常如何查找并分析?
5 JVM内存模型?性能调优?
6 垃圾搜集算法有哪些?G1算法?
7 Http和Https的区别?
1)Https是ssl加密传输,Http是明文传输
2)Https是使用端口443,而Http使用80
3)HttpsSSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比Http协议安全
4)Https协议需要到CA申请证书
8 加密算法有哪些?对称加密和非对称加密的区别?
MD5,SHA1,Base64,RSA,AES,DES
对称:使用相同密钥,需要在网络传输,安全性不高。
非对称:使用一对密钥,公钥和私钥,私钥不在网络传输,因此安全性高。
9 TCP的三次握手?两次行不行?为什么?TCP攻击知道吗?如何进行攻击?
10 内存优化如何做?
11 看过那些源码?
12 会对代码进行review吗?何时review?怎么review?
13 项目中遇到的让你棘手的问题?多久解决,怎么解决?(考的是你发现问题和解决问题的能力)
14 如何学习?何时学习?怎么学习?学习渠道?(考的是学习能力)
就这样,第二面结束了。可以看出,第二面的难度会比第一面大一点,但是还好,基本都是常用的内容,深度会偏向原理性质。这就说明在平时的编码过程中,需要多多思考,多看源码实现方式,而不要一味着去写代码。程序员会写代码,但不要做一个只会写代码的程序员。我们的思维方式是不可替代的。
大概过了10分钟,开始进行第三面面试:
第三面
1 前几次面试感觉如何?
2 你现在的APP日活是多少?
3 你现在如何处理崩溃日志?
4 你觉得小团队好还是大团队好?(这个问题不能直接回答好和不好,不然掉坑里了)
5 你的优点和缺点说下?
6 你的发展方向说下?是先讲究宽度还是讲究深度,为什么?
7 为什么离职?
8 其他小问题,如哪里人啊?现在工资怎样?要求如何,何时到岗啊?有什么问题要问我的吗?
就这样,第三面结束了。可以看出,第三面面试官不会考察你的知识细节,而是问一些形而上的知识。他是从整体方向上去把握面试者,往往最后一个面试官对你起到决定性作用。当然,能见到最后一面面试官,说明你前两面都已经过了。
腾讯OMG
- ☐ synchronize用法
- ☐ volatile用法
- ☐ 动态权限适配方案,权限组的概念
- ☐ 网络请求缓存处理,okhttp如何处理网络缓存的
- ☐ 图片加载库相关,bitmap如何处理大图,如一张30M的大图,如何预防OOM
- ☐ 进程保活
- ☐ listview图片加载错乱的原理和解决方案
- ☐ https相关,如何验证证书的合法性,https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解
阿里巴巴
- ☐ LRUCache原理
- ☐ 图片加载原理
- ☐ 模块化实现(好处,原因)
- ☐ JVM
- ☐ 视频加密传输
- ☐ 统计启动时长,标准
- ☐ 如何保持应用的稳定性
- ☐ ThreadLocal 原理
- ☐ 谈谈classloader
- ☐ 动态布局
- ☐ 热修复,插件化
- ☐ HashMap源码,SpareArray原理
- ☐ 性能优化,怎么保证应用启动不卡顿
- ☐ 怎么去除重复代码
- ☐ SP是进程同步的吗?有什么方法做到同步
- ☐ 介绍下SurfView
- ☐ HashMap实现原理,ConcurrentHashMap 的实现原理
- ☐ BroadcastReceiver,LocalBroadcastReceiver 区别
- ☐ Bundle 机制
- ☐ Handler 机制
- ☐ android 事件传递机制
- ☐ 线程间 操作 List
- ☐ App启动流程,从点击桌面开始
- ☐ 动态加载
- ☐ 类加载器
- ☐ OSGI
- ☐ Https请求慢的解决办法,DNS,携带数据,直接访问IP
- ☐ GC回收策略
- ☐ 画出 Android 的大体架构图
- ☐ 描述清点击 Android Studio 的 build 按钮后发生了什么
- ☐ 大体说清一个应用程序安装到手机上时发生了什么;
- ☐ 对 Dalvik、ART 虚拟机有基本的了解;
- ☐ Android 上的 Inter-Process-Communication 跨进程通信时如何工作的;
- ☐ App 是如何沙箱化,为什么要这么做;
- ☐ 权限管理系统(底层的权限是如何进行 grant 的);
- ☐ 进程和 Application 的生命周期;
- ☐ 系统启动流程 Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程
- ☐ recycleview listview 的区别,性能
滴滴
- ☐ MVP
- ☐ 广播(动态注册和静态注册区别,有序广播和标准广播)
- ☐ service生命周期
- ☐ handler实现机制(很多细节需要关注:如线程如何建立和退出消息循环等等)
- ☐ 多线程(关于AsyncTask缺陷引发的思考)
- ☐ 数据库数据迁移问题
- ☐ 设计模式相关(例如Android中哪里使用了观察者模式,单例模式相关)
- ☐ 微信的聊天数据在本地都是加密处理的(防止root了被破解),设计一个类似的本地数据存储系统
- ☐ x个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完
- ☐ Android相关你最擅长哪一块
- ☐ TCP与UDP区别与应用(三次握手和四次挥手)涉及到部分细节(如client如何确定自己发送的消息被server收到) HTTP相关 提到过Websocket 问了WebSocket相关以及与socket的区别
- ☐ 是否熟悉Android jni开发,jni如何调用java层代码
- ☐ 进程间通信的方式
- ☐ java注解
- ☐ 计算一个view的嵌套层级
- ☐ 项目组件化的理解
- ☐ 基于自身工作经验和计算机相关知识,给出 移动端地图局部加载 瓦片大小的像素大小估值
- ☐ 多线程断点续传原理
- ☐ Android系统为什么会设计ContentProvider,进程共享和线程安全问题
- ☐ jvm相关
- ☐ Android相关优化(如内存优化、网络优化、布局优化、电量优化、业务优化)
- ☐ EventBus实现原理
美团
- ☐ 线程挂起,休眠,释放资源相关,唤醒,线程同步,数据传递,问了很多线程的问题,问了20分钟大概
- ☐ static synchronized 方法的多线程访问和作用,同一个类里面两个synchronized方法,两个线程同时访问的问题
- ☐ 内部类和静态内部类和匿名内部类,以及项目中的应用
- ☐ 泛型是什么以及在项目中的应用
- ☐ handler发消息给子线程,looper怎么启动
- ☐ down、move、up事件的传递
- ☐ activity栈
- ☐ 封装view的时候怎么知道view的大小
- ☐ intent-filter
- ☐ arraylist和linkedlist的区别,以及应用场景
- ☐ 怎么启动service,service和activity怎么进行数据交互
- ☐ 下拉状态栏是不是影响activity的生命周期,如果在onStop的时候做了网络请求,onResume的时候怎么恢复
- ☐ view渲染
- 看过的书籍,这里并不是泛泛的读一遍,而是详细理解了大多数内容,通俗一点就是可以用自己的话将相应的知识解读出来。《Android开发艺术探索》(这本书真心不错,我反复读了4、5遍)、《Android群英传》(比较接近开发使用,因为做过一些应用开发,读起来还是比较简单的,读了2遍)、《深入理解Java虚拟机》(也是一部神作,可以让你清晰的理解JVM,读了2遍,理解的不是很透彻)、《剑指offer》(感觉面试中碰到的算法,80%都能找到相应的题目,保证所有的题都可以手写出来就行)。4个月精读了以上书籍,还有其他的都是简单了解,这里就不列举了,读完这些书,应该可以让你上一个层次吧(妈妈再也不用担心我面试啦…)。
- 刷题,主要是LeetCode(大概刷了300道题左右,每天3-6道,坚持下来,需要多复习,因为很多题过一段时间会忘记),还有看过一些牛课网。
- 看别人的面试经验,主要在网上,这里我列举两个比较好的。
- Android客户端面试题集锦
- Android阿里面试题锦集
3
投递简历
一份好的简历是非常有必要的,需要突出你的重点和闪光点,具体怎么写简历可以参考
CodeKK说简历
有了一份好简历,接下来就是投递简历,一般是:拉钩+BOSS直聘+内推,从我这次面试机会来看,三者比例是2:2:1,也可能我工作经验还不到一年,内推滴滴、阿里和腾讯直接就把我的简历刷掉了,但是内推也是具体到某个部门,如果被刷掉也不要灰心,现在大公司基本上各个部门都有自己的hr,可以在拉头和BOSS上多投递一些,万一其他部门看中你呢?
4
面试经历
这里我仅仅记录一些问过的题目(能记住的),答案我就不写出来,基本上都可以在网上找到相应的答案。
01
作业盒子
时间有点久,很多问题记得不太清,大概有以下内容。
一面
- Android一些优化方案
- 什么是过渡绘制,如何防止过渡绘制
- 事件分发机制
- ListView的优化
- Binder机制
- 在多进程中,Application会启动几次
- 单例模式,双锁原理,volatile原理,静态内部类实现单例的原理。
二面
二面面试官是leader?反正应该不是做Android的,Android的相关知识问的也不多,大多是项目上的东西。
- Java多线程,synchronized
- 聊项目,都具体做了什么。
- Binder机制
三面
应该是leader吧,主要了解一些个人的情况,以及一些项目,最后问了期望的薪资,然后当场就给了offer。
毕竟1年多没有面试了,第一场面试还是给我了很大的自信,也知道现在自己大概能要多少工资是合适的,所以同学们准备跳槽的时候,最好先面几家小公司,盒子还是一个很不错的公司,整体的办公环境挺好的,现在也处于盈利状态,在教育类的app中也排的上名次。
02
快手
快手就在五道口地铁站出口不远地方,能看到很显眼的LOGO,看上去很霸气的样子,但是当我进入到快手前台的时候,连一个标示符都没有, 一度以为自己走进了假快手,好吧,我是来面试,这些都不重要,接下来接待的人员把我领进了一个小屋里,等待面试的开始。
一面
面试官是一个很fashion的人,是从小米核心部门过来的,是Android小组的领导。
- 问了关于数据库的一些问题,SQLite的相关操作,没办法,我在华为唯一一个做的和java相关的项目,但是不太擅长数据库。
- 网络相关的问题,网络的五层模型,又问了TCP和UDP,还有Android相关的长连接,这里问的比较深。
- 开始Android先关的知识,Handler机制,Acticity的生命周期以及四种启动模式,各自特点,Service的两种启动模式生命周期,如果同时使用两种启动
第一面这就算过关了等待二面。
二面
- 问了项目相关的问题,这部分根据自己的项目经验,由于大家的经验都不同,这里我就不详细说了。
- 设定一个场景,怎么去实现相应的功能,因为快手这个部门想做社交,因此这里是问我是如何实现微信的联系人页面(包括与服务端有什么样的交互)
- 最后也是一个算法,写出所有数组的子序列
二面面试官是这个组的leader,跟我讲了现在这个组的发展情况和快手现在的情况,由于快手成长很快,所以不能仅仅依靠一个APP,还需要在其他方面进行一些尝试,而这个组的任务就是在一些方面做一些尝试,大概就是这个样子。
二面也顺利通过,接下来就是HR面了,这时候正好是12点,他们要去吃饭,不过快手是提供午餐和晚餐的,第一个面试官带给我一份饭,还不错,后来HR跟我说,现在只是过渡时期,后面午餐和晚餐会改成自助餐的形式。
三面
HR上来很亲切,问了我一些面试的情况,难不难之类的,然后又聊了聊我大学和研究生情况,我只想说我“too simple , too naive “,大概了解我后,只跟我聊我的不足,以此来压低我期望的薪水。说了一下薪资期望,加了微信,让我回去等待,说发offer大概是2周时间,因为需要走各种审批流程,让我不要着急。
快手是一个很年轻的公司,技术还是需要一定的积累,希望不要像小咖秀一样昙花一现。
03
美团外卖
一面
简历上写的项目问了一遍,然后开始问知识点。
- volley的源代码,在图片缓存部分讨论了挺长时间,http中缓存机制,Last-Modify的作用等。
- fragment的生命周期
- service一些知识
- 事件分发机制
- Binder实现机制,Stub类中asInterface函数作用,BnBinder和BpBinder区别。
- gradle中buildToolsVersion和TargetSdkVersion的区别是什么
- 手机适配一些方案
- hashmap的实现原理
- 静态方法是否能被重写
这些大概聊了1个半小时,开始的时候还有些紧张,慢慢聊开了,就好多了,面试官的语速有点快,老是需要面试官重复一遍,我也不经意间语速也变快了,不过能看出来面试官还是很厉害的。
二面
- 3次握手和4次挥手的原因,以及为什么需要这样做。
- 数据结构,搜索二叉树的一些特性,平衡二叉树。
- hashmap是如何解决hash冲突的
- 进程与线程区别
- 写了一个二分查找和单例模式
- http中的同步和异步
- 聊了一些项目上做的东西,问了问职业规划
由于二面面试官不是做Android,本来面试我的人临时开会去了,所以这一轮面试没怎么问android相关知识,不过二面面试官一直是微笑,所以这一轮很轻松,更像是一起讨论问题。
面试完已经是下午4:30了,由于面试当天是星期五,而周五美团的会议比较多,所以等了会,二面面试官说三面面试官在开会,面试另约时间,我还是说这次一次面试完吧,这一等就等了2个半小时,期间hr跟我说三面面试官是个大牛。
三面
- 我认为Android做的优秀的几个地方,然后又根据我说的问了问比较深入问题。
- Android是如何进行资源管理的。
- java比较重要的几个特性
- 网络五层结构,每一层协议,由于我网络不是很好,还问了一些其他的问题(例如MAC地址和ip地址的区别等)。
- 为什么离开原来公司,以及职业规划,然后因为面试完大概就晚上8点了,就先让我回去,下周让hr跟我联系,我想这是应该通过面试了吧。
美团技术还是很厉害的,从面试官的水平就可以看出来,尤其是外卖核心部门,办公环境是不错,但是感觉就是有点乱,不知道是不是因为今天面试的人很多,基本上一直有很多人来回走动,有一些嘈杂。
04
小米TV
一面
可能是因为一面是我的学长,所以没有问我很多技术的问题,聊了聊我做的向项目,然后聊了一会OpenGL、GLSurfaceView和Shader,主要聊了OpenGL绘制方法,还有一些Binder相关知识,感觉非常轻松,还想着如果面试都这么轻松就好了,然后就直接下一面了。
二面
二面面试官看上去很斯文,但是还是一个对技术精益求精的人,问的问题都很细,具体问题的顺序挤不太清楚了,大概问了下面几个问题。
- 单例,快排,回型打印二维数组
- 写一个死锁,死锁是怎样产生的,怎样防止死锁
- Acticity启动模式有几种,分别代表什么意思
- 聊项目都做了些什么
三面
leader是一个很有亲和力的人,上来就跟我说前面技术已经问的差不多了,这里就不询问我详细的技术了,就出了一道算法题,需要说出时间和空间复杂度,以及有没有更优解。
HR面
HR面问问题都是一个模板刻出来,都是例行公事的询问,bulabula……然后就算完成面试。
从整体来说,TV更需要一个测试开发,但是我还是想做开发,暂时不想做测试,所以我估计TV是不会给我offer了,虽然说了过几天会正式给我发offer,最后也没法。
小米TV在一个独立的小院子里,环境还是不错的,整体的发展也可以,毕竟是小米生态中重要的一个部分。
05
网易
网易大楼是在百度大楼的旁边,感觉还是不错的,来的稍微有点早,在前台等了20分钟左右的样子,面试官就带我去面试了。
笔试
具体的内容记不太清楚了,大概有以下几个类型,都还是比较基本的。
选择题、程序输出题、四道算法、简答
- 给定一个int型 n,输出1~n的字符串例如 n = 4 输出“1 2 3 4”
- 输出所有的笛卡尔积组合
- 单例模式
- 最长上升子序列
都不是很难,基本上都能作出来。
一面
一面面试官是资深的Android开发工程师,的确水平很高。所有的问题问的都很详细,很多细节,面试官都能清晰的说出来,的确水平很高。
属于循序渐进的问题方式,从简单的知识入手,逐渐深入,直到你回答不出来而且问的都是你自认为很擅长的知识点,可见面试官的功力有多深厚,深深的佩服。
我下面大概说一些问题,但是到最后总能问到很深入的地方。
- 对刚才做的题,一些错的地方做了讨论,主要是类的加载和内部类方面的知识,尤其一些深入到JVM层的知识的确自己有一些不足,不过大部分都还是能答出来。
- 双亲委托机制,类的五个加载过程。
- java类加载器的加载流程。
- Binder机制,从java到framework再到kenral层,面试官问的都很详细,遇到不会的也都会跟我解释。
- Serializable和Parcelable的区别。
- View的绘制流程,详细到framework代码,讨论到不确定的地方,立马打开电脑和我一起看源码。
- 事件分发机制。
- 常用设计模式,使用静态内部类实现单例的原理是什么。
- 线程同步,CopyOnWriteArrayList怎样实现。
- Volley源码,EventBus源码。
面试完后就到12点了,讨论了1个半小时,跟我说我这关过了基本上就没问题了,面试官还是一个很幽默的人,带我去网易食堂吃了顿饭,的确这里的饭特别好吃,回来后,休息了一会,就开始Leader面了
二面
Leader面,我还以为至少要3轮技术面呢,没想到直接就到leader面试了,后来才知道第一轮面试的结果还是很重要的,一面面试官是非常资深的工程师,只要通过一面了基本就没问题了。
- 项目介绍,聊一些项目上的问题
- 下拉listview的实现,需要注意的地方和优化的地方(不是lsitview的优化,是下拉的优化)。
- Android上一些优化方案
- 介绍了一下现在做的项目,大体说明了现在所用到的技术。
总体感觉网易的氛围还是非常好的,技术实力非常雄厚,leader技术能力也很强,并且一面面试官告诉我,leader有时候还会自己写一些代码,一般到了leader很少有写代码的了。
hr面
一样的流程,各种谈,说面试官对我评价非常高,希望我能来之类的话,然后就算面试结束了。
06
小米
这是第二次面试消息,这次是小米的核心部门,MUI部门,主要做阅读类app,听说发展还是很不错的,为什么要面试两次小米呢,因为之前内推过小米,一周都没有消息,我就在网上投了简历,等面试了小米TV,这边又叫我去面试。到了小米前台,前台没人,我问保安,保安让我打HR电话,结果HR也不接电话,就这样等了半个多小时,HR终于回过来电话,打电话让面试官把我接上去了,一面面试官还以为我不来了。
一面
- 聊项目,GLSufaceView,OpengGL,Shader相关一些知识,在项目中做的优化
- gc是根据什么来回收一个对象的,引用计数和gc root分别怎么实现。
- 怎样会产生内存泄露,举一个具体的例子,使用什么检查内存泄露
- 自定义View的绘制流程
- 给出二叉树和一个值,找出所有和为这个值的路径;{1,3}{3,6}{3,4}{6,8}区间去重,最少去掉几个集 合,可以让这个集合没有交集。
二面
- 什么是ANR,Activity、BroadcastReceiver、Service对ANR时间限制分别是多少,怎么处理ANR,除了系统生成trace.txt文件,怎么在程序中检测ANR。写出伪代码。
- 编解码一些知识,I帧,B帧,P帧区别。
- Android一些优化方案。
- 算法 n/m,怎么判断得数是无限循环小数。
三面
三面面试官看上去很年轻,人也特别幽默,不过技术还是没得说。
- 介绍项目。
- 事件分发机制。
- 算法,将一个字符串转换成int型数字,考虑 错误输入,溢出,正负值等一些条件,考细心。
- 给出一个搜索二叉树,输出一个排序好的双向链表。
四面
本来以为是HR面,结果不是,应该leader面,上来就说技术就不面了,介绍自己的项目中觉得做的最好的几个部分,大概说了下,接下来就是问了为什么离开原来公司,为什么选择小米 bulabula…..面完之后,说今天太晚了(晚上快8点了),hr已经走了,下周让hr跟你电话联系吧,把我送到楼下。
第二周小米就发来了面试通过的消息,具体谈了一些薪资待遇问题。
07
百度
一面
一面面试官的思维非常跳跃,经常我说到一半的问题,突然询问其他相关问题,然后回答完再继续之前的说下去,有些许不适应这个节奏。顺序可能不太对。
- 类的加载过程,Person person = new Person();为例进行说明。
- JVM相关知识,GC机制。
- 类的加载器,双亲机制,Android的类加载器。
- Android中进程的级别,以及各自的区别。
- 插件化原理。
- 集合框架,list,map,set都有哪些具体的实现类,区别都是什么。
- concurrentHashmap原理,原子类。
- volatile原理。
- Binder机制。
- View的绘制流程,事件传递机制,Handler异步消息机制。
- Interger中的128(-128~127),这里考的是常量池的概念,这个没回答上来。
- 线程池的相关知识。
- Handler机制,HandlerThread实现等等。
- LRUCache算法是怎样实现的。
二面
二面面试官看上去挺面善的,所以气氛就不那么紧张了,说实话来百度还是有点小小的紧张的。
- 说了说项目中相关的知识。
- 聊了聊之前做过的项目。
- 内存泄露,怎样查找,怎么产生的内存泄露。
- 怎样计算一张图片的大小,加载bitmap过程(怎样保证不产生内存溢出),二级缓存,LRUCache算法。
- 简单介绍一下java中的泛型,泛型擦除以及相关的概念。
- Android优化相关的只是,布局优化、内存优化等等。
- SQL相关的知识优化的方案,这里我直接说不太了解,就过了。
- 算法题,m * n的矩阵,能形成几个正方形(2 * 2能形成1个正方形,2 * 3 2个,3 * 3 6个)
三面
因为每次面试都是有记录的,所以三面面试官问题的技术问题就不那么细节了,大体以讨论的方式跟我聊,大体聊了以下几个方面,当然越深入,面试官对你的评价就越高
- 项目相关。
- Android优化.。
- 插件化相关技术,热修补技术是怎样实现的,和插件化有什么区别。
其他的都记不太清楚了,总体来说聊的还是不错的,本来以为百度会有很多算法题,结果只出了一道(侥幸。。。),本来还要有leader面,三面面试官还是非常好的,跟我说他们几个技术觉得我还是不错的,就看leader了,结果leader有事,出去了,不知道什么时候回来,就约当周的下班时间过去就好,然后面试官亲自把我送到了门口,跟我聊了很多,挺不错的。
四面
四面是经理面,感觉经理已经不做技术了,技术基本上没有询问,大体问了一下项目,以及自己在项目中都做了一些什么,聊了聊其他的话题,就完事了,然后就让我回去了,
大老远的跑过来,就谈了不到半个小时,好吧,谁让人家是百度呢,回去等hr电话吧。
过了几天,hr联系我谈薪资待遇等,又让我跑了一趟,面试这么多家,最累的一次,谁让百度是牛*呢,一顿说,bulabula……
感觉近几年百度发展的不是很好,一直在走下坡路,不知道是不是在憋大招,很多百度人都出来了,不过百度毕竟是百度,还是很厉害的。
08
阿里巴巴
梦寐以求的阿里终于找我来面试了,之前不管是内推还是网络上投递都被拒绝了,原因是我工作不到一年,没办法谁让马云爸爸太厉害,我投递的是杭州的天猫,是做虚拟现实的小组(刚听到这个名字感觉和自己不太相符),这是我到面试完后,才知道的,面试官也跟我说Android上的需求可能不会很多,更多的是VR技术在Android上的应用,包含OpenGL等技术。
一面
- 询问了我博客上写的一些东西,从项目立意谈起,到设计,再到详细的技术实现,可谓是面面俱到,由于自己写的博客还是比较熟悉,回答的还不错。
- GLSurfaceView的相关知识,OpenGL,Shader,绘制流程。
- 询问当前做的项目,以及到具体的实现和优化。
- 多进程间的通讯,Binder机制。
- 询问看过哪些框架源码,EventBus,Volley讲了一下。
大概聊了一个小时左右,聊得还可以,基本上都回答上了,中间给了我很多建议,不懂的地方,也会仔细跟我讲解一番,其实有一半的时间都是跟我聊产品,为什么这个产品好,怎样做才能迎合市场,然后怎么设计整个产品等,感觉跟我现在水平不是一个层次的,果然,第二天就给我发了一封邮件,说我现在暂时不太合适投递的岗位。
5
面试结果
除了阿里淘宝外,其他的公司基本都拿到offer,这段时间把华为这边的工作都交接完,休息几天,如果有空的话回家停几天。
6
最后总结
自己对于互联网有一些小小的见解
:随着资本的冷却,整个互联网市场也逐渐的冷静下来。Android应用开发从一开始能说几个四大组件的名词,能随便写个监听事件,就能拿到高达上万的月薪的时代了。归根到底并不是工作难找了,而是Android应用开发工程师这个职位已经趋于正常,再也不是没什么技术也能拿高工资的香饽饽。当然这个也不是绝对的,对于中高级的开发人员来说,市场还是比较缺少的,尤其是知名企业对于招聘员工来说,不仅要求有过硬的技术,还要求有高素质,好的教育背景等等。总的来说,高工资可以给你,但是前提条件是你要足够优秀,或者说让面试官觉得你很优秀。
其实面试过程就是一个把你自己推销给别人的过程,对于我们(毕业不久的同学,因为我毕业不到一年)来说就是要让面试官感觉你技术好,有培养价值。感慨有点多了,还是来点干货吧,大概列举一下每一轮面试的大概范围和深度,但是也不是绝对的,还是要看具体情况。
笔试
对于社招的同学来说,基本上不需要笔试,但是也有公司是需要的,例如 今日头条和网易都有笔试。笔试都是比较基础的一些知识,Java、Android等方面的,一般不会有网络,计算机等方面的笔试,一般情况下大家都能答出来。
一、二面
近一段时间的面试经历来说,一、二面的问题没有什么很大的区别(公司基本上都有3面技术面,但是也有例外,我在网易就是2面技术面。),基本上都是一线开发人员。主要考察你是否有牢固的基础知识和是否在平常开发中能熟练使用。
- 是否能讲解清楚你所做的项目,以及使用到的相关知识。
- Android基础知识
- Java基础知识,大概是多线程,线程安全,集合类,JVM,类相关知识等。
- Android一些源码的阅读
- 优秀的第三方框架源码阅读
三、四面
一般公司都是三轮技术面,但是也有四轮技术面的,不过不多。很多公司基本上每一轮面试官都会记录他所询问的问题,以便给下一轮面试官作参考,还有就是避免对同一个知识点多次询问。所以到了这轮面试,基本上不会再询问比较基础的知识。
- 广度:比较新的技术(Rxjava,插件化等),JVM,GC,网络,数据库,Android(一般不会询问之前面试官问过的问题)。
- 深度:一般会通过1或2个问题来考察,例如:map接口下都有什么子类->hashmap和hashtable区别->hashmap实现原理->怎么解决hash冲突->是否了解concurrentHashmap->concurrentHashmap实现原理->volatile实现原理(concurrentHashmap读是不加锁的,使用到了volatile)。
- 项目中的贡献,所做的优化。
- 设计能力,基本上不多,这个要看面试的岗位,因为我这里面试的只是高级开发,并不是架构。
- 工作中的亮点和突出。