java面试题总结
经过历时两周,二十多家面试,终于有了一份比较满意的offer,面试还是挺能增长知识的,每次不管你准备了多少,总是有问题难到你的,基于此尽量回忆下,留作日后再看.
1,集合类面试题
arraylist和linkedlist的区别?底层实现?手写实现?线程安全吗以及原因?
hashmap的底层实现?put()执行过程?put null时的执行过程?
hashmap为什么不是线程安全的?发生碰撞的时候怎么处理?
concurrenthashmap的底层实现?是如何实现分段锁的?
linkedhashmap的底层实现?如何用linkedhashmap实现LRU算法?
hashtable与hashmap的对比?hashset是怎么实现的?
2,线程类问题
创建线程的方式?线程与进程的区别?进程间的通信方式,线程间的通信方式?
多线程并发时造成不安全的原因?解决方式有几种?
什么是线程池?创建线程池的方式?你常用的是哪种?参数的意思?
synchronized与lock的区别与实现原理?
threadlocal的用法以及原理?
sleep()与wait()的区别?
悲观锁与乐观锁的区别?
手写死锁,生产者与消费者问题?
3,IO流问题/NIO问题
你所接触的流有几种类型?
字符流与字节流的区别?以及流之间的关系?用到了哪种设计模式?
如何删除一个文件夹下面的所有文件?如何完成一个文件的复制?
什么是序列化?如何实现序列化?
如何理解NIO?NIO的核心部分有哪些?你项目中是怎么使用NIO的?
4,基础知识类问题
java语言的特点?你对面向对象的理解?
java为什么是单继承的,多继承有什么坏处?何时用类,何时使用接口?
接口和抽象类的区别?接口的修饰符有哪些?java8中只有一个方法的接口叫什么?
Integer i = 100;与Integer i1 = new Integer(100);的区别? i==i1??
重写与重载的区别?重写时的注意事项?
内部类和静态内部类的区别?
string和stringbuffer的区别?
重写equals()与hashcode()的重要性?
常见的类加载器有几种?什么是双亲委派机制?toncat的类加载机制?自定义类加载器的注意事项?
5,jvm和gc相关问题
jvm的结构?gc的结构?你所了解的gc算法?
gc的s0到s1是怎么进升的?
jvm中主要参数的含义?调整后会有什么影响?
说一说你所遇到过的jvm和gc相关的异常与你的解决方式(至少两个)?
6,spring/springMVC相关问题
spring IOC和DI的区别?AOP的实现原理?以及在你项目中是怎么用的?
spring bean的生命周期?bean的作用域?
springMVC的原理?
servlet的生命周期?servlet与jsp的区别?
spring中运用到的设计模式?spring中怎么进行广播通知?spring对事物的处理?
7,mysql相关问题
事物怎么理解?事物的特性有哪些?
你项目中用到的索引是哪种?原理是什么?以及索引的分类?
哪些操作会导致索引失效?以及解释最左前缀?
如何查看sql语句中有无用到索引?
bean中的属性名与数据库中的字段不一致时怎么解决?
主键与外键是什么?分别怎么使用?
mysql的事物隔离级别?你项目中使用的是哪种?如何查看?
关于sql语句的优化方案?以及mysql的冷热数据处理?
什么是存储过程?什么是执行计划?什么是触发器?
mysql相关的分库分表?读写分离?主从复制?以及结构相关的优化?
8,中间件相关问题(redis,rocketMQ,kafak)
redis与memcached的区别?以及使用的场景?
redis为什么是单线程的?redis怎么处理并发操作?
mq与kafka有什么区别?各适用场景为?
未完待续...