自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mysql 【索引】

索引是一种有序的数据组织形式,所以可以提高查询效率,也让排序行为变得简单。B+树Mysql 的默认存储引擎innodb使用B+树作为索引的存储结构。二叉树 :高度不可控。极端情况就变成线性结构了。极大的降低我们的查询效率,所以我们就又需要一种算法来保证二叉树节点的平衡。平衡二叉树:AVL 树 (二叉查找树)、红黑树 :影响这棵树的查询效率的决定性因素就是,只要树的层级越少,那么树的查询效率就越高,本着这个原则我们就思考每个节点能不能多存点 数据,只要每个数节点的数据保存的越多,那么我们树的层级就会越少。多叉

2022-07-06 22:27:19 1708 1

原创 Mysql 【MVCC】

MVCC是在并发访问数据库时,通过对数据做多版本管理,避免因为写锁的阻塞而造成读数据的并发阻塞问题。通俗的讲就是MVCC通过保存数据的历史版本,根据比较版本号来处理数据的是否显示,从而达到读取数据的时候不需要加锁就可以保证事务隔离性的效果。每次事务开启前都会从数据库获得一个自增长的事务ID,可以从事务ID判断事务的执行先后顺序。在innodb 中每个事务开启后都会得到一个read_view。副本主要保存了当前数据库系统中正处于活跃(没有commit)的事务的ID号,其实简单的说这个副本中保存的是系统中当前不

2022-06-30 22:23:03 388

原创 2022-顺丰科技智慧物流校园技术挑战赛题解

顺丰科技智慧物流校园技术挑战赛题解

2022-06-29 21:07:01 1117

原创 算法 :字符串匹配 【kmp】

字符串快速匹配算法上面的字符串为较长的字符串,需要查找其中是否包含下面较短的字符串。e != s 并且 s 没有前缀和后缀相同,为0。就把下面的字符串0位置的字符比较。还是不相等,只能往后从头开始重新匹配,放弃掉之前的字符串。求next数组计算i下标的值需要依靠前面 i - 1 数组上的值cn (cn= next[i-1]) 。比较 chars[i - 1] 与 chars[cn] 三种情况:chars[i-1] == chars[cn] 说明前缀...

2022-06-22 10:19:43 113

原创 Mysql 【锁】

表锁是指上锁的时候锁住的是整个表,当下一个事务访问该表的时候,必须等前一个事务释放了锁才能进行对表进行访问;表锁级别的两种锁:表锁表锁的语法是 lock tables … read/write原数据锁 MDL (metadata lock)server 层级别的锁。主要用于隔离DML和DDL操作之间的干扰。​ 执行DML,需要申请 MDL 读锁​ 执行DDL,需要申请 MDL 写锁​给一个表加字段,或者修改字段,或者加索引,需要扫描全表的数据。在对大表操作的时候,你肯定会特别小心,以免对线上服务造成影响

2022-06-20 22:10:17 533

原创 Mysql 【事务】

​ 一个或者一组操作的最小逻辑单元,要么全部成功。要么全部失败。​ 务机制存在的目的就是无论我们的操作过程中是成功、失败、异常、或是受到干扰的情况下,事务都能保证我们数据最终的。​ 隔离性、原子性、持久性是达成一致性目标的手段​ 事务ACID特性分别是原子性、一致性、隔离性、持久性, 一致性是事务的最终追求的目标,隔离性、原子性、持久性是达成一致性目标的手段,根据的文章我们已经知道隔离性是通过锁机制来实现的。 而事务的原子性和持久性则是通过redo log 和undo log来保障的。​ 事务提交成功由re

2022-06-20 22:03:02 108

原创 Mysql【日志系统】

Mysql 里会接触到三个核心日志分别是binlog 是作为mysql操作记录归档的日志,这个日志记录了所有对数据库的数据、表结构、索引等等变更的操作。mysql 里我们就是通过 binlog 来归档、验证、恢复、同步数据 (主从一致)。binlog 是。DML(Data Manipulation Language)数据操纵语言DDL(Data Definition Language)数据定义语言binlog 记录了除了查询语句(select、show)之外的所有的 和 语句。基本上所有对数据库的操作变

2022-06-20 22:00:34 488

原创 Java : SPI机制

JDK 中的SPI机制SPI(Service Provider Interface),是JDK内置的一种。用来启用框架扩展和替换组件。java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦。比如jdk中的 drive 驱动类,jdk里面使用Drive接口去做各种逻辑。第三方厂家实现drive接口中的各种方法。mysql厂商写了jar包mysql-connector-java-xxx.jar,提供对mysql的各种操作。在mysql厂商写的jar包的Met

2022-06-19 14:59:56 87

原创 Mysql 【基础架构】

连接器负责跟客户端建立连接、获取权限、维持和管理连接。​ 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时。​ 长连接: 连接成功后,如果客户端持续有请求,则一直使用同一个连接​ 短连接: 每次执行完很少的几次查询就断开连接,下次查询再重新建立一个建立连接的过程比较复杂,尽量使用长连接。但是因为mysql执行过程中临时使用的内存是管理在连接对象中的,这些资源在连接断开时才会释放,所以长连接不断累积,会导致内存占用太大,被系统强行杀掉(O

2022-06-18 21:03:32 55

原创 并发编程:线程池介绍

JAVA 中的线程池是应用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在阿里巴巴《java 开发手册》中甚至说明。足以显示线程池的重要性。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU 的缓存被清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。任务到达时,任务可以不需要等待线程创建完毕。线程是稀缺资源。如果无限制的创建。不仅会消耗系

2022-06-18 10:30:57 534

原创 并发编程:AQS 源码分析

在Java并发包中很多锁都是通过AQS来实现加锁和释放锁的过程的,AQS就是并发包基础。AQS 的全称 AbstractQueuedSynchronizers抽象队列同步器。AQS的设计模式采用的模板方法模式,子类通过继承的方式,实现它的抽象方法来管理同步状态,对于子类而言它并没有太多的活要做,AQS提供了大量的模板方法来实现同步。在AQS 中的模板方法如:这些方法都接收一个整形参数,其实这个参数就是我们下面要讲的 state 变量。并且在这些模板方法中会调用类似 tryAcquire( ) 这种由子类继承

2022-06-15 09:47:36 215

原创 并发编程:LockSupport

LockSupport 是一个线程阻塞工具类,可以让线程在任意位置阻塞。每个 java 线程都有一个Parker实例,parker 实例的 _counter 字段,映射了操作系统底层的(mutex)。使用它来进行线程的并发控制。​ LockSupport和每个使用它的线程都与一个许可(permit)关联。permit相当于1,0的开关,默认是0,调用一次unpark就加1变成1,调用一次park会消费permit, 也就是将1变成0,同时park立即返回。再次调用park会变成block(因为permit

2022-06-13 19:44:04 213

原创 Jstack 使用

jstack是JVM自带的Java堆栈跟踪工具,它用于打印出给定的、core file、远程调试服务的,用于生成虚拟机当前时刻的。一般情况下线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源,会不会发生线程间死锁、死循环、请求外部资源导致的长时间等待等问题。Jstack dump 日志文件需要重点关注线程状态为:对于第三个线程waiting for monitor entry 等待获取 monitor 的情况:一般是线程获取重量级锁(

2022-06-13 15:56:50 1083

原创 动态规划—— 使用状态转移图 309. 最佳买卖股票时机含冷冻期

状态定义 dp[i][j]:dp[i][j]:dp[i][j]: 第 i 天 状态为 j 时最大的利润j 取 4 个状态j = 0 : 不持股且没卖股票j = 1 : 不持股因为今天卖了股票j = 2 : 持股且今天没买股票j = 3 : 持股因为今天买了股票状态转移方程对于多种状态转换比较复杂的情况,可以先列表再画出状态转移图,根据状态转移图来列出方程昨天交易截止时的状态是 j : 0昨天的状态昨天的状态是否可以转移00可以01..

2022-04-11 19:54:53 143

原创 JVM学习 — 双亲委派

双亲委派类加载器双亲委派模型破坏双亲委派模型TomcatJDBC模块化技术与类加载机制类加载器Class 文件是通过类加载器加载到虚拟机中的,这个动作在虚拟机外部实现,以便让应用程序自己决定如何去获取所需的类,实现这个动作的代码被称为“类加载器”。对于任意一个类,必须由加载它的类加载器和这个类本身一起共同确立其在java虚拟机中的唯一性。每一个类加载器都拥有一个独立的类名称空间。一个Tomcat可以运行多个war包,说明一个Tomcat 可以运行多个Web应用

2022-03-18 13:45:57 287

原创 JVM学习——类加载

类加载什么时候加载类(类加载时机)类加载过程什么时候加载类类的加载和java代码的执行密不可分,先来看一下java代码的执行流程。我们在写完java源代码后,点击ide的 run 后,就能得到我们想要的结果,但是这背后发生了什么,虚拟机干了什么?总流程:编译 -> 加载 -> 解释 -> 执行ide 会使用 javac编译器将我们的 .java 源代码经过编译器的一些处理 【语法分析】【语义分析】【注解处理】等,最后生成 .class字节码文件。字节码文件以8

2022-03-17 21:42:28 288

原创 JVM学习——为什么需要Java内存模型?

背景知识现在的CPU基本是多核的,而且CPU 运算速度远比主存(内存)读写速度快,并且速度相差了几个数量级。所以CPU 大部分时间都在等数据从主存读取,运算完数据写回内存。所以现代计算机在CPU和主存之间加了一层读写速度尽可能接近CPU运算速率的高速缓存来做缓冲。而且CPU还有内置的寄存器存放一些计算结果。如果cpu每次需要的数据都不在缓存中,那么还不是要去主存中读取,放入缓存,岂不是多此一举?由于长期的实验显示:程序 80% 的时间在执行 20% 的代码,所以只要把这 20% 的数据和代码放入缓

2022-03-09 14:11:36 324

原创 LeetCode139.单词拆分(动态规划——附图分析)

题目描述给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/word-break示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可

2022-03-03 13:57:43 913

原创 动态规划(多重背包) 一维优化附图理解

动态规划——多重背包题目描述有 n 种物品和一个容量为 capacity 的背包,且每种物品【数量有限】。第 i 件物品的质量是 weight[i] ,价值是 values[i] ,数量为 nums[i]。问:选择哪些物品,每种物品选择多少件,可使得总价值最大?输入:capacity = 5 , weight = [1,2] , values = [1,2] , nums = [2,1]输出:4选择两件物品1,再选一件物品2,可以使价值最大朴素二维状态定义 dp[i] [j] :考虑前

2022-03-01 14:32:02 143

原创 LeetCode474. 一和零 (二维背包解法附过程图)

题目描述:给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的子集 。例1输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。其他满足

2022-02-24 19:18:36 256 2

原创 Netty(1) —— NIO、BIO

Netty学习前置知识(一)学习 https://www.bilibili.com/video/BV1py4y1E7oA?p=122&spm_id_from=pageDriver 所做笔记1.阻塞IOJDK 1.4 之前: bio 同步阻塞的IOJDK 1.4 之后: java.nio.xxx —> 解决阻塞问题 Non-Blocking 同步非阻塞的IO在学习Nio之前我们需要回顾一下传统的阻塞IO,网络连接是怎么干的客户端与

2021-11-04 16:10:37 203

原创 多线程:搞懂 wait() 和 join()的关系

多线程:搞懂 wait() 和 join()的关系前置知识:线程状态 public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }NEW (初始): 新创建线程对象,但还没有调用 start() 方法RUNNABLE (运行): java 把 就绪

2021-09-26 11:07:55 2708

原创 操作系统7——进程间通信问题(IPC)

概述通信方法信号管道消息队列共享内存为什么要进程间通信?进程之间相对保持独立,一个进程不能访问另一个进程的地址空间。(内存管理所做的工作)这样可以保护进程地址空间不会随便被不相干的其他进程访问。可以确保进程的正确运行。但是另一方面,进程与进程之间需要协作,完成一些大型的任务。在保证进程与进程相对独立的情况下,还需要之间进行有效的沟通。所以需要进程间通信。进程通信的机制及同步不使用共享变量的进程通信IPC facility 提供2个操作:send(message) -.

2021-09-22 18:27:07 335

原创 操作系统6——生产者-消费者问题

问题描述:一个或多个生产者在生产数据后放在一个缓冲区中单个消费者从缓冲区中取数据处理任何时刻只能有一个生产者或消费者可访问缓冲区用信号量来解决 生产者——消费者问题问题分析:任何时刻只能有一个线程操作缓冲区 (互斥访问)缓冲区空时,消费者必须等待生产者 (条件同步)缓冲区满时,生产者必须等待消费者 (条件同步)解决方法:二进制信号量 mutex (互斥访问)资源信号量 fullBuffers (条件同步)资源信号量 emptyBuffers

2021-09-22 18:20:25 360

原创 操作系统5——同步问题: 信号量实现临界区

用信号量实现临界区信号量是操作系统提供的一种协调共享资源访问的方法信号量的抽象数据类型一个整形(sem),具有两个原子操作P(): sem减一,如果sem<0,等待,否则继续V(): sem加一,如果sem≤0,唤醒一个等待的P信号量是整数信号量是被保护的变量初始化完成后,唯一改变一个信号量的值的办法是通过P()和V()操作必须是原子(p()、v()优先级高于进程的用户代码,不受应用进程代码的干扰)P()能够阻塞,V()不会阻塞我们假定信号量是公平的线程不会被无限期阻

2021-09-13 21:14:43 542

原创 操作系统4——同步问题: 如何用锁实现临界区

如何用锁实现临界区临界区是什么?临界区的四个要求:互斥: 同一时间临界区中最多存在一个线程最终成功(progress):如果一个线程想要进入临界区,那么最终一定可以进入有限等待: 线程 i 想要进入临界区,其他在临界区中的线程是有时间限制的无忙等待: 线程 i 在等待进入临界区时,它可以被挂起,不占用资源总结 : 临界区是进程之间访问共享资源的地方,只能有一个线程在里面操作。锁是如何实现的?线程拿到锁才可以执行,所以给锁两个方法。获得锁和释放锁。Acquire() 拿到锁

2021-09-12 12:39:54 220

原创 操作系统3——进程控制和多级反馈队列

进程控制进程控制创建进程加载进程执行进程等待和终止进程加载和执行进程fork()系统调用创建一个子进程复制父进程的所有变量和内存复制父进程的内存和cpu寄存器到内存子进程返回 pid:0 父进程返回子进程的pid这种把父进程的内存和cpu寄存器到子进程的开销十分昂贵,而且在绝大多数情况下,在调用fork()之后,子进程直接调用 exec()执行新的代码,子进程的代码段、堆、栈都会被覆盖。所以父进程的内存复制是无用的。为了解决这个问题,出现了轻量级的fork vf

2021-09-12 11:58:50 285

原创 操作系统2——虚拟内存

虚拟内存学习资料: https://www.bilibili.com/video/BV1uW411f72n 《操作系统原理》如果计算机多道程序运行,内存不够怎么办?早期的技术: 覆盖 交换程序太大: 手动覆盖,程序员手动把程序分模块,只把需要的指令和数据保存在内存中程序太多: 自动交换,把暂时不执行的程序送到外存中把互相不会调用的程序模块,共享一块覆盖区,当调用到该模块时,再放入覆盖区中。覆盖技术的缺点:程序员手动以时间换空间交换技术让正在运行的程序获得更多的内存资源,把

2021-09-09 10:07:50 143

原创 操作系统1——内存分配

操作系统内存分配学习资料: https://www.bilibili.com/video/BV1uW411f72n 《操作系统原理》连续内存分配操作系统加载到内存和程序加载到内存时,分配一块连续的内存块,容易出现内存碎片的问题非连续分配内存非连续分配内存可以有效的减少内存碎片的出现连续内存分配的缺点分配给一个程序的物理内存是连续的内存利用率低有外碎片 / 内碎片的问题非连续内存分配的优点一个程序的物理地址空间是非连续的更好的内存利用和管理允许共享代码与数据(共享库等…)支持

2021-09-06 15:45:22 1220

原创 Spring 事务 (Transaction)知识整理

事务 (Transaction)1. 事务 acid 原则Atomic :原子性,一堆sql,要么一起成功,要么一起失败。Consistency : 一致性,一组sql执行前和执行后,数据必须是正确的。中间状态不可见。Isolation: 隔离性 ,事务之间不能互相影响。Duravility:持久性,事务成功后,对数据的修改是有效的。2. 事务隔离级别并发下事务会产生一些问题:读未提交 (Read Uncommitted) 脏读。某个事务还没提交的时候,正在修改的数据就让别的事务读

2021-04-13 14:09:25 325

原创 virtual box 安装 centos7 mac环境下保姆级教程。

搭建环境virtualbox 6.1.18 + centos7 镜像1. 注册镜像点击虚拟光盘2. 安装centos点击控制这里选择新建 或者直接快捷键 command+n名称自己定义类型选择 linux版本选择 red hat 64位后面的什么虚拟硬盘 、文件类型、 动态分配、文件位置大小全部选择默认。双击运行。点击start按回车,开始安装!选择安装语言,只要胆子大随便选。点一下安装位置,然后点击左上角的 (完成)done 就行。配一下网络。点击下面的两

2021-03-25 16:40:23 125 1

原创 G1垃圾回收器详细解读

最新的 G1 垃圾回收器目录结构1.G1垃圾回收器概述2.设定内存大小3.新生代垃圾回收4.老年代垃圾回收5.大对象回收分配策略6. 混合垃圾回收 (Mixed-GC)7. 总结Parnew + CMS 的痛点: 无论是新生代还是老年代的垃圾回收,都会或多或少产生"stop the world" ,对系统运行有一定影响。而且不是可控的,只能优化。1. G1垃圾回收器概述G1 垃圾回收器可以同时回收新生代和老年代的对象,一个人负责所有。内存结构: 把java堆内存拆分为多个大小相等的

2021-03-19 13:29:39 7955 4

原创 配图分析!老年代垃圾回收器CMS工作原理

CMS 采用标记清理算法CMS 采取 垃圾回收线程和系统工作线程尽量同时执行的模式来处理如何实现?初始标记这个阶段,系统的工作线程全部停止,进入"stop the world",标记出所有的Gc roots对象。虽然要 stw,但是影响不大,因为速度非常快。并发标记 (Gc roots 深度追踪)系统线程可以随意创建各种新对象,继续运行,这个阶段可能会创建新的存活对象,也可能部分存活对象失去引用。在这个过程中,垃圾回收线程会尽可能的对已有的对象进行 GC Roots追踪。简而言之,会对

2021-03-15 14:08:12 541

原创 新生代的垃圾回收算法

一个 Eden区,两个survivor区,eden区占80%内存空间,每一块survivor区占 10%。平时使用一块eden和一块survivor区所以内存使用率为 90%。​ 刚开始对象都分配在eden区,如果eden区快满了就触发垃圾回收,把eden区中的存活对象转移到一块空着的survivor区,eden区清空,然后再次分配新对象到eden区,再触发垃圾回收,就把eden区存活的和survivor区存活的

2021-03-14 12:59:25 4333 4

原创 简单实用! 前后端分离 shiro + springboot +mybatis+ Jwt +redis 实现权限管理

简单实用! 前后端分离 shiro + springboot +mybatis+ Jwt 实现权限管理​ 之前学习了shiro和Jwt,就想找个项目练一下手,可是b站上没有找到前后端分离加上用shiro和jwt做权限控制的教程。后来看到一篇文章https://blog.csdn.net/weixin_42236404/article/details/89319359,这篇文章对于shiro流程的讲解对我非常有帮助,我用mybatis 和 JWT 结合了一下这篇文章的源码。​ 代码地址:1.Jwt简介

2021-03-09 10:07:25 1125 1

空空如也

空空如也

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

TA关注的人

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