工作三年出来看看新的机会,依次面试过如下公司:
- 小米(北京)
- iHandy(北京)
- 涂鸦智能(杭州)
- 微软(北京)
- 宜信(北京)
- 蚂蚁金服(杭州)
- 瓜子二手车(北京)
- 高德(北京)
基本上投递的简历都得到了面试的机会,除此之外还有海康威视,有赞,同花顺等公司,由于有的公司问的问题基本上都差不多,所以就省略了一些公司的面经吧。
小米
面试小米的职位是Framework开发,所以面试的时候问的问题偏底层一点:
一面:
- 双重锁以及可能遇到的问题。
- 硬件加速。
- WatchDog机制。
- AMS的运行流程,从startActivity()说起。
- Binder机制,包括总的运行流程(深入源码),one way机制以及最大可支持线程数量。
- Android中Bitmap的使用,Bitmap的Native压缩逻辑,解码模式等等,计算一个Bitmap的大小,针对Bitmap做的优化点。
- Textview优化。
- Handler机制,底层epoll实现。
- 项目优化点提问。
二面:
- 编舞者,Vsync以及三重缓冲的理解。
- 硬件加速原理,软件渲染会有什么性能瓶颈。
- 绘制中的测量模式。
- 性能优化:内存,UI。
三面:
- Ashmem匿名共享内存
- Opengl相关:加载图片,左右手坐标等。
- Bitmap的内存格式,以及yuv。
- Binder的优势。
- 如何排查一个ANR。
- 优化工具使用。
四面:
- 原公司项目的介绍以及承担的角色。
- 未来计划。
HR终面:
- 离职原因。
- 职业规划。
总体而言,难度偏中,面试官挺平易近人的,印象不错,对于上面的知识点,差不多回答出来70-80%左右吧,感觉还阔以。由于自己在零零散散的时间内也在结合着源码以及老罗的文章,所以关于源码方面的知识点准备的算是比较充足的。其次是关于项目中的一些技术点,这里建议是要熟练掌握,并且知其然知其所以然,不局限于会使用。
印象比较深刻的是Opengl模块的提问,由于接触的不多,在三面的时候面试官一直在问Opengl,而简历上也写了简单了解,但是没怎么做这方面的归纳和复习,所以基本上没答出来。不过不影响整体的面试,拿到了offer。
iHandy
首先做了一套笔试题,题目比较简单,主要涉及Activity生命周期,线程问题,IPC介绍,以及一个算法题。然后就进入一面了:
一面:
- sharepreference的注意点以及进程间的使用。
- 项目优化。
- 两道算法题。
- volatile和同步的区别。
- android中的进程通信机制。
二面:
- 进程保活。
- 代码情景分析。
- apk体积缩减。
- 如果快速定位代码崩溃。
- 项目问题。
- 职业规划。
HR终面:
- 原公司项目的介绍以及承担的角色。
- 离职原因。
- 未来规划。
iHandy的面试流程下来,前前后后也就3个小时左右,这家公司面试下来,给我的感觉就是更注重基础知识,可能跟公司内部技术背景有关,大部分是清北的技术,所以对基础更加看重,而且也有很多发散性的问题存在。总的来说,面试过程轻松+愉快,而且办公化境是硅谷风格的,个人感觉不错。
总体来说面试过程相对顺利,不过跟hr谈薪资时候并没有达到我的预期,所以拒了。
涂鸦智能
由于工作地点在杭州,所以先进行了简单的电话面试。
电话面试:
- 个人开源项目。
- 项目优化。
- mvc与mvp的区别和作用。
- Java中代码执行顺序(静态变量,静态块,实例变量)。
- 讲一下个人熟悉的设计模式以及用途,是否会画UML图。
- 组件化的意义。
- 讲讲印象最深的UI方面的优化。
- 开发一个sdk如何设计以及注意事项。
- 开发一个项目需要考虑到的问题。
电话二面:
- 自我介绍
- Android插件化原理。
- Android热修复原理,如何保证Dex包的安全性。
- Https过程介绍
- 项目中的优化点。
- Binder机制通信原理,同步异步的差别。
- C++智能指针
- C++浅拷贝与深拷贝。
这里电话面试的时候有个基本问题答错了,即Java的代码执行顺序那块,挂完电话后发现有点不对...。而且面试官在聊的过程中,更加偏重于代码架构能力方面,所以架构方面的问题比较多,像上面描述的设计模式,组件化以及如何设计一个SDK项目,在开发过程中的注意事项等等等等,感觉准备的不是特别充足。不过还是侥幸过了第一面。
二面在一个星期后的进行的,关于Android的内容没什么好说的,不过由于该公司的产品需要使用到C++方面的知识,这块没有做过复习,本来学习的也不是特别好,所以C++模块的相关东西并没有回答出来,所以应该是挂了。
微软
微软这块主要是做桌面的,由于微软面试的情况大家都知道,算法开始....,本人算法并不是特别好,所以面试前特定刷了一下剑指Offer跟编程之美,然后就怀着一颗尝试的心情面试了。
电话面试:
- 自我介绍。
- 项目优化。
- 从第三方库中学习到了什么。
- 如何进行手机适配。
- 算法题(3道,就记得2道了):
- 求有序数组中重复数字。
- 一本书中查找一个单词。
- 程序设计:针对用户输入的密码,在原密码设计强密码,满足密码长度13<length<18,密码中需要有大小写字母,数字,特殊符号。
一面:
- 算法题:
- 翻转一个有序数组中k索引后的数字到前面,如:[1,2,3,4,5],k=2,那么翻转后的结果为:[4,5,1,2,3]
- 在上面翻转结果内寻找数组中的最小数
二面:
- 算法题:
- 判断一个二叉树A是否是B二叉树的子树,考虑特殊情况。
三面:
- 算法题:
- 链表翻转,分别使用递归跟非递归的方式实现,如何解决环形链表翻转的问题。
四面:
- 算法题
- excel中列表示为A,B,C...AA,AB...BA,BB...ZZ,AAA...,设计算法输入一个列数字,输出对应字母。
终面:
- 项目问题
- 算法题:将中文数字转换为阿拉伯数字,如三千二百二十六->3226,需要写出测试用例以及各种case。
微软的面试基本上是15min左右的项目介绍跟45min的算法设计流程,总的流程下来并不是特别顺利,尤其四面的时候算法思路对了,但是写的有点晕了,实际上就是一个10进制转26进制的题目,本来以为挂了,结果过了,可能天不亡我吧,哈哈哈哈。磕磕绊绊下来拿到了最终的Offer,不过等待的时候真的是煎熬。整个面试下来到入职1个月的时间...
宜信
宜信主要是做某个贷款App,面试问题如下:
一面
- glide原理:缓存机制,图片生命周期,内部Bitmap优化,为什么不会有内存泄漏的问题。
- Binder机制,mmap shm区别。
- 滑动嵌套实现以及触摸机制。
- 手写二叉树非递归后序遍历。
- 多线程知识,Sychronized锁对象和Sychronized锁类的区别。
- 启动模式,具体实例分析。
- 插件化实现。
- 组件化原理。
二面
- 项目优化。
- java基础。
- 多态的理解与使用。
- hash跟equals的作用 。
- 实现一个队列 使用双栈 如何保证读多写少的线程安全?读写锁。
面试下来磕磕绊绊,技术面算是过了,跟hr谈的时候拒绝了offer。
蚂蚁金服
面试的的部门是做海外支付宝的国际化部门,面试内容如下:
电话面试:
- 项目优化点。
- 硬件加速原理。
- 插件化原理。
- 热修复流程,什么项目需要热修复的功能?
- 快排思路,在数组有序的情况下快排的时间复杂度?
- tcp 三次握手 四次挥手 两次有什么问题?
- 如何设计单线程池?BlockingQueue超过队列长度会有什么问题?
- 多线程设计 如何实现CountdownLatch的功能?
- 单例模式下为什么两次判判空?懒汉 饱汉 为什么DCL使用Volatile?
- 策略模式的使用。
- 桌面启动Acticity流程。
Android相关的知识点个人觉得回答的还阔以,但是到了多线程这块的话就磕磕绊绊了,由于面试官问的问题比较开放,所以感觉有一些并没有答出来面试官想要的答案,然后就挂了....。通过蚂蚁的面试,发现自己的基础知识模块仍然不够扎实,没什么好说的,回炉继续深造。
瓜子二手车
面试部门是做瓜子二手车App的,当时面试的时候很多的候选人,应该是在扩招当中吧。面试内容如下:
一面:
- 算法:使用数组实现栈,如何在O(1)的情况下获取栈内元素最大值。
- Okhttp的优点。
- Glide内部缓存的淘汰机制(LRU)。
- LRU实现原理,HashMap跟LinkedHashMap底层实现区别。
- Tinker热修复原理。
- 具体触摸事件分析。
- 项目相关。
二面:
- 项目优化。
- 算法:长度为m的数组中寻找n个相对有序的数字组成最大数字。
三面:
- 项目中遇到的困难的点,如何解决。
- 插件化实现原理。
- 算法:实现反转单链表,如何反转环状链表。
hr面:
- 离职原因。
- 未来规划。
- 如何自主学习的。
瓜子二手车面试过程中涉及了比较多基础的一些算法,相对于头条来说,应该是相对简单难度。总体情况面下来的话,个人感觉发挥一般吧,能答得也都答出来了,算法模块确实是自己薄弱的一环,今年的目标也有了,算计导论看起来...。
hr在1周后打的电话给了薪资和offer。
面试总结
面试面了差不多10+家左右吧,有的公司的面试我觉得没啥好写的就不写了。百度跟腾讯没有给机会面试,头条面了一面,主要当时微软过了,所以就随便面了一下...。高德面试到了3面,挂了。
最终下来拿到了小米,瓜子二手车,ihandy,宜信,微软5个Offer,果然不辜负我准备的时间,最终选择去了微软(虽然给的钱少吧,哈哈)。
今年行情确实不如往日了,不过做技术的,我认为只要自己的水平足够,能够静下来学习,还是有立足之地的,所以还是撸起袖子加油干吧,共勉哈哈。
针对面试中的不足这里做个整理吧:
- 广度:ios,web,后端.etc。
- 算法基础仍然不扎实。
- 虚拟机知识。
- C++得重新捡起来。
今年的目标也就有了,哈哈