一想到要去面试,你是否会感到莫名的紧张、压力很大、焦躁,本能的想要逃避?是的,绝大多数的人都会有类似的感受,大家害怕陌生的环境,害怕被陌生人盘问,害怕自己表现不佳被拒绝,然而,不管我们是应聘普通职位,还是应聘经理、总监这样的中高级职位,在拿到正式 offer 之前无一例外都要经历一轮又一轮的面试,如何才能避免一些这样的问题呢?关键还是得看心态。心态总的来说可以分几点来详说:
自信。
在面试的过程中,自信是最好的武器。同样的一件事情,由自信的人口中说出来就比不自信的人口中说出来更具说服力。别人不是你,不可能完全了解你的内心,你表现出来的东西,就是别人对你的了解。所以,即使你平时再内向,再不自信,一定要在面试的时候,鼓足勇气,勇敢表现一次。
但是,自信要适度,否则自信过头就是自负了。有些年轻人年轻气盛,觉得老子天下第一,会让人觉得不成熟,不踏实,甚至反感。
淡定。
淡定能让你更加自信。千万不要紧张,你紧张了面试官可能比你还紧张。
坦诚。
实话实说,不要弄虚作假,也不要夸大其词。
不会的东西就直接说不会好了,否则顾左右而言他,你觉得是自作聪明,面试官其实能看出来你是在回避的。还有,你不确定的东西就不要说,就像你从来没用过 C++ 标准模板库, 但是你非要扯一下 STL,面试官再一深问,你就懵了。这就是自掘坟墓,自己挖坑自己跳的典型。下面分享一些小编最近面试总结的一些经典面试题整理:
网易一面( 40min)
- 自我介绍
- 为什么选择找安卓实习?
- 简单介绍项目?
- 使用到Websocket进行长连接,这个长连接实现的原理是什么?有什么好处呢?
- OkHttp看过源码吗?它的设计方法是什么?有哪些拦截器的?
- HTTP的常用响应码和HTTP的请求头?
- 自定义View有哪些步骤?
- View的视图绘制过程中的几个方法都有些什么作用?
- 项目中实现的自定义View是实现了什么功能,实现了哪些方法?
- 事件分发的流程?产生的事件会经过哪些处理完整的讲一下?
- 布局优化做了什么内容?
- 内存泄露产生的原因?以及还有哪些场景?
- 提到引用,那么Java当中的引用的区别都是什么?
- JVM运行时数据区?
- Java当中Error和Exception的区别?具体的Error和Exception常见的有哪些?
- 打包的流程?
- Activity的启动模式?
- 尺寸单位dp、sp、px的区别?
- Activity生命周期以及区别?
- 反问环节,问了下部门的工作,用到的技术这些。
网易二面(50min)
- 自我介绍
- 讲下项目觉得亮点的地方
- 讲下项目当中二维码怎么实现的?
- 如果要自己实现,怎么使假设一个url生成一个对应二维码?
- 刚刚提到了加密,那就说下知道的加密方式?
- 常用的对称加密有哪些?
- 公钥私钥都是做什么的?
- 项目里面用到了一个MPAndroidChart,那么这个框架怎么画图的有了解过吗?
- 假设有一批数据,要画柱状图,怎么实现?
- HTTPs的加密会话的过程?
- MotionEvent有几种事件?
- ScrollTo和ScrollBy方法?
- SurfaceView和普通View的区别?
- requestLayout和invalidate方法的区别?
- 死锁怎么发生的?
- 了解银行家算法吗?目的是什么?思路是什么?
- res目录和asset目录的区别?
- 虚拟机的垃圾回收机制?
- 新生代老生代的回收算法有什么不一样啊?
- GCRoot怎么定义的?
- 写个代码,两个线程轮流给变量i+1?
网易HR面
就是很普通的问题,为什么选择网易云音乐?对网易云音乐印象深刻的地方?说了评论。
快手一面(120min)
- 自我介绍
- 先介绍项目,项目里主要做的工作有哪些呢?
- 项目里面提到的图像采集的部分是怎么做的呢?
- Websocket长连接是怎么做的?
- Java的基本类型有哪些?
- 它们的长度分别是多少呢?
- 自动装拆箱?
- final关键字的用法?知道哪些用法,在什么场景表示什么意思?
- 对象的比较涉及的==和equals方法,它们之间的区别?
- 为啥hashcode方法也要被重写呢?
- 觉得Java当中哪些要素体现了面向对象的思想?以及项目当中是怎么应用的?
- 怎么样理解多态呢?
- String = “abc” 和 String = new String("abc")这两种创建字符串之间的区别?
- String a = “abc” + “def”这个字符串拼接过程中+的过程是怎么实现的?编译期是个什么过程呢?
- 用过StringBuilder吗?什么情况下会用这个?
- 那么StringBuffer呢?和StringBuilder有什么区别吗?
- Java的引用类型有哪些?分别在什么场景下用,有些什么特点呢?
- 内部类有哪些?又有什么不同呢?
- 刚刚提到匿名内部类,那它有构造器吗?
- 那么匿名内部类可以显式声明一个构造器吗?
- (上面回答了不可以)然后问如果要做一些初始化工作怎么办?
- finally的用法?
- 知道异常链吗?
- 项目当中有创建线程吗,创建线程都有哪些方法呢?
- 线程池的类型都知道哪些?
- 觉得线程安全的本质是什么?
- 用过哪些手段保证线程安全?
- synchronized可以用在什么地方呢?
- volatile关键字了解过吗,作用是什么呢?原理呢?
- 死锁是怎么产生的?
- 怎么去打破死锁呢?
- juc包中了解哪些工具呢?
- 那对ConcurrentHashMap了解哪些呢?
- ConcurrentHashMap内部的数据中每个桶是怎么组织的呢?
- 那怎么扩容呢?旧的结点转移到新的位置,是怎么确定这个位置怎么对应呢?
- Android当中的LaunchMode有哪些?
- Activity的声明周期有哪些?
- 前面提到的AsyncTask做异步任务,它的实现原理是怎样的?怎么更新UI?并发执行任务和顺利执行任务分别是怎么实现的?
- invalidate() 和 requestLayout()
- 视图绘制机制?
- Android当中的Handler和Looper是怎样的一个关系呢?
- 可以在一个进程当中创建多个Looper吗?
- 假如现在有一个Button,用户点击这个Button,那么这个Button对这个触摸的响应,整个事件处理过程是怎样的?
- Surface、SurfaceView、SurfaceFlinger的关系?
- 说下自定义View,举一些例子,说下是怎么做的?
- 有自定义绘制的一些过程吗?那自定义绘制的时候有些什么需要注意的地方吗,比如效率方面等?
- Binder通信机制相关,做安卓应用的时候进程间通信都用过哪些呢?Binder实现原理是怎样的呢?
- Binder是怎样在进程隔离的情况下通过哪些手段进行通信的呢?
- 知道MemoryMap吗?
- Fragment使用中用到的beginTransaction()的意义?
- 了解RxJava吗?那了解其中的map操作符是做什么用的吗?
- 讲下对内存泄露的理解吧!
- Java当中的垃圾回收都有哪些了解呢?
- DVM和ART的区别
- HTTP和TCP是什么关系呀?
- TCP的三次握手是什么过程呀?
- HTTPs和HTTP的区别是什么呢?安全层会话建立的过程是什么样的?
- Java当中List会有些不同的实现,那么ArrayList和LinkedList有些什么区别呢?结构,性能,效率等?使用的时候会怎么选择呢?
- 平衡二叉树的概念?
- 平衡二叉树的具体实现有哪些呢?
- 怎么判断链表当中是否存在一个环呢?
- 那怎么计算一个环的大小呢?
- 写代码,反转链表。
- 反问环节,问了下实习需要提前学习什么内容,以及问了下一些读源码的时候的对于代码细节不记得就感觉没有内容去支撑自己去讲述某一个代码的逻辑的这个困扰,然后面试官也是说前面回答发现我有些在乎代码的细节,方法名啥的记得很清楚这些,就给出了一些的建议。
快手一面的面试官一直带着笑容,我回答完一个问题也会反馈一句“好呀”。
不过快手的面试日常不都是连着面吗,这种两个小时见过快的都已经oc了,一面从十点开始面的,面完已经十二点了,当天下午都没有接到下一次面试的安排,感觉自己是不是挂了。
然后隔天自己打了个电话去问HR,HR小哥哥说正好要找我约面试,说一面反馈不错,就等之后二面了。
快手二面(60min)
- 了解局部性原理吗,有哪些例子
- CPU访问寄存器的速度和访问内存的速度
- 那CPU的Cache是什么原理
- 写出HashMap的put过程,后面是根据代码当中的内容提问,也就是HashMap当中的一些操作
- 多生产者消费者模式实现
- 如何确定对象是否会被回收
- 可达性分析算法对应的是什么数据结构
- 指出自己写的多生产者消费者模式实现代码当中哪些是GCRoot
- 工作内存和主内存当中分别都有些什么
- hapens-before原则是什么,具体是什么
- invalidate方法
- Matrix了解吗
- 我向面试官询问可以努力的地方(理论知识掌握了,但是实践没有跟上理论,没有很好的融会贯通)
- 面试官问我觉得自己有什么优点
- 面试官问我觉得自己什么地方需要是需要改善的
不过快手的面试体验还是很好的,面试安排什么的效率很高,从自己的面试经历和看过的一些面经,感觉快手的面试味道和其他家的的确有点不同。
面试总结:
简历的写法:
简历怎么写,相信大家都已经非常清楚,不过我还是要重申一遍。
那就是,整体看起来要简洁大方,重点突出,不要弄些花哨的东西,身高、体重、血型、党员这些基本可以忽略不写的,除非一些比较奇葩的公司。对了,我指的是进那些一般意义上的社会企业,国企和事业单位另说。
一般一两页 A4 纸就足够了。简历内容从前至后包括:姓名,联系方式,教育经历,个人能力,工作/项目经验。这些妥妥的足够了,顶多再加个获奖经历,为公司奋斗这种口号就不要喊了。
总之要尽量突出你的个人能力和项目经验。
对简历上的东西烂熟于心:
首先,不会的东西,没做过的项目,千万不要写在简历上。千万记住,不要弄虚作假,否则面试的时候会死的很难看。
然后,似是而非的东西,在面试之前一定要把它们彻底搞明白。比如你简历上写着用 MVC 架构做过项目,但是你又不是特别理解 MVC 到底是什么样的架构。这个时候,你就要去好好研究一下了,MVC 是什么,它会牵扯到哪些相关的知识点,这些都要搞清楚。要做到,简历上所写的东西都真的是你所掌握的,上面每一个技术词汇被问到的时候,都可以胸有成竹的侃侃而谈。
最后,对你简历上所提到的项目进行复习,提炼和总结。面试的时候,面试官肯定会针对你简历上提到的项目,问一些问题。假如他问的是你几年前做的东西,而这个时候,你已经把它们忘得差不多了,这就有点尴尬了,面试官会怀疑你到底有没有做过这个东西或者到底做了多少。所以,你要把以前做过的项目都复习一遍,回想一下当初的状态,然后把你做项目时没搞清楚的简历上有的东西都搞清楚。
总结一句话就是,你简历上写的所有东西,都要烂熟于心。
仔细研究职位描述:
这一点非常重要,它可以让你跟这个职位更加匹配。
公司在招聘的时候,都会有职位描述和职位要求,一定要仔细去研究,就跟做题一样,把上面提到的众多要求都搞清楚,接着再有针对性的学习。
当然,这个的前提是,你的能力和经验跟这个职位已经有了很大程度上的匹配度。
举个例子,公司在职位描述上写着,要求会 Lua, 而你根本不知道 Lua 是啥,这是会减分的,即使你不会 Lua,好歹你知道它是脚本语言也行啊。
再举个例子,职位描述上写着要求会 DirectX,而此时你对它的认识只停留在微软的多媒体 API 上面,这是远远不够的,但是还好,面试还没有开始,你还有充分的时间去学习 DirectX。
再举例,职位描述要求精通多线程之间的通信,而你此前根本就对它一无所知,不过你可以临阵磨枪啊,它没有 DirectX 这么庞大,翻翻书半天就可以学会的东西。
仔细研究职位描述,临阵磨枪,不快也光。
刷笔试题:
不是所有公司都会笔试,这部分主要针对应届毕业生。
技术职位的笔试,最爱考的是编程技巧与算法。
跟上一段提到的临阵磨枪的原理一样,在笔试之前,去上网搜搜这个公司历年的笔试题和攻略,说不定,还就一样呢。。。
接着刻意练习,复习下数据结构与算法书籍,再去刷一刷 leetcode,lintcode 题库。
把常考的题型都记住,条件反射般写下来,就齐了。有些算法即使不是很理解,死记硬背其实也是可行的,至少试卷上是体现不出来这一点的。
面试题答案整理:
实战系列:Spring全家桶+Redis等
其他相关的电子书:源码+调优大厂面试题题库,BAT、字节跳动、美团、网易、拼多多、滴滴等
Java架构面试锦集:
以上文章内容中所谈及到的面试资料、学习资料、学习笔记等等,均可以免费分享,需要这些PDF的小伙伴,可帮忙关注转发后扫描小编的二维码即可获得免费领取方式。