Java运行时的数据区域
1、堆区
2、方法区
3、本地方法栈
4、虚拟机栈
5、程序计数器
Java内存模型
jvm的垃圾回收机制
如何加快gc的速度 快速判断对象生死
JVM的分区、堆的分代以及回收算法还有OOM异常的处理思路
JVM 的结构, GC 算法;在 HashMap 对象中不断调用 put 方法,在 JVM 中会发生什么。
简介 JVM 的可达性分析过程。
Out of MemoryError 产生的原因是什么,具体怎么去调优,以及理解那几个参数的含义 -Xms, -Xmx ,-Xmn,XX:PermSize
静态方法和普通方法同时加上synchronized有什么区别?
集合框架,线程安全的,对比
说一下HashMap的实现原理?
hashmap的实现原理 采用什么方法能保证每个bucket中的数据更均匀
hashmap底层实现原理,解决冲突的方式,还有没有其他方式(全域哈希)
hadhmap concurrenthashmap区别 synchronizedhashmap如何实现,之间的区别(锁的粒度不同)
hashmap存节点 怎么存?
说一下Stack和ArrayList的区别?
Stack 的特点, Stack 与 ArrayList 的区别,与 Queue 的区别
Vector 的内部实现。
说一下HashMap和TreeMap的区别?
Collections 中的 sort 方法。手写一个数组的逆序
Collection 接口下有哪些接口; List 与 ArrayList 的关系。
了解 ConcurrentHashMap吗?
谈一谈对volatile理解,这个问题很常见,答出要点: 可见性、防止指令重排即可
volatile关键字
volatile关键字是Java并发的最轻量级实现,本质上有两个功能,在生成的汇编语句中加入LOCK关键字和内存屏障
作用就是保证每一次线程load和write两个操作,都会直接从主内存中进行读取和覆盖,而非普通变量从线程内的工作空间(默认各位已经熟悉Java多线程内存模型)
但它有一个很致命的缺点,导致它的使用范围不多,就是他只保证在读取和写入这两个过程是线程安全的。如果我们对一个volatile修饰的变量进行多线程下的自增操作,还是会出现线程安全问题。根本原因在于volatile关键字无法对自增进行安全性修饰,因为自增分为三步,读取-》+1-》写入。中间多个线程同时执行+1操作,还是会出现线程安全性问题。
synchronized
锁的优化:偏向锁、轻量级锁、自旋锁、重量级锁
锁的膨胀模型,以及锁的优化原理,为什么要这样设计
与Concurrent包下的Lock的区别和联系
Lock能够实现synchronized的所有功能,同时,能够实现长时间请求不到锁时自动放弃、通过构造方法实现公平锁、出现异常时synchronized会由JVM自动释放,而Lock必须手动释放,因此我们需要把unLock()方法放在finally{}语句块中
concurrentHashMap
两个hash过程,第一次找到所在的桶,并将桶锁定,第二次执行写操作。
而读操作不加锁,JDK1.8中ConcurrentHashMap从1600行激增到6000行,中间做了很多细粒度的优化,大家可以查一下。
锁的优化策略
① 读写分离
② 分段加锁
③ 减少锁持有的时间
④ 多个线程尽量以相同的顺序去获取资源
等等,这些都不是绝对原则,都要根据情况,比如不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。这部分跟面试官谈了很久
线程池的配置 Excutor 以及Connector的配置
Java 8 的新特性
请你讲一下Java中的继承与组合
继承:
组合:
java中基本类型有哪些?
数据类型可以分为两大类:
1)基本类型;
2)引用类型;
基本类型:可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。
引用数据类型:类、接口类型、数组类型、枚举类型、注解类型;
简介 String 类和 Integer 类
说明 Class 中方法的执行顺序, static 块与 constructor
聚合与组合的区别
Spring的AOP和IOC理解与实际使用
springmvc的流程 一个请求来了之后如何处理(handler链)
注解、反射、IOC理解
- mybatis说一说
- SPringmvc 注解 流程
- .线程池,数据库连接池 druid
- 有struts2和SpringMVC的区别
- Cookie和Session的区别
- 如何设计一个高并发的系统
① 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化
② 使用缓存,尽量减少数据库 IO
③ 分布式数据库、分布式缓存
④ 服务器的负载均衡
- 你能说一下hibernate里面的inverse标签是的作用吗?
- 平衡二叉树
- 哈夫曼树
- KMP算法描述
- B+树和B树的区别
- 插入节点怎么分裂
- 二分查找,递归和非递归
- 红黑树, TreeSet 的实现
红黑树简单说了一下它的特性、性能和优缺点
索引有哪些,用性别做联合索引有没有效果
- mysql底层实现原理
- 你能说一下数据库的主外关联吗?以及它有什么特性呢?
- 事务的隔离级别和传播行为
- mysql锁机制
- 实践中如何优化MySQL
① SQL语句及索引的优化
② 数据库表结构的优化
③ 系统配置的优化
④ 硬件的优化 - 在MySQL中如何定为查询效率较慢的SQL语句
- 什么情况下设置了索引但无法使用
① 以“%”开头的LIKE语句,模糊匹配
② OR语句前后没有同时使用索引
③ 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)
MySQL的常见优化方式、定为慢查询
- SQL语句的优化
order by要怎么处理
alter尽量将多次合并为一次
insert和delete也需要合并
等等 索引的底层实现原理和优化
B+树,经过优化的B+树
主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大部分表使用默认自增的主键作为主索引。进程间通信的几种方式
- cache的作用
- linux如何查看进程号
shell 如何查询a应用的当前id号
TCPIP协议,熟悉的说一说
HTTP和HTTPS的主要区别
网络编程的accept和connect
- TCP三次握手、四次挥手
- tcpip的四次挥手 几种状态,讲讲timewait和closewait
三次握手、四次回收、超时重传、保序性、奇偶校验、去重、拥塞控制。还讲了滑动窗口模型。 - 设计模式,装饰者模式画图
职责链模式(设计模式)
mapreduce原理,partion发生在什么阶段
- hadoop生态说一说