Java 面试题

1,223 阅读6分钟

持续更新中

Java 基础

String为什么用 final 修饰

  1. final 修饰类表示类不可被继承,final 修饰字段(包括方法参数字段)表示字段不可变(基本类型表现为值不能变;对象类型表现为引用不能变,但对象内部属性可变),final 修饰方法表示方法不可被重写
  2. 由 final 的意义可以看出,String 这个类只能用不能通过继承去修改,再加上 String 类中存储字符用的 char[] 数组也是用 final 修饰的,这样就保证了一旦某个字符串被创建了,那这个字符串对象就是不可改变的
  3. Java 中存在一个字符串常量池(参考链接字符串常量池),所有的字符串创建后都会将其引用地址放进去,这样后面创建字符串时,如果字符串已存在就不会重复创建,再加上 String 类的不可变性,就不会出现缓存的字符串被修改的情况,所以 String 类之所以用 final 修饰,是为了避免被重写可能导致的已创建的字符串被修改而影响到其他使用这个字符串的地方。

HashMap 源码、实现原理、底层结构

说说你知道的几个 Java 集合类: list、set、queue、map 的实现类

描述一下ArrayList和LinkedList 各自实现和区别

Java中的队列都有哪些,有什么区别

反射中,Class、forName和classloader 的区别,Class、forName会执行静态代码块

Java7 、Java8的新特性(baidu问的,好BT)

Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高

Java内存泄露的问题调查定位:jmap , jstack 的使用等等

String、StringBuilder、StringBuffer 区别

HashTable 和 HashMap 的区别

异常的结构,运行时异常和非运行时异常﹐各举个例子

String a = "abc "; String b= "abc" String c = new String("abc" ); String d = "ab" + "c" 他们之间用==比较的结果

String类的常用方法

Java的引用类型有哪几种

抽象类和接口的区别

java的基础类型和字节大小。

Hashtable,HashMap,ConcurrentHashMap底层实现原理与线程安全问题(建议熟悉jdk源码,才能从容应答)

如果不让你用JavaJdk提供的工具,你自己实现一个Map,你怎么做。说了好久,说了HashMap 源代码,如果我做,就会借鉴HashMap 的原理,说了一通HashMap 实现

Hash 冲突怎么办?哪些解决散列冲突的方法?

hashCode()与equals()生成算法、方法怎么重写

HashMap 冲突很厉害,最差性能,你会怎么解决?从O(n)提升到 log (n)咯,用二叉排序树的思路说了一通

Exception和 Error有什么区别?

谈谈final、finally、 fnalize有什么不同?

强引用、软引用、弱引用、幻象引用有什么区别?

如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?

谈谈你知道的设计模式?

synchronized 和 ReentrantLock有什么区别呢?

synchronized 底层如何实现?什么是锁的升级、降级?

一个线程两次调用start()方法会出现什么情况?

什么情况下Java程序会产生死锁?如何定位、修复?

Java并发包提供了哪些并发工具类?

并发包中的 ConcurrentLinkedQueue 和LinkedBlockingQueue有什么区别?

Java并发类库提供的线程池有哪几种?分别有什么特点?

Atomiclnteger 底层实现原理是什么?如何在自己的产品代码中应用CAS 操作?

请介绍类加载过程,什么是双亲委派模型?

有哪些方法可以在运行时动态生成一个Java类?

谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?

如何监控和诊断JVM堆内和堆外内存使用?

Java常见的垃圾收集器有哪些?

谈谈你的 GC调优思路?

Java内存模型中的 happen-before是什么?

Java程序运行在Docker等容器环境有哪些新问题?

你了解Java应用开发中的注入攻击吗?

如何写出安全的Java 代码?

Java后台服务明显“变慢”,谈谈你的诊断思路?

有人说“Lambda 能让Java程序慢30倍”,你怎么看?

JVM优化 Java 代码时都做了什么?

谈谈 MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

谈谈Spring Bean的生命周期和作用域?

对比 Java 标准NIO类库,你知道Netty是如何实现更高性能的吗?

谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?

IO

讲讲IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞。

讲讲NIO。

Java提供了哪些IO方式?NIO 如何实现多路复用?

Java有几种文件拷贝方式?哪一种最高效?

String 编码UTF-8和GBK的区别?

什么时候使用字节流、什么时候使用字符流?

递归读取文件夹下的文件,代码怎么实现

Servlet 相关

session和cookie 的区别和联系,session的生命周期,多个服务部署时session管理。

servlet的一些相关问题

webservice相关问题

webservice相关问题

jdbc连接,forname方式的步骤,怎么声明使用一个事务。举例并具体代码

无框架下配置web、xml 的主要配置内容

jsp 和servlet的区别

JVM

Java的内存模型以及GC算法

jvm性能调优都做了什么

介绍JVM中7个区域,然后把每个区域可能造成内存的溢出的情况说明

介绍GC和GCRoot不正常引用。

自己从classload加载方式,加载机制说开去,从程序运行时数据区,讲到内存分配,讲到String 常量池,讲到JVM垃圾回收机制,算法, hotspot。反正就是各种扩展

jvm如何分配直接内存,new对象如何不分配在堆而是栈上,常量池解析

数组多大放在JVM老年代(不只是设置PretenureSizeThreshold,问通常多大,没做过一问便知)

老年代中数组的访问方式

GC算法,永久代对象如何GC,GC有环怎么处理

谁会被GC,什么时候GC

如果想不被GC怎么办

如果想在GC中生存1次怎么办

开源框架

hibernate和ibatis的区别

讲讲mybatis的连接池。

spring框架中需要引用哪些jar包,以及这些jar包的用途

springMVC的原理

springMVC注解的意思

spring 中beanFactory和ApplicationContext的联系和区别

spring注入的几种方式(循环注入)

spring 如何实现事物管理的

springIoC

springAOP的原理

hibernate中的1级和⒉级缓存的使用方式以及区别