- 博客(35)
- 收藏
- 关注
原创 Mac M2芯片使用 protoc v3.15.6
如果执行成功后版本依然不是需要的这个版本,可以看一下默认的protoc文件是否不是我们新安装的。看一下这个安装目录,是否是之前有通过brew或者其他途径安装并且没有清除干净的可执行文件。之前同事有上传的可执行文件,但是下载下来之后不能执行,可能是M2的问题。brew上没有v3.15.6版本的,无法直接通过brew下载。上找相应版本的可执行文件,发现没有适配M2芯片的文件。没有办法,直接下载源文件,自己编译。先准备好编译需要用到的依赖环境。执行之后检查一下版本是否正确。进入到下载的源文件目录中。
2023-07-03 14:13:23 522
原创 腾讯云数据库监控(资源监控)
内存使用率过高导致OOM之后会触发主备切换,主备切换期间会导致服务短时间不可用。若数据量比较大,即使索引和执行计划没什么问题,也会导致 CPU 利用率过高。系统资源出现瓶颈, IO很慢导致正常的查询也很慢。无法继续写入数据,数据库会异常关闭甚至崩溃。来查看慢查询的详细信息,并获取优化建议。导致网络拥堵,访问延迟,产生额外费用。各个链接的私有内存使用过多。
2023-06-12 18:50:28 186
原创  ;与空格的区别
在html中 ;是空格的占位符,这6个字符是一整整体一个 ;代表一个空格,两个代表两个空格和空格的区别在于:普通的连续空格在html中会被认为是一个空格
2022-06-23 15:48:53 919
原创 驱动表和被驱动表
判断方式没有where条件时左连接查询时前面的表是驱动表,后面的表是被驱动表右连接时相反内连接时哪张表数据少哪张表是驱动表有where条件时带where条件的是驱动表,否则是被驱动表连接查询的算法简单嵌套循环连接算法一旦确定了驱动表和被驱动表,那么查询的过程就是双重循环for (row1 : 驱动表) { for (row2 : 被驱动表){ if (conidtion == true){ send client }
2022-05-20 14:16:36 2379
原创 mysql explain信息
显示表结构explain table_name (等效于describe table_name)解释查询explain的每个输出行会包括下面的列idselect标识符,这是select的查询序列号select_typeselect类型,可以为以下任意一种:SIMPLE简单的select,不适用union或子查询PRIMARY最外面的selectUNIONunion中的第二个或后面的select语句DEPENDENT UNIONunion中的的第二个或后面的select
2022-05-17 18:56:57 123
原创 go语言函数传参传指针和传值的效率分析
转自:https://zhuanlan.zhihu.com/p/59751716原作者github:https://github.com/lvgithub/go_blog/blob/master/Escape/Escape.md函数传递指针还是传值?两种选择的本质区别是什么?哪种方式的性能更高呢?先说结论:不一定逃逸分析Go中有一个很重要的概念就是逃逸分析。逃逸分析是指由编译器决定内存分配的位置。分配在栈上:函数运行结束后自动回收分配在堆上:函数运行结束后由GC回收最终执行效率和这
2022-04-27 18:08:12 714
原创 Select count distinct if
count函数具有三种形式:count(*)count(expression)count(distinct expression)count(*)该COUNT(*)函数返回SELECT语句返回的结果集中的行数。返回行数,COUNT(*)包括重复、非 NULL 和NULL行。count(expression)作为表达式的结果,COUNT(expression)返回不包含NULL值的行数。COUNT(DISTINCT expression)COUNT(DISTINCT expression
2022-04-27 17:21:33 601
原创 app版本控制的几种方式
是否需要做版本控制?出入参保持不变,迭代对app无感知,不需要版本控制如果对比之前新增或者减少了参数,但是可以通过给默认值或者兼容零值的方式兼容老逻辑,不需要版本控制其他情况需要进行版本控制版本控制的几个方案灰度部署,通过nginx分发需要服务器机器支持灰度部署,比如目前服务器有两套,一套做灰度一套新版本。在请求的时候带上app版本号,通过nginx控制分发到灰度还是新版本。优点:可以通过监控灰度流量知道还有多少用户没有升级app,当灰度的流量降低到一定程度时可以将灰度机器也更新成新的代码
2022-04-14 19:24:01 4366
原创 cookie和session的原理和区别
共同点都是用来跟踪浏览器用户身份的会话方式区别cookie存在本地,session存在服务器cookie不是很安全,可以通过分析存放在本地的cookie进行cookie欺骗,如果有安全方面的考虑需要用sessionsession会一定时间内保存在服务器上。访问量多的时候会占用服务器性能,如果考虑到服务器性能压力比较大的话可以用cookiecookie有大小限制,大概3-4k,不太对浏览器不同cookie的过期时间可以在生成的时候设置进去,session是否过期取决于服务器的设置。sess
2022-04-07 20:29:32 441 2
原创 http1.0、http1.1、http2.0
http1.0和http1.1的区别长连接http1.1支持长连接和请求的流水线处理,在一个TCP链接上可以传送多个http请求和相应,减少了建立和关闭连接的消耗和延迟,在http1.1中默认开启长连接keep-alive,一定程度上弥补了http1.0每次请求都要创建连接的缺点。http1.0需要使用keep-alive参数告诉服务器端要建立一个长连接。节约带宽http1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象都传送过来,且不支持断点续传的功能。ht
2022-03-31 18:37:39 3520
原创 http到https的演变
HTTP为什么不安全?http是明文传输,正是因为这一点导致了三大风险窃听中间人可以直接获取到通信内容,因为内容是明文篡改中间人可以篡改报文内容后再发送给对方冒充中间人可以冒充你想通信的服务器安全通信的四大原则机密性完整性身份认证不可否认HTTPS原理对称加密定义:加密和解密使用的密钥相同特点:速度快性能高HTTPS最终采用对称加密方式。那么就有了一个很关键的问题:服务器和客户端怎么协商出来这个密钥?如果通过报文传,那么还是会被中间人截获
2022-03-31 17:57:57 2359
原创 mysql group by之后每组取前n个数据
mysql 8.0之后可以使用内置的ROW_NUMBER()函数使用方法很简单,详细的用法可以参考https://www.begtut.com/mysql/mysql-row-number-function.htmlmysql 8.0以前没有这样的函数,因此我们需要手动的来实现这个。其实实现的方法也很简单。问题假设我们现在有一张数据量很大的表(千万以上),比如说一张活动表。表里记录了每一种活动每次发奖的明细,现在我们想知道每个活动获得积分最高的10个用户。create table ( `
2022-03-25 18:41:12 3547
原创 自动对账系统的设计实现
需求背景现在每个月大概有几百万个订单,来自十几个不同的渠道,同时区分货币和子渠道,财务在进行对账的时候只能从对方后台下载excel对账账单,然后从我方统计出相应时间内的订单数,然后挨个excel进行累加求和,最后对比总单数和总金额。痛点这样整体进行对账无法确认差异明细,一旦出现差异很难在上百万的订单中找出差异的订单。每个渠道散落在不同的国家,渠道后台导出的时间和我方后台使用的时间时区并不一致,可能会导致由于时区产生的几小时数据误差(比如我方是UTC,对方是UTC+8,对方以UTC+8的标准导出2月
2022-03-23 18:06:29 1836
原创 go map的扩容过程
核心源码// src/runtime/hashmap.go/mapassign// 触发扩容时机if !h.growing() && (overLoadFactor(int64(h.count), h.B) || tooManyOverflowBuckets(h.noverflow, h.B)) { hashGrow(t, h) }// 装载因子超过 6.5func overLoadFactor(count int64, B uint8) bool {
2022-03-14 18:47:28 1604 1
原创 go Map底层是怎么实现的
Go采用的是哈希查找表,使用链表解决哈希冲突来实现map源码中map的结构体是hmap:// A header for a Go map.type hmap struct { // 元素个数,调用 len(map) 时,直接返回此值 count int flags uint8 // buckets 的对数 log_2 B uint8 // overflow 的 bucket 近似数 noverflow uint16 // 计算 key 的哈希的时候
2022-03-14 17:00:34 217
原创 mysql delete/update select查询的数据
delete from user where id in (select id from user where id < 100)这样写会报错:You can't specify target table 'student' for update in FROM clause如果删除/更新和子查询使用同一张表会报上述错误解决方法:起别名delete from user where id in (select a.id from (select id from user where id &
2022-03-14 15:53:12 1272
原创 Gin 中间件的使用
Gin 中间件的使用中间件的使用router := gin..Default()Default源码:func Default() *Engine { debugPrintWARNINGDefault() engine := New() engine.Use(Logger(), Recovery()) //这里的Logger和Recovery就是两个中间件 return engine}如果想要使用新的中间件的话只需要添加router.Use(xxx)即可自定义中间件先看下上述
2021-12-31 15:55:02 383
原创 Mysql 查询json字段(json_extract())
假设我们在user表的extra字段中存储了一条json数据: {"name":"abab","tel":"123456789"} 可以通过select json_extract(extra,'$.name'),json_extract(extra,'$.tel') from user 来获得json中存储的字段。...
2021-11-29 14:50:43 678
原创 Mysql COALESCE()函数
需求背景: 假设我们有一个流水表,流水表里记录了用户获得礼物的信息。不同的用户对收到的礼物折现的比例不同,由于长时间的迭代逻辑,控制这个折现比例的字段不止一个。 具体来说,需要首先判断level字段,查看用户是否有等级认证,如果有,则根据等级认证的逻辑来计算折现比例。其次,再查看是否是优质用户,如果是优质用户则根据优质用户的逻辑来计算折现比例,再然后查看是否是一般认证用户,如果是,则根据一般认证用户的逻辑来计算折现比例,...
2021-11-29 14:43:52 627
原创 vim 快捷替换
原文链接vim替换命令_glorin的专栏-CSDN博客_vim 替换匹配行尾部: $匹配行首部: ^假设我们有一个excel表格需要导入数据库(excel表格的字段需要与数据库的字段顺序一致并且要满足数据库字段的限制条件)eg: user_id user_name password 1 aaa bbb 2 ...
2021-11-25 18:02:48 535
原创 redis主从切换导致主节点IP变化的处理方式
通过vip技术假设有两台服务器,一主(A,IP地址为IP1)一从(B,IP地址为IP2)。那么他们需要占用3个网络地址,正常情况下工作主机的自有地址是被工作地址所取代的,就是说当A在工作时,A的IP从IP1变为IP3,当发生主从切换时,A不再正常工作,A的地址变回IP1,B开始工作,那么B的地址变为IP3。 这样对于外部的客户端来说,只需要对IP3进行请求,而主从切换只是修改了主节点的IP映射通过哨兵 在对redis进行配置的时候并不指定主节点...
2021-11-08 11:23:55 1597
原创 PHP闭包的用法和好处
闭包和匿名函数并不是同一个概念,但是在PHP中认为这两者是相同的。使用方式直接上代码<?phpfunction mux($a,$b){ $a = $a+1; $func1 = function() use ($a) { return $a*10; }; var_dump($func1()); return $func1;}$result = mux(1,2);var_dump("========");var_d..
2021-11-04 10:48:41 287
原创 数据库分表
纵向分表 假设我们本来有一张表存放了博客信息,字段包括作者,博客内容,发布时间,浏览量,点赞数,收益等等。 对于博客系统来说,作者,博客内容,发布时间这些信息是属于查询量大但是修改不频繁的(冷数据),而浏览量,点赞数等数据是修改频率比较高的(活跃数据)。所以在进行表结构设计时,可以将冷数据和活跃数据分开处理。 分开处理的好处:对于冷数据来说可以使用MyIsam引擎以达到更好的查询操作,对于活跃数据来说可以使用Inno...
2021-11-03 23:10:11 718
原创 在线不停机修改大表结构
假设我们需要修改一张生产环境正在使用的表的表结构,比如添加字段,修改字段类型,修改索引等,有两种方法。假设原表为table1一. 手动循环插入首先创建新表table2,在新表中修改以满足自己的需要。 循环原表,将数据分批插入新表中 通过rename操作修改表名,实现两表的替换。(RENAME TABLE table1 TO table_old,table2TO table1;) 但是这种方法存在隐患,当步骤2进行到一半,即原表中的数据有一半插入到新表时,如果已经插入的数据在原...
2021-11-03 23:00:08 362
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人