金三银四面试总结
自己已经毕业有三年多了,这三年来一直在一个大公司的体系里面工作,从大概去年的这个时候自己就有一个念头,那就是去一个大平台,去一个身边的人都知道的公司,不仅仅是北京的朋友,包括老家的朋友和农村的父母。其实更多的是为了对得起自己所从事的这个行业,当以后回想起来的时候最起码自己去过某某大平台,说起来也牛逼哄哄的。所以大概从去年的这个时候开始就做准备了,包括买一些书籍,平时没事就看看,在公司完成自己的工作之余就研究一下公司用到的技术,在上下班或者没事的时候看看微信上那些技术公众号所发的技术文章,开始了一点点的积累。过完年大概面试了四五天,拿到了几个offer,其中就包括之前自己心仪的平台。闲话不多说了,说说自己的面试经历吧!
自己面试的这个基本上技术面试都是三轮,当然也不排除个别只有两轮加一轮的hr面试,大公司hr面试也是很重要的。三轮技术面试之前基本面试官都会让你大概做个自我介绍,当然有些面试官不会主动要求你做主动介绍,但是你还是应该主动做一下自我介绍,这时候可以展示一下你的概述能力和全局野。
大概有如下:
1.有些公司要求是科班出身,所以如果自己是科班出生的话,最好介绍一下自己的学校,专业,毕业时间
2.自己的工作经历,分别大概说出项目的目的,项目的价值,项目的功能,所用到的技术,自己所负责的任务等。
第一轮基础知识:
1.java基本知识,包括反射,泛型,重写,重载,装箱,拆箱,Object类有哪些方法还有例如:String s1 = "abc";和String s2 = new String("abc");的区别等。
2.java中的结合,不仅要了解怎么用还要知道原理。比如ArrayList和LinkedList,HashSet和TreeSet,HashMap和HashTable以及ConcurrentHashMap,一般首先会问两者的区别,如果你回答上来会接着问你原理,就这样一层一层的问,直到你不会或者你回答的达到他的预想程度甚至还会让你想一些办法来优化其中一些集合,比如如何降低HashMap的相率,当然也不排除更严重的,笔者去某团面试的时候就是首先让手动写一个HashMap。其中HashMap和ConcurrentHashMap是高频,一定要会用并且熟知其原理。
3.就是多线程编程和锁了,这一款也是非常重要的,一些大公司很看重的,尤其是对C的大公司,比如电商平台。其中包括:synchronized的使用和原理,volatile的使用和原理,创建线程的方式有哪些,经常用的join,yeild,Sleep,wait,notify,notifyAll方法的使用。锁也会问道Lock的使用和原理以及和synchronized的区别,还有并发包里的countdownlatch的使用和原理,AtomicInteger的使用和原理,线程池的使用和原理,什么是CAS以及原理,ThreadLocal的使用和原理还有栅栏,线程返回值等。同样很重要尽量要多知道,知道原理。
4.JVM虽然实际当中很少用,但是同样很重要。比如JVM的内存模型,什么是内存泄漏,如何确定垃圾,如何回收垃圾,已经有没有在线上遇到过内存溢出这样的问题,你是怎么排查的。
5.框架的知识,比如Spring的AOP,IOC,事务传播机制。
6,数据库知识,一般的索引知识,如果是mysql的话用什么引擎,底层的数据结构是什么,如何查看一条SQL在线上和线下的执行效率。
7.中间件,zk的作用和原理,dubbo的使用和大概原理,redis的使用和原理,这些一般回答上使用和大概原理就可以了,如果能详细说出底层实现原理那一定是加分项目,比如zk的paxos算法。
8.可能业委会问道http和https的区别和原理,以及tcp三次握手和四次挥手
9.可能也会问道设计模式的使用,其中就包括最出名的单例模式,一定要能手动在纸上写出来。
10.中间可能会穿插着问你一些业务。
说明:如果这个过程被问道不会的有时候面试官会主动和你说答案,或者自己要下来查答案,但是一定要记住,因为很有可能第二轮或者下一家就会问道,切记!
第二轮基本原理:
基本也会问第一轮涉及到的知识的原理,但是很少会问使用了。这一轮一般会问一些场景知识,比如说现在要在同一个JVM加载同样的两个类该如何做到,比如现在一下来了大量请求,但是机器的吞吐量是100,你怎么限流降级等,这就要考验你实际当中的经验或者平时看的一些书籍了。
第三轮场景知识:
会让你介绍你做的项目,然后打断你给你出题,还有也会出场景题目,比如经典的红绿灯问题。
最后hr面试:
有的人可能认为这一轮就不重要了,其实不然,尤其是大公司。你的认真程度不应该低于前三轮。包括你为什么要离职,以及你的规划。
说明:
1.不会的东西下来一定要查!一定要查!一定要查!
2.尤其是去大公司或者说拿更高的薪资,一定要有特点,比如高并发,jvm或者是中间件
3.说该说的话,比如面试官问你为什么学习java,这时候你正准备回答是因为钱,但是面试官抢先说是因为爱好吧,你这时候就不要非得说不是因为爱好是因为爱钱了。尤其是在技术面试的时候,当面试官主动回答或者已经打断这个知识点的时候,除非你对这个知识点很了解,可以继续聊下去,否者你就不要再说一些没用的东西了,因为很可能引起面试官的好奇,然后继续追问,让你直到出丑。
4.不要说前东家的不好,也要和前东家搞好关系,因为大公司都有背调,而且不是走流程。
5.大公司最后给你定薪多少是根据你的面试情况,部门预算,你的以往流水来决定的,而且以往的流水很重要,很多公司就是在你以往的流水上加百分之三十左右,至于怎么应对,自己想招。
6.学历很重要,基本上像样的公司都要求是本科学历,很多公司要求必须是全日制本科。
7.最后就是有些大公司要求一个人不能接受他们公司的多个offer,否则就触犯公司红线,可能被取消全部offer,其中就包括某东。
8.除非你很牛,一般人在面试之前一定还是要刷题的。