自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go语言入门(一)

使用var关键字编译器自动决定类型使用:=初始赋值(只能函数内使用,无法包内使用)枚举类型常量定义自增是iota,可以参与运算值传递实现类似址传递。

2022-12-29 10:33:09 162 1

原创 git 切换远程关联分支

git 切换远程关联分支

2022-08-15 16:24:07 868

原创 ReentrantLock与AQS源码解析

AQS是队列同步器,是提供同步锁的一种模板框架,也是lock锁实现的底层机制。Aqs 是通过int 变量state来表示加锁状态,通过fifo同步队列来管理线程同步状态。流程:当前线程获取同步状态失败时,同步器会将线程以及等待信息构造成一个节点,加入同步队列中,同时阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,再次尝试获取同步状态。AQS是经典采用了模板方法设计模式的,主要提供了一下五个魔版方法供我们重写加锁/解锁逻辑。以下源码基于非公平锁进行解析同步队列器node状态描述:lock方法表示非

2022-06-05 13:35:08 203 2

原创 RABC 权限拦截设置

1 RABC 是什么?rabc 是一种用于设计权限的一种思想,流程图如下2 硬编码实现的思想RABC 主要有user 用户表,role角色表,permission权限表,以及role-permission和user-role的中间关联表,但是实际上对于一般的需求,我们可以只使用user用户表, 里面存储字段标识 角色信息,然后在代码层面进行编码方式 使用enum枚举出所有角色表,使用 权限注解标识方法,将权限注解与方法进行一个绑定,其中权限里面包括(角色)信息,通过拦截器进行拦截权限进行筛选。

2022-03-28 18:18:39 7619

原创 Java 死锁 哲学家就餐问题解决

文章目录1 死锁2 定位死锁3 哲学家就餐问题多锁只有一个对象锁的话,程序的并发度很低(加synchornized 串行执行程序了)我们可以准备多个对象锁,将锁的粒度细分好处 增强并发度坏处 如果一个线程需要同时获得多把锁,就容易发生死锁1 死锁一个线程需要同时获取多把锁,这时容易发生死锁t1 线程 获得A对象锁,接下来想获取B对象的锁t2 线程获得B对象锁,接下来向获取A对象锁// 线程1 需要获取多把锁 new Thread(()->{

2022-01-10 16:59:22 380

原创 一文快速了解Java IO 模式

java IO模式1.1 同步,异步,阻塞,非阻塞首先了解一下同步,异步,阻塞,非阻塞同步和异步关注的是**消息通信机制**同步同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。异步异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果后才会返回非阻塞调用在不能得到结

2022-01-06 17:46:03 427

原创 spring 认证授权

认证与授权认证解决我是谁授权解决我能做什么1.1 原理1.2 常见的过滤器BasicAuthenticationFilter如果在请求中找到一个Basic Auth Http 头,如果找到,则尝试用该头中的用户名和密码验证用户。UsernamePasswordAuthenticationFilter如果在请求参数或者post的Request Body 中找到用户名和密码,则尝试用这些值对用户进行身份验证。DefaultLoginPageGeneratingFlter

2021-10-28 12:58:09 447 1

原创 Redis 持久化

文章目录1 RDB 持久化1.1 RDB文件的创建1.2 RDB文件的载入1.3 自动间隔性保存1.4 RDB文件结构2 AOF持久化功能2.1 命令追加2.2 AOF文件的写入与同步2.3 文件的写入与同步2.4 AOF文件的载入与还原2.5 AOF重写2.6 AOF后台重写3 重点回顾1 RDB 持久化Redis 提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘中,避免数据意外丢失。RDB持久化功能时生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成R

2021-10-25 11:06:56 91

原创 nginx 学习笔记

nginx 学习1.1 什么是ngaix是一个高性能HTTP和反向代理服务器,特点是占有内存少,并发能力强。ngaix 是转为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验。1.2 反向代理正向代理使用代理服务器访问网址。反向代理反向代理,对客户端代理无感知,此时代理服务器和目标服务器对外就是一个服务器1.3 负载均衡增加服务器的数量,将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务

2021-10-18 17:04:44 382 1

原创 服务器开放端口

服务器查看端口firewall-cmd --list-all服务器开放端口firewall-cmd --add-service开启8081端口firewall-cmd --add-port=8081/tcp --permanent重启防火墙firewall-cmd --reload

2021-10-18 16:33:28 282

原创 redis设计与实现-数据库篇

Redis 数据库1服务器中的数据库redis服务器将所有数据库都保存在服务器状态redisServer 结构的db数组中,db数组的每个项都是redisDb结构struct redisServer{ // 保存者服务器中的所有数据库 redisDb * db; // 服务器的数据库数量 int dbnum; }redis 服务器默认会创键16个数据库。2切换数据库每个redis 都有自己的目标数据库,每当客户端执行数据库写命令或者数据库读

2021-10-14 10:47:53 662

原创 万字总结 !!redis数据结构与对象

文章目录前言1 简单字符串1.2 sds与c字符串的区别1.2.1 常数复杂度获取字符串长度1.2.2 杜绝缓冲区溢出1.2.3 减少内存重分配现象1.2.4 二进制安全1.3 总结2 链表3 字典3.2 哈希算法3.3 解决键冲突3.4 rehash3.5哈希表的扩展与收缩3.6 渐进式rehash4 跳跃表4.1 跳跃表的实现4.2 跳跃表节点4.3 重点5 整数集合5.1 整数集合的实现5.2 升级5.3 降级5.4 重点6压缩列表6.1 压缩列表的构成6.2 压缩列表节点的构成6.2.1 previ

2021-10-08 11:03:53 2552

原创 redis 列表的实现(压缩列表)

1压缩列表压缩列表是列表键和哈希键的底层实现,当一个列表键只包含少量列表项,并且每个列表项要么是小整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来实现。1.1 压缩列表的构成压缩列表是redis为了节约内存而开发的,是由一系列的特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或一个整数值。属性类型长度用途zlbytesuint32_t4字节记录整个压缩列表占用的内存字节数zltailu

2021-09-30 10:43:38 383

原创 redis 整数集合底层实现

1 整数集合整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合数量不多时,redis会使用整数键作为集合键的底层实现。1.1 整数集合的实现整数集合是redis用于保存数值的数据结构,可以保存类型 int16_t,int32_t,int64_t的整数值,并且保证集合中不会出现重复元素。typedef struct intset{ // 编码方式 uint32_t encoding; //集合中包含的元素数量 uint32_t length;

2021-09-29 15:16:42 109

原创 redis 跳跃表底层实现

1 跳跃表跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点。跳跃表实现了有序集合键(zset)。1.1 跳跃表的实现redis 跳跃表是由zskiplistNode,zskipList。zskiplistNode用于表示跳跃表节点,而zskiplist则用于保存跳跃表节点相关信息。header:指向跳跃表的表头节点tail:指向跳跃表表尾节点level: 记录跳跃表,层数最大的节点层数length: 记录跳跃表的长度,也就是跳跃

2021-09-29 11:00:34 180

原创 redis 底层哈希表结构

1 字典字典是符号表,是一种用于保存键值对的抽象数据结构。字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点保存了字典中的一个键值对。哈希表的实现typedef struct dictht{ //哈希表数组redis设计与实现 dictEntry **table; //哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 unsigned long sizemask;

2021-09-26 09:01:16 152

原创 redis 链表结构

链表链表提供了高效的节点重排能力,以及顺序性的节点访问方式。redis 链表实现typedef struct list{ //表头指针 listNode *head; //表尾指针 listNode *tail; //链表所包含的节点数量 unsigned long len; //节点值 复制函数 void *(*dup) (void *ptr); //节点值 释放函数 void (*free)(void *ptr);

2021-09-24 12:12:34 135

原创 redis 简单动态字符串(SDS)

1 简单字符串redis 自己构建了一种名为简单动态字符串sds的抽象类型,并将sds用作redis的默认字符串类型。set msg "hello"键值对的键是字符串对象,实现是保存字符串“msg”的sds键值的值是字符串对象,是保存字符串“hello”的msgSDS的定义struct sdshdr{ //记录已使用的字节的数量 int len; // 记录数组中未使用的字节数量 int free; //字节数组,用于保存字符串 char b

2021-09-24 11:25:47 184

原创 spring boot配置redis

springboot 集成redismaven引入redis,以及工具类 <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dep

2021-09-01 22:50:01 1232

原创 redis 入门学习(基本命令)

文章目录关系性数据库与非关系型数据库cap理论Redis 与Mysql区别Redis数据结构redis 字符串命令redis 链表命令redis集合命令(set)redis散列(hash)redis 有序集合(zset)关系性数据库与非关系型数据库关系型数据库指采用了关系模型来组织数据的数据库关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。关系:一张二维表,关系名就是表名元组:二维表中的一行,在数据库中被称为记录属性:二维表中的一列,在数据库

2021-08-30 14:28:42 141

原创 http知识点

http 报文首部http协议的请求和响应报文中必定包含http首部http请求报文由方法,uri,http版本,http首部字段组成http响应报文由状态码,http版本,http首部字段首部字段使用首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言,认证信息等内容General Header Fields(通用首部字段)​ 请求报文和响应报文两方都会使用的首部cache-controller控制缓存的行为Date创建报文的日期T

2021-08-29 15:46:43 61

原创 spring boot参数绑定以及data类型时间处理

##1 参数的绑定1.1 请求参数的绑定默认绑定行为根据名称匹配原则进行的数据绑定,当请求中的参数名与方法参数名一致时,相应的参数值将被绑定到对应的方法参数上。http://localhost:8080/t1?age=18&name=wfg @RequestMapping("/t1") public String t1(int age,String name){ return name+"年龄为:"+age; }除了可以基于注解定义多个简单参数外,

2021-08-19 20:18:14 1135

原创 spring mvc流程分析二

文章目录1 概述1.2 文件上传与MultipartResolver1.3 Handler与HandlerAdaptor1.4 框架拦截流程与HandleInterInteceptor1.5 异常处理与HandleExceptionResolver1.6 国际视图与localResolver1.7 主题与ThemeResolver1 概述MultipartResolver位于HandlerMapping之前,用于文件上传的请求HandlerInterceptor将对处理流程进行拦截,拦截的

2021-08-18 15:35:15 284

原创 docker安装mysql 5.7并进行挂载配置

docker安装mysql 5.7docker pull mysql:5.7 创建挂载文件sudo mkdir -p /docker/mysql/{logs,conf,data}注意:需要复制之前的my.cnf放到conf下面查看docker中mysql 5.7 配置文件所在位置https://hub.docker.com/_/mysql从该文档中可以了解到,mysql的默认配置为/etc/mysql/my.cnf,该文件中包含了一个额外的数据目录/etc/mysql/conf.d 或

2021-08-16 20:38:31 948

原创 表单处理流程

文章目录1 概述2.1 表单显示阶段2.2 处理表单提交阶段的流程分析1 概述将表单处理流程进行划分为,“表单显示阶段”和“处理表单提交阶段”2.1 表单显示阶段创建或者获取表单对应的数据对象(command)初始化DataBinder初始化DataBinder进行将请求参数绑定到command对象执行数据绑定处理表单显示command对象中面向表单的各个字段与表单中的字段形成双向的绑定关系。2.2 处理表单提交阶段的流程分析获取绑定的目标对象初始化Dat

2021-08-16 17:58:02 934

原创 spring mvc流程分析

文章目录1 概述2 spring mvc 流程2.1 HandleMapping(web请求处理协调)2.2Controller(web请求的具体处理者)2.3 viewResolver和view2.4 流程图3 HandleMapping4 controller4.1 数据绑定4.2 数据验证5 ModelAndView5.1 视图定位器 viewResolver5.2 view1 概述在web层,在框架的控制器实现方面,spring mvc对请求处理期间涉及的各种关注点进行了分离。Handle

2021-08-16 17:53:40 170

原创 spring aop 方法嵌套调用 问题解决

1 问题出现//t1 调用t3 方法 public void t1(String name){ System.out.println("t1你好!"+name); // 调用方法t3 t3(name); } public void t3(String name){ System.out.println("t3你好!"+name); }拦截器 // 拦截t1 @Before("e2()") public void a5(Joi

2021-08-13 17:38:20 785

原创 基于注解形式的spring Aop 解析

文章目录1 概述1.2 织入2 aspectj 形式的Poincut2.1 pointcut表达式的标志服2.1.1 execution2.1.2 within2.1.3 this和target2.1.4 @target与@within2.1.5 @annotation2.1.6 bean2.2 aspectj 形式的advice1 概述加上Aspect注解,然后aspect中可以定义多个Pointcut以及多个advice,使用Pointcut注解指定Pointcut定义,通过around指定那

2021-08-13 15:59:07 80

原创 spring aop 概念实现

文章目录1 Spring Aop 概念实体1.1 joinpoint1.2 Pointcut1.2.1 classFilter1.2.2 MethodMatcher1.2.3 常见的Pointcut2 Advice2.1 per-class的advice2.1.1 Before Advice2.1.2 ThrowsAdvice2.1.3 AfterReturningAdvice2.1.4 Around Advice2.2 per-instance的advice2.2.1 Introduction3 Aspe

2021-08-09 18:09:47 318

原创 spring aop 前置知识(Aop概念与动态代理)

文章目录1 AOP概述1.1 aop的实现1.2 java Aop 实现机制1.3 Aop 概念1.3.1 Joinpoint1.3.2 Pointcut1.3.3 Advice1.3.4 Aspect1.3.5 织入和织入器2 Spring Aop 实现机制2.1 代理模式2.2 jdk动态代理2.3 cglib动态字节码1 AOP概述Aop 引入了Aspect概念,用来以模块化的形式对系统中的横切关注点进行封装。Aspect相对于Aop,就相当于Class对于OOP(面向对象)。1.1 aop的

2021-08-06 14:35:44 329

原创 ApplcationContext 功能解析

文章目录1概述2 统一资源加载策略2.1 Resource2.2 ResourceLoader2.2.1 DefaultResourceLoader2.2.2 FileSystemResourceLoader2.2.3 ResourcePatternResolver2.3 applicationcontext 与 resource2.3.1 ResourceLoader类型的注入3 国际化信息支持(l18n)3.1 MessageSource与Applicationcontext4 事件发布4.1 自定义事

2021-08-05 16:09:23 795

原创 spring ioc容器与bean流程

文章目录1 概述1.1 容器启动阶段1.2 实例化阶段1.3 容器扩展机制1.4 常用的BeanFactoryPostProcessor1.4.1 PropertyPlaceholderConfigurer1.4.2 PropertyOverrideConfigurer1.4.3 CustomEditorConfigurer1.5 bean的流程1.5.1 BeanWrapper1.5.2 Aware接口1.5.3 BeanPostProcessor1.5.4 BeanPostProcessor 自定义注解

2021-08-03 17:45:14 202

原创 spring xml 常用配置解析

文章目录1 Beans概述2 Bean 概述2.1 Bean构造注入方式2.1.1 构造方法注入2.1.2 setter方式的注入2.2 property和constructor-arg常用配置项2.2.1 value2.2.2 ref2.2.3 内部bean2.2.4 list2.2.5 set2.2.6 map2.2.7 props2.2.9 2.3 autowire属性2.4 parent属性2.5 scope属性2.5.1 singleton2.5.2 prototype2.5.3 request

2021-08-02 09:07:17 1895

原创 spring ioc BeanFactory对象绑定的几种方式

文章目录1 概述1.1 BeanFactory1.2 ApplicationContext1.3 Beanfactory的流程1.4 BeanFactory的对象注册与依赖绑定1.4.1 直接编码方式1.4.2 xml配置文件方式1.4.3 注解方式1 概述spring ioc容器与ioc service provider所提供的服务之间存在一定的交集。spring 提供了两种容器的类型:BeanFactory和ApplicationContext1.1 BeanFactorybeanfacto

2021-07-29 17:47:11 122

原创 ioc与 ioc service provider概述

文章目录1 ioc概述1.2 理念1.3 注入方式1.3.1 构造方法注入1.3.2 setter 方法注入1.3.3 接口注入1.3.4 三种方式的比较2 ioc service provider概述2.1 ioc service provider的职责2.2 管理对象之间的关系2.2.1 直接编码方式2.2.2 配置文件方式1 ioc概述ioc控制反转又称依赖注入。是一种可以帮助我们解耦各业务对象间依赖关系的对象绑定方式1.2 理念public class A { private B

2021-07-28 17:33:56 203

原创 msyql 主从复制

文章目录1 复制的基本原理2 复制的基本原则3 一主一从配置3.1 my.ini 配置文件的修改3.2 从机修改my.cnf文件3.3 重启mysql且都关闭防火墙3.4 在主机上建立账户并授权slava3.5 在从机上配置需要复制的主机3.6 启动从服务器复制功能3.7 停从机1 复制的基本原理slave会从master读取binlog来进行数据同步具体步骤:master 将改变记录到二进制日志(binlog),这些记录的过程叫做二进制日志事件,binary log eventsslav

2021-07-28 08:59:27 54

原创 mysql 锁

文章目录1 概述1.1 锁的分类2 表锁(偏读)2.2 表锁的使用2.3 表锁读锁的权限2.4 表锁写锁的权限3 行锁4 间隙锁5 怎样锁定一行6 行锁的分析1 概述锁是计算机协调多个进程或线程并发访问某一个资源的机制,在数据库中,除传统的计算资源(cpu,ram,io)的争用外,数据也是许多用户共享的资源,为了保证数据并发访问的一致性,有效性。锁冲突也是影响数据库并发访问性能的一个重要因素1.1 锁的分类从对数据操作的类型读锁针对同一份数据,多个读操作可以同时进行而不会互相影响写锁

2021-07-25 21:53:16 181 1

原创 mysql 查询分析(慢查询日志,show profile)

文章目录1慢查询日志1.1 查看慢查询日志1.2 设置最大查询时间1.3 查看当前系统中有多少条慢查询记录1.4 日志分析工具 mysqldumpslow2 批量插入数据脚本3 show profile4 全局查询日志1慢查询日志mysql 的慢查询日志是mysql提供的一种日志记录,用于记录在mysql 中响应时间超过阈值的语句,具体指运行时间超过long_query_time的sql具体运行时间超过long_query_time值的sql,则会被记录到慢查询日志中。long_query_t

2021-07-25 15:57:53 319

原创 mysql 事务与隔离级别及实现

文章目录1 事务概述2 隔离性概述3 事务隔离的实现4 mvcc4.1 mcvv的实现1 事务概述事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在mysql中事务支持是在引擎层实现的。(myisam并不支持事务)一个运行良好的事务必须具备acid原子性一个事务必须被视为不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分一致性数据库总是从一个一致性的状态转换到另外一个一致性状态一致性是基础,也是最终目的

2021-07-24 20:50:41 138

原创 mysql 索引分类学习笔记

文章目录1 B- tree索引2 B+ tree3 hash 索引3.1 创建自定义伪hash索引4 聚簇索引5 非聚簇索引6 innodb和myisam对比7 覆盖索引1 B- tree索引其索引是从索引的根节点开始进行访问搜索,根节点的槽中存放了指向子节点的指针·,存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层节点,这些指针实际上定义了子节点页中值的上限和下限。叶子节点的指针指向的是被索引的数据,而不是其它的节点页我们描述一颗b数时需要指定它的阶数,阶数表

2021-07-24 17:37:56 72

空空如也

空空如也

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

TA关注的人

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