陆陆续续接到了阿里巴巴几个事业部的面试邀约, 记录一下自己在阿里面试中问的一些问题,总结一下;
阿里巴巴的面试一般分为五面
一面、电话面,会简单问一些java基础,多线程等等
二面、电话面,面试官会让你讲几个自己工作中的业务,然后围绕你的业务去问一些相关的问题;然后中间掺杂着一些基础的问题,如果在一面中答的不好的问题,在二面中很大几率会被再次问到,因为每个面试官面完之后都会写面试评价的,像我之前hashmap为什么线程不安全答的不够好,然后二面又被问了,面试官说主要看你有没有学习能力;
再然后会问一些reids相关,rpc,spring等等
三面、现场面,跟二面差不多,也是以项目为主,这个时候一些基础的问题可能不会问了,主要就是考察你对业务的把控能力,还有表达能力,还有项目管理能力,还会考察你的技术广度,会不会主动去了解学习其他的技术;
四面、现场面,反正我面的时候是让我在黑白上画出我做的项目模块图,以及上下层服务的流转,然后跟我的描述 中间是不是打断我提问,因为这么多轮下来也没啥好问的了,聊的都是技术之外的一些,比如说在项目中涉及多个部门如何沟通?
如果判断你的同事是否优秀?等等
真的表达能力很重要…
五面、
HR面
以下,为面试问题总结;
#Java基础
String 和StringBuffer和 StringBuilder的区别?
String,StringBuffer与StringBuilder的区别??
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
sleep() 区间wait()区间有什么区别?
Object 中有哪些方法?其中clone(),怎么实现一个对象的克隆,Java如何实现深度克隆?
wati() notify() notify()用法,与Condition有什么区别呢?
HashMap为什么是不安全的?
谈谈HashMap不安全的体现
1.在多线程情况下,同时put结点的时候有可能造成数据丢失
2.多线程put情况下可能造成 环形链;然后再调用get方法的时候就会出现死循环,造成cpu 100%;
简单描述一下HashMap和ConcurrentHash 在1.7 和1.8的实现
Java 8系列之重新认识HashMap
为什么重写equals时候被要求重写hashCode()?
jdk1.7和1.8的比较,多了哪些新的特性?
什么时候回发生内存泄露?让你写一段内存泄露的代码你会怎么写?
JAVA 内存泄露详解(原因、例子及解决)
Java中关于内存泄漏出现的原因以及如何避免内存泄漏
我们知道,对象都是有生命周期的,有的长,有的短,如果长生命周期的对象持有短生命周期的引用,就很可能会出现内存泄露
下面给出一个 Java 内存泄漏的典型例子,
```
Vector v = new Vector(10);
for (int i = 0; i < 100; i++) {
Object o = new Object();
v.add(o);
o = null;
}
```
在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个 Vector 中,如果我们仅仅释放引用本身,那么 Vector 仍然引用该对象,所以这个对象对 GC 来说是不可回收的。因此,如果对象加入到Vector 后,还必须从 Vector 中删除,最简单的方法就是将 Vector 对象设置为 null。
v = null
GC机制简要说明一下,不同区使用的算法。
两个对象循环引用会不会被被GC?
可达性算法,和 根节点可达性算法
哪些可以算作根节点?
Jvm内存结构简要说一些,栈里面一般存储了什么?
Java内存模型简要描述一下?
类加载机制简要描述一下?
平时有没有遇到一些栈溢出或者内存溢出,内存泄露的问题吗?如果去分析这个问题?
java内存溢出与内存泄露
>内存泄漏是指对象实例在新建和使用完毕后,仍然被引用,没能被垃圾回收释放,一直积累,直到没有剩余内存可用。如果内存泄露,我们要找出泄露的对象是怎么被GC ROOT引用起来,然后通过引用链来具体分析泄露的原因。分析内存泄漏的工具有:Jprofiler,visualvm等。
内存溢出是指当我们新建一个实力对象时,实例对象所需占用的内存空间大于堆的可用空间。
栈(JVM Stack)存放主要是栈帧( 局部变量表, 操作数栈 , 动态链接 , 方法出口信息 )的地方。注意区分栈和栈帧:栈里包含栈帧。与线程栈相关的内存异常有两个:
a)、StackOverflowError(方法调用层次太深,内存不够新建栈帧)
b)、OutOfMemoryError(线程太多,内存不够新建线程)
如果出现了内存溢出问题,这往往是程序本生需要的内存大于了我们给虚拟机配置的内存,这种情况下,我们可以采用调大-Xmx来解决这种问题
java内存泄漏的定位与分析
jstat -gc查看一下GC过程
拿到dump文件利用MemoryAnalyzer来分析泄露的地方在哪里
如果内存猛增,怎么去排查?
通过jstack分析问题
1、利用top名称查看哪个java进程占用了较多的cpu资源;
2、通过top -Hp pid可以查看该进程下各个线程的cpu使用情况;
3.通过top -Hp命令定位到cpu占用率较高的线程tid之后,继续使用jstack pid命令查看当前java进程的堆栈状态
4.然后将刚刚找到的tid转换成16进制,在 jstack -pid里面的堆栈信息里面找到对应的线程信息
简要描述一下多线程,以及线程池对应的一些属性配置?
CAS实现机制?
垃圾收集器 G1有什么样的特性了解吗? CMS呢?
Cms与G1的优缺点
有哪些常用的排序算法?
NIO模型描述一下?
你了解SPI机制吗?
Java SPI
#数据库
25. Innode 存储引擎的索引结构了解一下?
26. 为何索引用B+树 ,而不用红黑树等其他的树?
27. 以B+树结构层面分析一下为什么表数据量大了之后访问速度会变慢?
28. Innode和 MYISAM存储引擎区别
29. Innodb中有哪些索引?分别介绍一下
30. 如何优化大数据量分页limit?
31. 简要说下数据库优化
32. 在工作中有遇见什么死锁的情况吗?你是怎么分析的?
33. 怎么评估什么时候需要分库分表?如果每周曾加100万数据,要在什么情况下去考虑分库分表?
34. Innodb 支持哪些类型的锁?
35. Mysql 大表数据如何定期归档
大表数据定期归档
①.新建存储过程,查询30天的数据并归档进新数据库,然后把30天前的旧数据从旧表里删除
②.创建EVENT,每天晚上凌晨00:00定时执行上面的存储过程
#RPC框架 DUBBO
36. 一般RPC框架都有哪些模块?
37. dubbo 各个模块?
38. 如果zookeeper挂掉了,dubbo还能正常运行吗?
39. dubbo怎么实现的网络通信?
40. dubbo的监控是怎么实现的?
41. dubbo SPI 机制 与 JAVA SPI?
这里写链接内容
#Zookeeper
42. zookeeper快速选举描述一下?
43. zookeeper实现分布式锁怎么实现?
44. zookeeper集群可以部署2台吗?
#Redis
45. 怎么用redis实现分布式锁?(A释放锁的时候,如果锁超时自动过期了,然后B同时获取到了锁,然后A执行删除锁的操作,那么就会把B获取到的锁给删除了,如何解决这类问题?)
46. redis是单线程还是双线程?为什么redis的性能高?什么决定的?
47. redis的持久化策略?
48. redis有哪些数据类型?
49. 你有尝试的去优化redis吗?
50. rdb和aof工作原理?各有什么优缺点
51. redis的有哪些主从同步方式?
52. redis集群扩容与收缩
#Spring
53. 请简要描述一下IOC 和AOP?
54. Spring是怎么解决的循环依赖?
55. Spring 中使用的那种方式来实现动态代理的?
56. Spring中的事务传播机制?事务嵌套
57. Spring中同一个类中有方法A 和 B 两个方法都被标记了@Transtional,在A中调用了B,那么B的事务会生效吗?为什么?
https://blog.csdn.net/qq_39597203/article/details/87434879
(1)也许有人说,IoC和工厂模式不是一样的作用吗,用IoC好象还麻烦一点。 举个例子,如果用户需求发生变化,要把Chinese类修改一下。那么前一种工厂模式,就要更改Factory类的方法,并且重新编译布署。而IoC只需 要将class属性改变一下,并且由于IoC利用了Java反射机制,这些对象是动态生成的,这时我们就可以热插拨Chinese对象(不必把原程序停止 下来重新编译布署,java特性 需要重新编译)
(2)也许有人说,即然IoC这么好,那么我把系统所有对象都用IoC方式来生成。 注意,IoC的灵活性是有代价的:设置步骤麻烦、生成对象的方式不直观、反射比正常生成对象在效率上慢一点。因此使用IoC要看有没有必要,我认为比较通用的判断方式是:用到工厂模式的地方都可以考虑用IoC模式。
#项目中高并发,秒杀之类
59. 怎么实现一个秒杀系统?
#解决问题的能力
60. 工作中有碰到过线上的问题吗?怎么解决的?
61. 请讲一个你工作中让你影响深刻并且最难寻找和解决的bug?
62. 如果网站访问过慢,并且每隔一段时间就会特别卡,你会去怎么排查问题?
63. 你有过Jvm调优经验吗?
64. 你做了这么多系统,是怎么做系统监控的,系统的稳定性?内存满了,磁盘满了,和cpu高了之类的?
65. 有碰到过数据库死锁的问题吗?怎么解决的?
66. 平时会使用设计模式吗?请讲一个使用的情景(单例,工厂太简单不让算…)
#其他
67. 怎么辨别身边的同事是否优秀?
68. 如果一个项目中设计到多个部门之间的协调,你要怎么做?
69. 你有读过项目管理之类的书吗?
70. 作为一个小组leader,你是怎么安排工作的?
71. 如果RocketMq的一个磁盘坏了,怎么办?
答案慢慢补充