- 博客(252)
- 资源 (12)
- 收藏
- 关注
原创 k8s常用命令(持续更新中)
调整deploy数量(pod扩容)可以在控制台查看pod的日志。删除pod(可以用来重启)获取configMap。获取configMap。查看configmap。
2025-04-01 19:43:10
218
原创 Spring源码导入idea时gradle构建慢问题
当我们将spring源码导入到idea进行构建的时候,spring采用的是gradle进行构建,默认下注在依赖是从。会特别慢,需要改为国内的镜像地址会加快速度。这样就从国内阿里云镜像下载,能够快很多。
2024-11-29 16:22:28
395
原创 Spring中实现动态数据源切换,基于AbstractRoutingDataSource
Spring中动态数据源切换,AbstractRoutingDataSource
2024-11-27 21:28:26
570
1
原创 redis源码浅析-hash表实现
redis中的hash扩容采用的是一种渐进式hash的策略, 我们都知道,redis执行线程是单线程,如果一个hash表数据量比较大,那么扩容就比较耗费时间,redis采取是的一种渐进式hash策略,采用。可以看到,在向hash桶中进行插入的时候,处于同一个hash桶上的链表,新插入的元素在在链表的头部进行插入的。hash表在初始创建的时候,就是建了一个空的dict ,在添加元素的时候,去进行实际节点的新增。hash表的查找相对来说比较简单,就是通过key的hash找到对应的桶上的链表,然后遍历即可。
2023-06-05 19:40:11
318
原创 redis中quicklist浅析
前面我们分析了redis中的ziplist相关实现,在结构上一个链表结构,但是在底层用的是一整块内存,在数据量较小的时候,其查找和分配都比较快,但是当数据量比较大的时候,查找和分配就比较慢了。quicklist底层是基于ziplist的,其中。表示的是quicklist中所有的ziplist的。默认情况下,quicklist的容量大小为。数量之和,而len表示的。因此,redis提供了。
2023-05-31 19:09:44
379
原创 redis源码浅析-ziplist实现
redis中的list是有多种实现的,其中一种是ziplist,其介绍如下ziplist 是一个经过特殊编码的双向链表,旨在提高内存效率。 它存储字符串和整数值,其中整数被编码为实际整数而不是一系列字符。 它允许在 O(1) 时间内在列表的任一侧进行推送和弹出操作。 但是,由于每个操作都需要重新分配 ziplist 使用的内存,因此实际复杂性与 ziplist 使用的内存量有关。ziplist是一个双向链表结构,是一整块紧凑的内存块,当大小不足需要重新扩展,底层使用je_realloc进行扩展。t
2023-05-22 20:21:47
758
原创 elasticsearh中查询类型,term、match、match_all、multi_match、range、bool、boosting等
elasticsearch查询类型
2022-08-19 22:59:50
4401
原创 使用debezium、kafka-connect将postgres数据实时同步到kafka中,表topic重新路由
使用debezium和kafka-connect实现postgres数据库实时同步到kafka中
2022-08-10 16:03:11
3171
原创 从底层了解JVM的volatile实现,CPU Cache、缓存一致性MESI、Store BufferI、nvalidate Queue等知识
JAVA中volatile底层原理
2022-07-16 17:57:22
686
原创 java中String,StringBuilder,StringBuffer实现原理,优化
java中String,StringBuilder,StringBuffer实现原理
2022-06-28 18:35:44
468
原创 java中异步调用,Callable,Future,FutureTask,CompletableFuture如何使用
我们知道,在java中一般多线程编程时经常会使用Thread或者Runnable来进行自定义的线程运行逻辑,但是如果我们需要在一个线程运行结束时返回给另外一个线程结果,上面两个实现都不是很容易实现,一般可能需要另外的实现,比如通过一个临时变量共享。在java中,提供了Callable能够返回结果的线程方法调用。我们看一下下面这个实现: ExecutorService executor = Executors.newFixedThreadPool(2); Callable<Stri
2022-05-19 15:52:45
1245
原创 java中wait,notify,notifyAll,sleep方法的作用和区别
在进行多线程编程时,进程会遇到多线程之前的同步已经等待场景。在java中,Object类提供了wait、nofity、notifyAll用来进行线程间的同步。一般如果我们调用wait、nofity、notifyAll都是结合synchronized同步关键字来使用: new Thread(()->{ synchronized (monitor){ try { System.out.println("1
2022-05-17 19:26:42
398
原创 golang中指针,new和make函数作用
我们知道golang中的传递都是基于值传递,如果一个结构体比较大,这时候值传递需要复制的内容就比较多同时由于是基于值复制,耗费空间和时间,另外,基于值传递我们在调用的函数中对传入的参数进行修改,对于原值是没有任何影响的,也就是我们无法在函数中对传入的参数的原值进行修改因此golang中提供了指针,和c、c++中的指针的概念类似,这时候传递的是指针,也是值复制,但是复制的是指针(指针比较小),这样我们既能够快速的将参数传递过去,同事也能够对原值进行修改。需要注意的是,golang中存在另种内存模块,即我们
2022-05-13 15:28:07
557
原创 golang中生成随机数
golang中生成随机数可以使用rand提供的相关接口,但是需要注意的是,rand必须要指定一个种子,一般采用当前时间的纳秒。func New(src Source) *Rand { s64, _ := src.(Source64) return &Rand{src: src, s64: s64}}func NewSource(seed int64) Source { var rng rngSource rng.Seed(seed) return &rng}通过上述两
2022-05-12 14:11:53
1987
原创 golang中定时器实现,Ticker,Timer
在golang中,我们可以通过time包的Sleep、Ticker、Timer来实现定时效果。Sleep先看Sleep如何实现一个定时:func main() { var flag chan int go func() { for { time.Sleep(time.Duration(time.Second*5)) fmt.Println(time.Now().Format("2006-01-02 15:04:05")) } }() <-flag}Ticker
2022-05-11 17:02:30
946
原创 golang中日期操作,日期格式化,日期转换
golang中并没有像java一样提供类似yyyy-MM-dd HH:mm:ss格式的操作,而是将其定义为golang的诞生时间:2006-01-02 15:04:05 -0700 MST注意这在golang的日期格式化里不是一个具体日期,而是格式,这样如果我们需要格式化日期,可以如下操作timeNow := time.Now()fmt.Println("yyyy-MM-dd HH:mm:ss" ,timeNow.Format("2006-01-02 15:04:05"))// 打印: yyyy-
2022-05-11 14:53:28
4330
1
原创 golang中连接mysql数据库,操作数据库
golang中连接数据库需要首先下载对应数据库的客户端驱动,我们以mysql为例:首先下载mysql客户端驱动:go get github.com/go-sql-driver/mysql然后通过sql.Open获取一个数据库连接:url :="root:123456@tcp(127.0.01)/golang"con,err := sql.Open("mysql",url)接下来我们看看怎么操作数据库:package modelimport ( "database/sql" "f
2022-05-11 14:07:36
1722
原创 golang中内存管理、分配
我们知道传统C/C++编程,程序员是需要自己来手动管理内存的,一般通过malloc来申请内存,通过free、delete来释放内存,而这两个函数操作的对象一般都是指针。而对于高级语言(Java、Golang、Python等),程序员在编写代码时,则无需关系内存的申请和释放,能够从内存的管理中解脱出来。一般程序运行都有所谓的堆区和栈区。栈区是方法运行的区域,当调用一个方法的时候,该方法入栈,然后一些局部变量在栈上分配,当函数执行完之后,栈上对应函数空间出栈销毁。如果我们需要将函数执行过程中的一些数据返回,一
2022-05-06 17:42:38
2294
原创 golang中并发、gorutine
我们知道golang的一个重要特性就是能够支持极高的并发。而实现这个特性则是golang中的rorutine机制。在说goroutine之前,我们先说明几个概念:进程、线程、协程进程:程序运行的基本单位,一个运行的程序就是一个进程,进程之间相互隔离,拥有不同的内存空间,无法共享内存数据。线程:线程也可以说是轻量级的进程,一般一个程序(或者说一个进程)包含若干个线程,线程依赖于进程,一般进程是作为分配资源的基本单位,而把线程作为独立运行和调度基本单位。同一个进程下的不同线程拥有同一个内存空间,可以共享内存
2022-05-04 23:01:36
516
原创 golang中异常处理
程序在运行过程中如果出现了问题,可以通过抛出异常、捕获异常来进行异常的处理,在golang中,异常的接口为error:type error interface { Error() string}因此,只要一个结构体实现了Error() string方法,就是实现了error接口:type MyError struct {}func (err *MyError)Error() string{ return "this is MyError"}golang中可以通过panic来抛出异常
2022-05-03 17:27:17
2618
原创 golang中结构体
golang其实并不是一个完全意义上的面向对象语言,其实现面向对象的多态主要基于接口和结构体实现。在golang中结构体与c/c++中的结构体类似,用来定义复杂的数据类型,一般结构体定义如下:type StructName struct{ fieldName1 type1 fidldName2 type2 ...}需要注意的是:结构体的包名在同一个包内必须唯一,不能重复结构体的字段必须唯一,不能重复同类型的结构体字段可以放在一行定义一般结构体实例化可以通过如下方
2022-05-02 23:01:32
1612
原创 golang中接口、继承
在面向对象编程中(OOP)接口定义对象的一系列行为,具体对象实现接口的行为。在golang中,接口就是一组方法签名,如果某个类型实现了该接口的全部方法,这个类型就实现了该接口,是该接口的实现。在golang中接口定义示例如下:type MyInterface interface { SayHello() GetAge() int}这样我们就定义了一个MyInterface类型的接口,如果我们想要实现这个接口,只要一个类型实现MyInterface的两个方法:SayHello、GetAge:t
2022-05-01 23:08:14
3004
原创 golang中函数与方法
函数是golang中的`一等公民,可以作为普通变量、方法参数、方法返回值等,一般golang中函数定义如下:func name(arg1 type1,args2 type2)(result1 type1,result2 type2){ ....}也可以省略返回列表的结果名称:func name(arg1 type1,args2 type2) (type1,type2){ ....}如果返回参数只有一个,可以不用括号:func name(arg1 type1,args2 ty
2022-04-26 17:54:17
1717
原创 golang中条件、循环、控制语句
这个篇幅是学习golang入门记录,方便查找for循环for循环还是golang中的唯一循环语句,golang中没有while循环。for循环形式一:for i:=0;i<10;i++ { fmt.Println(i)}这是标准的for循环格式for循环形式二index := 0for index < 10 { fmt.Println(index) index ++}或者:index := 0for ;index < 10; { fmt.Pr
2022-04-26 17:38:04
933
原创 golang变量定义、数据类型、可见性
golang中主要基础数据类型如下:类型描述uint8无符号 1个字节8位整型 (0 到 255)uint16无符号 2字节16位整型 (0 到 65535)uint32无符号 4字节32位整型 (0 到 4294967295)uint64无符号 8字节64位整型 (0 到 18446744073709551615)int8有符号 1字节8位整型 (-128 到 127)int16有符号 2字节16位整型 (-32768 到 32767)
2022-04-26 17:15:08
1181
原创 Mysql中update select更新数据,insert ignore into
在mysql中我们可以通过使用另外一个表的数据来更新当前表数据:update test001 a INNER JOIN test002 b on a.id=b.idset a.name=b.name ,a.age=b.agewhere b.age > 30
2022-03-22 10:57:23
13986
1
原创 Postgres中通过update select来进行更新数据
在postgres中我们可以通过关联查询另外一张表来关联当前表的数据:update 待更新表 aset 待更新表_字段一 = b.字段一 ,待更新表_字段二 = b.字段二from 关联表 b where a.关联字段= b.关联字段例如:update test001 a set name= b.name,age=b.agefrom test002 b where a.id= b.id...
2022-03-22 10:07:54
11782
3
原创 数据结构之红黑树,2-3-4树,插入旋转调整
红黑树其实是由2-3树演变来的,如果想要理解红黑树,可以先看看2-3树2-3树插入逻辑:先找插入结点,若结点有空(即2-结点),则直接插入。如结点没空(即3-结点),则插入使其临时容纳这个元素,然后分裂此结点,把中间元素移到其父结点中。对父结点亦如此处理。(中键一直往上移,直到找到空位,在此过程中没有空位就先搞个临时的,再分裂。)2-3树插入算法的根本在于这些变换都是局部的:除了相关的结点和链接之外不必修改或者检查树的其他部分。每次变换中,变更的链接数量不会超过一个很小的常数。所有局部变换都不会影响整
2022-02-28 11:53:51
751
原创 java并发控制类之CountDownLatch、CyclicBarrier、Semaphore
java并发包中提供了CountDownLatch、CyclicBarrier、Semaphore这三个类可以来实现一些线程之间的状态同步。这三个本质上都是基于java并发包的AQS来实现的。CountDownLatch首先来看CountDownLatch,其可可以让一个线程等待其他线程都执行完之后才开始执行。其典型用法如下: CountDownLatch countDownLatch = new CountDownLatch(3); new Thread(new Runnable()
2022-02-23 14:50:43
384
mysql-5.6.46-leo.tar
2020-07-13
gcc-4.8.2.tar.gz包含依赖
2020-05-12
Posgresql主从流复制相关配置
2019-03-14
tomcat8开启apr需要相关的组件,包含jdk,apr,apr,util,tomcat8,openssl
2018-08-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人