自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么是进程/线程/协程

这实在是一个过于经典的面试题,尤其是对于go开发者来说,毕竟go有协程这种杀手级的东西,面试官就更爱问这个问题了同时网上相关资料很杂,本身这种抽象概念的理解就没有绝对的标准表达,大家领会意思就够了,哈哈,但带来的问题就是查找相关资料的时候容易把自己越看越乱所以此处我写的内容,也是我自己的理解,有不同理解的欢迎讨论进程进程,就是我们跑起来的程序,在系统中的抽象我们的程序,他不跑的时候,就是可执行文件,在linux上可能没有扩展名,在windows上那就是.exe,总而言之,他就是我们机器上的一个文件

2022-03-22 17:29:31 802

原创 docker部署orcale11

拉取镜像docker pull wnameless/oracle-xe-11g-r2创建存储oracle数据的目录,这个目录可以按需创建mkdir /data/oracle_data然后执行启动命令docker run -d --restart always -v /data/oracle_data:/data/oracle_data -p 11522:22 -p 11521:1521 -e ORACLE_ALLOW_REMOTE=true --name oracle wnameless/or

2022-03-09 16:28:48 481

原创 如何从git中永久删除文件

我们使用git的时候总会因为手滑等各种原因将我们不想提交的文件提交到git中,可能是某个写着密码的文件,也可能是打包好的二进制或镜像等等,总而言之这些不必要的文件提交上去以后要么就是遗留了安全风险,要么就是平白无故占据着大量我们的仓库空间,而因为git记录历史版本的特点,直接将这些文件删除再提交并不能真正从git中删除他们,这样操作只是提交了一个【删除该文件】的操作而已,文件本身其实还是存在git中的,翻翻历史版本就能再把他们找出来​总而言之打开你想要操作的项目目录,右键-Git Bash Here,然

2022-03-07 18:18:04 4030

原创 Docker部署redis 6.2.6

首先拉取镜像,镜像版本根据你的需求可以自己改,部署流程都一样,比如常用的4.7.7或者5.0.5之类的docker pull redis:6.2.6然后找个地方放你redis的配置文件虽然可以通过在启动命令中加环境变量的方式写入配置参数,但我还是建议你将redis的配置文件挂载出来,这样遇到问题方便排查,也方便你修改配置本文中使用 /home/redis 为范例,你可以用你自己的部署路径来替换mkdir /home/redismkdir /home/redis/datavim redis.c

2022-01-11 21:24:59 2642 2

原创 mysql的页都存了什么

闲言少叙,直接插入我们都知道mysql数据库他组织索引的形式是B+tree,并且数据在磁盘上是以页【page】为单位进行存储的,当需要从磁盘中取数据时会一次性读一页的数据出来,那这个页里面的数据是如何进行组织的呢页头记录页面控制信息,共56字节,包括左右兄弟页指针、页面控件使用情况【也就是说页与页之间是双向链表】​最小/最大虚记录最大:比页内最大主键还大最小:比页内最小主键还小初步判断某数据在不在本页,如果数据超出此最大最小则必不在本页,反之有可能在本页下文细嗦​记录堆

2021-11-30 22:48:40 1200 1

原创 前端使用js-audio-recorder组件实现录音、语音下载、播放等【含blob对象转换为file对象】

本文范例代码使用vue2.0开发首先当然是在项目中安装包npm install js-audio-recorder然后在页面中引入import Recorder from 'js-audio-recorder'该插件可以控制录得的语音的质量,以下是插件内配置对象的定义**【这是插件里面的东西,我贴在这里给大家看一眼而已,不用抄】**interface recorderConfig { sampleBits?: number, // 采样位数 sampleRate

2021-11-30 00:03:38 7251 11

原创 GO读文件

go读文件这里给出四种方式方案一:ioutil.ReadFile本质上调用的是os.ReadFile方法f1, err1 := ioutil.ReadFile("output1.txt")if err1 != nil { fmt.Println("read fail", err1)}fmt.Println(string(f1))方案二:(f *File) Read此方案调用的是File结构体实现的Read方法f2, err := os.Open("output2.txt")if

2021-10-29 12:30:04 886

原创 GO写入文件

go写入文件有4种写法……但是在开始之前,我先提供一个判断文件是否存在,存在则打开不存在则创建的封装,相信你会用到的// OpenFile 判断文件是否存在 存在则OpenFile 不存在则Createfunc OpenFile(filename string) (*os.File, error) { if _, err := os.Stat(filename); os.IsNotExist(err) { fmt.Println("文件不存在") return os.Create(file

2021-10-20 09:13:29 7056

原创 docker的overlay2中存的都是什么and如何清理/var/lib/docker/overlay2

前段时间有客户反映我们部署服务的服务器磁盘快满了,联系我们说看看清理一下于是就开始看服务器我们所有的服务都是使用docker部署的,经过检查,这次占满了磁盘的都是在/var/lib/docker/overlay2目录下的文件夹,这个路径一看就是docker的存储目录,但是为什么docker跑得好好的他的占用会变高呢?图中可见,/var/lib/docker/overlay2目录的占用大的离谱那我们进来看看这个目录下是什么占用了这么大的空间上图可见,/var/lib/docker/overlay

2021-09-23 14:13:34 29916 9

原创 使用Jmeter5.4.1在linux和windows上进行压测

本文档旨在教会你安装jmeter并使用jmeter对你的服务的http接口进行压测,获取相关压测数据windows安装jmeter安装jdk如果你的电脑本来就装了java那你可以跳过这一步​我们先下载jdk安装包,这里推荐java8版本java官方jdk下载地址下这个【版本号有区别没关系,反正就是第一个表格里面的windows版本下下来以后双击安装,我是建议直接下一步下一步安装到默认位置就好,反正也不大。现在的java安装包似乎会帮我们写环境变量,所以安装好以后,反正我是没有改环境变量的

2021-07-01 16:03:34 1649 1

原创 使用goland进行go源码调试【go是如何判断结构体实现了interface的

本文中调试的go源码为1.14.12版本,本文介绍的调试方法与go版本没有关系​我们在go的学习过程中,有可能会需要对go的源码进行调试但是我们直接跑程序的话,是没法实现源码调试的所以这里来介绍一下go源码的调试方法​使用goland进行调试,能够有比较清楚的图形化界面,这有助于我们在调试过程中对一些相关参数的查看,也能让调试变简单,所以我们使用goland进行调试​编写你的程序想要进行源码调试首先肯定得有你自己的代码,你自己的代码在运行的过程中会调用到你要调试的那部分源码我这里用判断结

2021-06-05 21:52:50 1735 1

原创 这!就是单向链表【go实现

链表就如环环相扣的锁链搬将各个节点的数据连接在一起每个数据节点除了存储节点值以外,还存储了下一个节点的地址指针,从而可以通过本节点寻找下一个节点,哪怕下一个节点的实际存储位置与本节点不连续,也不太会影响寻址效率。故一般我们用链表来组织碎片化的空间。链表的插入和删除并不会影响到其他大部分的节点,只涉及到目标节点前后的节点操作,所以效率极高为O(1)缺点就是查询效率较低,要在链表中查询某个节点必须按顺序遍历链表来查询,时间复杂度为O(n)​下面是单链表的示意图​下面上单链表的实现代码packa

2021-05-29 16:06:29 240

原创 这!就是二叉树【go实现

名词解释结点:树的基本数据结构,包含数据和指向子结点的指针子树:子结点的同义词结点的度:一个节点拥有子树的个数称为结点的度树的度:树中所有结点的度的最大值叶子结点:没有子树的结点/度为0的结点分支结点:有子树的结点/度不为0的结点,也称非叶子节点节点的层次:从根节点开始,根节点层次为1,根节点的子节点层次为2,以此类推,某节点层次为n,则他的子节点层次为n+1树的深度:树深,又称树的高度,树中所有结点的层次的最大值即为树的深度​二叉树每个节点存储一个数据,同时存储一个左子树地址和一个右子

2021-05-29 16:05:41 171

原创 撑开元素高度使其占满页面

我们画页面的时候有可能遇到一种情况,一上一下两个元素,其中一个固定高度,然后我们希望另一个占据纵向所有剩余的高度。因为高度默认是以实际容器内内容高度为准的,也就是说默认情况下我们的元素不会在内容不足的情况下自动撑开高度占满空间​本文中元素位置如下,不做特殊说明的话本文的html结构不会有变化<div class="outside-box"> <div class="top-box">这里是一个固定高度的组件, height: 100px;</div> <d

2021-05-25 20:33:44 1150 1

原创 GO GC

从内存说起我们知道程序运行时使用的常量变量其实都是存储在内存中的,所谓垃圾回收也就是将程序占用了,但现在已经不再使用的内存空间进行回收。那内存中都存储了些什么东西呢代码区:存储给cpu运行时读取用的我们编译好的代码数据区:存储全局变量我们的程序在运行的时候,与我们接触更多的是堆区和栈区,大家都知道我们在程序中声明的变量会分配到这两个区域中对于go程序来说,我们一般不需要关心一个变量到底被go分配到了堆区还是栈区,但这里姑且还是提一下go的分配原则是否有在其他地方(非局部)被引用。只要有可能被

2021-04-23 16:20:47 381 1

原创 Nginx

Nginx概述基础概念安装源码安装apt安装配置参数资料来源概述Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。基础概念代理所谓

2021-04-20 19:19:56 72

原创 iptables概念与操作

基本概念有一些同学知道,linux除了防火墙firewell以外,还有一个iptables可以实现对服务器端口访问的限制那iptables是啥呢iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilteriptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架netfilter/iptables(下文中简称为iptab

2021-04-17 22:48:59 332

原创 一些Linux命令

指令效果lsof -i:端口号查看指定端口进程kill 进程号消灭进程nohup 【运行指令,如npm run serve】 &在后台运行tail -f nohup.out查看后台运行的日志【实时tail -100 nohup.out查看后台运行的日志【最后100条unzip 文件名解压zip文件到当前目录mv 被修改文件名 修改后文件名修改文件/文件夹名rz从本地上传文件到Xshall中的linux当前文件夹sz ...

2021-04-09 22:33:48 252

原创 go操作influxdb 2.0.4

influxdb是时下热门的时序型数据库而1.x版本的influxdb和2.x版本是互相不兼容的,代码也是本文档中使用的包为import influxdb2 "github.com/influxdata/influxdb-client-go/v2"注意在操作完成后记得要关闭数据库连接注册在完成部署后【部署流程见docker部署InfluxDB】直接用浏览器访问influxdb开放的端口,可以看到start按钮,点击按钮可以直接在页面上进行初始账号的注册也可以使用代码来进行注册client

2021-04-07 22:18:32 2499 5

原创 iptables配置docker服务端口访问限制

服务器系统为 CentOS 7PS:CentOS 7自带iptables,但不自带iptables-services,你有需要可以装,也可以不装,不影响本文的操作和阅读遇到了一个需求,需要用iptables限制一个redis服务只能由指定的ip访问似乎不难,于是网上查了一波,首先查到了这个# 配置IPTABLESiptables -A INPUT -s 允许访问的ip -p tcp --dport 6379 -j ACCEPTiptables -A INPUT -s 允许访问的ip -p tcp

2021-04-05 23:48:18 6128 6

原创 iptables安装

CentOS 7自带iptables,但不自带iptables-services没有iptables-services的话有一些iptables操作是做不了的【不过其实差别不大】当然如果你是特殊情况下的精简版系统那就另当别论了闲言少叙 我们开始查看系统中是否有iptables直接输入iptables看有没有这个命令就好了查看系统中是否有iptables-servicessystemctl status iptables如果没有的话会输出iptables-services could not

2021-04-05 23:46:05 7767 1

原创 事务的隔离

先上一张大家在很多地方都见过的,隔离级别与存在问题的对应表格脏读[Dirty]不可重复读[NonRepeatable Read]幻读[Phantom Read]读未提交 [Read uncommitted]√√√读提交 [Read committed]×√√可重复读 [Repeatable Read]××√串行化 [Serializable]×××隔离级别**读未提交:**一个事务还未提交时,他所做的更改就能够被别的事务看见**

2021-04-03 21:28:54 96

原创 分析问题

2021-03-30 17:29:11 88

原创 MarkDown

2021-03-29 20:26:13 51

原创 Redis操作简述

2021-03-29 20:21:46 72 1

原创 Grid

2021-03-29 20:19:02 81

原创 Flex

2021-03-29 20:14:44 56

原创 Javascript

2021-03-29 20:12:47 65

原创 CSS初步

2021-03-29 20:11:39 60

原创 Mysql处理负值时间戳

今天在业务层面遇到一个问题,我们以往如果在mysql中有个字段的格式是datetime,我们需要这个字段做筛选项的话,会这么写if startTime != 0 { db = db.Where("unix_timestamp(created_at) >= ?", startTime)}if endTime != 0 { db = db.Where("unix_timestamp(created_at) <= ?", endTime)}可以看到我们其实是将数据库中的该字段从date

2021-03-29 20:06:33 1346

原创 HTML5

2021-03-29 17:48:19 67

原创 有趣的GO写法

//计算带中文字符串的长度,会正确计算中文字符的长度utf8.RuneCountInString(字符串变量名)//遍历字符串并转为rune格式【unicode】数组,可以正确遍历中文字符串bytes := []byte(字符串变量名)for len(bytes) > 0 { ch, size := utf8.DecodeRune(bytes) bytes = bytes[size:] fmt.Printf("%c", ch)}//也可以这么做,更简单直接/此操

2021-03-29 16:51:13 403

原创 channel十点技巧

channel存在3种状态:nil,未初始化的状态,只进行了声明,或者手动赋值为nilactive,正常的channel,可读或者可写closed,已关闭,千万不要误认为关闭channel后,channel的值是nil当需要不断从channel读取数据时,使用for range,当channel关闭时,for循环会自动退出,无需主动监测channel是否关闭for x := range ch{ fmt.Println(x)}读channel,但不确定ch..

2021-03-29 16:49:14 3000

原创 缓存淘汰算法

LFU根据数据被访问的频率进行排序和淘汰核心思想是被访问次数越多的数据热度越高新数据从尾部进入队列,新数据进入时触发队列重新排序如队列已满则删除原队列末位数据每当缓存中有数据被访问,则引用计数+1,队列根据引用计数进行排序,引用计数相同时根据修改时间排序需要维护队列中所有数据的访问记录,每个数据块都要维护对应的引用计数。由此联想,所有数据块的访问记录都需要维护,用引用计数去进行队列元素排序,内存消耗很高。LRU根据访问时间进行排序和淘汰核心思想是最新被访问的数据热度更高

2021-03-28 19:10:31 240

原创 Redis的数据结构-string

string是最基础的数据结构,其底层实现为简单动态字符串(Simple Dynamic String,SDS)其结构,分为三部分len存储buf的已用长度alloc存储buf实际分配长度buf就是我们写入的value内容,为了标示结束,会自动在最后加上\0,多占据1字节空间因为 Redis 的数据类型有很多,而且,不同数据类型都有些相同的元数据要记录(比如最后一次访问的时间、被引用的次数等),所以,Redis 会用一个 RedisObject 结构体来统一记录这些元数据,同时指向实际数据一个

2021-03-28 19:09:12 164

原创 Go-Redis使用手册

实现大体上的实现思路是声明了一个用来执行redis命令的cmdable结构体,调用该结构体的process方法就可以执行传入的语句type cmdable struct { process func(cmd Cmder) error}需要传入的cmd是一个Cmder格式的值type Cmder interface { Name() string Args() []interface{} stringArg(int) string readReply(rd *proto.Reader)

2021-03-28 19:07:46 1979

原创 gRPC简介

gRPC(Remote Procedure Calls)概述GRPC是一个高性能、通用的开源RPC框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发,支持众多的开发语言。gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。gRPC使用protocol buffers作为接口描述语言(IDL)以及底层的信息交换格式优点基于

2021-03-28 19:01:20 439

原创 求两个字符串的最长公共子串

两个字符串分别为"abccade"和"dgcadde"输出结果为cad滑动比对解法输入字符串1和2字符串1固定,字符串2滑动两层for循环,外层控制字符串2的滑动,内层控制滑动后重叠部分字符串的比对思路就是这样,具体的实现可以直接看代码package mainimport ( "bytes" "fmt")func getMaxSubStr2(str1, str2 string) string { len1 := len(str1) len2 := len(str2) var

2021-03-28 13:25:25 1346

原创 Vuex状态管理

Vuex状态管理一、Vuex是什么?Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。vuex 就是把需要共享的变量全部存储在一个对象里面,然后将这个对象放在顶层组件中供其他组件使用。这么说吧,将vue想作是一个js文件、组件是函数,那么vuex就是一个全局变量,只是这个“全局变量”包含了一些特定的规则而已。在vue的组件化开发中,经常会遇到需要将当前组件的状态传递给其他组件。父子组件

2021-03-28 13:24:06 146

原创 vue中使用md5

引入npm install js-md5 -D使用import md5 from 'js-md5'pwd = md5(pwd)return pwd

2021-03-28 13:22:35 955

空空如也

空空如也

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

TA关注的人

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