自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅谈MySQL 高性能下的产物——MVCC

InnoDB 通过数据行的 DB_TRX_ID 和 Read View 来判断数据的可见性(可见性算法),如不可见,则通过数据行的 DB_ROLL_PTR 找到 undo log 中的历史版本。另一个作用是 MVCC ,当读取记录时,若该记录被其他事务占用或当前版本对该事务不可见,则可以通过 undo log 读取之前的版本数据,以此实现。然后并发控制就是要从这多个版本中,选出某个适合当前操作的版本。在当前读下,读取的都是最新的数据,如果其它事务有插入新的记录,并且刚好在当前事务查询范围内,就会产生幻读!

2023-09-06 01:26:09 111 1

原创 重学 Spring(上)

在没有spring 之前,我们生成一个对象是这样子的问题:如果我们的userServiceImpl修改为UserserviceImplNew怎么办,这个地方就需要修改了,耦合度太高的问题,我们引入一个BeanFactory进行修改,让BeanFactory帮我我们生成userservice,这样不就可以解耦了吗,至少在controller中解耦了(即我们的测试类中)

2023-08-14 20:10:08 602 1

原创 解剖常见的限流算法

固定窗口算法实现简单,容易理解。和漏斗算法相比,新来的请求也能够被马上处理到。但是流量曲线可能不够平滑,有“突刺现象”,在窗口切换时可能会产生两倍于阈值流量的请求。而滑动窗口算法作为计数器固定窗口算法的一种改进,有效解决了窗口切换时可能会产生两倍于阈值流量请求的问题。漏斗算法能够对流量起到整流的作用,让随机不稳定的流量以固定的速率流出,但是不能解决流量突发的问题。令牌桶算法作为漏斗算法的一种改进,除了能够起到平滑流量的作用,还允许一定程度的流量突发。

2023-08-12 20:01:41 135 3

原创 AOP 切面编程实战(日志+限流)

现在我有这么一个controller , 想要给他们都添加一个打印日志的功能,传统的方法就是都在每一个方法里写上一个打印的代码, 可是万一方法数量更多,并且有很多个这样的controller ,你还是一个个的处理吗?所以这里就要用到我们的AOP 切面编程了。顾名思义,切面就是统一的来对某些方法进行操作 AOP切面编程一共有两种写法,我这里就基于更加主流更加灵活的注解的写法进行演示。我们这里先创建一个注解,这个注解里只有一个属性 basenessName(基本名称)我们想要的效果就是将该注解放在对应的方法上

2023-08-11 23:07:35 368 2

原创 消息队列篇之 RabbitMQ

参数,当autoAck为true的时候,RabbitMQ采用自动确认模式,RabbitMQ自动把发送出去的消息设置为确认,然后从内存或者硬盘中删除,而不管消费者是否真正消费到了这些消息。那么最好在消费完成后手动ACK,否则接收消息后就自动ACK,RabbitMQ就会把消息从队列中删除。我们创建了三个绑定:Q1绑定了绑定键“* .orange.”,Q2绑定了“.*.rabbit”和“lazy.#”。,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!

2023-08-10 14:39:49 510 4

原创 Spring 事务

在 spring 中为了支持编程式事务,专门提供了一个类:TransactionTemplate,在它的 execute 方法中,就实现了事务的功能。2. C:代表一致性,比如说转账前后我都是200块,不管怎么操作都是200块。4. D:代表持久化,事务操作的结果,要永久保存到数据库中。3. I:代表隔离性,多个事务之前不能互相影响,做到隔离。1. A:代表原子性,比如说两个操作要么都成功要么都失败。权限访问问题(使用非public 的权限)spring 创建事务的方式。调用本类的方法(this)

2023-09-24 10:58:29 88

原创 Springboot启动流程

AutoConfigurationPackage,这个注解跟@Component注解含义类似,一个用来手动添加注解加载自动配置类一个用来扫描指定路径注入bean。@AutoConfigurationPackage 是为了在一个路径下面有多个自动配置的类要加载,这个注解就不用对每个类单独添加 @Import了,直接引入包路径更方便。默认扫描当前包以及子包,将有@Component,@Controller,@Service,@Repository等注解的类注册到容器中,以便调用。

2023-09-21 20:10:31 106 1

原创 Java 并发编程 八 (CAS 与原子操作类)

比如说一个线程1从内存位置V中取出A,这时候另一个线程2也从内存中取出A,并且线程2进行了一些操作将值变成了B,然后线程2又将V位置的数据变成A,这时候线程1进行CAS操作发现内存中仍然是A,预期ok,然后线程1操作成功--------缺陷:高并发后性能急剧下降----AtomicLong的自旋会成为瓶颈(N个线程CAS操作修改线程的值,每次只有一个成功过,其他N-1失败,失败的不停自旋直至成功,这样大量失败自旋的情况,一下子cpu就打高了)// 存放Cell的数组,大小为2的N次方。

2023-08-24 17:35:39 109 1

原创 Java 并发编程七(JMM 与volatile)

由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有的地方成为栈空间),工作内存是每个线程的私有数据区域,而Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,,并执行自己的操作,一旦其中一个线程对volatile修饰的变量先行完成操作刷回主内存后,另一个线程会作废自己的操作,然后重新去读取最新的值再进行操作,这样的话,它自身的那一次操作就丢失了。对于一个线程的执行代码而言,我们总是习惯性地认为代码的执行总是从上到下,有序执行。

2023-08-24 11:23:40 42 2

原创 Java 并发编程 五 (JUC 辅助类)

CountDownLatch 类可以设置一个计数器,然后通过 countDown 方法来进行减 1 的操作,使用 await 方法等待计数器不大于 0,然后继续执行 await 方法之后的语句

2023-08-21 18:53:56 37 1

原创 Java 并发编程二 (线程间的通信)

注意:在调用 Condition 的 await()/signal()方法前,也需要线程持有相关 的 Lock 锁,调用 await()后线程会释放这个锁,在 singal()调用后会从当前 Condition 对象的等待队列中,唤醒 一个线程,唤醒的线程尝试获得锁, 一旦 获得锁成功就继续执行。分别为A,B,C,D,其中A,C线程做+1操作,B,D线程做-1操作,想要的结尾应该是A,C线程输出值为1,B,D线程输出值为0(方法中有如下介绍在一个参数版本中,中断和虚假唤醒是可能的,并且该方法应该始终在。

2023-08-21 18:09:15 37

原创 常见的负载均衡算法

负载均衡算法也是分布式系统中的重要组成部分,用于将来自客户端的请求分配到不同的后端服务器上,以达到提高系统吞吐量、减轻服务器负担、提高系统可用性等目的。

2023-08-20 17:57:00 216

原创 沉浸式 深入Redis

对于读写命令来说,Redis 一直是单线程模型。不过,在 Redis 4.0 版本之后引入了多线程来执行一些大键值对的异步删除操作, Redis 6.0 版本之后引入了多线程来处理网络请求(提高网络 IO 读写性能)Redis 基于Reactor 模式设计开发了一套高效的事件处理模型 ,(这套事件处理模型对应的是 Redis 中的文件事件处理器(file event handler)。由于文件事件处理器(file event handler)是单线程。

2023-07-28 16:56:28 73 1

原创 两张图疏通Spring Security认证流程

我们都知道实现一套Spring Security 的认证流程, 需要设计很多和类来回切换,等等, 这些类名又非常的长, 所以导致我们在写的时候,思绪混乱,不知道下一步应该写什么 ,所以今天我们就通过两张图来搞明白这个认证编码的流程Tip:最好自己是已经跟着文档或者视频做过一次Spring Security认证流程可以看看我的上一篇博客更加优雅的认证授权——Spring Security_Hzq958的博客-CSDN博客所以我们的编码流程自顶向下的方式是非常合理, 避免了反复频繁的切换类。

2023-07-19 13:33:19 443

原创 更加优雅的认证授权——Spring Security

Spring Security致力于为Java应用提供认证和授权管理。它是一个强大的,高度自定义的认证和访问控制框架。具体介绍参见Authentication(认证)和Authorization(授权,也叫访问控制)认证是验证用户身份的合法性,而授权是控制你可以做什么。简单地来说,认证就是你是谁,授权就是你可以做什么。

2023-07-18 20:35:39 93 1

原创 项目复盘——从众美食外卖平台

从众美食外卖平台“专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等./** 自定义业务异常* 继承了运行时异常* 1.查询当前分类是否关联了套餐或者菜品,如果已经关联不允许删除,抛出这个业务异常* 该异常将在全局异常处理器中被捕获,并获取它携带的的信息* */

2023-07-16 17:46:18 108 1

原创 步入 Docker

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。容器本质上是多个镜像加载到内存中的副本的组合,因此容器是OS级别的隔离,最终表现为精简的OS+运行需要的环境+对应的应用,比如tomcat容器就是精简的OS+jdk+tomcat。) 【-q】(只显示容器id)

2023-07-15 22:28:03 56 1

原创 Java 并发编程 四(线程中断、阻塞、唤醒)

首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,都已经被废弃了其次,在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制----中断,也即中断标识协商机制中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自行实现。

2023-07-07 15:49:16 611 1

原创 java 并发编程 三(死锁 + 排查)

死锁是指两个或两个以上的线程在执行过程中,因抢夺资源而造成的一种互相等待的现象,若无外力干涉,则它们无法再继续推进下去。win + R 输入 jconsole -----> 选择进程 -------> 连接。此时我们的代码一直处于运行状态。

2023-07-07 00:02:29 56 1

原创 Java 并发编程 六(Future --> CompletableFuture)

使用。

2023-07-06 22:26:39 239 1

原创 Java 并发编程 一 ( synchronized 、ReentrantLock )

在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时 Lock 的性能要远远优于synchronized。如果绑定的是本类对象,很明显是不行,因为是两个账户,锁是不同的,进入了不同房间。3. Lock 可以让等待锁的线程响应中断,而 synchronized 却不行,使用synchronized 时,等待的线程会一直等待下去,不能够响应中断;锁住的不为同一对象,不存在锁竞争,第二个线程先执行,第一个锁的是类(锁住的为同一对象,2个线程都有可能执行。

2023-06-28 16:13:44 101 1

原创 Git 在开发中的应用(idea)

可以看到idea 已经自动的识别到 git.exe 文件(如果识别不到的话就要自己选择一下路径)点击 idea 的右下角 > new branch > 输入新分支的名称。Git > Manage Remote > + > 输入url。其他想都按默认的来,不做任何修改,apply。右下角就多出一个分支了,checkout 可以自由切换分支。搜索git,来到 idea 的 git 的配置界面。可以看到此时刚刚的VS 已经变成了Git。创建完会自动切换到该分支。1 打开commit。3 完成commit。

2023-06-24 23:49:41 59 1

原创 华为云服务器+宝塔(远程连接MySQL,Redis) 入门

这里登录到云服务器上有很多种方式(Xshell,CloudShell),大家按照自己的喜好登录上去就可以了。我们点击软件商店,来下载MySQL , Redis (一键下载即可)远程连接MySQL 和Redis 的可视化工具有很多,我这里用的分别是。然后点击确定,如果可以双击可以打开这个数据库的话, 那就是成功了。我们先设置一下Redis 的密码(按照上图所示) ,然后。这里和navicat 的操作如出一辙,我就不再过多的赘述。然后到我们自己的浏览器上输入网址就可以来到宝塔的登录页面。

2023-06-24 20:31:50 2009 2

原创 Redis 在开发中的应用

1、使用互斥锁:当缓存失效时,不立即去load db,先使用如 Redis 的 setnx 去设置一个互斥锁,当操作成功返回时再进行 load db的操作并回设缓存,否则重试get缓存的方法。概述:对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB。2、布隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对DB的查询。

2023-06-24 13:59:30 91

原创 Git 在开发中常用操作总结一(入门)

分支很容易被人为移动,并且当有新的提交时,它也会移动,大部分分支还只是临时的。所以需要一个永远指向某个提交记录的标识,比如软件发布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性。如果你建de是私有仓库的话,这里需要输入用户名和密码(用户名就是你gitee主页的@XXXXX,这里的XXXXX就是你的用户名,密码当然就是你gitee 的登录密码)标签不会随着新的提交而移动,它就像是提交树上的一个锚点,标识了某个特定的位置。我们这里先浏览一下git 的目录结构,结合着后面的命令来看,会非常清楚。

2023-06-23 00:59:05 83 1

原创 Spring Boot 常用配置合集(持续更新中)

- 确保在使用@ConfigurationProperties注解时,可以优雅的读取配置信息,不会爆红-->

2023-05-18 20:43:31 148

原创 (Easyx联合c++的通讯录系统)续

忙完了考试周,才有闲情雅致写这篇博客-……-(20条消息) 可视化图形界面编程(Easyx联合c++的通讯录系统)_Hzq958的博客-CSDN博客_c++可视化界面编程。

2022-07-07 11:29:10 1944 2

原创 可视化图形界面编程(Easyx联合c++的通讯录系统)

于是我就尝试着下载这款app来进行编程,但是在下载的过程中,我又遇到了各种各样的问题——首先是在版本的选择上QT的版本五花八门,各个版本又都有不一样的地方,我当时好像就选了最新的版本,但是在安装的过程中,需要选择搭载什么样的环境,几十个选项让我无从下手,在网上查询安装过程又发现网上的那个安装页面与我下载的版本又不一样了,折腾了好久,最后,我就一顿乱操作还是把他安装下来了,紧跟着,我打开QT,想试着编写一个程序,但是它的各种一大串的英文定义方式让我感受特别的不舒服。前面的搭建基本界面应用下来还是没有问题的。

2022-06-08 19:33:02 7469 8

空空如也

空空如也

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

TA关注的人

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