自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring 代理搭建分布式锁组件

实习的时候在公司看代码,看到了一个使用 Spring 的代理和 SPI 机制等做的一个分布式锁组件,觉得很有意思该组件的主要作用就是通过注解来实现分布式锁,并使用SPI来自定义分布式锁的具体逻辑实现。

2023-12-27 17:04:44 369

原创 SpEL 的使用

之前有个需求里需要根据用户的账号类型对账号的值执行不同的校验逻辑,当时想试着使用自定义校验注解实现,但是由于注解中的属性赋值不能是变量,所以无法动态获取实体类的状态类型,现在学了SpEL,可以使用SpEL的方式来实现该功能了。注解来管理分布式锁,而锁key则是根据加锁对象类型的不同而有不同取值,但是由于注解的属性值只能是常量,不能直接等于成成员变量的值,这时候使用SpEL可以解决这问题。在这个例子中,他会在代理解析过程中调用被代理方法的第一个参数的指定方法,即。可以看到,再这个例子中,表达式为。

2023-12-26 10:27:36 816 1

原创 Redis多机数据库实现

为《Redis设计与实现》笔记。

2023-09-08 13:45:03 403

原创 Seata 笔记

分布式系统不可能同时满足这三个指标,最多满足两个。

2023-09-04 19:01:10 218

原创 手写spring笔记

定义类匹配类,用于切点找到给定的接口和目标类,提供了判断切入点是否应用在给定的接口或目标类中的方法:方法匹配类,找到表达式范围内匹配下的目标类和方法,提供了判断给定的方法是否匹配表达式的方法Pointcut:切入点接口,定义用于获取的两个类AopProxy:代理接口,用于获取代理类使用了JDK和AspectJ两种方式实现了上述接口,并通过工厂类来对两种实现的选择进行了封装。

2023-08-17 22:24:04 211

原创 RPC实现笔记

的简单笔记。

2023-08-17 14:32:49 57

原创 Java SPI加载机制

使用SPI可以实现框架设计者和具体使用者间的解耦,在进行系统架构设计时,只关注抽象的部分,而框架的使用者则可以根据自己的需求进行自定义的扩展,其体现的是数据模式中的桥接模式,抽象部分与实现部分分离。下创建以该接口命名的文件,并在该接口中写下实现类的全包名,SPI的加载机制则会加载该文件中类名对应的类。在运行时,使用ADK自带的ServiceLoader进行加载,即可读取文件中的类名并加载好对应的对象。在SPI中,框架提供一整套接口,使用者实现这些接口后,在classpath的目录。然后是这个接口的实现类。

2023-08-16 18:16:54 181

原创 Redis单机数据库实现

为《Redis设计与实现》笔记。

2023-05-04 15:39:30 130

原创 Redis中的数据结构

为《Redis设计与实现》笔记。

2023-04-30 17:07:29 59

原创 数据结构之跳表

跳表维护一个多层次的有序链表,每个链表都是下一层链表的子集相比于红黑树,跳表在范围查找方面有着更好的支持。

2023-04-30 14:12:11 113

原创 WebServer笔记

学习开源项目WebServer的笔记。

2023-04-18 18:58:42 177

原创 C++ STL笔记

侯捷的视频课程的一些笔记。

2023-04-13 15:45:18 61

原创 MySQL存储过程和函数

创建语法:

2023-04-09 22:32:53 38

原创 C++技巧之CRTP

CRTP(Curiously Recurring Template Pattern),一种C++编程技巧技巧,其将派生类作为模板传递给基类,能够实现静态多态等功能。

2023-04-09 22:28:47 288

原创 侵入式与非侵入式链表

非侵入式链表中数据保存在节点中,结点链接域存的是下一个结点的内存首地址。

2023-04-09 22:27:11 592

原创 linux-c进程笔记

管道是一个字节流,使用管道时不存在消息或消息边界的概念,从管道数据的进程可以读取任意大小的数据块,而不管管道中数据块的大小时多少。多个信号的组合,许多信号相关的系统调用都需要能表示一组不同的信号,多个信号可使用一个称之为信号集的数据结构来表示,其数据类型为。每当出现孤儿进程时,内核会把孤儿进程的父进程设置为init,在孤儿进程运行结束时,init会回收其资源。通过管道的数据时顺序的,先进先出,传递方向是单向的,一端写入一端写出,为半双工通信。对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号,如。

2023-03-28 20:47:09 45

原创 C++异常

C++ Primer Plus》笔记abort():调用该函数,输出“abnormal program termination”,然后程序终止。

2023-03-28 19:22:44 164

原创 设计模式笔记

装饰器模式不是要改变装饰对象的接口, 而是在保留原有的接口的情况下, 扩展原有接口的功能, 或者改变原有对象的处理方法而提升性能。用一个中介者对象封装一系列的对象交互, 中介者使各对象不需要显示地相互作用, 从而使耦合松散, 而且可以独立地改变它们之间的交互。通过代理对象来访问目标对象, 可以在目标对象实现的基础上, 增强额外的功能操作, 即扩展目标对象的功能。解释器模式提供了评估语言的语法或表达式的方式。将某个类的接口转化为用户期望的另一个接口表示, 让原本接口不匹配而不能一起工作的两个类可以协同工作。

2023-03-16 22:02:46 44

原创 C++11新特性笔记

C++ Primer Plus》笔记。

2023-03-15 22:10:02 45

原创 C++模板笔记

. . };// 实例化对象。

2023-03-15 21:35:40 34

原创 C++类继承笔记

C++ Primer Plus》笔记。

2023-03-15 21:35:39 46

原创 贪心算法和拟阵

贪心算法和拟阵动态规划能够很好的帮助我们解决很多的最优解问题,但是对于许多的最优解问题,使用动态规划进行求解会显得问题过于复杂,造成复杂度过高。贪心算法和动态规划一样是用于求解最优解问题的方法,它期望通过所做的局部最优解选择来产生一个全局最优解。活动选择问题有一系列相互竞争的活动,他们都需要占用同一资源,这意味着在任意时刻都不能够出现两个活动在同时进行,那么如何进行调度,能够在一段时间内进行的活动数目最大呢?在这里,我们定义活动集合为A=a1,a2,...,anA={a_1,a_2,...,a_n}

2021-07-05 16:47:14 589

原创 动态规划问题

动态规划动态规划是一种求最优解的算法思想,它同分治法类似,都是讲问题划分为若干个独立的子问题,解决完子问题之后就能得到该问题的解。斐波拉契数列斐波拉契是一个常见的数列,其中的每一个数都是又它的前两个数相加的出来的,其公式如下:f(x)={1,x=0&x=1f(x−1)+f(x−2),x>=2f(x) = \begin{cases}1, & x=0\&x=1 \\f(x-1)+f(x-2), & x>=2\end{cases}f(x)={1,f(x

2021-07-04 17:53:21 224

原创 Java注解和反射简单实现IoC

Java注解和反射简单实现IoC之前学spring boot时, 就一直对依赖注入的实现很好奇, 当时没有学会注解和反射, 大学Java教材只到1.7的版本, 都不知道注解是什么玩意儿。之后学了注解和反射后, 就想着自己实现一个用注解自动装配的样例当作练习。IoC我们传统的方式创建对象是通过new来主动创建对象的, 但这样会造成代码耦合度过高: 假设我们有100个地方使用了A接口的某个实现类B, 代码经过版本跟新后我们废弃掉了实现类B, 而改用新的实现类C, 那么我们怎么改呢? 用这种传统的方式我们就

2021-03-23 18:40:29 380

原创 Java NIO

Java NIOJava BIOJava的BIO中的B值得是blocking,意思是阻塞。BIO是同步非阻塞的IO模型,当线程连接客户端时,若客户端没有发送新的数据,该线程就会阻塞,无法进行其他操作。因此一个服务端的线程只能处理一个客户端的连接,也就是说每出现一个客户端连接时,服务端就需要新建一个线程来处理该连接,当连接数过多时,就会造成线程过多使得资源占用过大的情况。BIO测试代码: public static void main(String[] args) throws IOExcep

2021-03-20 17:33:57 64

原创 springboot使用shiro

shiroshiro 核心组件名称含义usernamePasswordshiro用来封装用户登陆信息,使用用户的登录信息来创建TokenSecurityManagershiro的核心部分,负责安全认证和授权subjectshiro的一个抽象概念,包含了用户信息authenticationInfo用户角色信息集合,认证是使用authorizationInfo角色权限信息集合,授权时使用DefaultWebSecurityDMmanager安全管

2021-01-08 16:42:00 125

原创 Haskell笔记 数据类型

Haskell笔记 数据类型Haskell笔记 数据类型查看数据类型常见数据类型类型变量类类型(typeclass)Enum类类型Bounded类型类Num类型类Floatle类型类Integeral类型类Haskell笔记 数据类型查看数据类型:: 读作"它的类型为":t 'a' -- 'a' :: Char:t 123 -- 123 :: Num p => p:t ...

2020-04-12 17:33:03 315

原创 Haskell笔记 列表和元组

Haskell笔记 列表和元组list操作列表推导式元组(序对)list操作-- 定义列表let list = [1, 2, 3, 4, 5]-- 在列表末尾添加元素1 : list-- 拼接列表[1, 2, 3] ++ [4, 5, 6]-- 下标访问, 相当于C语言中的list[2]list !! 2-- 嵌套列表let list2 = [[1, 2, 3], [4, 5...

2020-03-31 22:40:09 829

原创 Lombok使用

Lombok使用作用导入配置使用@Data@Getter@setter@AllArgsConstructor@NoArgsConstructor@RequiredArgsConstructor@[email protected]@EqualsAndHashCode.Include@Value@Log@FieldDefaults@Builder@S...

2020-02-21 20:46:22 96

原创 Spring Boot 操作 MongoDB

Spring Boot 操作 MongoDBmaven中导包配置文件代码书写测试Spring Boot的宗旨是习惯由于配置, 其在导包, 配置等方面极大地简化了我们需要的操作, 所以我们通过简单的配置, 也能轻松的实现对MongoDB的操作maven中导包在这里, 我们使用maven来进行管理. 我们在maven配置pom.xml中加入如下代码: <dependency...

2020-02-08 22:10:20 97

原创 广度优先遍历和深度优先遍历

广度优先遍历和深度优先遍历广度优先遍历图解代码深度优先遍历图解广度优先遍历广度优先遍历是图的一种遍历方式, 它的思想就是遍历这个点相邻的所有的点, 再对这些点进行广度优先遍历. 如下图所示图解首先我们从A点开始遍历, 然后遍历所有和A相邻的点F和点G:然后对F和点G进行遍历进行遍历, 得到点E, H, K和B:然后再继续, 知道所有的点都遍历完成:代码首先, 我们先定义图Gr...

2020-01-04 17:16:28 1092

原创 java8 stream流操作

java8 stream流操作stream 流内部迭代Stream 常用方法filter, map, collectmatch查找元素流的扁平化处理reduceStream转换IntStream, DoubleStreamStream分类打包本书类容来自O’Reilly的《Java8 实战》一书Stream流操作是java8中的一个重要的部分, 他让我们对集合类的操作更加的简洁高效strea...

2019-12-28 17:17:15 161

原创 java8的方法引用和函数复合

java8的方法引用和函数复合方法引用谓词复合函数复合方法引用我们知道, 在Java8中加入了函数式编程, 有了Lambda表达式, 是的我们的代码更加清晰易懂, 但是有时候我们或出现下面这种Lambda表达式fun((String str) -> System.out.pringln(str));实际上, 我们的这个表达式只是调用了另一个方法而已, 而且函数描述符也是一样的(参数...

2019-12-22 11:11:51 426

原创 Java Lambda表达式

Java Lambda表达式匿名类和匿名函数Lambda表达式函数描述符Lambda表达式应用最近在学Java8的知识, 发现哪怕是自己会的Java基础还是远远不够的匿名类和匿名函数我们知道, Java是一门纯面向对象的语言, 对象是第一等公民, 意思是对象可以作为参数传递. 在很多语言中, 有一个概念, 叫做函数式编程, 函数也是一等公民, 也就是说函数也可以像对象啊一样作为参数传递, 这...

2019-12-20 22:30:26 57

原创 散列表详解

散列表详解哈希函数和哈希值哈希碰撞拉链法线性探测法哈希函数和哈希值如果我们存储一些数据(以键值对的形式存储, 键为数字), 怎样能够让我们的查询速度达到最快呢? 我们如果用顺序查找, 那时间复杂度就是O(n)O(n)O(n), 如果用二分查找或者二叉排序树之类的, 时间复杂度就是O(logn)O(logn)O(logn), 那么我们在激进一点, 能不能是的查找的复杂度为O(1)O(1)O(1)...

2019-11-17 12:59:54 2352 1

原创 红黑树详解

红黑树详解二叉查找树2-3查找树红黑树旋转染色插入删除二叉查找树此为《算法 第四版》笔记二叉查找树是一颗有序的二叉树, 它的每一个结点的键都大于它左子树的根结点, 小于它右子树的根结点所以我们在查找某个结点时可以向二分查找一样, 递归执行, 我们查找的键的值若大于根结点, 则访问它的右子树, 若小于根结点, 则访问它的左子树, 这样查找的效率和二分查找一样, 平均只需要O(logn)O(...

2019-11-14 16:22:15 133

原创 神经网络中的神经元

神经网络中的神经元神经元数学模型神经元数学模型人工神经网络是一个用户大量简单处理单元经广泛链接而成的人工网络, 是对人脑的神经网络的抽象和模拟. 我们知道, 人脑的神经系统的基本的单位是神经元, 所以建立人工神经网络的首先要做的是对神经元的抽象, 建立神经元的数学模型.早在1943年, 神经元的数学模型被提出, 之后又陆陆续续提出了上百种神经元模型, 下面是一种常用的神经元模型:在这张图...

2019-11-07 11:19:37 5448 1

空空如也

空空如也

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

TA关注的人

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