基础篇
基本功
1、面向对象的特征
1、抽象
2.封装
所谓封装,就是将客观事物封装成抽象的类,并且类可以把数据和方法让可信的类或者对象进行操作,对不可信的类或者对象进行隐藏。类就是封装数据和操作这些数据代码的逻辑实体。在一个类的内部,某些属性和方法是私有的,不能被外界所访问。通过这种方式,对象对内部数据进行了不同级别的访问控制,就避免了程序中的无关部分的意外改变或错误改变了对象的私有部分。
3.继承
继承有这样一种能力,就是能使用现有的类的所有功能,并无须重新编写原来的这些类的基础上对这些功能进行扩展。通过继承创建的新类称为子类或派生类,被继承的称为基类。继承有两种,一种是实现继承,另外一种是接口继承。实现继承可以直接使用基类的属性和方法而无需额外编码,接口继承是指使用属性和方法的名称,但是子必须提供实现的能力。
4.多态
所谓多态就是对一个实例的相同方法在不同的情形下有不同的表现形式。多态机制使得不同内部结构的对象可以共享相同的外部接口,这就意味着,虽然不同的类的内部操作不同,但可以通过一个公共的类,它们可以通过相同的方式予以调用。
2、final, finally, finalize 的区别
1、final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
2、finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
3、finalize—方法名。当系统出现空闲的时候对长时间不用的内存进行处理、删除。
Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
3、int 和 Integer 有什么区别
(1)Integer是int的包装类;int是基本数据类型;
(2)Integer变量必须实例化后才能使用;int变量不需要;
(3)Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值
(4)Integer的默认值是null;int的默认值是0。
4、重载和重写的区别
1.重写必须继承,重载不用。
2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。
3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常
5、抽象类和接口有什么区别
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的
6、说说反射的用途及实现
(1)反射,使程序变得非常灵活,非常强大,可以不同加载该类就可以完成实例化工作,并且提供动态调用其属性和方法的功能。
(2)缺点是通过反射是程序性能降低,再就是如果太多类都是用反射这使得程序变得很臃肿,不利于后期的维护。
7、说说自定义注解的场景及实现
8、HTTP 请求的 GET 与 POST 方式的区别
9、session 与 cookie 区别
10、session 分布式处理
11、JDBC 流程
12、MVC 设计思想
13、equals 与 == 的区别
集合
1、List 和 Set 区别
2、List 和 Map 区别
3、Arraylist 与 LinkedList 区别
4、ArrayList 与 Vector 区别
5、HashMap 和 Hashtable 的区别
6、HashSet 和 HashMap 区别
7、HashMap 和 ConcurrentHashMap 的区别
8、HashMap 的工作原理及代码实现
9、ConcurrentHashMap 的工作原理及代码实现
线程
1、创建线程的方式及实现
2、sleep() 、join()、yield()有什么区别
3、说说 CountDownLatch 原理
4、说说 CyclicBarrier 原理
5、说说 Semaphore 原理
6、说说 Exchanger 原理
7、说说 CountDownLatch 与 CyclicBarrier 区别
8、ThreadLocal 原理分析
9、讲讲线程池的实现原理
10、线程池的几种方式
11、线程的生命周期
核心篇
数据存储
1、MySQL 索引使用的注意事项
2、说说反模式设计
3、说说分库与分表设计
4、分库与分表带来的分布式困境与应对之策
5、说说 SQL 优化之道
6、MySQL 遇到的死锁问题
7、存储引擎的 InnoDB 与 MyISAM
8、数据库索引的原理
9、为什么要用 B-tree
10、聚集索引与非聚集索引的区别
11、limit 20000 加载很慢怎么解决
12、选择合适的分布式主键方案
13、选择合适的数据存储方案
14、ObjectId 规则
15、聊聊 MongoDB 使用场景
16、倒排索引
17、聊聊 ElasticSearch 使用场景
缓存使用
1、Redis 有哪些类型
2、Redis 内部结构
3、聊聊 Redis 使用场景
4、Redis 持久化机制
5、Redis 如何实现持久化
6、Redis 集群方案与实现
7、Redis 为什么是单线程的
8、缓存奔溃
9、缓存降级
10、使用缓存的合理性问题
框架篇
Spring
1、BeanFactory 和 ApplicationContext 有什么区别
2、Spring Bean 的生命周期
3、Spring IOC 如何实现
4、说说 Spring AOP
5、Spring AOP 实现原理
6、动态代理(cglib 与 JDK)
7、Spring 事务实现方式
8、Spring 事务底层原理
9、如何自定义注解实现功能
10、Spring MVC 运行流程
11、Spring MVC 启动流程
12、Spring 的单例实现原理
13、Spring 框架中用到了哪些设计模式
14、Spring 其他产品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)