- 博客(81)
- 收藏
- 关注
原创 MybatisPlus处理mysql中的json类型
实体类中有个属性是其他对象,或者是List;在数据库中存储时使用的是mysql的json格式,此时可以用mybatis plus的一个注解@TableField(typeHandler = JacksonTypeHandler.class),这样在存入是就可以把对象自动转换为json格式。在JSON字段映射的属性加上@TableField(typeHandler = JacksonTypeHandler.class);在mapper类中,使用@ResultMap(”mybatis-plus_实体类对象“)
2023-05-09 14:51:28
1211
1
原创 org.apache.commons.lang3中的isBlank和isEmpty
对比源码可以发现,isBlank比isEmpty校验更严格一些,默认的一些空格或者转义字符都认为是空。如果对空校验除了""和null,还包含/t/n/r等校验,则适合用isBlank。如果对空校验仅限于“”和null,使用两者没有区别。那么上述两个方法,在什么场景下使用呢?
2022-09-28 09:57:28
391
原创 零拷贝技术
传统文件传输过程:第一步拷贝:把磁盘上的数据拷贝到操作系统的内核缓冲区上来,通过DMA实现第二步拷贝:把内核缓冲区的数据拷贝到用户的缓冲区里,此时我们的应用程序就可以使用这部分数据了,这个拷贝过程由CPU完成第三次拷贝:把刚才拷贝到用户缓冲区里的数据再拷贝到内核的socket缓冲区里,这个过程依然由CPU完成第四次拷贝:把内核的socket缓冲区里的数据拷贝到网卡的缓冲区里,这个过程由DMA实现零拷贝技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域,这种技术通常
2022-05-27 15:32:13
2527
原创 中断处理过程
中断全过程指的是从中断源发出中断请求开始,CPU响应这个请求,现行程序被中断,转至中断服务程序,直到中断服务程序执行完毕,CPU再返回原来的程序继续执行的整个过程。步骤请求中断→响应中断→关闭中断 保留断点 引出中断服务程序 保护现场 开启中断 执行中断服务程序 关闭中断 恢复现场 打开中断 中断返回2.保存断点:保证中断程序执行完能够回来继续执行后面的程序,其实保存的是程序计数器3.引出中断服务程序:其实就是读取我们要执行的程序的地址,以便一会去执行4.保存现场:.
2022-05-22 22:46:03
6985
原创 Java8 Stream详解
JDK8 Stream详解概念Stream是Java8 API的新成员,它允许以声明性方式处理数据集合 。特点(1)代码简洁:函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。(2)多核友好:Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下方法。流程1)第一步:把集合转换为流stream2)第二步:操作stream流stream流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(term
2022-05-21 11:42:34
463
1
原创 dubbo在springboot上的搭建
从github上下载并解压启动zookeeper输入zkServer.cmd搭建dubbo控制台打包admin后产生target,将里面的jar包复制到外面,如图所示在这里用cmd运行jar包(java -jar dubbo-admin......) 启动成功,端口如图所示为7001访问7001端口,默认账户和密码都是root搭建监控中心Monitor监控中心不是必要的,可以通过可视化界面看到各个服务的情况进入目录用cmd打开进行打...
2022-04-26 10:12:19
168
原创 并发的可达性分析(三色标记法)
当前主流编程语言的垃圾收集器基本上都是依靠可达性分析算法来判定对象 是否存活的,可达性分析算法理论上要求全过程都基于一个能保障一致性的快照中才能够进行分析, 这意味着必须全程冻结用户线程的运行。为了减少冻结用户线程的影响,提高效率,采用并发标记的方法并发标记的作用根据 可达性分析算法 的核心概念,利用系列根对象(GC Roots )作为起始点,根据对象之间的引用关系搜索出一条引用链,通过遍历引用链来判断对象的是否存活。在这个过程中,根对象枚举的时间非常短暂且相对固定,然而,遍历所有引用链(对
2022-04-22 18:05:19
283
原创 SpringMVC的执行流程
执行流程介绍用户向服务器发送请求,请求被SpringMVC前端控制器 DispatcherServlet DispatcherServlet 对请求 URL进行解析,得到请求资源标识符(URI),判断请求 URI 对应的映射(handlerMapping) 是否存在 不存在: 判断是否配置了 mvc:default-servlet-handler (默认servlet处理静态资源) 如果没配置:当前请求只会被 DispatcherServlet处理,控制台查不到,客户端显示404...
2022-04-21 20:29:59
207
原创 转发和重定向的区别
转发和重定向都会将最终转发的地址和重定向的地址响应到浏览器转发和重定向的区别转发是一次请求,第一次是浏览器发送,如果说是两次的话,第二次是服务器内部发送,所以他请求的地址还是第一次浏览器请求的地址。 重定向是浏览器发送两次请求,第一次是访问servlet,第二次访问重定向的地址,最终地址栏地址是重定向的地址 转发可以获取请求域中的数据,重定向不可以,因为转发是一次请求,所以request对象是同一个。重定向不可以,重定向是两次请求,所以对应两个request。能不能获取域对象的数据主要看使用的对
2022-04-20 17:04:02
1048
原创 SpringMVC中的视图介绍以及区别
ThymeleafView、转发视图(InternalResourceView)、重定向视图(RedirectView)
2022-04-20 17:02:01
581
原创 Spring MVC通过CharacterEncodingFilter解决post请求中文乱码问题
@Nullable为可以为空,即编码(encoding)可以为空,即使用默认的编码,所以如果我们要更改编码设置,就要对其进行配置forceRequestionEncoding:强制请求编码forceResponseEncoding:强制返回编码在doFilter执行了doFilterInternal方法,其实最简单的方式是寻找过滤器链filterChain,因为执行过滤的方法必定含有这个参数从上面看forceRequestEncoding如果不进行设置则为空,...
2022-04-19 23:27:38
526
原创 BS和CS 架构的介绍以及优缺点
简介C/S 又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。B/S 是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web
2022-04-18 18:04:38
9577
原创 数据库连接池的实现
JDBCUtil工具类 package com.ln.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.util.Properties;public class JDBCUtils { /** * 获取连接 * @return * @throws Exception */ public static Connection getCo..
2022-04-18 11:40:19
661
原创 Redis一主二从三哨兵的配置
一主二从的搭建在前面已经介绍过了,请见https://blog.csdn.net/m0_51212267/article/details/123718396?spm=1001.2014.3001.5502搭建完成后:下面来介绍哨兵的配置和搭建在myredis下建立三个sentinel文件文件内容:port 26390 //配置 sentinel 端口号sentinel myid 490809635e50e1a46d091fd838538a75a3ed876f //监控 m
2022-04-17 12:22:54
2768
原创 volatile的可见性与有序性(指令重排序)
为什么会有指令重排序现代处理器会设计为一个时钟周期完成一条执行时间最长的CPU指令,每条指令可以划分为:取指令->指令译码->执行指令->内存访问->数据写回 五个阶段串行执行多级指令流水线这时CPU可以在一个时钟周期内,同时运行五条指令的不同阶段,提高了指令的吞吐率重排序意义处理器为提高运算速度而做出违背代码原有顺序的优化。volatile原理volatile的底层实现原理是内存屏障:对volatile变量的写指令后会加入写屏障
2022-04-16 12:56:20
314
原创 HashMap源码之get()方法详解
流程:如果表不为空,则去判断索引位首节点是否为null 判断索引位首节点是否为需要寻找的节点,是则返回该节点 如果不是则去索引位首节点中的链(或树)中继续去寻找 判断索引位首节点是否为树结构,如果是则去红黑树中查找 如果不是则去遍历链表的每个节点,找到后返回,没找到则为空HashMap并没有直接提供getNode接口给用户调用,而是提供的get函数,而get函数就是通过getNode来取得元素的 public V get(Object key) { Node<
2022-04-13 12:00:06
1167
原创 HashMap源码之扩容(resize)
final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; //计算旧哈希表的容量,如果旧的哈希表为空,则长度返回0,否则返回旧哈希表的长度 int oldCap = (oldTab == null) ? 0 : oldTab.length; //扩容阈值 int oldThr = threshold; //初始化新表的长...
2022-04-13 09:47:57
829
原创 HashMap源码之put方法详解
HashMap没有直接提供putVal接口给用户调用,而实提供put接口,而他通过putVal来实现插入元素。public V put(K key, V value) { return putVal(hash(key), key, value, false, true);} /** * * @param hash 指定参数key的哈希值 * @param key 指定参数key * @param value
2022-04-12 19:16:39
1194
原创 AOP的简介、使用、底层原理
简介在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。即通过不修改源代码的方式添加新的功能。常用场景日志记录 & 日志框架 入参打印
2022-04-12 10:37:58
449
原创 IOC操作Bean管理(基于注解方式)
什么是注解注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值......) 使用注解,注解作用在类上面,方法上面,属性上面 使用注解的目的:简化xml配置Spring针对Bean管理中创建对象提供注解@Component、@Service、@Controller、@Repository以上四个注解功能是一样的,都可以用来创建bean实例基于注解方式实现对象创建1、引入依赖2、开启组件扫描<?xml version="1.0" encodin
2022-04-10 22:11:57
110
原创 Mysql中limit的分页优化方案
limit用法语法格式:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetLIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0。问题当数据量过大时,查询耗时会大幅度增加:当起始页较小时,查询没有性能问题,我们分别看下从1
2022-04-10 19:13:14
2063
原创 聚簇索引和非聚簇索引
聚簇索引聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。每个InnoDB表都有一个特殊的索引,称为聚簇索引,用于存储行数据。如果创建了一个主键,InnoDB会将其用作聚簇索引(如果主键没有逻辑唯一且非空的列或列集,最好是设置成自动递增的)。 如果没有为表创建主键,则MySQL会在所有键列
2022-04-10 10:05:40
4159
原创 行锁和表锁的区别
行锁在MySQL的InnoDB引擎支持行锁,与Oracle不同,MySQL的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。特征:锁冲突概率低,并发性高,但是会有死锁的情况出现。行锁的实现需要注意: 行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。 两个事务不能锁同一个索引。 insert,delete,update在事
2022-04-09 19:41:06
4348
1
原创 存储引擎的介绍、使用和区别
目录InnoDB引擎:具备外键支持功能的事务存储引擎MyISAM引擎:主要的非实物存储引擎InnoDB和MyISAMArchive引擎CSV引擎:存储数据时,以逗号分隔各个数据Memory引擎:置于内存的表概述主要特征使用场景InnoDB引擎:具备外键支持功能的事务存储引擎MySQL从3.23.34a开始就包含InnoDB存储引擎。大于 等于5.5之后,默认采用InnoDB引擎。InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(sh
2022-04-08 21:13:37
991
原创 bean的生命周期(含代码)
生命周期从对象创建到对象销毁的过程bean的生命周期1、通过构造器创建bean实例(无参构造)2、为bean的属性设置值和对其他bean的引用(调用set方法)3、调用bean的初始化方法4、bean可以使用了(对象已经获取到了)5、当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)...
2022-04-08 16:19:17
247
原创 bin log、redo log、undo log日志详解
日志日志是Mysql数据库的重要组成部分,记录数据库运行期间各种状态信息。Mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。接下来重点介绍二进制日志(bin log)和事务日志(redo log和 undo log)。bin logbinlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog是Mysql的逻辑日志,并且由Server层进行记录,使用任何存储引擎的MySQL数据库都会记录binlog日志。逻辑日志:可
2022-04-07 19:27:49
1007
原创 数据库连接池技术详解
数据库连接池的必要性在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:在主程序(如service、beans)中建立数据库连接 执行sql语句 断开数据库连接这种开发模式存在的问题:普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证用户名和密码(得花费0.05s ~ 1s的时间)。需要数据库连接的时候,就向数据库请求一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。数据库的连接资
2022-04-07 15:58:09
739
原创 最全解读MVCC
简介MVCC(Multi-Version Concurrency Control)即多版本并发控制,主要是为了提高数据库的并发性能同一行数据平时发生读写请求时,会被上锁阻塞住,但mvcc用更好的方式去处理读写请求,使其不用加锁。这个读时快照读,而不是当前读,当前读是一种加锁操作,即悲观锁。快照读、当前读当前读他读取的数据库记录,都是当前最新的版本,会对当前读取得数据进行加锁,防止其他食物修改数据。是悲观锁的一种操作。如update、insert、delete快照读快照读的实现
2022-04-07 12:59:29
803
原创 如何保证缓存和数据库一致性
缓存和数据库的关联但随着业务量的增长,你的项目请求量越来越大,这时如果每次都从数据库中读数据,那肯定会有性能问题。这个阶段通常的做法是,引入缓存来提高读性能,但是具体应该怎么使用呢?如图为我们发起请求的大概流程具体流程:写请求依旧只写数据库 读请求先读缓存,如果缓存不存在,则从数据库读取,并重建缓存 同时,写入缓存中的数据,都设置失效时间这样一来,缓存中不经常访问的数据,随着时间的推移,都会逐渐「过期」淘汰掉,最终缓存中保留的,都是经常被访问的「热数据」,缓存利用率得.
2022-04-06 23:18:33
610
原创 从输入url地址到显示主页的过程
图解(图片来源:《图解HTTP》)上图有一个错误,请注意,是OSPF不是OPSF。 OSPF(Open Shortest Path First,ospf)开放最短路径优先协议,是由Internet工程任务组开发的路由选择协议过程 DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接结束 DNS解析DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当你在浏览器中输入一个地址时,例如w..
2022-04-05 22:41:26
211
原创 IOC操作Bean管理XML方式
什么是Bean管理Bean管理指的两个条件:spring创建对象 spring注入属性Bean管理操作有两种方式基于xml配置文件方式实现1、基于xml方式创建对象在Spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建 在bean标签有很多属性: id属性:唯一标识 class属性:包类路径 name:与id类似,用于早期框架,与id的区别是可以加特殊符号,较少使用 创建对象时,默认执行无参构造方法 <!--配置User
2022-04-05 18:34:05
592
原创 B树、B+树、B*树解析
B树(B-树)B树,也叫B-树。B树的说明B树的阶:节点的最多子节点个数。 B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点 关键字集合分布在整颗树中,即叶子节点和非叶子节点都存放数据 搜索有可能在非叶子结点结束 其搜索性能等价于在关键字全集内做一次二分查找B+树 B+树是B树的变体,也是一种多路搜索树B+树的说明:B+树的搜索 与B树也基本.
2022-04-04 22:46:22
94
原创 ThreadLocal、ThreadLocalMap源码深度解析
目录ThreadLocal介绍ThreadLocal与synchronized的区别ThreadLocal方案的好处ThreadLocal的数据结构JDK8的设计方案的两个好处ThreadLocal的核心方法源码set方法get方法remove方法initialValue方法ThreadLocalMap源码分析基本结构1.成员变量2.存储结构--Entry弱引用和内存泄漏内存泄漏的相关概念弱引用相关概念如果ThreadLo...
2022-04-04 21:48:04
1662
原创 Lambda表达式最全解析
目录一、Lambda表达式简介什么是Lambda?为什么使用LambdaLambda对接口的要求@FunctionalInterface二、Lambda的基础语法1.语法2.创建多个接口3.创建测试类三、语法精简1.参数类型精简2.参数小括号精简3.方法大括号精简4.大括号精简补充5.多参数,有返回值 精简四、Lambda语法进阶1.方法引用(普通方法与静态方法)2.方法引用(构造方法)一、Lambda表达式简介什么是L
2022-04-03 22:57:58
3560
原创 事务隔离级别(MYSQL)
什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。事务的特性(ACID) 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起
2022-04-03 22:15:33
88
原创 IOC的底层原理
IOC(概念和原理)控制反转,是面向对象编程的一种设计原则,可以用来降低计算机代码之间的耦合度。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给他。也可以说依赖被注入到对象中。通俗的讲,就是把对象创建和对象之间的调用过程,都交给 spring 进行管理,这个过程叫做IOC使用IOC目的:降低耦合度IOC底层原理xml解析、工厂模式、反射演变过程原始方式:耦合度太高工厂模式:通过工厂模式降低了UserServic.
2022-04-02 16:05:45
1676
原创 单例模式和实现详解
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。假如一个对象被频繁的使用和销毁,那么对于内存来说无疑是比较浪费的,就比如说我们操作数据库,我们创建数据库连接去操作数据库,我们创建的数据库连接明明是可以重复利用的,但是我们却不停的创建和销毁,这就
2022-04-01 17:29:49
1317
原创 Redis中的Bitmaps、HyperLogLog、Geospatial
目录Bitmaps如何选择集合类型判断用户登录状态小结HyperLogLog什么是基数应用场景命令Geospatial如何实现定位Geohash技术geohash的计算geohash的精度geohash的边界问题Redis对地理位置的支持指令操作Bitmaps在移动应用的业务场景中,我们需要保存这样的信息:一个 key 关联了一个数据集合。例如:根据用户id判断登陆状态 用户的签到情况通常情况下,我们面临的..
2022-03-31 16:05:03
822
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人