查看: 492|回复: 0

[Java学习] 阿里JAVA面试分享经验

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



回复

使用道具 举报

关闭

站长推荐上一条 /1 下一条