mysql怎么做批量存储
tkMapper的saveBatch mybatis的循环存储,insert value(),()
千万级数据表怎么留下前三个月数据
spring自带的多线程是什么:blog.csdn.net/qqq_q_qq/ar…
redis自动扩容
blog.csdn.net/sanyuesan00…
**回表 **:回表查询,包含两次查找在辅助索引上检索 name,到达其叶子节点获取对应的主键;再使用主键在主索引上再进行对应的检索操作
索引覆盖 :
或者叫索引覆盖, 也就是平时所说的不需要回表操作
就是 select 的数据列只用从索引中就能够取得,不必读取数据行,MySQL 可以利用索引返回 select 列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖
volatile 关键字的作用
volatile本质在于告诉JVM当前变量在寄存器中的值不确定
volatile竟能实现变量可见性,防止指令重排序,不保证原子性
sychronized锁住静态/方法,和代码块是锁的类还是对象
static sync是类锁,sync锁的是当前实例
指令重排序 \
JVM 运行时内存
spring事务是使用mysql的数据吗 \
数据库是可以控制事务的传播和隔离级别的,Spring在之上又进一步进行了封装
spring怎么保证controller线程安全
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式。
3、在Controller中使用ThreadLocal变量
blog.csdn.net/m0_37235955…
类加载之后的流程
加载->验证(文件格式验证等等)->准备(为static变量赋值)->解析->初始化
IO流用到了哪些设计模式
适配器模式:
由于InputStream是字节流不能享受到字符流读取字符那么便捷的功能,因此借助
InputStreamReader将其转为Reader子类,因此可以拥有便捷操作文本文件方法。
OutputStream同理。
包装模式:
将InputStream字节流包装为BufferedReader过程就装饰的过程。一开始
InputStream只有read一个字节的方法,包装为Reader之后拥有read一个字符的功
能,在包装成BufferedReader之后就拥有read一行字符串功能。OutputStream同理
启动参数/环境变量/配置文件 优先级
application.properties优先级高于yml
bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等
自定义springboot-starter
@Configuration :指定这个类是一个配置类
@ConditionalOnXXX :在指定条件成立的情况下自动配置类生效
@AutoConfigureAfter:指定自动配置类的顺序
@Bean:给容器中添加组件
@ConfigurationPropertie:结合相关xxxProperties类来绑定相关的配置
@EnableConfigurationProperties:让xxxProperties生效加入到容器中
在resources下建立META-INFO/spring.factories文件内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.demo.starter.config.DemoConfig
zhuanlan.zhihu.com/p/64309456
Mybatis常用标签
blog.csdn.net/weixin_4095…
JVM运行时数据区
blog.csdn.net/fanxing1964…
浅拷贝和深拷贝
①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。②对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。在这种情况下,在一个对象中修改该成员变量会影响到另一个对象的该成员变量值。
方式:
(1)通过拷贝构造方法实现浅拷贝:
拷贝构造方法指的是该类的构造方法参数为该类的对象。使用拷贝构造方法可以很好地完成浅拷贝,直接通过一个现有的对象创建出与该对象属性相同的新的对象。
(2)通过重写clone()方法进行浅拷贝:
Object类是类结构的根类,其中有一个方法为protected Object clone() throws CloneNotSupportedException,这个方法就是进行的浅拷贝。有了这个浅拷贝模板,我们可以通过调用clone()方法来实现对象的浅拷贝。但是需要注意:1、Object类虽然有这个方法,但是这个方法是受保护的(被protected修饰),所以我们无法直接使用。2、使用clone方法的类必须实现Cloneable接口,否则会抛出异常CloneNotSupportedException。对于这两点,我们的解决方法是,在要使用clone方法的类中重写clone()方法,通过super.clone()调用Object类中的原clone方法。\
对于深拷贝来说,不仅要复制对象的所有基本数据类型的成员变量值,还要为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。也就是说,对象进行深拷贝要对整个对象图进行拷贝!
简单地说,深拷贝对引用数据类型的成员变量的对象图中所有的对象都开辟了内存空间;而浅拷贝只是传递地址指向,新的对象并没有对引用数据类型创建内存空间。
通过重写clone方法来实现深拷贝
与通过重写clone方法实现浅拷贝的基本思路一样,只需要为对象图的每一层的每一个对象都实现Cloneable接口并重写clone方法,最后在最顶层的类的重写的clone方法中调用所有的clone方法即可实现深拷贝。简单的说就是:每一层的每个对象都进行浅拷贝=深拷贝。
为什么重写equals()方法必须重写hashCode()方法
1.使用hashcode方法提前校验,可以避免每一次比对都调用equals方法,提高效率
2.保证是同一个对象,如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是为了避免这种情况的出现。
Java多线程三大特性
www.cnblogs.com/javatalk/p/…
spring三种注入方式以及优缺点
blog.csdn.net/qq_40084325…
spring 组件用到了哪些设计模式
sql优化
blog.csdn.net/u010520146/…