- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 ZooKeeper基础
镜像用的是ubuntu14,可以替换成我们用的统一基础镜像,后续的升级版本或者新增的配置可以修改Dockerfile和启动脚本。当前用statefulset实现,使用的镜像启动脚本:https://github.com/kow3ns/kubernetes-zookeeper/blob/master/docker/scripts/start-zookeeper。Docker镜像:https://github.com/31z4/zookeeper-docker/tree/master/3.8.0。
2022-10-26 11:26:27
1033
1
原创 【Go】(十一)Go函数篇 -- 延迟调用defer
表达式(Expression) 必须是a function or a method call,不能是parenthesized(括号起来的),也defer是用于延迟执行defer后面的表达式,有三个场景会触发什么又是延迟执行呢?每次执行到defer的时候,不会直接执行实际的函数(Expression),而是保存起来(用栈保存的吗?),然后等到触发条件达成的时候,依次地执行,举个例子因此,defer适用于 关闭一些已经打开的资源,例如,,
2022-10-08 00:20:12
410
原创 【Go】(十)Go函数篇 -- 匿名函数和闭包
(一个可访问的存储位置,而不是固定的值);现在想创建三个临时目录,然后用完之后将这三个临时目录都删除。按下面这么写实际上只会删除最后一个目录。Q: 闭包函数是函数式编程语言的核心?需要设置一个中间变量,才能实现效果。由于循环变量的作用域的规则限制,
2022-10-07 18:00:28
343
原创 【Go】(九)Go函数篇 -- 函数的定义
函数从第一条语句开始执行,碰到return或者执行完最后一条语句,函数结束。Go都是值传递,无论是值变量还是指针地址变量,传递的是变量的拷贝副本。如果没有声明函数体,可能这个函数是由其他语言实现的, 比如汇编。,只要复制一个地址,而复制一个比较大的对象值的话,效率低。不定参数(可变长参数),如下所示。,到函数里面就变成一个。
2022-10-07 17:59:57
953
原创 【Go】(六)Go基础 -- Map
如果使用bool作为value类型,会占用1个字节,100w条数据就会多占1MB左右的空间,使用空struct就会更节约内存。因为已经确定了m的长度,所以初始化keys slice的时候,直接指定长度会更加高效。go中没有set类型,可以借助map key唯一的特点实现。map的迭代是无序的,如果需要顺序迭代,要自己实现。不能直接判断两个map是否相同,需要自己实现。
2022-10-07 17:41:26
567
原创 【Go】(五)Go基础 -- Slice
slice有三个重要的属性指针:指向slice第一个元素的地址长度:通过len获取,表示当前slice有多少个元素,不能超过slice的容量容量:通过cap获取,容量的大小通常是slice的起始到结束的元素个数,如果使用超出了slice的容量,就会引发panicslice的基本定义// slice的默认值是nil,此时len和cap都为0 var a [ ] int a == nil // true // 此时len cap都是0,但是不为nil var b [ ] int {
2022-10-07 17:40:45
294
原创 【Go】(四)Go基础 -- Array
声明和初始化// ===================== // 基本声明方式 // ===================== // 声明数组长度为3,都为0值 var a [ 3 ] int // 声明数组长度为4,b[2]和b[3]都是默认值0 var b [ 4 ] int {1 , 2 } // ===================== // ...表示数组的长度由其中的元素决定 // ===================== c := [ ... ] int {
2022-10-07 17:39:31
70
原创 【Go】(三)Go基础 -- 基本数据类型
常量是一种表达式,其可以保证在编译阶段就计算出表达式的值,并不需要等到运行时本质上都属于基本类型:布尔、字符串、数字// math.Pi更精确的近似 const pi = 3.14159如果同时声明一组常量,除了第一项以外,其他项在等号右侧的表达式都可以省略。
2022-10-07 17:38:26
498
原创 【Go】(二)Go基础 -- 包和模块
执行该命令后,会在本地生成一个vendor目录,可以把其他要修改的源码放在这个目录下自行维护。在加载的时候,会自动梳理好依赖顺序(包括变量、导入的包),然后在每个包中执行如下流程。
2022-10-07 17:37:35
671
原创 【Go】(一)Go基础 -- 变量
同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率最高的一种存储形式;所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值。引用类型的变量(上图中的r1)存储的是r1的值所在的内存地址,或者内存地址中第一个字(word)所在的位置。使用等号将一个变量的值赋给另一个的时候,实际上是在内存中的i值进行了拷贝。通过new创建的两个变量的地址是不一样的。对一个空指针的反向引用是不合法的。
2022-10-07 17:25:20
336
原创 MySQL语句的执行过程
大体来说,MySQL 可以分为和层两部分。一条SQL语句的执行过程,主要就是经过这两个层面。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。
2022-10-05 10:26:21
1077
原创 MySQL事务
MVCC(Multi-Version Concurrency Control)是为了实现事务的隔离性,通过数据的版本号,避免同一数据在不同事务间的竞争。
2022-10-05 10:15:07
490
原创 Mysql 数据库锁总结
死锁检测的逻辑是:每当一个事务被锁的时候,就看看其依赖的线程有没有被其他人锁住(例如事务A依赖B,C依赖D,这时候事务E依赖C,事务E中的死锁检测会去检查C和D)。对于超时等待,默认50s这么长的时间,对业务的影响很大,肯定不能直接这么用,但是设置成很短的时间,比如1s,确实可以让死锁很快地解开,但是可能也会影响到其他正常等待锁而非死锁的场景。行锁就是针对数据表中行记录的锁。假设有1000个并发,并且所有的事务都互相依赖,那么死锁检测就是100w级别的计算量,会耗费大量CPU,及时并发不高,也很占资源。
2022-09-21 21:48:25
1046
原创 RabbitMQ基础
消息队列(Message Queue)是一种应用间的通信方式。消息的生产者可以只关心把消息发到消息队列,由消息系统来确保消息的可靠传递,也不用管关心消息会被谁消费掉。消息的消费者只需要关心从MQ中拿消息进行消费,不用管消息是谁发的。也就是生产者和消费者都无需知道对方的存在。
2022-09-08 17:41:41
661
原创 合并kubeconfig配置文件和删除context脚本
提供了配置文件合并的工具,但是合并之后会改掉context的名字,不太友好。直接用python处理。
2022-09-08 17:06:11
322
原创 利用DNS隧道绕过上网认证
dns协议最基本的作用是将域名映射为ip地址,让我们在访问网页的时候无需记住复杂的ip地址。在一些地方,需要我们认证才能上网(例如校园网)。
2022-08-28 00:25:54
1707
原创 谷歌支付沙盒测试
4. 在Google Play Console为测试人员添加许可测试,添加LICENSED许可响应后,测试用户就可以无需花费真实费用进行支付测试。6. 购买内购产品,直接使用测试卡结算。
2022-08-24 22:39:39
7232
5
原创 Grafana展示Pod的基本信息
在grafana中使用Stat面板展示的时候,选择Datetime单位,得到的时间是不正确。原因是该Datetime的单位是毫秒,解决方式:将指标 * 1000。指标可以获取到Pod的创建时间,其格式是一个时间戳,单位为秒。指标可以用于获取Pod的镜像,内容需要从指标的tag获取。获取Pod运行时间,单位选择Second即可。
2022-08-24 10:00:01
1088
原创 Kubernetes Pod内存监控
WorkingSet(container_memory_working_set_bytes)和Usage(container_memory_usage_bytes)基本上是以1:1的趋势到达limits,然后Pod触发OOM。当Usage达到Limits,Pod不会OOM,随着WorkingSet继续增大,Cache逐渐减小,等WorkingSet到达Limit,Pod才OOM。基于以上的指标,就可以计算Pod的内存使用率,当然,需要Pod有设置Limits才有意义。
2022-08-21 21:50:36
3747
原创 Go 文件读写
os.WriteFile内部实现和我们上面写的差不多,OpenFile然后Write。bufio.NewReader通过缓存去读,对于需要读许多小文件的效率比较高。yaml文件的读写和json类似,都是通过Marshal和UnMarshal。os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入。方法,通常会读到一个map或者对应的结构体中。写json文件就是Marshal后Write。读json文件主要就是用。...
2022-08-18 22:38:14
2095
原创 Git设置初始化默认分支为main
github创建项目的默认分支为main。本地创建的git分支默认为master,每次在本地新建一个仓库再关联到remote,分支不统一。如果使用homebrew安装的git,直接升级即可。git在2.28版本中提供了一个配置,指定在执行。下载最新的版本,使用其他方式安装。本地git版本不够的话先升级;的时候生成的默认分支。...
2022-08-10 17:52:56
5650
原创 kubectl按pod创建时间排序获取列表
sort-by可以对k8s所有的api对象的进行排序(只要对应的字段是integer或者string)也可以按Pod的状态排序,快速找到不正常的Pod。按时间排序,可以更快地找到最近更新的pod。
2022-08-02 14:58:52
3029
1
原创 Linux批量删除指定文件
Linux批量删除指定文件平时我们会遇到一些需要批量删除文件的操作,这其实就是找 + 删两步操作,可以通过某些命令组合轻松实现。注意:删除文件前一定要确认是否需要备份以及是否已经备份。一、删除指定类型的文件1.1.文件通配符删除如果要删除的文件都在当前目录下,可直接使用文件通配符删除# 删除当前目录下的所有.log结尾文件$ sudo rm -f *.log1.2.使用find + xargs如果要删除某个目录及其子目录下的指定类型文件,可以通过find + xargs来实现$ sud
2022-01-18 10:39:38
10470
原创 vscode远程开发配置
我们可能会有在远程主机环境下开发的需求,vscode的Remote-SSH插件提供了强大的支持一、安装vscode插件搜索插件ssh,安装Remote - SSH。安装好之后,会自动安装一个Remote Development插件,用来打开远程ssh主机的文件夹二、安装ssh客户端vscode的远程ssh插件会调用ssh客户端去连接远程服务器,所以我们需要在本机上安装open-ssh(m...
2020-01-20 13:43:31
574
原创 Keepalived高可用
KeepalivedKeepalived 是一个基于 VRRP 协议(Virtual Router Redundancy Protocol)的路由软件,用于为Linux系统(或者基于Linux内核的系统)提供负载均衡和高可用性功能。其负载均衡框架依赖于LVS(Linux Virtual Server)中的IPVS内核模块。运行过程大致为:多台安装keepalived服务器共同虚拟出一个VIP(...
2019-12-29 21:01:10
146
原创 linux复制当前目录到其子目录下
假设有以下目录结构,需要把当前目录.下所有文件及文件夹(dst除外)复制到其子目录dst文件夹下:tree.├── dst├── file1.txt└── src ├── dir │ └── file3.txt └── file2.txt不能直接使用cp -a . dst:cp: cannot copy a directory, ‘.’, into it...
2019-12-14 14:57:53
1940
原创 自动同步github项目到本地gitlab
许多公司选择gitlab用作内部代码管理软件。有时候可能需要将一些开源项目同步到内部gitlab,但是只有企业版的才支持该功能。 但是通过git+定时任务也可以简单地实现该需求:1.将github项目clone到本地git clone https://github.com/xxxx/xxxx.git2.添加用于同步github项目的内部gitlab远程仓库git remote add g...
2019-12-10 13:56:30
4465
2
原创 JSON
json定义JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换语言,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式。很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是...
2019-12-09 23:47:26
139
原创 Dockerfile中添加容器运行时环境变量
制作镜像时往容器中添加环境变量现在需要把test_tool_a和test_tool_b两个工具都塞到一个容器里面,并且要求运行容器时能直接使用两个工具bin目录下的二进制文件如果只有一两个工具,在Dockerfile中使用ENV指令将他们的bin目录都加到环境变量PATH中即可:ENV PATH="/opt/test_tool_a/bin:${PATH}"如果有很多工具,则可以选择编写一...
2019-12-05 17:16:06
5703
原创 删除软链接
dir_a软连接到DIR_A$ ln -s DIR_A dir_a$ tree.├── dir_a -> DIR_A/└── DIR_A ├── DIR_B └── file_1正确的姿势:$ rm -rf dir_a错误的姿势:$ rm -rf dir_a/这样会把DIR_A目录下的所有文件都删掉...
2019-12-03 20:57:52
141
原创 Gitlab-CI Include and Extends
IncludeFunc: 用于引入.yml或.yaml结尾的YAML文件,其他类型的文件不能引入。我们可以利用include让.gitlab-ci.yml文件的结构更清晰,同时也可以把一些需要集中管理维护的job写在一个YAML文件中,放在一个公共仓库,让其他项目的CI来引入该文件。举个例子,假如每个团队都需要执行一个report的job,用于报告版本发布的相关信息,那么我们可以把这个job写...
2019-11-27 21:14:14
2778
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人