自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 windows10和虚拟机里的sentOS7实现文件共享

windows系统和sentOS7实现文件夹共享

2022-08-30 16:38:35 550 1

原创 富文本编辑器表情存入mysql报错:Cause:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\xA4\xA5\x0A\x0A...‘‘

mysql表情(颜文字)存入数据库报错:Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\xA4\xA5\x0A\x0A...' for column 'content' at row 1

2022-08-11 11:13:11 1023

原创 Redis SkipList(跳表)底层原理详解

SkipList(跳表)是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,然后达到快速访问节点的目的,它的节点查找的复杂度为平均 O(logN)、最坏O(N),还能通过顺序性的操作来批量处理节点。SkipList的本质还是链表,但是它与传统的链表还是有区别的。跳表元素是按照升序排列存储的跳表查询性能要比链表好:链表:当元素很多时并且要访问中间某个元素,那么查询效率会非常慢,因为链表它的指针跨度为1,查询是一个一个往后查询的跳表:节点中可能包含多个指针,指针跨度比链表大,这样查询效率就快

2022-07-07 17:52:57 583

原创 畅谈癌症的过去现在未来

癌症这个疾病其实历史非常悠久,是-种和智人一样古老的疾病,关于癌症有很多历史的记载。比如死于1494年的那不勒斯国王阿拉贡兰特一世,。最古老的病例标本来自青铜器时代的头骨,过去的人普遍缺少防癌意识,又比较节俭,很少有人愿意每年定期到医院进行专项的癌症筛检,- 般单位的体检,也不包含对癌症的检查。有时即使身体不舒服了,也不会往癌症上想,能挺就挺,实在挺不住,才去医院检查,往往失去最早发现癌症的时机,一查出来,多数都到了晚期。 癌症有恶性度高、中、低之分,同样的一种癌症,在不同年龄段的人身上恶行度也是不

2022-07-07 15:20:06 156

原创 Redis QuickList底层原理详解

QuickList 是针对 ZipList 在设计上的不足而新增的一种数据结构,对 ZipList 数据结构比较陌生的同学可以先学习一下 ZipList 在来学习。如果要存储大量数据,超出了 ZipList 最佳的上限,那么可以创建多个 ZipList 来分片存储数据,这多个 ZipList 如何建立联系?QuickList数据结构是Redis在3.2版本引入的一种新得数据结构,他是一个双端链表,链表中的每个节点都是一个 ZipList,如下图所示在这里插入图片描述怎么限制每个 ZipKList 的长度

2022-07-07 14:41:01 478

原创 Redis Dict底层原理详解

Dict由三部分组成:哈希表(DictHashTable)、哈希节点(DIctEntry)、字典(Dict)Redis 的 Dict 使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。接下来我们来介绍一下它们的实现DictHashTableDictEntry如果出现hash冲突,这里采用头插法,将冲突的数据插入表头 next指向被插的节点,因为Redis是单线程,所以不会出现循环链表DictDict在Redis中要用到的场景非常多,不同场景下的h

2022-07-05 20:32:56 293

原创 Redis 动态字符串(SDS)底层原理详解

Redis数据库中的每个键值对都是由对象组成的,其中:本篇文章将对以上提到的五种不同类型的对象进行介绍,刨析这些对象所使用的底层数据结构,并说明这些数据结构是如何深刻的影响对象的功能和性能的Redis没有直接使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串的抽象类型,并将SDS用作Redis的默认字符串表示例如那么Redis将创建一个新的键值对,其中:除了用来保存数据库中的字符串值之外,SDS还被用作缓冲区 ( buffer ):AOF模块中的AOF缓冲区,以及客户端状态中的输入缓冲区,都

2022-07-05 20:29:27 1792

原创 Go 生成base64图片验证码-超详细工具类

之前网上的很多例子都很旧了,这次我分享的是最新版本的使用先下载生成图片验证码所需要的依赖包 使用 创建的对象,存储的验证码为 10240 个,过期时间为 10分钟2.2 创建自定义的对象根据自己需求更改验证码存储上限,以下代码设置存储的验证码为 20240个,过期时间为 3分钟.....................

2022-06-22 14:52:41 3333

原创 MySQL 事务详解

事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。原子性:一个事务必须被试为一个不可分割的最小工作单元,事务中的操作要么全部成功,要么全部失败。原子性其实并不能保证一致性一致性: 指事务必须使数据库从一个一致性状态变换到另一个一致性状态,这种状态是语义上的不是语法上的。例如: 从账户A转一笔

2022-06-08 07:45:32 103

原创 MySQL 事务的原子性和一致性有什么区别?隔离级别又是什么?

在学习MySQL的事务时,学到事务的四种特性,发现原子性和一致性不是一个意思吗?原子性保证要么全部失败,要么全部成功,这样就保证数据库的一致性了。结合网上搜查资料发现我这个想法是错误的,本篇文章将讲解一下原子性和一致性的区别。原子性:一个事务必须被试为一个不可分割的最小工作单元,事务中的操作要么全部成功,要么全部失败。原子性其实并不能保证一致性一致性: 指事务必须使数据库从一个一致性状态变换到另一个一致性状态,这种状态是语义上的不是语法.....................

2022-06-07 20:26:24 2639 1

原创 Golang GMP调度模型详解

文章目录前言1. Goroutine调度器的基本概念2. Goruntine调度策略2.1 work stealing机制2.2 hand off 机制前言     线程数过多,意味着操作系统会不断地切换线程,频繁的上下文切换就成了性能瓶颈。     Golang的调度模型是GMP模型,它提供一种机制,可以在线程中自己实现调度,上下文切换更轻量,从而达到了线程数少,而并发数并不少的效果。而线程中调度的就

2022-05-02 22:10:46 3893

原创 Go defer的使用场景及影响分析

目录前言1. defer特性1.1. 多个defer语句,按照先进后出的方式执行1.2. 延迟函数的参数在defer声明时就决定了1.3. 延迟函数可能操作主函数的具名返回值1.3.1 函数是如何返回的1.3.2 例1:主函数拥有匿名返回值,返回字面值(不影响返回值)1.3.3 例2:主函数拥有匿名返回值,返回变量(不影响)1.3.4 例3:主函数拥有具名返回值(影响返回值)2. defer数据结构前言关键字 defer 用于注册延迟调用,每次 defer 都会把一个函数压入栈中,函数返回前再把延迟的函

2022-04-28 20:11:29 576 1

原创 Go string深度理解之数据类型编码解码

文章标题1 整数存储2 字符存储3 汉字存储4 多种类型结合的字符的解码编码4.1 编码模板4.2 解码1.4.3 编码1 整数存储一个比特可以是0或是1,八个比特组成一个字节,全为0时代表0,全为1时代表255,即一个字节可以表示255个数字、两个字节可以表示65536个数字2 字符存储通过字符集ASCII来进行中转例如 A:先根据ASCII码将A转为 65 ,再转为二进制01000001,如下图所示3 汉字存储ASCII字符集收录了128个字符,它的扩展字符集也只有256个,由此生出了

2022-04-27 22:08:05 607

原创 Go Tag的使用

文章目录前言1.Tag是什么2. Tag是Struct的一部分3. 获取Tag3. Tag存在的意义前言1.Tag是什么Tag 本身是一个字符串,但字符串中却是:以空格分隔键值 key:"value" key:"value" key:"value" key:"value"key :必须是非空字符串,字符串不能包含控制字符、空格、引号、冒号value:以双引号标记的字符串冒号前后不能有空格下述代码为错误和正确的示例:// 错误示例type MeError struct { Name s

2022-04-27 17:57:46 1424

原创 Go Map底层实现原理

文章目录前言1. map数据结构2. bucket 数据结构3. 哈希冲突前言说到键值对的存储,我们通常会想到哈希表,而哈希表通常会有一堆桶来存储键值对,一个键值对来了自然要选择一个桶,怎么选?先通过哈希函数把键处理一下,得到一个哈希值,从m个桶中选择一个,桶编号区间 [0, m-1]方法1:取模法 hash % m方法2:与运算法1. map数据结构map类型的变量本质上是一个指针,指向 *hmap 结构体type hmap struct { count int

2022-04-27 16:16:48 3145

原创 Go Map的使用

文章标题前言1.Map 定义2.Map的基本使用2 判断某个键是否存在3. map遍历4. delete()函数删除键值对5. 元素为map类型的切片前言map是一中无序的基于key-value的数据结构,Go语言中感的map是引用类型,必须初始化才能使用1.Map 定义KeyType:键的类型ValueType:值的类型map[KeyType] ValueType1. map类型的默认值为nil,它需要用make()函数来分配其内存。2. cap表示map的容量,这个参数不是必须的

2022-04-25 15:34:35 1425

原创 Go slice的基本使用及实现原理

文章目录前言1. 切片和数组的类型2. 切片 Slice 的基本使用2.1 切片的创建2.1.1 make()函数创建切片2.1.2 字面量创建切片2.2.3 数组创建切片2.2.4 使用 append 内置函数做切片追加3. 切片 Slice 的实现原理3.1 Slice 数据结构3.2 Slice 扩容4. 切片 Slice 练习题前言slice是数组的一个引用,所以它是引用类型。但它的自身是结构体,值拷贝传递,slice的长度是可以改变的,所有 切片slice 又称为动态数组,可以方便的进行扩容、

2022-04-25 09:38:24 694

原创 Go Channel的基本使用及底层原理详解

前言如果说 goroutine 是Go程序并发的执行体,channel就是它们之间的连接。Go语言采用的并发模型是CSP,提倡通过通信共享内存而不是通过共享内存而实现通信。channel是可以让一个 goroutine 发送特定值到另一个 goroutine 的通信机制。1.channel类型channel类型:未初始化的通道类型变量默认零值为nilvar 变量名称 chan 元素类型// 例如var ch1 chan int // 声明一个传递整型的通道var ch2 chan b

2022-04-22 15:41:51 6159 2

原创 Dockerfile命令详细介绍及springboot项目部署案例

文章目录前言1.Dockerfile1.1 Dockerfile的架构图1.2 Dockerfile解析过程1.3 Dockerfile的保留命令1.3.1 FROM 命令1.3.2 MAINTAINER 命令1.3.3 RUN 命令1.3.4 EXPOSE 命令1.3.5 CMD 命令1.3.6 WORKDIR 命令1.3.7 ENV 命令1.3.8 ADD 命令1.3.9 COPY 命令1.3.10 VOLUME 命令1.3.11 ENTRYPOINT命令1.4 dockerfile命令实践,定制一个

2021-08-19 19:34:55 4307 2

原创 Vue使用计算属性完成图标区域分页功能

Vue使用计算属性完成图标区域分页功能再写vue作品的时候图标区是两页写了九个图标,最终显示到页面上的只有一页,第九个在第三行并且被隐藏了template代码只写一个swiper-slide实现分页滑动的功能<template> <div class="icons"> <!-- 引入swiper实现轮播 --> <swiper> <swiper-slide> <div class='i

2020-10-25 14:31:55 533 4

空空如也

空空如也

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

TA关注的人

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