最近换了个公司,从三月底开始面,面到四月底,面了有快二十家公司.我是一个喜欢总结经验的人,每经过一场面试,我在回来的路上都会仔细回想今天哪些问题可以答的更好,或者哪些问题是自己之前没遇到过的,或者是哪个知识点今天又问了等等.四月中旬的时候,我就在构思要写一篇面经,主要是想着可能对那些跟我相同处境的人有点帮助,再者就是稍微记录下这为期一个月的面试过程.
个人介绍:
首先介绍下我面试时的自身条件情况,我把自己的情况分为优势和劣势来说可能更有利于你们比较自身情况.
劣势:
1.15 年 7 月毕业后开始到上海工作,面试的时候是 17 年 3 月到 4 月,一年多的经验,勉强算两年经验.分析:一年多经验我认为是比较尴尬的,处于一个不上不下的位置,很多公司比较喜欢招三年经验的,或者直接招应届生来培养.
2. 毕业于一个非 985/211,勉强上一本的高校.分析:这个相对影响较小,因为有工作经验后,公司对学校的要求就没那么高了,只要是本科就基本没问题,但是还是有个别叼毛公司只要 985/211.
3. 前一家公司是传统电信行业,加入项目组时,项目已经上线有段时间了,我们的任务就是有需求就开发,有 bug 就优化,其他时间就聊骚,各干各的,工作一年多跟在养老一样,用一句话说就是编程 5 分钟,扯淡 2 小时,项目经验严重不足,没开发过很难的需求.分析:这一点是最伤的,公司招有经验的就想看你都干了些什么牛批的东西,结果你告诉面试官我写的需求都是垃圾.
优势:
1. 大学时拿过比较多的奖,每年都是校级优秀学生,毕业时是市级优秀毕业生,拿过省级 ACM 二等奖等.分析:大学的荣誉对一个有工作经验的人来说,公司不一定会看重,但是可能会对面试官产生微妙的影响,特别是 ACM 奖,我碰到过有的面试官也是搞过 ACM 的,有共同的话题聊起来总是比较容易的,但是也要注意不能把这一栏篇幅写的过于多,只能当作点缀用,我当时是放在简历最后一栏,简要的写了最主要的几个奖.
2. 良好的沟通交流能力.分析:这个能力不会是关键性的,但是可以加分.
3. 较强的学习能力和逻辑思维能力.分析:有些公司和面试官还是比较看重一个人的学习能力的,经验代表着你现在在什么级别,而学习能力则代表着你将来能到达什么级别.
学习过程:
看了我的优劣势介绍,你会发现我的优势相对于我的劣势来说,简直不值一提.我自己对此也有清晰的认识,因此从过完年之后,我就开始抓紧空闲时间学习.学习的过程如下:
1. 看面试题
正常人第一步肯定都会看面试题,我也不例外,在看的过程中,我发现有些文章写的不错,对我帮助不小值得推荐,如下:
Java 面试题全集(上) 很多基础的东西,建议先看.
各大公司 Java 后端开发面试题总结 面试心得与总结-BAT,网易,蘑菇街 关于 Java 面试,你应该准备这些知识点 2. 深入学习
在看面试题的过程,你会遇到一些自己没接触过的或者以前没深入学习过的知识,例如最常问的 HashMap 内部实现原理,这就促使你得开始去看 jdk 的源码或者是学习一些新的东西.看源码是很重要的一步,起步很难,但是会让你收益良多,看源码的过程如果碰到无法理解的地方,可以百度看下别人的理解.我学习源码的过程中,看过几个人的关于源码的文章写的很不错,如下:
五月的仓颉 占小狼 zhangshixi 的 Core java 系列 3. 熟悉项目
找出自己工作以来开发过的最叼的功能,将整个功能的流程和涉及的东西吃透.项目是面试中必问的环节,一般是以一个功能点为基础展开问,因此你必须对这个功能有很深的认识,不能有模糊的地方.如果有时间,能把涉及到的知识点也搞懂最好.
4. 做面试题
有不少公司是有面试的,如果你没有准备过,很容易在各种小地方犯错,建议去一些面试题网站多做些题目,我自己是用的牛客网.
5. 学习记录
把自己每天的学习时间和学习内容记录下来,可以让自己更有动力的学习,学习是一个枯燥的过程,你必须让自己时刻保持有动力.
投简历,约面试环节
1. 在哪些网站投?
拉勾网,BOSS 直聘,猎聘网.
2. 是否该海投?
投简历分为两个情况.
1)没有社招面试经验:建议采取海投的方式,只要职位要求跟自己比较匹配都可以投,累计面试经验.这个环节可以把投简历的网站增加两家:智联和无忧.
2)自认为社招面试经验已经足够:投那些职位匹配,公司满意的职位.公司评价可以去看准网,百度,知乎等查询.
3. 一天约几家面试合适?
最理想的情况为 2 家面试,上午一般在 10 点左右,下午一般在 2 点左右.建议把理想的公司放下午,因为下午的时间比较充足,可以让公司更充分的了解你.我开始面的时候,每次都是上午面的不好,下午面的不错.
4. 投简历经常没下文?
我当初也没想到简历筛选这关有这么难,可能是我的简历确实亮点不多,再者 HR 很多都不是行内人,因此他们看得最直接的就是你上家的公司和你毕业的学校,如果你不是从牛逼的公司 / 学校出来,可能会碰到和我一样的情况,应对的办法就是多投.
5. 是否该裸辞?
我一开始是边上班边投,然后利用调休时间,或者请假去面试.后来,面试机会越来越多,请假太频繁了,自己都不好意思了,并且自己也已经有足够的信心,这个时候我选择了裸辞.裸辞还有一个原因是,在面试过程中你会发现,有的公司要人要的紧,如果你的辞职流程过长可能会导致你错过这个公司.
6. 注意事项
1)面试前一天把路线和时间算好,最好别迟到.
2)背个书包,带好简历,充电宝,纸巾,雨伞.
面试环节
1. 笔试常见的问题?
面试常见的问题上面给的面试题链接基本都有.我只提几点:1)写 SQL:写 SQL 很常考察 group by,内连接和外连接.2)手写代码:手写代码一般考单例,排序,线程,消费者生产者.我建议排序算法除了冒泡排序,最好还能手写一种其他的排序代码.试想:如果一般面试者都写的冒泡排序,而你写的是快速排序 / 堆排序,肯定能给面试官留下不错的印象.
2. 面试流程?
1)让你自我介绍
2)问 Java 基础知识
3)问项目
4)情景问题,例如:你的一个功能上了生产环境后,服务器压力骤增,该怎么排查.
5)你有什么想问面试官的
3. 面试常问的知识点?1)集合相关问题(必问):
HashMap,LinkedHashMap,ConcurrentHashMap,ArrayList,LinkedList 的底层实现.
HashMap 和 Hashtable 的区别.
ArrayList,LinkedList,Vector 的区别.
HashMap 和 ConcurrentHashMap 的区别.
HashMap 和 LinkedHashMap 的区别.
HashMap 是线程安全的吗.
ConcurrentHashMap 是怎么实现线程安全的.
2)线程相关问题(必问):
创建线程的 3 种方式.
什么是线程安全.
Runnable 接口和 Callable 接口的区别.
wait 方法和 sleep 方法的区别.
synchronized,Lock,ReentrantLock,ReadWriteLock.
介绍下 CAS(无锁技术).
什么是 ThreadLocal.
创建线程池的 4 种方式.
ThreadPoolExecutor 的内部工作原理.
分布式环境下,怎么保证线程安全.
Java 学习交流 QQ 群:589809992 我们一起学 Java!
3)JVM 相关问题:
介绍下垃圾收集机制(在什么时候,对什么,做了什么).
垃圾收集有哪些算法,各自的特点.
类加载的过程. 双亲委派模型.
有哪些类加载器.
能不能自己写一个类叫 java.lang.String.
4)设计模式相关问题(必问):
先问你熟悉哪些设计模式,然后再具体问你某个设计模式具体实现和相关扩展问题.
5)数据库相关问题,针对 Mysql(必问):
给题目让你手写 SQL.
有没有 SQL 优化经验.
Mysql 索引的数据结构.
SQL 怎么进行优化.
SQL 关键字的执行顺序.
有哪几种索引.
什么时候该(不该)建索引.
Explain 包含哪些列.
Explain 的 Type 列有哪几种值.
6)框架相关问题:
Hibernate 和 Mybatis 的区别.
Spring MVC 和 Struts2 的区别.
Spring 用了哪些设计模式.
Spring 中 AOP 主要用来做什么.
Spring 注入 bean 的方式.
什么是 IOC,什么是依赖注入.
Spring 是单例还是多例,怎么修改.
Spring 事务隔离级别和传播性.
介绍下 Mybatis/Hibernate 的缓存机制.
Mybatis 的 mapper 文件中 #和 $ 的区别.
Mybatis 的 mapper 文件中 resultType 和 resultMap 的区别.
Mybatis 中 DAO 层接口没有写实现类,Mapper 中的方法和 DAO 接口方法是怎么绑定到一起的,其内部是怎么实现的.
Java 学习交流 QQ 群:589809992 我们一起学 Java!
7)其他遇到问题:
介绍下栈和队列.
IO 和 NIO 的区别.
接口和抽象类的区别.
int 和 Integer 的自动拆箱 / 装箱相关问题. 常量池相关问题.
== 和 equals 的区别.
重载和重写的区别.
String 和 StringBuilder,StringBuffer 的区别.
静态变量,实例变量,局部变量线程安全吗,为什么. try,catch,finally 都有 return 语句时执行哪个.
介绍下 B 树,二叉树.
ajax 的 4 个字母分别是什么意思.
xml 全称是什么.
分布式锁的实现.
分布式 session 存储解决方案.
常用的 linux 命令.
一些经验:
1. 先投一些普通公司,等面出了心得再去投理想的公司.
2. 不熟悉的技术不要主动提.
3. 对于那种实习期 6 个月还打 8 折的公司,除非你没有其他选择了,否则不要去.
4. 小公司喜欢在薪水上压你,开的时候适当提高.
5. 不要去参加招聘会,纯粹是浪费时间.
6. 把面试当作一次技术的交流,不要太在意是否能被录取.
7. 公司一般面完就决定是否录取了,让你回去等消息这种情况一般没戏,无论你自己觉得面的有多好.
8. 尽量少通过电话面试,效果不好.
9. 在面试的日子里,要保持每天学习,无论是学习新东西还是复习旧东西.
10. 拿到 offer 了,问问自己这个公司让自己 100% 满意了吗,如果不是,请继续努力找更好的.
11. 通过面试官可以大概判断这家公司的情况.
12. 拉勾投的简历很多会被筛掉,但是拉勾还是面试机会的最主要来源.
13. 理想的公司可以多投几次,我有好几次都是第一次投被筛掉,多投几次就过的经验.
14. 问到自己有深入研究过的知识,抓住机会好好表现,不要轻易放过.
我有一个微信公众号,经常会分享一些 Java 技术相关的干货.如果你喜欢我的分享,可以用微信搜索 "Java 团长" 或者 "javatuanzhang" 关注.
来源: http://geek.csdn.net/news/detail/253386