自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL中ENGINE=InnoDB、AUTO_INCREMENT的意思

CREATE TABLE `hui_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表id', `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密', `email` varchar(50) DEFAULT NULL, `phone` varchar(20) DEFAULT NU.

2021-01-29 18:01:03 63

原创 /bin/sh -c的必要性

一、比如要向 test.asc 文件中随便写入点内容,可以:$ echo "信息" >> test.csv如果将 test.asc 权限设置为只有 root 用户才有权限进行写操作:$ sudo chown root.root test.csv然后,我们使用 sudo 并配合 echo 命令再次向修改权限之后的 test.asc 文件中写入信息:$ sudo echo "hahah" >> test.csv-bash: test.asc: Permission den

2021-01-28 09:49:23 28

原创 Go string()函数与strconv.Itoa()函数的区别

Itoa函数strconv.Itoa()函数的参数是一个整型数字,它可以将数字转换成对应的字符串类型的数字。 package main import ( "fmt" "strconv" ) func main() { string_number := 97 result := strconv.Itoa(string_number) fmt.Println(result) fmt.P...

2021-01-28 09:47:34 47

原创 linux 命令cp -a的用法

cp -a保留原文件属性的前提下复制文件cp -r dirname(源文件) destdi(目标文件)复制目录后其文件属性会发生变化想要使得复制之后的目录和原目录完全一样包括文件权限,可以使用cp -a dirname destdir...

2021-01-28 09:44:11 174

原创 Go init函数详解

init()函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高。init 函数通常被用来:对变量进行初始化 检查/修复程序的状态 注册 运行一次计算包的初始化为了使用导入的包,首先必须将其初始化。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。这通过Golang的运行时系统控制,如下图所示:初始化导入的包(递归导入) 对包块中声明的变量进行计算和分配初始值 执行包中的init函数initial.gopackage mainimport "fmt"

2021-01-23 17:55:59 46

原创 一看就懂系列之Golang的接口

https://blog.csdn.net/u011957758/article/details/81150622前言接口在面向对象编程中是经常使用的招式,也是体现多态很重要的手段。是的。Golang中也有接口这玩意儿。本文将以通俗易懂的方式,说清楚Golang的接口。10s后,以下知识点即将到达战场:1.为什么需要接口?2.接口是什么?如何定义?3.接口实战初体验4.如何测试是否已实现该接口?5.空接口&类型断言6.接口零值7.一个类型实现多个接口8.指针与值类型

2021-01-22 15:01:08 22

原创 LoadClass和forName的区别

一、 Java类装载过程装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象;链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;校验:检查导入类或接口的二进制数据的正确性;(文件格式验证,元数据验证,字节码验证,符号引用验证)准备:给类的静态变量分配并初始化存储空间;解析:将常量池中的符号引用转成直接引用;初始化:激活类的静态变量的初始化Java代码和静态Java代码块,并初始化程序员设置.

2021-01-21 15:26:52 14

原创 scan命令

比如这里查询key111开头的key有哪些?若使用keys命令,则执行keys key1111*,一次性全部查出来。同样,如果使用scan命令,则用scan 0 match key1111* count 20scan的语法为:SCAN cursor [MATCH pattern] [COUNT count]The default COUNT value is 10.SCAN命令是一个基于游标的迭代器。这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,..

2021-01-21 11:52:40 439

原创 kill很棒的命令

ps -ef | grep nginx | awk -F ' ' '{print $2}' |xargs kill -9

2021-01-20 19:59:08 18

原创 虚拟内存与物理内存的联系与区别

操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有虚拟内存,且每次开启一个进程都给4G的物理内存,就可能会出现很多问题:因为我的物理内存时有限的,当有多个进程要执行的时候,都要给4G内存,很显然你内存小一点,这很快就分配完了,于是没有得到分配资源的进程就只能等待。当一个进程执行完了以后,再将等待的进程装入内存。这种频繁的装入内

2021-01-19 17:28:27 34

原创 PCB与进程分配资源

PCB(progress control block),进程控制块。这里先不讨论PCB是什么,其实进程这个概念本身就是一个很难理解的概念,当一个可执行程序被系统执行了以后,就变成了一个进程。那么这个进程中到底有什么东西呢,系统究竟给这个进程分配了哪些资源?另外,进程在内存中的存储是怎么样的?对于一个进程,它在被执行前其实是一个可执行程序。这个程序是被放在磁盘上的,当它要被执行的时候,它先被加载到内存当中,然后再放入到寄存器中,最后再让cpu执行该程序,这个时候一个静态的程序就变成了进程。那么操作系统

2021-01-19 16:58:21 32

原创 服务器性能评估(cpu,内存,磁盘IO)

一、影响Linux服务器性能的因素1. 操作系统级 CPU 内存 磁盘I/O带宽 网络I/O带宽 2. 程序应用级 二、系统性能评估标准 影响性能因素 影响性能因素 评判标准 好 坏 糟糕 CPU user% + sys%< 70% user% + sys%= 85% user% + sys% >=90% 内存 Swap In...

2021-01-19 14:42:29 244

原创 kafka经常重新分组问题排查

网上看到一篇文章Ckafka消费者组反复重平衡问题解决之道给了点思路:也参见了Kafka消费者平凡被踢出消费者组的问题排查然后写了这篇文章Kafka高低版本的心跳(heartbeats)和会话(session)超时机制以下把ckafka的思路记录了下背景Ckafka 消费重平衡机制同开源kafka一样,就是让一个消费者组下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程。在重平衡过程中,所有 Consumer 实例共同参与,在协调者组件的帮助下,完成订阅主题分区的

2021-01-19 11:42:17 65

原创 Kafka高低版本的心跳(heartbeats)和会话(session)超时机制

问题:我们用的是kafka0.10.2.1的版本,#kafka.bootstrap.servers=kafka.bootstrap.servers=kafka.group.id=kafka.topic=kafka.concurrency=5kafka.key.deserializer=org.apache.kafka.common.serialization.StringDeserializerkafka.value.deserializer=org.apache.kafka.c...

2021-01-19 10:39:09 312

原创 springboot和kafka结合其中enable.auto.commit等于false失效

事件描述公司使用的是Spring Cloud工作的微服务框架。其中做了SpringBoot和kafka的结合。但是意外的是enable.auto.commit参数设置成了false,kafka的offset依然提交了(也没有进行人工提交offset)。为了验证这个是否为真实情况,首先测试环境启动项目,enable.auto.commit设置为false。首先记录测试topic的偏移量和logsize(测试topic名字为topicTest),然后本地启动Producer,向topicTest发送10条数据

2021-01-19 10:36:09 121

原创 grep按字符串进行匹配

查日志中的一个小笔记:grep -F "[20210115023500][3, 4]" /home/work/a.txt不加-F就会按正则来进行匹配加了-F就会只按字符串来进行匹配

2021-01-19 09:51:08 40

原创 Kafka消费者组三种分区分配策略roundrobin,range,StickyAssignor

一个consumer group中有多个consumer,一个 topic有多个partition,所以必然会涉及到partition的分配问题,即确定那个partition由哪个consumer来消费。Kafka有两种分配策略,一是roundrobin,一是range。最新还有一个StickyAssignor策略将分区的所有权从一个消费者移到另一个消费者称为重新平衡(rebalance)。当以下事件发生时,Kafka 将会进行一次分区分配: 同一个 Consumer Group 内新增...

2021-01-18 19:55:54 176

原创 redis的expire总结

在排查问题的时候,对这个知识点有点模糊,实操了下。String和其他redis数据结构expire是不一样的。String 有点不一样:具体见我置顶的博文redis手写总结1.2.3 容器型数据结构的通用规则list,set,hash,zset 是容器型数据结构create if not existsdrop if no ellements1.2.4 过期时间过期是以对象为单位的,比如一个hash结构的过期是整个hash对象的过期,而不是其中某个子key的过期注意:..

2021-01-18 19:28:17 62

原创 关于System.nanoTime()的一点理解

在查日志的时候,里边有个时间记得是nanotime,之前看过一次,再看一次,记下来事情起源最近在研究Java中的Random实现的时候,发现Random的种子有用到System.nanoTime() public Random() { this(seedUniquifier()^System.nanoTime()); } 以前在学Java的时候,就听别人说过,Java中的随机数都是伪随机数,是通过随机种子通过复杂的计算得到的,而Java中的种子和时间...

2021-01-18 19:17:15 81 2

原创 根据函数System.currentTimeMillis()返回的毫秒数得到日期

//计算自1970年1月1日 ,根据函数System.currentTimeMillis()返回的毫秒数得到日期class ch0533 {public static void main(String[] args) { long ms=System.currentTimeMillis(); System.out.println(formatTime(ms)); }public static String formatTime(long ms) { int.

2021-01-18 19:06:22 49

原创 虚拟内存与物理内存的联系与区别

操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有虚拟内存,且每次开启一个进程都给4G的物理内存,就可能会出现很多问题:因为我的物理内存时有限的,当有多个进程要执行的时候,都要给4G内存,很显然你内存小一点,这很快就分配完了,于是没有得到分配资源的进程就只能等待。当一个进程执行完了以后,再将等待的进程装入内存。这种频繁的装入内

2021-01-13 11:23:42 54

原创 物理内存、虚拟内存、buffers、cached、共享内存、swap

物理内存:实际使用的内存;虚拟内存:虚拟内存是操作系统内核为了对进程地址空间进行管理(process address space management)而精心设计的一个逻辑意义上的内存空间概念。我们程序中的指针其实都是这个虚拟内存空间中的地址。比如我们在写完一段C++程序之后都需要采用g++进行编译,这时候编译器采用的地址其实就是虚拟内存空间的地址。因为这时候程序还没有运行,何谈物理内存空间地址?凡是程序运行过程中可能需要用到的指令或者数据都必须在虚拟内存空间中。既然说虚拟内存是一个逻辑意.

2021-01-13 10:31:04 55

原创 mongoDB释放磁盘占用

今天op说mongo空间满了,然后有了接下来的解决方案:推荐第二种在mongo中删除数据并不会直接释放磁盘,而是产生很多碎片。这些碎片会被mongo继续利用。当有新数据插入时,会重复利用这些碎片,而不需要新申请磁盘空间。但是这会导致的问题是,磁盘可能一直处于高水位的使用水平,对运维来说是一个定时炸弹。因为碎片只会被所属的库使用,但我们经常会新建很多库,这就导致磁盘越来越紧张。目前我摸索出的是三种方法1,将备节点清空,重新同步。在备节点同步的过程中,碎片空间会被...

2021-01-12 15:30:41 135

原创 mongodb 设置自动删除过期数据

我们用的是MongoDB shell version: 2.2.4-pss-20130923MongoDB 2.2 引入一个新特性–TTL 集合,TTL集合支持失效时间设置,或者在某个特定时间,集合自动清除超时文档,者用来保存一个诸如session会话信息的时候非常有用。如果想使用TTL集合,用用到 expireAfterSeconds 选项mongo官网使用文档设置方法:Expire Documents after a Specified Number of Seconds首先创建索

2021-01-12 15:27:58 138

原创 Go语言经典库使用分析(一)| 开篇

《Go语言实战》的笔记系列写完了,大概近30篇,15W字。完结后,开始在想下个系列写什么,或者不再是系列,而是零零散散的技巧或者案例等,不过最终还是选择了这个Go语言的经典库使用分析的系列。为什么选择这个呢,这个主要是在写上个系列的时候,有很多读者来问他们自己遇到的一些库的使用方法,遇到的问题如何解决,为什么是这样等等,所以我发现大家对很多库还不是太了解,为了项目更方便选择了这个库,这样虽然可以快速的做出来项目,但是如果遇到问题,就很难解决,因为用的是别人的,自己不了解,所以我就萌发了写这个系列的打算。

2021-01-11 11:19:03 15

原创 Go语言实战笔记(二十六)| Go unsafe 包之内存布局

unsafe,顾名思义,是不安全的,Go定义这个包名也是这个意思,让我们尽可能的不要使用它,如果你使用它,看到了这个名字,也会想到尽可能的不要使用它,或者更小心的使用它。虽然这个包不安全,但是它也有它的优势,那就是可以绕过Go的内存安全机制,直接对内存进行读写,所以有时候因为性能的需要,会冒一些风险使用该包,对内存进行操作。Sizeof函数Sizeof函数可以返回一个类型所占用的内存大小,这个大小只有类型有关,和类型对应的变量存储的内容大小无关,比如bool型占用一个字节、int8也占用一个字节

2021-01-11 11:16:24 43

原创 Go语言实战笔记(二十四)| Go 反射

和Java语言一样,Go也实现运行时反射,这为我们提供一种可以在运行时操作任意类型对象的能力。比如我们可以查看一个接口变量的具体类型,看看一个结构体有多少字段,如何修改某个字段的值等等。TypeOf和ValueOf在Go的反射定义中,任何接口都会由两部分组成的,一个是接口的具体类型,一个是具体类型对应的值。比如var i int = 3 ,因为interface{}可以表示任何类型,所以变量i可以转为interface{},所以可以把变量i当成一个接口,那么这个变量在Go反射中的表示就是<V

2021-01-11 10:59:42 20

原创 Go语言实战笔记(二十)| Go Context

控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context,今天我就谈谈Context。什么是WaitGroupWaitGroup以前我们在并发的时候介绍过,它是一种控制并发的方式,它的这种方式是控制多个goroutine同时完成。func main() { var wg sync.WaitGroup wg.Add(2) go func() { time.Sleep(2*time.Second) fmt.Println("1号完成") wg.Done()

2021-01-11 10:36:57 28

原创 查看文件大小

1、最简单的查看方法可以使用ls -ll、ls-lh命令zhi进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。ll -h 只能显示当前目录内文件的大小,不支持递归,(可能一个文件夹里边内容有100G,但是文件夹大小只为1k)2、通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。3、查询当前目录总大小可以使用du -sh,其中s代表统计汇总的意思,即只输出一个总和大小。4、同样

2021-01-09 19:20:17 203

原创 谈谈如何使用Go的调试工具dlv

Go给我们提供了一个非常好用的调试工具dlv(类似于gdb)。1、delve(dlv)安装方法dlv的具体安装方法参考:https://github.com/go-delve/delve由于我的环境是Linux Centos环境,所以选择Linux安全,这里有两种方法,选择哪种方法都可以。安装成功后,运行dlv命令,显示如下图所示:2、Debug 第一个golang程序Description:程序是从一个config.yaml文件中读取配置信息输出。其中,config

2021-01-09 19:06:17 618

原创 Go语言实战笔记(十三)| Go 并发资源竞争

有并发,就有资源竞争,如果两个或者多个goroutine在没有相互同步的情况下,访问某个共享的资源,比如同时对该资源进行读写时,就会处于相互竞争的状态,这就是并发中的资源竞争。并发本身并不复杂,但是因为有了资源竞争的问题,就使得我们开发出好的并发程序变得复杂起来,因为会引起很多莫名其妙的问题。package mainimport ( "fmt" "runtime" "sync")var ( count int32 wg sync.WaitGroup)func mai

2021-01-09 18:37:15 51

原创 Go语言实战笔记(九)| Go 接口

接口是一种约定,它是一个抽象的类型,和我们见到的具体的类型如int、map、slice等不一样。具体的类型,我们可以知道它是什么,并且可以知道可以用它做什么;但是接口不一样,接口是抽象的,它只有一组接口方法,我们并不知道它的内部实现,所以我们不知道接口是什么,但是我们知道可以利用它提供的方法做什么。抽象就是接口的优势,它不用和具体的实现细节绑定在一起,我们只需定义接口,告诉编码人员它可以做什么,这样我们可以把具体实现分开,这样编码就会更加灵活方面,适应能力也会非常强。func main() {

2021-01-09 17:28:18 16

原创 2021-01-09

sync.WaitGroup常规用法有点像countDownLatch的感觉通俗点说,两个角色,一种goroutine作为一个worker(他是个小弟),老老实实干活。另一种goroutine作为管理者督促小弟干活(它自己也是个worker)。在有很多小弟干活时,管理者没事干歇着,但同时它又希望得到一个通知,知道小弟们什么时候干完活(所有小弟们一个不少全都干完活了)。这样管理者好对小弟的工作成果做验收。如果没有sync.WaitGroup,怎么实现?其实也不难,从程序开发角度看,就是维护

2021-01-09 15:30:45 22

原创 item2 sz卡死的坑

在 mac 下,实现与服务器进行便捷的文件上传和下载操作。步骤1.安装支持rz和sz命令的lrzsz:brew install lrzsz等了挺长时间的。2.在本地/usr/local/bin/目录下保存iterm2-send-zmodem.sh 和iterm2-recv-zmodem.sh两个脚本下载地址3.设置一下两个脚本的权限,一般 chmod 777 就行了chmod 777 /usr/local/bin/iterm2-*4.设置Iterm2的Tirgger特性

2021-01-08 21:17:17 96

原创 tar的坑

如果是打包文件夹:正确:tar cf ddd.tar gin-gonic正确:tar czf cccc.tar.gz gin-gonic错误:tar czvf bbbbb.tar gin-gonic 这个解压出来不是文件夹1.使用tar压缩文件tar -zcvf test.tar.gz ./test/该命令表示压缩当前文件夹下的文件夹test,压缩后缀名为test.tar.gz如果不需要压缩成gz,只需要后缀为tar格式的,那么输入如下命令:tar -cvf test.ta.

2021-01-08 21:14:52 78

原创 mysql批量建库建表实践

1.第一种方式,简单暴力的方式http://www.toolscat.com/dev/split-table2.手动在dbever页面中创建存储过程参见dbever中创建存储过程坑:delimiter,参见:mysql导入存储过程时declare报错的问题解决3.在dbever脚本中写脚本解决前缀加零的问题,另外一种方式{ CALL database_name.createdatabase2() }delimiter //CREATE PROCEDURE `databas

2021-01-07 17:39:22 56

原创 Java中为什么静态方法不能被重写?为什么静态方法不能隐藏实例方法?

问题描述  Java中为什么静态方法不能被重写?为什么静态方法不能隐藏实例方法?诸如此类。前期准备  首先理解重写的意思,重写就是子类中对父类的实例方法进行重新定义功能,且返回类型、方法名以及参数列表保持一致,且对重写方法的调用主要看实际类型。实际类型如果实现了该方法则直接调用该方法,如果没有实现,则在继承关系中从低到高搜索有无实现。那么问题又来了,为什么只能对实例方法才能重写?我头好晕,这两个问题在这互相推脱责任。  理解三个概念:静态类型,实际类型,方法接受者。Person stud

2021-01-06 19:44:45 210

原创 git忽略ssl认证

问题在是用git克隆仓库的时候,报错如下:  fatal: unable to access ‘https://github.com/........../‘: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443解决方案env命令设置GIT_SSL_NO_VERIFY环境变量为”ture”,并同时调用正常的git的clone命令,即在git里输入:1 export GIT_SSL_NO_VERIF

2021-01-06 19:11:07 159

原创 golang 中点后面直接跟括号是什么意思?

1.类型转换value.(string)2.获取类型,使用场景有限制switch value.(type) {case string:}

2021-01-05 20:36:15 294

原创 golang语言中map的初始化及使用

// 先声明mapvar m1 map[string]string// 再使用make函数创建一个非nil的map,nil map不能赋值m1 = make(map[string]string)// 最后给已声明的map赋值m1["a"] = "aa"m1["b"] = "bb"// 直接创建m2 := make(map[string]string)// 然后赋值m2["a"] = "aa"m2["b"] = "bb"// 初始化 + 赋值一体化m3 := map[strin.

2021-01-04 17:58:10 303 2

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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