自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于Java中的读写锁ReentrantReadWriteLock

Java中的读写锁是一种特殊的同步机制,允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。读写锁的实现基于AQS框架,可以用于解决高并发场景下的数据争用问题,提高程序的并发性和吞吐量。读写锁是一种特殊的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。(1)实现复杂:读写锁的实现比较复杂,需要考虑读锁和写锁之间的互斥关系,以及锁的粒度和并发性等问题。(2)减少锁竞争:读写锁允许多个线程同时读取,但只允许一个线程写入,可以减少锁竞争带来的性能损耗。5.1 数据库读写分离。

2023-03-29 14:22:55 988

原创 ThreadLocal本地线程副本变量如何做到线程隔离

如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题.调用set时, ThreadLocal会根据当前线程来查找当前线程的ThreadLocalMap, 然后以ThreadLocal作为key将value保存到map中;Thread类有个类型为ThreadLocalMap的成员变量threadLocals, 用于存放变量, 所以需要把副本变量保存到这里。..

2022-08-25 18:22:30 365

原创 利用反射构建一棵菜单生成树

利用java的动态调用类和类属性机制,编写一个工具类来自动为我们创建一个菜单树,从而使得我们不用每次遇到树结构都要重复的写一些逻辑,十分不友好.

2022-07-26 11:29:58 353

原创 分布式锁原理, Zookeeper实现分布式锁流程

实现分布式锁的方式主要有Redis和Zookeeper,Zookeeper实现分布式锁相对于Redis比较简单,Zookeeper有一个特性多个线程在Zookeeper里创建同一个节点时,只会有一个线程执行成功.Zookeeper的节点分为两大类临时节点,持久化节点临时节点会话失效或连接异常时,节点会被自动删除;持久化节点客户端一旦创建节点,即使会话结束或发生异常节点也不会被删除,只有客户端主动请求删除.有序节点。...

2022-07-21 19:25:17 589

原创 数据库优化 理解这些就够了

最全面最直观的归纳出数据优化知识点归纳, 明白这些就够了

2022-07-19 16:57:41 292

原创 HTTP数据传输协议原理

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当(百度百科)HTTP协议超文本传输协议. 简单来说HTTP协议是客户端和服务器进行交互的一种通信格式.用户点击一个网...

2022-04-22 17:15:58 2866

原创 JAVA并发编程 - 概念介绍

进程一个在内存中运行的应用程序, 每个进程有自己独立的内存空间, 可以包含多个线程线程进程中的一个执行任务, 多个线程共享进程的内存空间进程与线程的区别1. 线程具有许多进程的特征, 称线程为轻型进程, 成进程为重型进程2. 进程是操作系统资源分配的基本单位, 线程是CPU调度和执行的基本单位3. 进程切换的资源开销大, 线程间的切换资源开销小4. 进程与进程之间的资源是独立的, 而同一个进程下的所有线程共享这个线程的资源下文切换一个CPU在任意时刻只...

2022-04-21 17:26:22 392

原创 对象拷贝,entity与vo的各种类型之间相互转换, 不想写连表查询的解决方案

编写一个工具类, 用于将实体、集合、page的entity与vo之间的类型转换工具类。在有使用Mybatis Plus的项目框架中,我们从库中查询出来的数据只能映射到实体类, 不能够很好的适应我们的VO对象,而且有时候分页查询时往往会涉及连表查询等等, 通常得通过写sql来得到VO类型的输出。如果你不想写sql怎么办?只想通过调用简单快捷的Mybatis Plus的方法进行对表操作, 那么就可以使用这个工具类了。我工作中追求的是减少复杂的开发过程, 提高开发效率,代码可复用化。进入正题.

2022-01-07 11:25:54 2979

原创 3分钟理解完java中的回调函数

定义函数A执行时需要先给它传递函数B, 好在合适的时候调用, 以完成函数A. 这个被传入的函数B被称为回调函数(Callback function).如何理解在调用库中某些预先备好的目标函数时, 需要先给该函数传递另一个函数, 让库中的目标函数在合适的时候, 去调用传给它函数来完成目标函数.打个比方假如你去一家餐厅吃饭, 你告诉服务员说你要吃饭, 然后她会让你对着菜单点菜, 你点完菜后她就会陆续地将才给你上来.你要吃...

2021-11-11 17:01:37 1257

原创 不看就知道怎么用MybatisPlus代码生成器

好用的代码生成器工具类分享.代码粘贴过去直接用, 方便, 不看就懂直接上完整代码/** * freemarker模板引擎 * @author Huzz */public class MybatisPlusCodeGenerator { /** -------------------------------------------CONFIG------------------------------------------------------- */ ..

2021-10-26 17:11:38 174

转载 单点登录原理与简单实现

一、单系统登录机制1、http无状态协议  web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系  但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求;要鉴别浏览器请求,必须清楚浏览器请求状态。既然http协议无状态,

2021-10-19 14:47:42 185

原创 数据结构-队列

队列是一种限定为从一端从另进一端出(FIFO)的线性表。从一段插入元素的过程称为入队或进队, 从另一端取出一个元素称为出队。每次入队在队尾插入新的元素,每次出队时在队首取出一个元素/** * @author Huzz * @created 2021-10-15 9:44 * @param <T> */public class Queue<T> { private SingleLinkedList<T> linkedList; ..

2021-10-18 11:07:23 477

原创 数据结构-顺序栈和链栈

栈(stack)是一种常见的数据结构,是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。顾名思义,栈是被限定于只能从一端进和出的线性表(简称LIFO结构,Last in, First out)。按照存储结构可分为顺序栈和链栈:顺序栈是用一组连续的存储空间来依次存.

2021-10-15 12:01:46 1697

原创 java实现单链表和双链表数据结构

首先定义一个接口, 规范单链表和双链表常用的基本操作:/** * @Author Huzz * @Created 2021-10-09 17:49 */public interface LinkedList<T> { /** * 节点长度 * @return */ int size(); /** * 返回链表是否为空 * @return 空:true | 非空:false */ boole

2021-10-09 19:11:57 269

原创 Spring Cloud分布式开发-服务调用

简介微服务是系统架构上的一种设计风格,主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行.服务之间通过基于HTTP的RESTful API进行通信协作.每一个小型服务都围绕系统中某一项耦合度较高的业务功能进行构建,并且每个服务都维护着自身的数据存储/业务开发/自动化测试案例以及独立部署机制.使用微服务设计风格的原因:不断扩大的需求使得单体应用变得越来越臃肿 单体应用系统部署在一个进程内,修改一个很小的功能会导致其他功能模块都需要重先部

2021-10-08 14:54:34 529

原创 Spring Boot详细注解讲解

注解列表@SpringBootApplication包含了@ComponentScan, @Configuration和@EnableAutoConfiguration注解. 其中@componentScan让Spring Boot扫描到Configuration类并把它们加到程序上下文.@configuration等同于Spring的XML文件; 使用java代码可以检查类型安全. @Configuration类作为Spring的配置主类----可以使用@ImportResource注解加

2021-09-10 11:45:34 226

原创 使用VUE3+ElemetUI开发动态表单/表格组件

在查询表格数据的时候,常常见到表格上方有一个表单区域, 用于数据查询条件动态查询表格数据.如下图:在此, 我开发了一个可以复用的组件. 可根据需要进行配置表单项(支持input, select, date类型的表单)和表格(支持表头配置和单元格样式配置)一. 表单配置表单配置组件-完整代码<template> <div style="width: 100%; height: 100%" class="form-condition"> <div c.

2021-09-09 14:59:16 4051 2

空空如也

空空如也

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

TA关注的人

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