自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql range ref使用范围查询就一定慢吗

6.添加索引还是要根据使用场景来,特别是聚合索引的第一个索引,如果能过滤掉大部分数据也是能提高效率:比如如果我reg_time筛选出来只有几个数据,uid+login_type+reg_type筛选出来有几百条,那我优先选择reg_time。就上面这两个索引,一个是前半截快,一个是后半截快。2.表结构说明:uid, login_type,reg_type都是可以重复的,reg_time是一个dateTime的类型。5.两个索引所用的时间差不多,但是单从语句来说确实是第一种索引更优。第二种索引的执行效果。

2024-06-14 15:48:25 265

原创 rpc压缩原理哈夫曼编码解码

http2.0 :基于https ,以及请求数据加密(更加安全),头部数据压缩(传输数据变少),引入流式传输以及请求方式。环境:突然间想要知道rpc为什么会受到欢迎,总结有以下几点。思考:在实际运用当中哈夫曼编码用byte去存而不是用字符串。实现哈夫曼编码的流程:(这里只实现字符串编码和解码)哈夫曼解码就是按照字典去比对数据然后拼接。1.rpc是基于http2.0协议的。2.数据编码压缩减少了传输的数据量。1.统计字符在字符串中出现的次数。2.按字符出现的次数从小到大排序。5.把字符串替换成编号。

2023-08-09 18:13:14 126

原创 关于redis:雪崩,穿透,和击穿的思考

redis:雪崩,穿透,击穿的处理方案

2023-03-30 17:22:47 140

原创 docker入门,docker学习

docker的一些常用命令

2022-11-21 18:18:18 273 1

原创 一个小项目的构思(大数据入门级处理)

入门级大数据处理,架构思路

2022-11-08 20:12:17 1041

原创 通过NGINX实现服务热部署

版本发布中的痛点我们采用的beego或gin等框架编写的web服务器,在发布新版本时会重启服务,短暂的服务重启对于后台类型的服务影响不大,但是对于api这种高可用的接口就会造成部分502,我们的adv和dass的QPS很高,重启一次就会造成几十到几百次访问失败,体验较差行业解决方案类似 docker + k8s 等集群管理系统,体量太大,对于运维的要求比较高类似于php-fpm或者nginx的 master-slave方式,我们用的框架支持,需要开发类似于 graceful、endless等热启

2022-03-24 15:11:45 1744

原创 大量的数据mysql查询最新的记录慢问题

场景描述最近我们网站出现刚写入的一些数据查询起来特别慢的问题:两条结构一样的语句,但是执行效率差了很远。数据大概1.4亿条表索引:表结构:问题语句:1.SELECT * FROMlog_login_server_202203WHERE game in ('mhkftios') AND (timestamp BETWEEN 1647878400 AND 1648051199) ORDER BY id desc LIMIT 10;2.SELECT * FROMlog_login_server

2022-03-24 11:25:32 1983 1

原创 堆排序算法详解

1.算法描述:首先建一个堆,然后调整堆,调整过程是将节点和子节点进行比较,将 其中最大的值变为父节点,递归调整调整次数lgn,最后将根节点和尾节点交换再n次 调整O(nlgn).2.算法步骤(1)创建最大堆或者最小堆(我是最小堆)(2)调整堆(3)交换首尾节点(为了维持一个完全二叉树才要进行收尾交换)3.算法go代码package sortimport "fmt"//堆排序func main() { arr := []int{1, 9, 10, 30, 2, 5, 45, 8,

2021-11-03 18:02:51 144

原创 快速排序算法详解

一、算法代码1.算法步骤(1)将数据根据一个值按照大小分成左右两边,左边小于此值,右边大于(2)将两边数据进行递归调用步骤1(3)将所有数据合并2.算法代码func QuickSort(arr []int) []int { if len(arr) <= 1 { return arr } splitdata := arr[0] //第一个数据 low := make([]int, 0, 0) //比我小的数据

2021-10-29 12:02:47 115 1

原创 SSH秘钥生成和使用

1.linux下生成ssh秘钥[root@localhost ~]# ssh-keygen -t rsa #生成密钥对,-t代表类型,有RSA和DSA两种Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): #密钥文件默认存放位置,按Enter即可Created directory ‘/root/.ssh’.Enter passphrase (e

2021-10-27 14:30:24 470

原创 go函数的匿名调用,inject/Invoke,protobuf方法的调用

一、由于以前的代码是通过pb来传输数据的,大体流程是:前端—>后端的接口–>后端再请求pb服务接口。示例代码如下:1.接收前端参数// @Summary LTV趋势// @Description LTV趋势// @Tags 投放数据/LTV数据// @Accept application/json// @Product application/json// @Param data body dass.GetLtvDataListRequest true "body"// @Su

2021-09-09 11:25:27 605 1

原创 go websoket 第三方gorilla/websocket包

一、websocket是由长链接和轮询进化而来,当建立连接之后,不断开连接,开闭一个数据传输通道数据格式为[]byte。后端会一直保留这个进程。1.WebSocket 和 HTTP 实际上都是一个TCP链接。http请求可以通过设置header的方式升级成websoket 长链接二、具体代码package websoketimport ( "fmt" "github.com/gorilla/websocket" "log" "net/http" "strconv" "time")

2021-09-03 15:35:29 1069

原创 最大和:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和

一、题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-100000题目来源:来源:

2021-08-30 16:08:30 1812

原创 go 栈 验证符号是否正确

一、使用栈来验证符号是否正确1.输入字符串"()","()[]{}","(]","([)]" 输出true,true,false,false验证括号是否正确二、代码package mainimport ( "fmt" "strings")//主函数func main() { fmt.Println(isValid("()")) fmt.Println(isValid("()[]{}")) fmt.Println(isValid("(]")) fmt.P

2021-08-21 11:33:03 101

转载 mysql order by和group,where的执行顺序

Mysql - ORDER BY详解0 索引1 概述2 索引扫描排序和文件排序简介3 索引扫描排序执行过程分析4 文件排序5 补充说明6 参考资料1 概述MySQL有两种方式可以实现ORDER BY:1.通过索引扫描生成有序的结果2.使用文件排序(filesort)围绕着这两种排序方式,我们试着理解一下ORDER BY的执行过程以及回答一些常见的问题。(下文仅讨论InnoDB存储引擎)2 索引扫描排序和文件排序(filesort)简介我们知道InnoDB存储引擎以B+树作为索引的

2021-08-18 09:45:54 2425

原创 git 命令大全 gitlab,githab

一、git常见的命令1.在当前目录新建一个Git代码库:$ git init2.新建一个目录,将其初始化为Git代码库:$ git init [project-name]3.下载一个项目和它的整个代码历史:$ git clone [url]4.显示当前的Git配置:$ git config --list5.编辑Git配置文件:$ git config -e [–global]6.设置提交代码时的用户信息:$ git config [–global] user.name “[name]”7.设置

2021-08-09 16:02:42 240

原创 go golang 协程池操作

一、大体流程和思路基本思路:协程池有三个参数,协程的最大数,任务队列,等待处理结束。先把协程池启动起来,然后把要处理的事情放进队列里面,所有协程从队列里面拿事情去处理,等待协程处理完毕所有事情,关闭协程池。二、具体做法定义一个结构体//具体的任务type Job struct { Fn func() error Wait chan error}// 协程池// 1. 生产者可以等待消费完成后, 退出type Pool struct { max int /

2021-07-08 17:20:46 1661

原创 go golang modules环境参数详解 GO111MODULE,GOPROXY,GOSUMDB,GOPATH,GOROOT

一、参数的粗略解释set GO111MODULE=on //是否以Go modules的模式运行项目 auto,on,offset GOARCH=amd64 //目标可执行程序操作系统构架 包括 386,amd64,armset GOBIN= //项目的第三方可执行文件目录set GOCACHE= //项目的缓存目录set GOENV= //项目的env文件目录set GOEXE=.e

2021-07-06 11:25:51 784

原创 go 聊天室开发详解 channel chan 协程 并发执行

一、思路定义好3个通道 entering,leaving,massages分别为登录,登出(单向输入通道)和信息(双向通道)。开启两个协程,一个协程负责监听通道是否有输入或输出,一个协程负责组织发送的内容和流程的控制二、具体代码加详细说明package Controllerimport ( "bufio" "fmt" "log" "net")//聊天室func MassagesStart(){ listener, err := net.Listen("tcp", "local

2021-06-30 16:16:43 471 2

原创 go golang 链式开启多协程处理数据 并发

一、大体思路 把所有要处理的方法放在同一个切片当中,然后循环去开启多个协程处理这些方法二、具体做法1.定义两个结构体 用来存储要处理的方法和存储它下一个要多协程处理的方法,主要目的是要链式的连接下去//定义一个接口 起到一个连接作用type job interface { doItJob() error}//多个协程一次做的事情 并且实现job这个接口type JustDoIt struct { fn []func() //多协程要处理的方法 nextFunc job

2021-06-28 16:45:12 2027

原创 go语言数组,切片(slice),map的区别

一、数组,slice,map的定义1.数组:数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。声明方式:var a [3]int2.slice(切片):Slice(切片)代表变长的序列,序列中每个元素都有相同的类型,slice的语法和数组很像,只是没有固定长度而已。3.map:在Go语言中,一个map就是一个哈希表的引用,是一个无序的key/value对的集合二、注意事项1.切片 扩容之后会生成新的地址2.map里面的数据循环出来是随机无序的3.make只能为sl

2021-06-01 14:16:58 1343

原创 go grpc protoc proto生成go文件

一、简介因为项目需要,正在学习go语言的路上。要把.proto文件生成.go文件二、步骤1.安装goland安装一个可以打开proto文件的插件2.安装protoc仓库下载地址 https://repo1.maven.org/maven2/com/google/protobuf/protoc/选择对应的版本3.根据自己的环境选择对应的文件下载之后是一个可执行文件,可以放在环境变量里面把后缀全删掉 如:%GOPATH%\bin\protoc.exe4.安装 protoc-gen-go

2021-05-20 16:44:49 1292

原创 mysql MyISAM与InnoDB索引的区别

问题1:下面的选项使用了哪些索引(联合索引(c1,c2,c3,c4))A :where c1=x and c2=x and c4>x and c3=xB :where c1=x and c2=x and c4=x order by c3C :where c1=x and c4= x group by c3,c2D :where c1=x and c5=x order by c2,c3E :where c1=x and c2=x and c5=? order by c2,c3问题2:为什么B

2021-04-25 22:00:17 162

原创 mongodb 聚合查询 aggregate操作 group 分组统计

一、mongodb 的group 里面可以实现很多的操作1.如下代码$maxLogID=sysconf('maxLogID'); $where['LogID'] = array('$gt' => (int)$maxLogID); $where['WinGold'] = array('$gt' => 0); $pipe = array( array( '$match' => $wher

2021-04-14 18:38:37 1305

原创 php bcdiv和bcmul 函数的怪异现象

一、简介我要实现这样一个表达式z=总奖金n=总名数i=自己的排民((n-i+1)/(1+2+3+…n))*z这是一个分配奖金的式子。我试着用php的bc函数进行操作发现以下两种写法得出不一样的结果表达式1:arr[arr[arr[i]=bcmul(bcdiv((51-i),i),i),num,2),reward[′Leaderboard′],0);表达式2:reward['Leaderboard'],0);表达式2:reward[′Leaderboard′],0);表达式2:arr[i]=b

2021-04-13 18:47:01 883 1

原创 JWT 原理 加代码

一、说明现在大部分的api请求会使用到 JWT(json web token),是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换使用起来就是,由服务端根据规范生成一个令牌(token),并且发放给客户端。此时客户端请求服务端的时候就可以携带者令牌,以令牌来证明自己的身份信息。jwt 会有3部分被:第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(s

2021-04-12 14:23:03 274

原创 ios支付 内购支付 app store connect and

一、开发情景公司业务需要,让我把客户在ios内购的订单从ios那边拉取到我们平台进行对比。然后我了解到ios只能通过app store connect下载报表,支付的时候会有一个退款url 用户退款的时候会通知你。ios接口地址https://developer.apple.com/documentation/technologies二、配置退款通知url 在app store connect里面配置1.找到我的app->选择你的app点进去->app信息->综合信息-&

2021-04-12 13:56:24 415

原创 c++ 推箱子小游戏

一、简介这个小游戏是我开始学c++的时候写的,它里面实现了推箱子的逻辑和界面展示二、思路1.它界面素材有:背景图,人物,墙,箱子,目标,空地,成功图这样7个2.把图按照一行一行的进行分组 并用数字把图片的位置和信息表示出来下面是我进行的切片素材把图片分成7*8组 表示如下3.加载图片并渲染页面(注意:图片等资源要先引用到项目)4.玩耍(具体的逻辑我就不多说了直接上代码)5.截图三、源代码#include <iostream>#include "resour

2021-03-29 17:21:20 1143

原创 c++ 自动给好友发送消息

一、思路1.创建c++ 控制器文件项目2.获取聊天窗口的句柄3.向聊天窗口出入聊天消息4.模拟发送二、代码#include #include <Windows.h>int main(){using namespace::std;for (int i = 0; i < 1000; i++){Sleep(550);//50毫秒输出一次HWND WIN = FindWindowA(NULL, “xx”);TCHAR text[256] = TEXT(“我给你发一万次

2021-03-25 16:20:31 3403 9

原创 redis + 数据库实现分页功能

思路:1.存入redis的时候 对key 进行分类处理(如user 表 所有key 都带一个user 前缀)2.查出所有满足条件的keys3.对keys进行排序,分页代码如下:/*** 血池列表* @auth true* @menu true*/public function bloodList(){$this->title = ‘血池列表’; //注册按钮事件 $this->addBloodPlanBtn = url('bloodPlanAdd')

2021-03-22 11:13:53 1070

原创 redis + sql server 排行榜并发优化

一、场景介绍公司要做这3类排行榜,分数排行榜,金币排行榜,输赢排行榜。然后这3类排行榜要分今天的和昨天的,输赢排行榜的数据要从mongoDb里面统计读取。数据库用的是sql server ,语言是php7.2,要求是3000的并发量。二、初步思路1.建立的数据表2.建立定时任务 每天0点 运行如下存储过程 把昨天的数据清零初始化将今天的输赢以及单次赢最大的数据更新到昨天的输赢以及单次赢最大上面去,并且把今日的除了score外的数据清03.建立定时任务 每30分钟去mongodb统计用户

2021-03-19 16:27:40 819 1

原创 linux防火墙操作

1.查看防火墙状态firewall -cmd --state开启防火墙systemctl start firewalld.service2.查看某个端口是否放行firewall-cmd --query-port=端口号/tcp3.放行指定端口firewall-cmd --zone=public --add-port=8080/tcp --permanent3.1.重启防火墙systemctl restart firewalld.service3.2 重新载入配置firewall-cmd

2021-03-05 15:28:11 53

原创 安装sqlserver驱动

https://docs.microsoft.com/zh-cn/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017

2021-03-05 15:22:10 7169 2

原创 mongodb 聚合查询 $sum

##mongodb 聚合查询 $sum 1.字段的类型必须相同 比如 ![数据字段类型](https://img-blog.csdnimg.cn/2020091815523675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTE1Njk1Mw==,size_16,color_FFFFFF,t_70#pic_cent

2020-09-18 17:09:27 3278

空空如也

空空如也

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

TA关注的人

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