- 博客(43)
- 收藏
- 关注
原创 行为型之观察者模式
观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。本篇文章就通过分析Spring框架中事件机制的源码学习观察者模式
2023-12-02 01:19:26
1241
1
原创 结构型之装饰器模式(Decrator Pattern)
装饰器模式用于对原有的实现类进行功能增强而不需要改变原有类的实现,当继承结构比较复杂并且有类似的需求时可以考虑使用装饰器模式。虽然刚开始指出了一般装饰器模式的实现,但是在具体模式实现时并没有那么死板,装饰器也是可以进行嵌套的,比如InflaterInputStream,下一次看一些别人的源代码时能够识别出来就可,这样也不会因为源代码的复杂代码结构而望而却步。
2023-11-23 16:32:37
981
原创 Redis之zset在异步队列上的应用
本篇文章记录了使用zset实现一个简单异步队列的过程,然后对于第一次实现存在的一个问题,使用lua或者锁的方式优化网络IO。使用锁的方式会降低程序的并发度,所以一般使用lua脚本的方式来实现。
2023-10-21 00:56:39
752
原创 Java集合框架之Vector源码分析
Java集合体系中的一个线性集合,底层原理其实和ArrayList基本一致。ArrayList和Vector又什么区别?Vector是线程安全的扩容机制不同,ArrayList通常增长原本容量的0.5倍,vector增长1倍本篇文章就通过这个面试题,结合Vector的源码验证一下通过翻看Vector的源码,发现Vector对外提供的对集合进行操作的函数都是通过synchronized关键字进行加锁的。这也就是为啥说Vector是线程安全的。
2023-10-16 23:28:28
200
原创 Java集合框架之ArrayList源码分析
什么是ArrayList?ArrayList底层数据结构是怎么实现的?作为一个容器,分析增删改查的过程ArrayList的扩容机制通过简单分析ArrayList的源码,学习了Java中ArrayList的一些通用操作,增删改查以及扩容,当然,翻看源码还可以发现,ArrayList还提供了很多批量操作的API,其逻辑也不复杂。ArrayList内部包含了一个实现了Iterator接口的内部类,用于遍历操作,但是Java的集合框架中,迭代器是一个通用的操作接口,后面再独立拿出来进行分析。
2023-10-15 22:07:24
326
原创 Go中varint压缩编码原理分析
varint是一种将整数编码为变长字节的压缩编码算法,本篇文章就是分析该编码算法的原理以及看一看go中的源码实现。计算机中,整型数据是按照补码进行存储的,varint编码的原理就是将整数按照7bits划分,在最高位设置一个有效位表示后面是否还有该整数的部分,当最高位为1时表示后面还有该数据的字节,为0表示该字节是最后一个字节。对于小的数字使用更好的字节进行编码对于大的数字使用更多的字节进行编码。
2023-10-14 01:08:25
709
原创 Redis-简单动态字符串(SDS)
以上代码来自Redis的源码,其中包含了redis关于sds字符串编码的定义。从源码中可以看出,redis定义了5种sds的编码,但是hisdshdr5被声明是没有被使用的,它的定义个后面的四种也略显区别。根据注释的描述,该结构只是为了展示 5 型sds的布局结构,flags的低3位表示类型,高5位表示字符串的长度。重点看后面的几种定义。各个字段的含义len 表示实际字符串的长度,比如我们存入一个"HELLO",len = 5。
2023-08-06 23:21:14
243
原创 MySQL-索引基础
索引,在MySQL中也称为键(key),是存储引擎用于快速查找记录的一种数据结构。本篇文章通过5个问题来简单了解索引是什么,为什么会有索引,使用索引有哪些优势。对于文章中提到的一些概念,后面会随着学习的深入,逐步涉及,比如学习B-Tree(实际上InnoDB引擎使用的B+树,因为B树将实际的记录存到到节点中,这会占用更多的内存,另外B树是多路平衡查找树,过多平衡树的操作也会带来更多的开销。希望你能从本篇文章学习到一些新的东西。
2023-08-05 22:05:55
112
原创 Go中在解析yaml配置文件时候遇到的问题
在yaml配置文件中,port是一个端口号,我在Mysql的结构体定义中是一个string,所以出现了此问题。
2023-06-19 10:38:24
406
原创 GRPC入门(Go语言实现)
以前的传统可开发采用的单体架构,就是所有的服务都部署在同一台机器上,当用户来进行访问时,不管用户需要哪一个服务,请求都要到这台机器上。当用户增多时,虽然可以通过Nginx做负载均衡,通过在多台机器上部署相同的服务,但是仍然避免不了当一台机器上的一个服务出现问题,那么该机器上的其他服务都将不可用的事实。
2023-06-10 12:40:48
1227
原创 探索slice原理
本篇博客从源码的角度分析了slice的底层原理,为了熟悉slice,最终使用slice 实现了一个简单的线性表demo,希望你可以从中获取到新的东西。
2023-06-01 21:16:44
125
原创 UVA442 Matrix Chain Multiplication
UVA442 矩阵链乘Matrix Chain Multiplication
2022-12-31 19:39:21
230
原创 前缀函数、KMP算法的实现
文章分享了字符串匹配相关的算法,前缀函数,以及将前缀函数的信息利用到极致的KMP算法,文章代码使用java来实现。
2022-10-29 23:59:24
605
1
原创 java之正则表达式的使用学习笔记(完整)
java之正则表达式的使用正则表达式匹配规则 正则表达式的匹配规则就是从左到右按规则匹配 匹配任意字符// 在正则表达式中,'.'表示匹配任意一个字符public class Regex{ public static void main(String[] argc){ String s = "cde"; boolean f = s.matches("c.e"); System.out.println(f); //true } }匹配数字//
2022-02-07 18:10:17
662
原创 java实现爬楼梯的最小费用(动态规划)
解题思路我们爬上第n级台阶所花费的最小费用即为从第n-1级台阶所花的费用加上cost[n-1],或者从第n-2级台阶所花费的最小费用加上cost[n-2],因此我们只需要一个长度为3的数组即可完成计算,有一点需要注意的地方是爬上最后一级台阶之后还要再爬一次才能到顶部,因此,在遍历cost数组时,最后一级台阶的费用也要使用,刚开始用了一个dp[n]的数组,后来经过优化,使用长度为3的数组即可解决问题,代码如下:代码class Solution { public int minCostClimbi
2022-01-17 15:05:59
604
原创 java实现斐波那契数列(递归和非递归)
基础知识:斐波那契数列的运算规则为F(0) = 0;F(1) = 1;当n>=2时,F(n) = F(n-1) + F(n-2);显然斐波那契数列具有递归的定义,下面用java递归实现当输入n时,返回F(n)的值:算法思路:首先判断当前n的值,当n=0时,返回0,当n=1时,返回1;否则返回f(n-1) + f(n-2)class Fib { public int fib(int n) { return f(n); } public int f(int
2022-01-15 23:16:02
1598
原创 java实现数据结构图论的广度优先和深度优先遍历算法(附源代码)
java实现数据结构图论的广度优先和深度优先遍历算法(附源代码)广度优先遍历和深度优先遍历是图论中两个比较重要的遍历算法,下面介绍这两种遍历算法,并用java代码进行实现:一、深度优先遍历深度优先遍历有点类似于树中的先序遍历,顺着一条线依次找到相应的节点,此时为了方便,我们往往需要一个额外的标志数组进行标记我们已经访问过得节点算法步骤:(1)首先访问出发点V。(2)然后依次从V出发搜索V的每个邻接点W,若W未曾访问过,则以W为新的出发点继续进行深度优先搜索遍历,直至图中所有和源点V有路径相通的顶
2022-01-12 16:54:35
2763
原创 C语言第三方库---Melon安装(Linux)
C语言第三方库—Melon安装(Linux)Melon库是C语言开发时常用的一个第三方库,内部包含了一些常用的数据结构和算法,因为C语言标准库中没有像C++或者Java里的一些强大的库,最近想深入学习更多C语言,下面也是自己学习记录的过程 :这里使用的是Ubuntu20.04,首先你的Linux需要先安装好git,make等工具,既然你要安装第三方库,这里默认你已经安装过一些必要的软件了。使用git命从GitHub下载melon:git clone https://github.com/water-
2021-12-07 12:22:20
2502
1
原创 C语言实现逆序打印叶子节点路径
C语言实现逆序打印节点路径实现的功能,输入一个广义表和一个数据,实现打印目标数据的逆序路径#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define LEFT 1#define RIGHT 2 //树节点 typedef struct node { char data; struct node *left, *right;} BT;//栈结构 typedef stru
2021-11-26 21:32:43
640
移动应用开发小作业,实现读取天气数据并显示
2023-05-31
数据结构课程设计,算法可视化
2023-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人