自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 读取xml文件并转换为自定义数组格式

读取xml文件,并且转换为自定义的数组格式

2022-10-23 15:28:13 329 1

原创 Redis的持久化方案

Redis会定期保存数据快照至一个rbd文件中,并在启动时自动加载rdb文件,恢复之前保存的数据。可以在配置文件中配置Redis进行快照保存的时机:意为在seconds秒内如果发生了changes次数据修改,则进行一次RDB快照保存,例如Redis每60秒检查一次数据变更情况,如果发生了100次或以上的数据变更,则进行RDB快照保存。SAVE 和 BGSAVE 两个命令都会调用 rdbSave 函数,但它们调用的方式各有不同:采用AOF持久方式时,Redis会把每一个写请求都记录在一个日志文件里。

2022-06-24 21:25:17 257

原创 分代垃圾回收机制

在堆内存里面,分为了EdenSpace、SurvivorSpace、OldGeneration。当新对象生成,并且在Eden申请空间失败时,就会触发Yonug GC,清除非存活对象,并且把尚且存活的对象标记复制到Survivor区。Survivor区,内部分为两个区域,每一次GC对象会被标记复制,在两个区域来回移动,死亡的对象会被清除,存活的对象年龄就加一,如果对象年龄达到15岁(对象头中存储年龄的空间是4bit),它就会被放到老年代中。OldGeneration区,这里使用的是标记整理方法。...

2022-06-18 17:36:33 315

原创 自动装配原理

自动装配简单来说就是,自动把第三方组件的bean自动装载道ioc容器中,不需要我们再去写相关的配置。在springboot应用中,只要在启动类上加上,@SpringBootApplication注解就可以实现自动装配。@SpringBootApplication是一个复合注解,里面真正实现自动装配的注解是@EnableAutoConfiguration。自动装配依靠的是三个核心的关键技术:...

2022-06-18 17:23:12 1055

原创 mysql索引详解

如果索引中使用了复合索引,如(a,b,c)建立索引。那么相当于建立了三个索引a、ab、abc。以这样的方式查询时,会走索引。遇到范围查询,后面的字段就不会再走索引了。索引尽量选择区分度高的,这样每一次io操作,就可以过滤掉更多的数据。我们要查询的数据,本身就包含在索引项中,不需要在回表查询,这就是索引覆盖。使用explain显示时,extra=Using index,就表示发送了索引覆盖。建立索引(tel,name),查询下面的sql语句就会发送索引覆盖,不需要回表。因为非聚簇索引的叶子节点中有id值。

2022-06-17 23:16:36 170

原创 Mybatis中的#{}和${}有什么区别?

#{}:是占位符、会预处理sql${}:是拼接符、会导致sql注入问题能用#{}就不用 $ {}。防止sql注入。提高安全性。但是有时候不得不使用${},比如查询字段,查询表:

2022-06-17 22:09:48 54

原创 为什么重写equals就一定要重写hashCode呢?

其实,重写equals不一定要重写hashCode。只要不使用HashMap存储这个对象。这是因为hashMap的存取方式引起的。hashMap是一个由hash算法+拉链式解决冲突的结构,去存放数据。put过程:1.使用对象的hashCode,经过hash算法,生成key,再以(key,value)的形式存放2.hash没有发生冲突,那么存放在数组中3.hash冲突发生,以链表的形式挂在数组下面4.数组长度>64,链长度>8,则树化为红黑树(兼顾查询和插入效率)get过程:1.通过对象的has

2022-06-17 21:52:03 316

原创 Spring框架中的单例Bean是线程安全的吗?

答案:不是Spring默认的bean是单例的,也没有进行封装处理,所以不是线程安全的。但是,共享不一定会有线程安全问题。如果某个bean我们定义了共享数据,且可以对共享数据进行修改,这样才会造成线程安全问题。比如我们在线程中定义一个count++,那么这个数就是不安全的,每次线程到来都会被执行一次,count值加一。controller、service、dao本身不是安全的,但是,我们只在这些方法中相互调用,那么不会产生线程安全问题。Dao层会操作数据库,但是每一个和数据库连接的connection,

2022-06-17 19:49:40 5853

原创 【无标题】

首先要知道前后端分离与不分离的区别。分离之前,后端所需的数据(比如对ModelAndView进行视图解析器渲染成真正的视图)再返回给前端,分离之后,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。在前后端分离的应用模式中,前端与后端的耦合度相对较低,分离之后web端的后端可以和app共用一套接口或api,不像从前那样各用一套。因此其实前后端分离之后,视图解析器是不需要的!...

2022-06-12 01:28:21 92

转载 前后端分离与前后端不分离的区别

前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。 这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。请求的数据交互如下图:前后端分离 在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控

2022-06-12 01:14:48 458

原创 单例的多种实现方式

天然就是线程安全,因为一上来类被加载产生了一份实例。懒汉式在多线程时,不能真正实现只有一份实例对象。饿汉式-线程安全的单例使用静态内部类,去实现懒汉式线程安全的单例。

2022-06-11 04:07:19 102

原创 秒懂MVCC多版本并发机制

MVCC目的是为了解决读写、写读冲突。InnoDB支持MVCC机制。多个事务并发去读,这不会有任何问题。多个事务并发去写,这没什么好说的,直接加锁(表锁、行锁),互斥去写。一个事务A先读,另一个事务B后写。会产生不可重复读、幻读问题。解决方案一:我们可以使用锁机制解决。即事务A for share,别的事务不可以写啦。但是这样的并发机制我们并不满足。解决方案二:使用MVCC解决,每次读的都是一个快照,是一个记录的历史版本。此时别的事务可以去修改当前版本,不影响快照数据。这就是RR级别解决了不可重复读、幻读问

2022-06-11 03:39:51 390

原创 B树和B+树傻傻分不清楚?

在B+树中,一个结点存放的是一个数据页,默认是16KB。数据页又区分为结点页、叶子页。结点页只存放关键字,叶子页存放关键字和真实数据。所以假设结点页能存放1000个关键字,叶子页能存放100个记录。那么对于一个3层高的B+树,能存放的数据量是:1000 * 1000 * 100 = 1亿条 行数据。所以,在1亿条数据中只需要3次IO,加载3个页面,即可找到需要的数据。并且在一个页面中,关键字会组成一个顺序存储的数组,直接二分查找,找到需要的关键字。...

2022-06-11 03:30:24 270

原创 秒懂java集合框架

ArrayList基于动态数组的数据结构,存储单列数据,底层维护了一个数组,每次扩容1.5倍。如果有频繁的添加、删除、插入等引起数组结构变化的操作,会导致数组频繁的扩容复制,导致性能消耗。对于ArrayList最好指定长度,不要发生频繁的扩容操作。尾插对于ArrayList有天然的优势,因为数组可以通过计算直接得到存放地址,并且尾插法不会导致数据位置的变动。如果头插的话,就会导致每次插入都要让之前插入的每一个元素向后移动,非常之慢。因为通过计算获得数组位置,所以遍历ArrayList是相当快的。Linke

2022-06-11 03:11:10 82

原创 秒懂双亲委派机制

向上抛:当要加载类的时候,先由应用程序类加载器查看自己是否加载过,如果加载过就不再加载,没有加载过的话也不会自己加载,而是抛给上层类加载器,一直抛到最上层的启动类加载器。向下抛:最上层的加载器查看自己是否可以加载,如果可以加载就加载该类,不可以就向下抛出,直到最后的都无法加载,抛出CLassNotFoundException异常。.........

2022-06-11 02:02:50 134

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除