学习笔记
日常学习记录,加深印象
暖雪冷泉
go big or go home
展开
-
数据库缓存一致性问题
数据库缓存一致性原创 2022-11-22 08:46:21 · 345 阅读 · 1 评论 -
系统的信号值
信号值功能SIGHUPSIGHUP 1 终端控制进程结束(终端连接断开)SIGINT 2 用户发送INTR字符(Ctrl+C)触发SIGQUIT 3 用户发送QUIT字符(Ctrl+/)触发SIGKILL 9 无条件结束程序(不能被捕获、阻塞或忽略)SIGUSR1 10 用户保留SIGUSR2 12 用户保留SIGPIPE 13 消息管道损坏(FIFO/Socket通信时,管道未打开而进行写操作)SIGALRM 14 时钟定时信号SIGTERM 15 结束程序....原创 2022-05-28 10:43:19 · 112 阅读 · 0 评论 -
redis基础
常用命令127.0.0.1:6379> ping #查看当前连接是否正常,正常返回PONGPONG127.0.0.1:6379> clear #清楚当前控制台(为了更好的看到下面输入的命令)127.0.0.1:6379> keys * #查看当前库里所有的key1) "db"127.0.0.1:6379> FLUSHALL #清空所有库的内容OK127.0.0.1:6379> keys * (empty array)127.0.0.1:6379&.原创 2022-05-10 10:58:02 · 229 阅读 · 0 评论 -
ubuntu安装mysql
安装mysql//更新apt-getsudo apt-get update//安装mysql服务端和客户端sudo apt-get install -y mysql-server mysql-client查看mysql版本mysql --version重新设置密码,mysql安全设置sudo mysql_secure_installation查看mysql运行状态systemctl status mysql//或者service mysql status登陆mysql.原创 2022-04-29 09:42:51 · 684 阅读 · 0 评论 -
ubuntu安装redis
redis安装和配置教程原创 2022-04-28 14:24:46 · 3107 阅读 · 0 评论 -
vs code配置go环境
安装gogo下载地址//ubuntu安装tar -C /usr/local -xzf xxxx.tar.gz安装go插件vscode 中,输入 ctrl + shift +p 打开窗口Go:Install/Update Tools设置代理go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct添加环境变量export GOROOT=/usr/local/go #go的安装目录expo.原创 2022-04-24 10:32:23 · 453 阅读 · 0 评论 -
搜索算法的思想
BFS广度优先搜索广度优先搜索一层一层地进行遍历,每层遍历都是以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。第一层:0 -> {6,2,1,5}第二层:6 -> {4}2 -> {}1 -> {}5 -> {3}第三层:4 -> {}3 -> {}每一层遍历的节点都与根节点距离相同。设 di 表示第 i 个节点与根节点的距离,推导出一个结论:对于先遍历的节点 i 与后遍历的节点 j.原创 2022-04-23 16:14:31 · 136 阅读 · 0 评论 -
git用法
配置邮箱和用户名称git config --global user.name "你的名字或工号或昵称"(注意双引号是英文格式)git config --global user.email "你的邮箱"下载项目git clone github项目连接上传改动的项目git add .git commit -m "update"git pull...原创 2022-04-23 11:12:25 · 77 阅读 · 0 评论 -
git merge master出现的问题
1.问题2.解决办法步骤一: 按键盘上的“i”键,进入插入模式步骤二: 修改最上方的黄色部分,改成想写的合并原因,可不写步骤三: 按键盘上的“Esc”键退出插入模式步骤四: 输入“:wq ”后按回车键...原创 2021-06-03 10:08:32 · 536 阅读 · 0 评论 -
regexp.Compile正则匹配的用法
func main() { // 用法1 // 是否匹配字符串 // .匹配任意一个字符 ,*匹配零个或多个 ,优先匹配更多(贪婪) match, _ := regexp.MatchString("H(.*)d!", "Hello World!") fmt.Println(match) //true // 或 match, _ = regexp.Match("H(.*)d!", []byte("Hello World!")) fmt.Println(match) //true // 用原创 2022-03-13 13:27:50 · 2141 阅读 · 0 评论 -
session和token验证的差异
传统的session认证http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证。但是这种基于转载 2022-03-08 11:12:13 · 318 阅读 · 0 评论 -
ubuntu20.04搭建detectron2环境
创建conda环境conda create -n detectron2 python=3.8conda activate detectron2安装opencvpip install opencv-pythonpip install opencv-contrib-python安装pytorch和cudapip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://downl.原创 2022-03-05 12:49:36 · 3353 阅读 · 2 评论 -
网络编程基础
经典协议与数据包原创 2022-03-04 09:45:39 · 61 阅读 · 0 评论 -
ubuntu常用命令
编辑环境变量//打开环境变量gedit ~/.bashrc //使命令生效source ~/.bashrc原创 2022-03-02 14:19:04 · 449 阅读 · 0 评论 -
新电脑上一键同步VS Code配置信息
原设备上传配置VS Code下载Settings Sync插件。在VS Code程序中任意位置使用快捷键Ctrl+Shift+P,在搜索栏输入sync,点击 Sync: Upload / Update Settings。首次使用快捷键Ctrl+Alt+U可以跳转到sync扩展的登录页面,点击LOGIN WITH GITHUB的按钮,跳转至github登录授权页。正常只要默认的浏览器登录了github,他会自动跳转授权页面,没有登录过的或者没有注册过的用户需要自行注册和登录。在浏览器中授权后,.原创 2022-02-18 12:13:42 · 664 阅读 · 0 评论 -
go context的用法
背景在go服务器中,对于每个请求的request都是在单独的goroutine中进行的,处理一个request也可能设计多个goroutine之间的交互, 使用context可以使开发者方便的在这些goroutine里传递request相关的数据、取消goroutine的signal或截止日期。Context是Golang官方定义的一个package,它定义了Context类型,里面包含了Deadline/Done/Err方法以及绑定到Context上的成员变量值Valuecontext结构// A原创 2021-09-18 15:08:32 · 498 阅读 · 0 评论 -
application/x-www-form-urlencoded和multipart/form-data的区别
一、Form表单语法在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。 例如: application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分,这个一般文件上传时用。 text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。补充二、常用的编码原创 2021-08-31 11:23:49 · 2046 阅读 · 0 评论 -
encoding/hex
func main() { //数据准备 src := []byte("abcdef") // 准备数据 dst := make([]byte, hex.EncodedLen(len(src))) // 计算转换为16进制后的长度 //加密 hex.Encode(dst, src) // 转码 fmt.Printf("%s\n", dst) // 打印 616263646566,a的ascii码为97,97转换为16进制为61,后面的bcdef原创 2021-05-23 19:23:47 · 785 阅读 · 0 评论 -
bytes
引用来自这位大佬const timetemplate = "2006-01-02 15:04:05"func main() { // func Compare(a, b []byte) int // 比较a,b两个切片是否相等, a=b 返回0,a<b 返回-1,a>b 返回1 fmt.Println("bytes.Compare([]byte{}, []byte{}):", bytes.Compare([]byte{}, []byte{})) // 0 fmt.Prin原创 2021-05-19 16:34:40 · 182 阅读 · 0 评论 -
定时器 Timer 和 Ticker
func main() { var wg sync.WaitGroup wg.Add(2) //NewTicker 创建一个Ticker,Ticker内包含一个通道字段,每隔2s向该通道发送当时的时间。 //它会调整时间间隔或者丢弃 tick 信息以适应反应慢的接收者 //如果d <= 0会触发panic,关闭该 Ticker 可以释放相关资源 ticker := time.NewTicker(2 * time.Second) go func(t *time.Ticker) {原创 2021-05-19 15:43:55 · 347 阅读 · 0 评论 -
按位运算
与(&):左右两边均为真,整体为真,其余为假左侧逻辑运算符右侧结果0&000&101&001&11与非(&^):右边先取反,然后相与左侧逻辑运算符右侧结果0&^000&^101&^011&^10或(|):有真为真,无真为假左侧逻辑运算符右侧结果0|00原创 2021-05-15 12:12:01 · 67 阅读 · 0 评论 -
html/template
//结构体p := Person{"longshuai", 23}//创建模板名称、和模板tmpl, err := template.New("test").Parse("Name: {{.Name}}, Age: {{.Age}}")if err != nil { panic(err)}//创建模板生成的承载体,实现读写方法的可变大小的字节缓冲buf := new(bytes.Buffer)//将结构体信息装载进模板中,形成buf字节流err = tmpl.Execute(buf, p原创 2021-05-11 18:59:32 · 122 阅读 · 0 评论 -
crypto/hmac(加密哈希算法)
func main() { // 对sha256算法进行hash加密,key随便设置 // 创建对应的sha256哈希加密算法 hash := hmac.New(sha256.New,[]byte("abc123")) // 写入加密数据 hash.Write([]byte("abc123")) //加密字符串为:c10a04b78bcbcc1c4cba37f6afe0fa60cbf08f6e0a1d93b09387f7069be1aeff fmt.Printf("%x\n",hash.Su原创 2021-05-04 12:19:55 · 1503 阅读 · 1 评论 -
toml配置文件的使用方法:toml.DecodeFile
创建结构体package mainimport ( "fmt" "github.com/BurntSushi/toml" "time")type config struct { Title string DB mysql `toml:"mysql"` App app Redis map[string]redis Releases releases Company company}type app struct { Author .原创 2021-05-03 15:41:43 · 2734 阅读 · 1 评论 -
读写文件操作OpenFile()
func writeTxt(filepath string, data string) { f, err := os.OpenFile(filepath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) if err != nil { error.Error(err) return } defer f.Close() _, err = f.WriteString("writeString:") if err != nil { error.Erro原创 2021-04-30 19:00:16 · 2173 阅读 · 1 评论 -
go语言随机数rand包的使用
rand.Int//获取随机数,不加随机种子,每次遍历获取都是重复的一些随机数据rand.Seed(time.Now().UnixNano())//设置随机数种子,由于种子数值,随着每次启动都不一样,可以所以每次随机数都是随机的...原创 2021-04-16 19:27:12 · 2822 阅读 · 0 评论 -
Mysql语句及其应用
dept:部门,deptno:部门编号,dname:部门名称,loc:部门位置salgrade:薪水,grade:职级,losal:最低薪水,hisal:最高薪水emp:雇员,empno:雇员工号,ename:雇员名字,job:雇员工种,mgr:上级经理,hiredate:入职日期,sal:薪水,comm:津贴,deptno:从属哪个部门select * from emp //查询emp表单select ename, sal from emp //从emp表单中查询ename,s..原创 2021-04-15 14:24:52 · 137 阅读 · 0 评论 -
自旋锁与互斥锁、乐观锁与悲观锁
自旋锁与互斥锁1、初始状态下,锁的状态为未被占有2、A进程需要访问临界区代码,尝试获取锁。此时发现锁可用,则将锁lock,进入临界区执行临界区代码3、B进程需要访问临界区代码,尝试获取锁。此时发现锁呢已经被A占有,则等待A释放锁4、A进程退出临界区,释放锁.unlock5、B进程获得锁进入执行临界区代码,并lock6、B进程执行晚临界区代码,释放锁unlock自旋锁:B会不停循环检测A进程是否释放锁。优点是反应灵敏,缺点是占用CPU资源。适合等待时间较短的场景。互斥锁:B进程会直接休眠,等待原创 2021-04-14 20:49:15 · 466 阅读 · 0 评论 -
go语言关于高并发下map结构不稳定的问题
关于高并发下map结构不稳定的问题原创 2021-04-14 20:10:12 · 343 阅读 · 0 评论 -
关于sync.WaitGroup和channel在协程之间通信的应用
关于协程之间的通信和协调运行,需要用到协程计数器:sync.WaitGroup和通信工具:channel。协程计数器:用来判断该协程中函数是否运行完毕,若完毕则-1,直至为0channel:是用来负责每个协程的信号,实现协程之间的通信和控制func printL(wg *sync.WaitGroup, chanl chan string, chanz chan string) { //当前循环结束,说明该协程结束,协程计数器-1 defer wg.Done() //协程结束,关闭该协程chann原创 2021-04-13 19:52:09 · 664 阅读 · 0 评论 -
数据库优化相关知识
参考的大佬博客Mysql数据特点:系统的数据都从数据库上来,数据库的吞吐量和速度一定程度决定系统的并发和响应速度;系统运行与数据量成正比,数据读处理尤其是查询自然就慢;Mysql数据库的数据最终在磁盘上持久化存储,读写不如Redis等这些内存数据库1. 数据库设计1.1表中的字段是最小不可再分的(字段原子性)1.2消除对主键的部分依赖商品表有商品id,商品id为商品的主键,但是需要创建一个商品编号列来专门处理业务,因为id太敏感,处理业务都是用商品编号来处理(比如展示商品时展示编号等等)1原创 2021-04-12 19:07:32 · 94 阅读 · 0 评论 -
math包的使用
i := -100fmt.Println("绝对值:",math.Abs(float64(i)))fmt.Println("向上取整:",math.Ceil(5.0))fmt.Println("向下取整:",math.Floor(5.8))fmt.Println("取余数,同11%3:",math.Mod(11, 3))fmt.Println(math.Modf(5.26)) //"取整数,取小数"fmt.Println("x的y次方:", math.Pow(3, 0.5))fmt.Print原创 2021-04-11 15:02:16 · 278 阅读 · 0 评论 -
json.Marshal和json.Unmarshal的使用
1. json.Marshal(person)type Student struct { Name string `json:"name"` Age int `json:"age"` High int `json:"high"` Sex string `json:"sex"` Class *Class `json:"class"`}type Class struct { ClassName string `json:"classname"` Grade原创 2021-04-07 20:38:51 · 16884 阅读 · 0 评论 -
github密钥配置和git管理代码
//加载配置信息git config --global user.name "王军"git config --global user.email "2369403034@qq.com"//将码云上的项目加载到本地git clone https://gitee.com/wang_jun_159/immoc-product.git//将本地项目加载到码云上//cd到项目目录下cd immoc-product//查看当前目录下的文件是否加载到缓存git status//将当前项目目录下的文原创 2021-04-01 19:23:43 · 294 阅读 · 0 评论 -
互联网协议
申明:本文只用做自己的学习记录物理层电脑要与外界互联网通信,需要先把电脑连接网络,一般使用双绞线、光纤、无线电波等方式。这就叫做”实物理层”,它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。数据链路层单纯的0和1没有任何意义,使用者会为其赋予一些特定的含义,规定解读电信号的方式:例如:多少个电信号算一组?每个信号位有何意义?这就是”数据链接层”的功能,它在”物理层”的上方,确定了物理层传输的0和1的分组方式及代表的意义。目前”以太网”(Ethernet转载 2021-03-20 17:07:48 · 132 阅读 · 0 评论 -
go语言:排序算法
申明:本文只用做自己的学习记录1. 选择排序//此方法为暴力搜索,不推荐//选择排序(从大到小)func SelectSort() { //初始化 var nums = []int{1, 5, 6, 9, 2, 3} //进行遍历 for i := 0; i < len(nums); i++ { for j := i + 1; j < len(nums); j++ { if nums[i] > nums[j] { nums[i], nums[j] = nu原创 2021-03-17 22:11:39 · 166 阅读 · 0 评论 -
go语言:字符串操作
申明:本文只用做自己的学习记录strings.Contains("test", "es") //是否包含 truestrings.Count("test", "t") //字符串出现字符的次数 2strings.HasPrefix("test", "te") //判断字符串首部 truestrings.HasSuffix("test", "st") //判断字符串结尾 truestrings.Index("test", "e")原创 2021-03-14 11:04:13 · 228 阅读 · 0 评论 -
go语言:数组(Array)、链表(Linked List)、栈(Stack)、队列(Queue) 、树(Tree)、散列表(Hashing)
申明:本文只用做自己学习记录0 简介线性数据结构:数组(Array)、链表(Linked List)、栈(Stack)、队列(Queue)非线性数据结构:树(Tree)、图(Heap)、散列表(Hashing)、堆(Graph)1 数组(Array)1.1 定义数组是将相同类型的元素存储于连续内存空间的数据结构。根据数组长度可不可变,可分为静态数组和动态数组。1.2 数组的基本操作Insert——在指定索引位置插入一个元素Get——返回指定索引位置的元素Delete——删除指原创 2021-03-10 15:34:32 · 692 阅读 · 0 评论 -
go mod的使用
1.go mod init imooc-productcd到项目目录下,执行go mod init imooc-product初始化项目注:init imooc-product为项目名称2.go mod graph显示所依赖的包3.go mod download下载所依赖的包4.go mod tidy添加需要的包并剔除不需要的包5.go get -u github.com/kataras/iris下载指定的包,github.com/kataras/iris为包名6.go build原创 2021-03-06 15:38:16 · 894 阅读 · 8 评论 -
Windows下RabbitMQ的启动
RabbitMQ的启动1.安装完RabbitMQ以后,进入到rabbitmq的安装路径下面(进入到sbin里面,将其路径复制):2.打开命令行模式,以管理员身份进行运行,进入到刚才的sbin目录然后输入以下:rabbitmq-plugins enable rabbitmq_management3. 在完成了以上以后,对其进行一个启动即可:rabbitmq-server start4. 进行测试 输入网址:http://localhost:15672/ 初始的用户名和密码都是 guest。原创 2021-03-06 11:05:04 · 2097 阅读 · 1 评论