前言:
技术世界日新月异,Java 作为一门卓越的编程语言,不仅融合了面向对象的经典思想,还不断演进,引入了许多令人振奋的新特性。本篇博客将带领读者深入探讨 Java 领域的一些重要概念和技术,涉及面向对象特征、集合类的选择、并发编程、JDK1.8 新特性等多个方面。
- 面向对象特征
在面向对象编程中,我们常常听说封装、继承和多态这三大特征。它们分别是:
封装: 封装是将对象的状态和行为封装在一个类中,防止外部直接访问对象内部的实现细节。
继承: 继承是一种代码复用机制,子类可以继承父类的属性和方法,并且可以通过重写方法来修改或扩展父类的行为。
多态: 多态性允许一个对象在不同的情境下具有不同的行为。通过继承和接口实现,我们可以实现多态性,提高代码的灵活性和可扩展性。
2. ArrayList与LinkedList
ArrayList:数组,LinkedList:双向链表
3. 高并发的集合有哪些问题
Collections中的synchronizedList(),synchronizedMap()方法等做安全的使用
- JDK1.8新特性
JDK 1.8 引入了许多新特性,包括:
接口默认方法: 允许在接口中定义默认方法的实现。
Lambda 表达式: 简化代码编写,提供更紧凑的语法。
新的类: 引入了新的类如 LocalDate,提供更丰富的日期和时间处理功能。
多层注解: 允许在一个元素上使用多个注解,增加了灵活性。
5. java的接口和抽象类
语法:
语义:抽象类->有概念的(动物,交通工具…);接口->特征(一类事物具有一定特征)
6. 对象在内存中存储分布
●markwork-》64系统 / 8 = 8字节 里面有锁信息
●class pointer 4字节
●Object o = new Object();用了16字节(8+4+4)注:(不到8的倍数,加4补齐)
7. 对象怎么定位?
直接定位和间接定位
8. DCL(Dobule check Lock)单例需不需要volatile
需要,单例的双重检测锁可能会出现指令重排,volatile能保障线程之间可见性,并且禁止指令从排序。
9. mysql的隔离级别
读取提交内容,读取不提交内容,可重复度,可串行化
10. Mysql的复制原理
- 聚簇索引(innodb)和非聚簇索引(myisam)聚簇索引
- Springboot 自动装配原理
●自动装配就是通过 @EnableAutoConfiguration 注解找到Spring提供的自动配置总文件 spring.factories中的 所有自动装配类并对其进行加载,这个文件是一组组的 key=value的形式,包含了key为EnableAutoConfiguration的全类名,value是一个xxxxAutoConfiguration类名的 列表,以逗号分隔;
●这也是JavaConfig形式的IOC容器配置类,在每个value所指的类中,都有 @ConditionalOnxxxx 这种类型的注解,会根据这种类型的注解决定判断条件(在该注解后面的圆括号内)是否满足,条件满足才进行自动装配;
●每个自动配置类上都有一个 @Configuration和该类的每个方法上面都有一个 @Bean,@Configuration可理解为用spring的时候beans.xml里面的beans标签,作用是告诉SpringBoot这是一个配置类;@Bean可理解为用spring的时候beans.xml里面的bean标签,@Bean标签的作用是给容器中添加组件,以@Bean所标记的方法的方法名作为组件的id名,返回类型就是组件类型,方法返回的值就是组件在容器中的实例;
●每个自动配置类上面又都有 @EnableConfigurationProperties注解,通过这个注解将封装好的bean导入到Spring的IOC容器中;
●在 @EnableConfigurationProperties 注解注入的bean中,每个bean 都有 @ConfigurationProperties 注解,该注解负责将配置文件中的属性绑定到对应的xxxxProperties配置实体类上封装为一个具体的bean;
●全局配置(application.properties)文件中的属性,也是通过 @ConfigurationProperties 注解指定的 前缀prefix绑定到对应的 xxxxPropertie 配置实体类上封装为一个bean,然后再通过 @EnableConfigurationProperties注解导入到Spring的IOC容器中。在全局配置文件中,如果需要到的属性没有进行配置,则使用默认的(自动装配的)组件中的属性,这也是约定大于配置的体现(SpringBoot都进行了约定(配置好了),开发人员能配置得更少,更直接地开发项目,写业务逻辑代码),待完成总配置文件的属性绑定和注入之后,SpringBoot完成最终的自动装配。 - spring的Bean的生命周期
bean实例化,属性注入,
调用BeanNameAware的setBeanName方法,
调用BeanFactoryAware的setBeanFactory方法,
调用ApplicationContextAware的setApplicationContext方法,
调用BeanPostProcessor的postProcessorBeforeInitialization方法,
调用自定义初始化方法,
调用InitializingBean的afterPropertiesSet方法,
调用BeanPostProcessor的postProcessorAfterInitialization方法,
调用DisposableBean的destroy,
调用自定义销毁方法 - JVM 内存模型
Java 的世界博大而精深,不断学习和探索,将会让我们在编程的路上走得更远。感谢你的阅读,如果有任何问题或建议,欢迎留言讨论。让我们共同迎接 Java 技术的未来,不断挑战更高的技术高峰!