基础篇
参考这里的面试题:面试题写在后面了
能回答上百分之七十,基础的广度就算OK了。如果达不到,那么缺什么就赶紧补什么。广度达到了,还需要对个别热点问题有深度。每个人的精力都有限,可以适当挑选两个热点问题进行深入挖掘。比如HashMap,要不仅仅能够说上来源码是什么去实现的,还要了解JDK1.7版本到1.8版本都做了哪些改进,为什么这么改进,ConcurrentHashMap怎么实现的,针对并发场景都做了哪些优化措施,JDK1.7和1.8的实现有什么差异。了解这些可能需要花费很大精力。但是,面试的时候一但问到了这个你非常精通的知识点,就基本进入你的主场了。这个能起到一锤定音的作用,给面试官留下极强的印象,甚至直接决定了此次面试的成败。因此,至少准备那么一两个非常精通的知识点,一定不要多,但要比面试官和其他求职者都要精通。这个赌的就是运气,只要在一个问题上能给面试官上一课,就能让对方产生“你很厉害”的错觉。
所有基础知识都要做好笔记,面试前多回顾下,在配合刷下题,问题就不大了。
项目篇
要回答好项目问题,核心就是要提前做好充足的准备。首先,仔细回顾自己做过的项目。然后挑选最有价值的部分,写一篇关于这个项目的总结性文档,要讲清楚这个项目的架构,设计思路。其次是努力回想当时遇到的难点,踩过的坑,以及自己怎么思考和应对的,还有对项目后续改进的思考。这个非常重要,一定写下来。文档写出来后,还要反复提炼和补充。面试的时候就以此文档为纲领,方能做到侃侃而谈,从容应对。
情商篇
面试的时候,可能会穿插一些考察性格的问题。比如,问你为什么离职/想换工作,对技术和业务怎么看,对我们公司有什么了解,对我们的业务有什么了解,你有什么想问我的,你觉得自己有什么优点/缺点。做技术的同学往往在情商方面有所欠缺,如果没有准备的话,面试时一不小心说错一句话就可能导致前功尽弃。尤其在阿里,HR是有一票否决权的。 那么,应对此类问题的第一点就是提前预防,可以提前拿张纸,猜想对方可能会问的问题,把标准答案写出来,反复推敲,然后背下来即可。比如,“你觉得自己有什么优点”这个问题,我当时的标准答案就是,“我觉得人最难了解的就是自己,所以我想借用我前领导对我的评价,XXX是个......的人”。我的这个标准答案是基于 “第三方的评价更有可信度” 这个原理来设计的。第二点,回答问题的时候表现的谦虚一点即可,而且千万不要有负能量。比如“为什么离职/想换工作”,这个问题,不要去吐槽公司或者同事,或者表达情绪上的不满。要尽量展现出自己好学上进的一面,这一点很重要。面试官会把对你的印象记录在案的,包括你的优点和缺点。因此即便技术达不到要求,也尽量展现性格上的优点。
阿里面试流程
面试一般是四到五面,以电话面试为主。最后一轮面试时HR面试,所以只要挺过前面的技术面试一般就OK了。第一轮是考察基础,第二轮开始考察项目,沟通表达能力。第三四轮会可能有编程,要求现场写代码,或者线下完成一个指定的项目。面试官的级别在p6-p9之间,一般随着面试流程的推进而升高。技术面试通过后就是HR面了,这一轮主要考察价值观。所有面试结束后,就是一个漫长的等待了,期间会有体检,背景调查,然后发offer。这个流程会有一个月的时间,比较久。需要注意的是,面试过程中一定要保证诚实,不能有半点弄虚作假。因为一但背景调查的时候发现说谎了,不但offer会取消,还会记录到人才库里。再有一点,约好了的面试不能随意爽约,这个也会永久记录。你的每次面试的过程都会详细的记录在人才库里的,因此尽量不要留下污点,以免影响以后的面试。
面试题
本人是做java开发的,这是我参加58,搜狐,搜狗,新浪微博,百度,腾讯文学,网易以及其他一些小的创业型公司的面试常被问的问题,当然有重复,弄清楚这些,相信面试会轻松许多。
-
junit用法,before,beforeClass,after, afterClass的执行顺序
-
分布式锁
-
nginx的请求转发算法,如何配置根据权重转发
-
用hashmap实现redis有什么问题(死锁,死循环,可用ConcurrentHashmap)
-
线程的状态
-
线程的阻塞的方式
-
sleep和wait的区别
-
hashmap的底层实现
-
一万个人抢100个红包,如何实现(不用队列),如何保证2个人不能抢到同一个红包,可用分布式锁
-
java内存模型,垃圾回收机制,不可达算法
-
两个Integer的引用对象传给一个swap方法在方法内部交换引用,返回后,两个引用的值是否会发现变化
-
aop的底层实现,动态代理是如何动态,假如有100个对象,如何动态的为这100个对象代理
-
是否用过maven install。 maven test。git(make install是安装本地jar包)
-
tomcat的各种配置,如何配置docBase
-
spring的bean配置的几种方式
-
web.xml的配置
-
spring的监听器。
-
zookeeper的实现机制,有缓存,如何存储注册服务的
-
IO会阻塞吗?readLine是不是阻塞的
-
用过spring的线程池还是java的线程池?
-
字符串的格式化方法 (20,21这两个问题问的太低级了)
-
时间的格式化方法
-
定时器用什么做的
-
线程如何退出结束
-
java有哪些锁?乐观锁 悲观锁 synchronized 可重入锁 读写锁,用过reentrantlock吗?reentrantlock与synmchronized的区别
-
ThreadLocal的使用场景
-
java的内存模型,垃圾回收机制
-
为什么线程执行要调用start而不是直接run(直接run,跟普通方法没什么区别,先调start,run才会作为一个线程方法运行)
-
qmq消息的实现机制(qmq是去哪儿网自己封装的消息队列)
-
遍历hashmap的三种方式
-
jvm的一些命令
-
memcache和redis的区别
-
mysql的行级锁加在哪个位置
-
ConcurrentHashmap的锁是如何加的?是不是分段越多越好
-
myisam和innodb的区别(innodb是行级锁,myisam是表级锁)
-
mysql其他的性能优化方式
-
linux系统日志在哪里看
-
如何查看网络进程
-
统计一个整数的二进制表示中bit为1的个数
-
jvm内存模型,java内存模型
-
如何把java内存的数据全部dump出来
-
如何手动触发全量回收垃圾,如何立即触发垃圾回收
-
hashmap如果只有一个写其他全读会出什么问题
-
git rebase
-
mongodb和hbase的区别
-
如何解决并发问题
-
volatile的用途
-
java线程池(好像之前我的理解有问题)
-
mysql的binlog
-
代理模式
-
mysql是如何实现事务的
-
读写分离何时强制要读主库,读哪个从库是通过什么方式决定的,从库的同步mysql用的什么方式
-
mysql的存储引擎
-
mysql的默认隔离级别,其他隔离级别
-
将一个链表反转(用三个指针,但是每次只发转一个)
-
spring Aop的实现原理,具体说说
-
何时会内存泄漏,内存泄漏会抛哪些异常
-
是否用过Autowire注解
-
spring的注入bean的方式
-
sql语句各种条件的执行顺序,如select, where, order by, group by
-
select xx from xx where xx and xx order by xx limit xx; 如何优化这个(看explain)
-
四则元算写代码
-
统计100G的ip文件中出现ip次数最多的100个ip
-
zookeeper的事物,结点,服务提供方挂了如何告知消费方
-
5台服务器如何选出leader(选举算法)
-
适配器和代理模式的区别
-
读写锁
-
static加锁
-
事务隔离级别
-
门面模式,类图(外观模式)
-
mybatis如何映射表结构
-
二叉树遍历
-
主从复制
-
mysql引擎区别
-
静态内部类加载到了哪个区?方法区
-
class文件编译后加载到了哪
-
web的http请求如何整体响应时间变长导致处理的请求数变少,该如何处理?用队列,当处理不了那么多http请求时将请求放到队列
中慢慢处理,web如何实现队列
-
线程安全的单例模式
-
快速排序性能考虑
-
volatile关键字用法
-
求表的size,或做数据统计可用什么存储引擎
-
读多写少可用什么引擎
-
假如要统计多个表应该用什么引擎
-
concurrenhashmap求size是如何加锁的,如果刚求完一段后这段发生了变化该如何处理
-
1000个苹果放10个篮子,怎么放,能让我拿到所有可能的个数
-
可重入的读写锁,可重入是如何实现的?
-
是否用过NIO
-
java的concurrent包用过没
-
sting s=new string("abc")分别在堆栈上新建了哪些对象
-
java虚拟机的区域分配,各区分别存什么
-
分布式事务(JTA)
-
threadlocal使用时注意的问题(ThreadLocal和Synchonized都用于解决多线程并发访问。但是ThreadLocal与synchronized有本质的区别。synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。而ThreadLocal为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。而Synchronized却正好相反,它用于在多个线程间通信时能够获得数据共享)
-
java有哪些容器(集合,tomcat也是一种容器)
-
二分查找算法
-
myisam的优点,和innodb的区别
-
redis能存哪些类型
-
http协议格式,get和post的区别
-
可重入锁中对应的wait和notify
-
redis能把内存空间交换进磁盘中吗(这个应该是可以的,但是那个面试官非跟我说不可以)
-
java线程池中基于缓存和基于定长的两种线程池,当请求太多时分别是如何处理的?定长的事用的队列,如果队列也满了呢?交换进磁盘?基于缓存的线程池解决方法呢?
-
synchronized加在方法上用的什么锁
-
可重入锁中的lock和trylock的区别
-
innodb对一行数据的读会枷锁吗?不枷锁,读实际读的是副本
-
redis做缓存是分布式存的?不同的服务器上存的数据是否重复?guava cache呢?是否重复?不同的机器存的数据不同
-
用awk统计一个ip文件中top10
-
对表做统计时可直接看schema info信息,即查看表的系统信息
-
mysql目前用的版本
-
公司经验丰富的人给了什么帮助?(一般boss面会问这些)
-
自己相对于一样的应届生有什么优势
-
自己的好的总结习惯给自己今后的工作带了什么帮助,举例为证
-
原子类,线程安全的对象,异常的处理方式
-
4亿个int数,如何找出重复的数(用hash方法,建一个2的32次方个bit的hash数组,每取一个int数,可hash下2的32次方找到它在hash数组中的位置,然后将bit置1表示已存在)
-
4亿个url,找出其中重复的(考虑内存不够,通过hash算法,将url分配到1000个文件中,不同的文件间肯定就不会重复了,再分别找出重复的)
有1万个数组,每个数组有1000个整数,每个数组都是降序的,从中找出最大的N个数,N<1000
-
LinkedHashmap的底层实现
-
类序列化时类的版本号的用途,如果没有指定一个版本号,系统是怎么处理的?如果加了字段会怎么样?
-
Override和Overload的区别,分别用在什么场景
-
java的反射是如何实现的
一个程序员学习平台分享给你们,让你在实践中积累经验掌握原理。主要方向是JAVA工程师。如果你想拿高薪,想突破瓶颈,想跟别人竞争能取得优势的,想进BAT但是有担心面试不过的,可以加我的Java学习交流群:450936584
注:加群要求
1、大学学习的是Java相关专业,毕业后面试受挫,找不到对口工作可以 2、在公司待久了,现在过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的 3、参加过线下培训后,知识点掌握不够深刻,就业困难,想继续深造 4、已经在Java相关部门上班的在职人员,对自身职业规划不清晰,混日子的 5、有一定的C语言基础,接触过java开发,想转行的 小号勿扰,不喜勿加