文章目录
- 2、JDK、JRE、JVM区别和联系
- 5、String 、StringBuffer、StringBuilder区别及使用场景
- 10、ArrayList和Linkedlist
- 11、HashMap和HashTable的区别及底层实现
- 12、ConcurrentHashMap原理简述,jdk7和jdk8的区别
- 13、如何实现一个IOC容器
- 14、什么是字节码,作用是什么
- 15、java类加载器有哪些
- 18、GC如何判断对象可以被回收
- 19、线程的生命周期及状态
- 20、sleep、wait、join、yield的区别
- 22、Thread和Runnable的区别
- 23、说说你对守护线程的理解
- 24、ThreadLocal的原理和使用场景
- 25、ThreadLocal内存泄漏问题,如何避免
- 28、为什么使用线程池?解释下线程池解释?
- 30、线程池中阻塞队列的作用?为什么是先添加队列而不是先创建最大线程?
- 35、BeanFactory和ApplicationContext有什么什么区别?
- 36、简述spring bean的生命周期
- 37、spring支持的几种bean作用域
- 38、Spring框架中的单例Bean是线程安全的吗
- 39、spring框架中使用了哪些设计模式及应用场景
- 40、spring事务的实现方式原理以及隔离级别
- 41、spring的事务传播机制
- 42 、spring事务什么时候会失效
- 43 、什么的是bean的自动装配、有哪些方式?
- 44 、spring 、 springmvc 、springboot的区别
- 45 、springmvc的工作流程
- 46 、Spring MVC的主要组件
- 47 、springboot自动配置原理
- 48 、 如何理解springboot的starter
- 49 、 什么是嵌入式服务器,为什么使用嵌入式服务器
- 51、mybatis和hibernate的对比
- 53 、mybatis插件运行原理及开发流程
- 55 、mysql聚簇和非聚簇索引的区别
- 56 、mysql索引结构,各自的优劣
- 58 、mysql锁的类型有哪些
- 59 、mysql执行计划怎么看
- 60 、事务的基本特性和隔离级别
- 65、简述Myisam和innodb的区别
- 66、简述MySQL中索引类型对数据库的性能的影响
- 68、Redis的过期键的删除策略
- 69、Redis线程模型,单线程为什么这么快
- 70、缓存雪崩、缓存穿透、缓存击穿
- 73、redis主从复制的核心原理
- 76、分布式架构下,Session共享有什么方案
- 77、简述你对RPC、RMI的理解
- 80、分布式事务解决方案
- 81、如何实现接口幂等性
插一句:因为篇幅过长,答案没有全部展示出来,需要完整版资料的小伙伴,点击——传送门——既可获取!
1、面向对象
1.1、 什么是面向对象?
对比面向过程、是两种不同的处理问题的角度
面向过程更注重事情的没一个步骤及顺序,面向对象更注重事情有哪些参与者(对象),及各自需要做什么。
例如:洗衣机洗衣服
- 面向过程会将任务拆解成一系列的步骤(函数),1、打开洗衣机---->2、放衣服------>3、放洗衣粉---->4、清洗------>5、烘干
- 面向对象会拆出人和洗衣机两个对象:人:打开洗衣机,放衣服,放洗衣粉。洗衣机:清洗、烘干
从以上例子可以看出:面向过程比较直观高效,而面向对象更易于复用,扩展和维护。
1.2 、面向对象
封装
-
封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,内部细节对外部调用透明,外部调用无需修改或者关心内部实现。
-
1、javabean的属性私有,提供get/set对外访问,因为属性的赋值或者获取逻辑只能由javabean本身决定,而不能由外部胡乱修改。
-
2、orm框架:操作数据库,我们不需要关心链接时如何建立的,sql时如何执行的,只需要引入mybatis,调方法即可。
继承
- 继承基类的方法,并做出自己的改变或扩展
- 子类共性的方法或者属性直接使用父类的,而不需要自己再定义,只需扩展自己个性化的
多态
- 基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。
- 继承,方法重写,父类引用指向子类对象
- 父类类型 变量名 = new 子类对象;
- 变量名.方法名();
无法调用子类特有的功能
2、JDK、JRE、JVM区别和联系
JDK:
- java Develpment Kit java 开发工具
JRE:
- java Runtime Environment java 运行时环境
JVM:
- java Virtual Machine java 虚拟机
3、==和equals
- 对比的时栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址
- equals:object中默认也是采用比较,通常会重写
- String类中被复写的equals()方法其实是比较两个字符串的内容
举例
<pre class="prettyprint hljs cs" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">@Test
void test(){
String str1 = "hello";
String str2 = new String("hello");
String str3 = str2;//引用传递
System.out.println("123");
System.out.println("(str1 == str2):"+(str1 == str2));//false
System.out.println("(str1 == str3):"+(str1 == str3));//false
System.out.println("(str2 == str3):"+(str2 == str3));//true
System.out.println("str1.equals(str2):"+str1.equals(str2));//true
System.out.println("str1.equals(str3):"+str1.equals(str3));//true
System.out.println("str2.equals(str3):"+str2.equals(str3));//true
}</pre>
4、final
4.1、简述final作用
最终的
- 修饰类:表示类不可被继承
- 修饰方法:表示方法不可被子类覆盖,但是可以重载
- 修饰变量:表示变量一旦被赋值就不可以更改它的值。
(1) 、 修饰成员变量
- 如果final修饰的类变量,只能在静态初始化块中指定初始值或声明该类变量时指定初始值
- 如果final修饰的是成员变量,可以在非静态初始化块,声明该变量或者构造器中执行初始值。
(2) 、修饰局部变量
<