自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高性能索引要求

1、独立的列:索引列不能是表达式的一部分;2、选择区分度高的列作为索引;3、选择合适的索引列顺序:将选择性高的索引列放在最前列;4、覆盖索引:查询的列均在索引中,不需要回查聚簇索引;5、使用索引扫描来做排序;6、在遵守最左前缀的原则下,尽量扩展索引,而不是创建索引。...

2022-02-28 10:07:31 214

原创 go string类型方法的性能

今天在测试性能时,需要拼接一段字符串,发现string类型用 + 号拼接会比将字符串装进 切片中,再用strings.join()方法生成需要的字符串慢很多倍。string是一个不可变类型,每次都会创建一个新的 string 类型的值,然后重新赋值给这个变量。最快的应该是使用strings.Builder来构建,因为直接通过指针来操作了。附上源码// String returns the accumulated string.func (b *Builder) String() string {

2021-11-15 18:24:10 326

原创 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装 .NET Framework 2.0 SDK;2) 安装 Microsoft Visual Studio 20

遇到这问题百度了很久,都是一些蜜汁行为通过下面命令轻松搞定npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

2021-11-05 10:33:34 1612

原创 golang超过uint64大数运算

uint64最大是18446744073709551615超过这个数可以用以下方法运算package mainimport ( "bufio" "os" "fmt" "strings")func multi(str1,str2 string) (result string) { if len(str1) ==0 && len(str2) ==0 { result = "0" return } var index1 = len(str1) - 1 va

2021-10-29 18:34:43 1574

原创 golang参数校验

在web开发过程中,我们经常需要校验前端传过来的值是否合法,这时可以用validator进行校验这里用到的是tag,像这样:type User struct { Name string `json:"name" validate:"min=0,max=35"` Age unit8 `json:"age" validate:"lte=90,gte=0"`}标记之间特殊符号说明逗号( ,):把多个验证标记隔开。注意:隔开逗号之间不能有空格, validate:“lt=0,gt

2021-10-22 10:54:02 2181

原创 docker镜像时间设置

使用docker容器运行go服务时,在Dockerfile中添加一行环境变量ENV TZ=Asia/Shanghai或者在docker run 命令增加参数 -e TZ=Asia/Shanghai

2021-09-14 17:52:13 645

原创 基于朋友圈的内容推送算法思路

背景:在首页推送内容时,需要根据不同用户推送不同的内容,规则为用户A浏览过用户B的文章详情则代表关注了,以后会推送用户B的文章给A。这样会有一个问题,新用户推送内容为0,但需求就是这样子。只能照做!一、数据结构首先这样的关系我考虑用redis的list和set来解决。set作为被关注表,一旦用户A关注了用户B。则在用户B的被关注表中加上用户A的id。list作为文章推送表,当用户B发表文章时,在被关注表中获取到关注B的用户的id,根据id找到每位用户的list文章表,在每个list中使用LPUSH

2021-08-12 17:33:57 1172

原创 mysql用where查询int类型字段时注意事项

当你的ID字段为int类型时,查询语句如下:SELECT name FROM tableName WHERE id = 1这样是没有任何问题的,但是当你的查询语句如下时SELECT name FROM tableName WHERE id = '1'就需要注意你传入的参数如果为不可转为int类型的字符时mysql会将它转为0,使得id = 0 的数据被查询出来。...

2021-08-11 14:03:20 906

原创 fabric基础之ECDSA

ECDSA是Elliptic Curve Digital Signature Algorithm的简称,主要用于对数据创建数字签名。但是他不是像AES那样对数据进行加密,而是用于确保数据没有被篡改过。他的原理大致如下:有一个数学方程,在图上画了一条曲线,然后你在这条曲线上面随机选取了一个点作为你的原点(point oforigin)。接着你产生了一个随机数,作为你的私钥(Privatekey),最后你用上面的随机数和原点通过一些复杂的魔法数学方程得到该条曲线上面的第二个点,这是你的公钥(Publ

2021-08-11 13:56:59 307

原创 尝试使用fabric-sample2.3.2学习区块链

我们使用官方提供的bootstrap.sh下载所需资源tips:安装前要下载好docker、docker-compose、go。在boostrap.sh中我们可以查看版本首先获取bootstrap.sh文件https://github.com/hyperledger/fabric/tree/main/scripts/到这里去下载...

2021-08-05 16:31:57 3314

原创 Vue操作对象时的坑

当在vue中给对象增加属性时,会出现vue监听不到的情况,也就是双向绑定失效,可以用以下方法使之生效this.$set('对象', '字段名', '字段值')

2021-07-29 16:18:32 95

原创 使用docker安装Jenkins

docker pull jenkinsci/blueocean拉取镜像,然后启动容器docker -d --name jenkins -p 8080:8080 -p 5000:5000 jenkinsci/blueocean浏览器输入ip:8080 进入页面,此时提示输入密码我们进入容器中docker exec -it jenkins /bin/bash然后查看密码cat /var/jenkins_home/secrets/initialAdminPassword将密码复制出来,点

2021-07-14 14:56:55 104

原创 go封装的日志工具

package loggerimport ( "fmt" "io" "log" "os" "runtime" "time")var logger *log.Loggertype LogMessage struct { file string line int message interface{} msgType string}const ( DEFAULT_DIR string = "log/" DEFAULT_PREFIX

2021-07-14 09:44:18 143

原创 git的fork流程

今天正好有空就写一下gitlab的fork流程吧,网上好像讲的不太清楚首先将项目fork到自己那里然后进入自己的项目并克隆到本地,可以用goland直接克隆在url栏中输入地址,可能需要登录账号接下来添加源项目的地址,并起名upstream,当然名字可以任意然后咱们正常开发,开发完后要先拉一下源项目的代码,这一步很重要。一般早上到了公司第一件事就是先更新一下代码,避免出现冲突。然后选择项目和分支更新完后在提交自己的代码。这时我们就可以进入gitlab页面,发起pull reque

2021-05-13 14:30:42 537

原创 go批量查询遇到的问题

今天做一个查询userId的需求,游戏的统计数据数据量还是比较大的,昨天一天就增加了33w条记录,考虑到用户数量会不断增加,担心mysql不能接收那么多参数,于是验证了一下mysql接收参数的最大值。可以看到,当切片的大小为65535的时候,是可以正常查询的,查询时长为16655.650ms。当我们将循环次数改为65536后,报了如下错误。所以查询时需要根据切片长度分次查询。...

2021-05-07 17:16:55 240

原创 【go】冒泡排序

package mainimport "fmt"func bubbleSort(arr *[5]int) { fmt.Println("排序前:", (*arr)) for i := 0; i < len(*arr)-1; i++ { for j := 0; j < len(*arr)-1-i; j++ { if (*arr)[j] > (*arr)[j+1] { (*arr)[j], (*arr)[j+1] = (*arr)[j+1], (*arr)[j]

2021-04-19 18:42:00 125

原创 go的内联优化

先说一下什么是内联吧。内联,就是将一个函数调用原地展开,替换成这个函数的实现。通俗易懂的解释就是将函数的调用转换为一个函数实现。这样做会增加编译后二进制文件的大小,但它可以提高程序的性能。那么Go语言中,什么样的函数可以被内联呢?我们一起来看。规则让我们从一个示例开始。下面这个程序的源码,分别编写在两个文件中,作用是对一组数字进行加或减:package mainfunc main() { n := []float32{120.4, -46.7, 32.50, 34.65, -67.45}

2021-04-19 10:03:47 582 1

原创 golang导出excel

后端写法func CapitalFlowExport(c *gin.Context) { file := xlsx.NewFile() // 这中间自己写业务逻辑生成excel表 // 我用的是 "github.com/tealeg/xlsx" 这个框架 v1.0.0 版本 c.Header("responseType", "blob") c.Header("Content-Disposition", "filename=excel名称.xlsx") c.Header("Content-Ty

2021-04-15 18:23:57 789

原创 gateway网关

功能:管理授权、访问控制和流量限制等。优点:REST API 接口服务被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。API 网关的职能:面试:1.使用Netty实现异步IO。CAP定理:CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(数据一致性)、 Availability(服务可用性)、Partition tolerance(分区容错性),三者不可兼得。CAP由

2021-04-07 13:24:50 286

原创 kafka基础知识

一、kafka的应用场景:1、日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口开放给各种消费端,例如hadoop、Hbase、Solr等。2、消息系统:解耦生产者和消费者、缓存消息等。3、用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索记录、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。4、运营指标:K

2021-04-07 13:23:49 474

原创 el-table排序

排序有三种状态:默认不排序,升序,降序。如果要改变设置默认状态,用:default-sort = "{prop: 'controlStatus', order: 'ascending'}"设置排序字段:sort-by="sortControlStatusArr"可以传字符串,如果有多个可以传入数组,如:sortControlStatusArr: ['controlStatus','createTime'],排序规则:ascending 表示升序,descending 表示降序,null

2021-03-30 11:32:37 2183

原创 go交替打印数字和字符

package mainimport "fmt"func main() { A := make(chan bool,1) B := make(chan bool) Exit := make(chan bool) go func() { s := []int{1, 2, 3, 4} for i := 0; i < len(s) ; i++ { if ok := <-A; ok { fmt.Println("A:", s[i]) B <- tru

2021-03-28 10:16:26 294

原创 redis底层数据结构

简单动态字符串SDSRedis 没有直接使用 C 语言的字符串,而是构建了自己的抽象类型简单动态字符串(simple dynamic string)。在 Redis 中,对于所有键,都是字符串类型,其底层实现是 SDS,而键值对的值,其实最终都是以字符串为粒度的,底层都是 SDS 实现。(比如列表,其实列表中每一项都是字符串以 SDS 实现的)。SDS结构:SDS 结构中,包含 char 类型的数组 buf ,每个位置存储字符,最后一个位置存储空字符 ‘\0’。另外,还有 free 属性和 len

2021-03-28 09:51:07 54

原创 go的GMP模型M、P的数量

GMP模型的简介G:goroutine 协程P:processor 处理器M:thread 内核线程一、P的数量问题:在程序中通过runtime.GOMAXPROCS() 来设置二、M的数量问题:1、Go语⾔本身是限定M的最⼤量是100002、runtime/debug包中的SetMaxThreads函数来设置3、有⼀个M阻塞,会创建⼀个新的M4、如果有M空闲,那么就会回收或者睡眠...

2021-03-27 17:41:13 2742

原创 Go语言中函数new与make的使用和区别

变量的声明var i intvar s string变量的声明我们可以通过var关键字,然后就可以在程序中使用。当我们不指定变量的默认值时,这些变量的默认值是他们的零值,比如int类型的零值是0,string类型的零值是"",引用类型的零值是nil。对于例子中的两种类型的声明,我们可以直接使用,对其进行赋值输出。但是如果我们换成引用类型呢?package mainimport ( "fmt")func main() { var i *int *i=10 fmt.Println(*i

2021-03-27 16:40:44 121

原创 elasticsearch 更新延迟问题

在给elasticsearch插入新值之后,立即再次请求数据,发现刚刚新增的数据查不出来,才知道elasticsearch有更新延迟问题,据说是为了提升性能。解决此问题可以加上这句代码:request.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);...

2021-03-22 16:09:14 1148

原创 【go】切片(slice)

1.切片的底层实现:type slice struct { array unsafe.Pointer //数组指针 len int //切片长度 cap int //切片容量}声明slice后,此时该slice还未被分配空间,但是可以用append插入数据,append操作会自动给slice扩容 var slice []int //slice[0] = 1 //panic: runtime error: index out of range s

2021-03-08 14:08:19 57

转载 JDK 8 的optional类

Optional类实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional 类的引入很好的解决空指针异常。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。尽量避免在程序中直接调用Optional对象的get()和isPresent()方法,避免使用Optional类型声明实体类的属性。Optional.of(T t) : 创建一个 Optional 实例 Optional.empty() : 创建一个空的Optional 实例 Optional.ofNul

2021-03-05 10:23:28 172 1

原创 知识积累

一、框架1.mybatis-plus1.1mybatis和JPA的区别Mybatis优势MyBatis可以进行更为细致的SQL优化,可以减少查询字段。MyBatis容易掌握,而Hibernate门槛较高。Hibernate优势Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要

2021-03-05 09:03:27 113 1

原创 vue+elementUI的组件el-input、el-table的时间格式处理

引入moment.js,方便计算 import moment from 'moment'一、对 el-table的处理加入 formatter 属性:formatter=“dateFormat” <el-table-column align="center" width="150" sortable :formatter="dateFormat" prop="createdDate" label="申请时间"> &l

2021-03-04 09:53:03 4867 1

原创 docker配置镜像加速

创建或修改 /etc/docker/daemon.json 文件vi /etc/docker/daemon.json按 i 进入编辑模式插入{ "registry-mirrors" : "https://9cpn8tt6.mirror.aliyuncs.com"}按 Esc键输入:wq回车,保存文件使配置文件生效systemctl daemon-reload重启dockersystemctl restart docker大功告成...

2021-03-02 10:38:12 75

原创 【linux】scp远程拷贝文件

一、从本机拷贝到目标远程主机#将当前主机当前目录下的nginx.tar.gz拷贝到IP位142的局域网主机目录/usr/local/src下scp nginx.tar.gz root@192.168.9.142:/usr/local/src/ 回车后显示The authenticity of host '192.168.9.142 (192.168.9.142)' can't be established. RSA key fingerprint is 11:b6:be:81:a0:be

2021-03-02 10:31:00 150

原创 根据时间戳显示刚刚/几分钟前/几小时前/今天等等

规则是:一分钟内显示刚刚一小时内显示几分钟前24小时内显示今天几点几分24 - 48小时内显示昨天几点几分一年内显示几月几日一年前显示 年-月-日function timestampFormat( timestamp ) { function zeroize( num ) { return (String(num).length == 1 ? '0' : '') + num; } var curTimestamp = parseInt(new Da.

2021-03-02 09:30:23 1029

原创 【力扣】226.翻转二叉树

翻转一棵二叉树。示例:输入:输出:备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。Related Topics树solution在这里插入代码片...

2021-02-26 14:02:31 64

原创 雪花算法工具类-java

public class SnowflakeIdUtils { // ==============================Fields=========================================== /** 开始时间截 (2015-01-01) */ private final long twepoch = 1420041600000L; /** 机器id所占的位数 */ private final long workerIdBits

2021-02-26 13:40:55 359

原创 【力扣】20.有效的括号

20.有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1 <= s

2021-02-23 14:45:39 83

原创 【力扣】2. 两数相加

2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9

2021-02-23 14:15:22 240

转载 js的精确运算

使用安装 npm i bignumber.js引用import BigNumber from 'bignumber.js'文档加法 plus语法.plus(n [, base])参数值n (必需): number|string|BigNumber 参与计算的数字base: number 进制 (默认为十进制)返回值BigNumber举例0.1 + 0.2 // 0.30000000000000004x = new BigNumbe

2021-02-04 09:09:05 422

原创 定时任务常用写法;每分钟,每小时,每天,每周,每月,每季度,每年

// 每小时 String HOUR = " 0 0 * * * ?"; // 每分钟 String MINUTE = " 0 * * * * ?"; // 每天 String DAY = "0 0 0 * * ?"; // 每周 String WEEK = "0 0 0 ? * MON"; // 月 String MONTH = "0 0 0 1 * ?"; // 每季度 String QUARTER = "0 0 0 1 1..

2021-02-03 16:34:37 3415

原创 jar包运行

netstat -ntulp | grep + 端口号查看占用程序kill -9 + 端口号nohup java -jar + jar包名 &

2021-01-18 18:35:52 91

空空如也

空空如也

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

TA关注的人

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