一、什么是面向对象?谈谈你对面向对象的理解
面向过程:注重事情的每一个步骤及顺序。面向过程比较高效。
面向对象:注重事情有哪些参与者(对象)、各自需要做什么。更易于复用、扩展、维护。
面向对象的特性包括:封装、继承、多态。
封装:明确标识出允许外部使用的所有成员函数和数据项。内部细节对外部调用透明,外部调用无需修改或者关心内部实现。
继承:继承基类的方法,并做出自己的改变和扩展。
多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。
二、JDK、JRE、JVM三者的区别和联系
JVM会根据JRE的类库,将.class文件编译成可执行的机器码。
三、== 和 equals
== 对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址。
equals在object中默认的是采用==比较。在String中会进行重写,分别比较字符创中每个字符是否相等。
str1是常量值,保存在常量区。
str2是对象,存储在堆中。
str3赋值的是str2的引用地址。
str1 与 str2 str3的地址都不一样,str2 str3的内存地址都是堆内存中。
四、简述final的作用,说说为什么局部内部类和匿名内部类只能访问局部final变量 。
只能访问final变量是因为:内部类在编译之后也会生成一个单独的.class文件,所以访问局部变量,是复制一个作为内部类的变量,所以必须设置成final保证两个变量是一样的。
五、String、StringBuffer、StringBuilder区别以及使用场景
重载和重写的区别
接口和抽象类的区别
List和Set的区别
hashCode 与equals
ArrayList和LinkedList区别
HashMap和HashTable的区别以及底层实现是什么
ConcurrentHashMap原理
如何实现一个IOC容器
什么是字节码,作用是什么
java类加载器有哪些
双亲委派模型
Java中的异常体系
GC如何判断对象可以被回收
线程的声明周期以及线程有哪些状态
sleep、wait、join、yield的区别
对线程安全的理解
Thread、Runable的区别
守护线程的理解
ThreadLocal的原理和使用场景
ThreadLocal内存泄漏原因以及如何避免
并发、并行、串行的区别
并发的三大特性
为什么用线程池?解释下线程池参数
简述线程池的处理流程
线程池中阻塞队列的作用,为什么先添加队列而不是先创建最大线程
线程池中线程复用原理
Spring是什么
对AOP的理解:
对IOC的理解:
索引的基本原理
MySql聚簇和非聚簇索引的区别
MySql索引的数据结构,各自优劣
索引设计的原则
MySql锁的类型有哪些
慢查询怎么优化
MySql的ACID怎么保证
什么是MVCC
MySql主从同步原理
简述MyISAM和InnoDB的区别
简述MySql中索引类型及对数据库的性能的影响
CAP理论、BASE理论
负载均衡算法、类型
Session共享
分布式id生成方案
分布式锁解决方案
如何实现接口的幂等性
简述ZAB协议
ZK的数据模型和节点类型
简述ZK的命名服务、配置管理、集群管理
ZK的watch机制
kafka架构设计
Kafka消息丢失的场景及解决方案
Kafka中ZK的作用
Kafka高性能原因
简述Kafka的reblance机制