概述
1、自我介绍,讲讲求职意向和擅长的技能
2、Tomcat的基本架构是什么?
3、JVM调优,工作中怎么用,GC算法和回收策略有哪些
标记清除算法
标记整理算法
复制算法
分代收集算法
4、Java中线程池是如何实现的? 创建线程池的几个核心构造参数是什么?
Java中的线程池都是通过threadpoolexecutor实现的。通过调节参数来实现不同功能的线程池
- crocepoolsize核心线程池大小
- maximumPoolSize 最大线程池数量
- KeepAlivetime 超过核心线程数目的线程能存活的最大时间
- 阻塞等待队列
- 新建线程工厂
- 拒绝策略
一开始时,每进来一个请求都会建立一个新的线程(即使当前线程池有空闲的线程),当创建的线程池数目等于核心线程数目时候,如果所有线程都处于工作状态,再有请求进来,将请求放置于阻塞队列中,有空闲线程就会取出来进行处理,如果阻塞队列塞满,就会增长线程数目,但是不能超过max,如果超过max就会进行拒绝策略,过了KeepAlietime超过核心线程池数目的线程就会被销毁。
5、Volatile和Synchronize的区别?
- 工作原理:Volatile告诉JVM寄存器中该变量的值是不可靠的,需要到内存中读取。Synchronize锁定该变量,只有当前线程可以访问,其他线程访问会阻塞。
- 判断是否阻塞:多个变量访问被Volatile修饰的资源时,是不会被阻塞的。但是多个线程访问Synchronize修饰的资源会被阻塞
- 修饰的对象不同:Synchronize可以修饰变量,方法,类级别,但是Volatile只能修饰变量
- 保证线程安全的几个性质:Volatile只保证了可见性 Synchronize保证的是原子性 还有可见性。
- 判断是否可以优化:Synchronize标记的变量可以被编译器优化(锁优化),Volatile通过内存屏障实现的 不可以被优化。
6、GC的机制是什么?垃圾回收器的基本原理是还说呢么?是否可以立即回收内存?怎么样主动的通知JVM进行垃圾回收?
通过System.gc();主动让虚拟机进行垃圾回收
GC机制是JVM自动垃圾回收的一种机制 主要是防止内存泄漏 还有即使更好的利用内存空间。
7、类加载器双亲委派模型机制?
双亲委派机制是一个类加载器接收一个类加载请求时候,查看自身是否有 父类加载器,如果有父类加载器的话,就请求父类加载器加载该类。然后一直递归下去。当父类加载器无法加载的时候就然后子类进行加载。避免类的重复加载。
8、集合的种类和区别,HashMap底层如何实现(JDK1.8有所改动),HashMap和ConcurrentHashMap的区别?
hashMap1.8底层是用红黑树+链表+桶数组 当数目大于6时候使用红黑树,减少查询时候的复杂度。小于6时候使用链表实现。
ConcurrentHashMap 1.8版本不再使用segment锁 而是直接锁同元素 ,从1.7的头插法改变为尾插法,然后结构体的next指针用Volatile修饰保证在多线程操作下不会成环。
9、Spring IOC如何管理Bean之间的依赖关系,怎么样避免循环依赖?
10、SpringBean创建过程中的设计模式?
最主要的是使用了单例模式
但是作用域是分为四组:单列 会话 连接
二面
1、自我介绍、
2、InnoDB支持的四种事务隔离级别名称是什么? 之间的区别是什么?
3、聊一聊事务的特性
4、什么是MySQL隔离级别?
5、如何理解BTree机制?
6、谈一谈对慢查询的分析?MySQL常用的优化方法有哪些?
7、谈一谈悲观锁和乐观锁以及SQL的实现
8、简述三次握手和四次握手的过程?
9、B+树索引和Hash索引的区别?
三面
1、自我介绍
2、MySQL的锁并发?
3、高并发场景下如何防止死锁,保证数据的一致性?
4、集群和负载均衡的算法与实现?
5、简述分库与分表设计?
6、分库分表带来的分布式困境与对应之策有哪些?
7、加锁的机制是什么?
8、Redis和Setnx命令使如何实现分布式锁的?使用Redis怎么进行异步队列?会有什么缺点?
注释:面经的题目是从微信公众号找来,但是答案是自己总结的
最后
以上就是畅快红牛为你收集整理的3.14号刷阿里巴巴面经的全部内容,希望文章能够帮你解决3.14号刷阿里巴巴面经所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复