Java后台面试题

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生态说一说
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值