自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go解析的数据类型可能含有不同数据结构的处理方式

最近做一个需求,各种业务消息都会往我的消息队列中写各种类型的数据,服务端需要接受各种不同的参数然后转换为本地数据结构,Go语言不确定上游传过来的数值是什么类型,然后又下面四种解决方案。

2024-05-14 17:02:05 181

原创 缓存击穿、缓存穿透、缓存雪崩详解

相信很多人写代码都是下面这个逻辑,拿数据的时候,先去缓存拿,缓存拿不到就去数据库里读,读取到了设置缓存然后返回,读取不到就直接抛出错误,下面最致命的问题就是如果别人一直丢给你一个不存在的ID,大量的请求是可以直接到你的DB的,你的数据库一直在查询一个不存在的记录,假设我绕过了你的验证可以直接请求你的数据,ab开10w个请求同时请求你接口,瞬间你数据库qps就上去了,很可能就把你DB给打挂了。缓存穿透通常是由于黑客攻击、恶意访问或者缓存未命中时导致的。

2023-04-07 16:55:59 165

原创 乐观锁的作用(php代码实现)

在执行更新操作前,需要先查询出该用户的当前 version 值,然后将其作为条件加入到更新语句中,以保证在更新操作执行期间,其他进程或线程不能同时进行更新操作。乐观锁的实现方式,一般是在表中添加一个版本号或时间戳等字段,在更新操作时,同时更新版本号或时间戳,同时判断是否更新成功。如果更新失败,说明数据已被其他进程或线程修改,需要重新查询数据,再进行更新操作。在上述情况下,用户1和用户2同时进行充值,最终账户余额却只增加了100元,出现了数据不一致的情况。用户1充值时,查询到账户余额为 100 元;

2023-04-06 18:06:35 566

原创 缓存穿透解决方案

这时候有个非常简单的办法,不管请求数据是否存在,你都要写入缓存一个唯一标识,比如0,查不到数据你也会写入标识,下次别人重复请求接口,他拿到的是缓存数据,这时候代码中可以判断是否有用户信息,如果没有用户信息,只有防缓存穿透的标识,这时候你可以扔报错或者其他逻辑。缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。假设缓存数据库是Redis,比如我们查询用户45709823的用户信息,

2022-08-19 11:02:49 306

原创 PHP多线程

PHP多线程

2022-08-18 15:10:58 103

原创 PHP nginx header配置和 php header设置会冲突

踩到一坑,记录一哈nginx有一个配置php代码中还有一个配置然后就double了,前端调用会出错跨域的配置尽量往nginx搞,不要代码一套,nginx一套

2022-02-14 16:26:26 1362

原创 postman设置全局token

postman设置全局token场景很多,比如后台功能所有的接口都需要调用登录接口获取到Token以后,把token放到header头里面才允许调用后面的接口,那么我现在有几百几个接口,总不能一个个添加token吧?当我重新登录以后,旧有的Token失效,重新改一遍人会疯掉的如上图,注意一下我红框框起来的内容,postman有单元测试的功能,当我们点击send发送请求以后,会返回请求的数据,也就是responseBody的内容,单元测试的功能什么时候执行呢,请求完毕后就会执行tests里面的脚本了

2021-12-08 15:12:34 4279

原创 py2.7 UnicodeEncodeError解决方案

接个需求,需要从hive集群中捞出一部分数据写入表中,需要用 spark-submit把python脚本打包成压缩文件放到hive集群中执行,,本地python脚本是3.6的,然后hive集群中的py脚本是2.7的,当我处理完数据insert回表中的时候一直报错UnicodeEncodeError: 'ascii' codec can't encode character u'\u79c3' in position 1这个报错不是来自本地环境,也就是不是python3.6版本的报错,是集群中跑的pyth

2021-11-22 11:15:50 1206

原创 PHP线段填充算法

线段填充算法最近做ABTest平台,每个实验会独占坐标轴的一段长度,假设C实验坐标起止点为[16,20](总长度5),当C实验停止后,假设来了F实验,F实验的所需要占坐标轴的长度为 15,我需要从C空出来的坐标开始填充,因为F实验大于C空出来的总长度,所以需要把F实验拆成N段,获取F实验的所有拆分的坐标起止点~,大概这么个意思吧,自己记录一下$arr = [ [0, 0], [60, 62], [5, 10], [38, 45], [89, 92],

2021-10-11 20:41:58 160

原创 版本语义化说明

1. ^2.2.1 指定的主版本号下,所有更新的版本,匹配 2.2.3, 2.3.0;不匹配1.0.3, 3.0.1 2. ~2.2.1 知道的主版本号.次版本号下,所有更新的版本,匹配 2.2.3,2.2.9;不匹配2.3.0,2.4.53. >=2.1 版本号大于或等于2.1.0,匹配2.1.2,3.1;不匹配 2.0,1.04. <=2.3 版本号小于等于2.2.0,匹配1.0.0,2.1.2;不匹配 2.3,2.4.15. 1.0.0 - 2.0.0 版本号在1.0

2021-09-10 14:53:25 81

原创 Linux 获取文件的绝对路径

比如我想获取 a.php 的绝对路径echo `pwd`/a.phpls `pwd`/a.php

2021-09-08 18:28:15 448

原创 Git 分支和文件名重名的时候如何切换分支

今天拉了一个项目,准备 `git checkout test`分支合并个代码,![在这里插入图片描述](https://img-blog.csdnimg.cn/1c07b6345257416e90c4c15091fe7dba.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAVmVuY2VudHk=,size_29,color_FFFFFF,t_70,g_se,x_16)...

2021-08-25 18:15:05 1024

原创 Nginx + Lua实现灰度发布

Nginx中可以嵌套Lua代码,Lua代码可以获取Redis中存储的允许灰度发布的IP地址,查看当前用户IP地址,在允许灰度发布的IP集合中,那么返回最新代码,否则返回旧代码,借此实现灰度发布功能,再做一个管理界面,根据策略选取一部分用户,把IP捞到Redis中,实现灰度发布...

2021-08-17 10:37:23 244

原创 Javascript 格式化json字符串

const jsonStr = [{"id":"level","template-id":"select","text":"段位","isMulti":false,"binds":{"price":true},"required":true,"options":[{"text":"英勇黄金","value":"英勇黄金","price":{"min":50,"max":100}},{"text":"坚韧白金","value":"坚韧白金","price":{"min":50,"max":150}},{"te

2021-08-04 14:21:30 1179

原创 docker standard_init_linux.go:228: exec user process caused: no such file or directory

解决方案我是Windows系统,安装了wsl ,Ubuntu系统,Wsl可以和Win系统文件互通,所以可以通过/mnt 下访问你的 c d e f ... 的各种盘sudo apt install dos2unixdoc2unix 你要修改的目录文件即可如下图然后启动docker容器就OK了...

2021-08-03 15:58:59 6043 5

原创 MySQL学习资源整理

1.MySQL事务隔离级别2.MySQL悲观锁与乐观锁3.MySQL覆盖索引与回表4.MySQL explain 下所有关键字用法5.MySQL 分库分表方案6.MySQL索引失效的情况

2021-07-27 19:43:30 74

转载 MySQL覆盖索引与回表查询

简单了解看这里,侵权删~

2021-07-27 19:24:45 75

原创 订单支付异常处理

场景最近在做一个陪玩的业务,我是服务端开发,里面牵扯到了订单以及支付,我们接入的非支付宝或微信,而是公司内部专门的经济系统(支付系统),经济系统的同事提供了以下1.预扣款接口,这时候用户钱被暂时扣掉,此时还没有进入主播口袋2.确认接口,主播接单后调用此接口会把预扣款接口扣除的钱打给主播3.退还接口,调用此接口会把预扣款的钱给退回,一般订单超时或者主播拒绝接单以后会这么调用#mermaid-svg-KB2Bo72Zi9d0hxTt .label{font-family:'trebuchet ms',

2021-07-27 16:28:17 1651

原创 记录一次Mysql gone away故障

起因业务部门反馈测试环境进不去了,查了一下日志报错,inesrt log表的时候Mysql gone away,1.show process_list查看一下是否有死锁的进程,发现 state 字段下大量的waitting for table level lock,出现了表级锁等待的场景,我们的数据库是InnoDB引擎,大概率猜测一下问题原因可能是大量的事物排队待读,同时这时候我们出现写表操作,就会出现这种问题,但是测试库的一个log表示不会出现这么高并发读的场景的2.后来发现是某个同事在mysql

2021-06-01 17:05:14 301

原创 bootstrap-fileinput 用法详解

【传送门】

2021-05-14 14:59:08 1090

原创 Laravel在Docker中访问慢的解决方案

关闭以后需要重启,并且会导致已有镜像全部丢失,不过访问会加快Windows下基本都是用Docker Desktop来操作的,而这个软件是基于 wsl2 的,wsl2跟wsl不一样,wsl是模拟了Linux环境,wsl2是有一个真的Linux系统内核,而Docker如果使用wsl2引擎,wsl2和windows的文件产生交互的时候,会走网络进行传输,另外ntfs => ext4 中间也会经过转换,会导致IO操作巨慢,小项目可能感觉不出来什么,Laravel这种动辄加载几十个文件的项目就会感到明显的..

2021-05-08 17:20:19 1801 2

原创 Windows使用Docker出现exit 139错误

使用Docker Desktop启动一个镜像以后,发现直接 EXITED(139)这时候用 docker log containerId 也获取不到任何日志问题缘由找了比较多的资料哈,Centos6下对Docker支持确实是有些问题,反过来Docker下面部署Centos 6环境的镜像也会导致一些问题我找到的资料目前账主要是libc的版本低于2.14会导致出现 exit 139 的这样一个问题,我自己在Docker下做了实验,拉去 Centos6.6 - Centos 7 系列镜像运行结果如下

2021-04-29 18:25:44 6399 4

转载 Linux硬链接和软连接的区别与总结

这哥们儿写的不错,转一下传送门

2021-04-22 18:13:01 91

原创 Nginx作为web server访问出现 file not found

问题原因1.确实不存在文件2.文件无权限访问这么简短的信息是无法帮助我们排查问题的,我们需要在nginx的配置文件中设置error log文件error_log /data/nginx/logs/xxx.com/error.log;然后读取文件内容tail -f /data/nginx/logs/xxx.com/error.log这时候返回去访问网页,然后回到服务器查看error.log输出的内容,根据错误日志内容进行调整我这边发现的问题是我把 代码目录放置到 /home/xxx目录中

2021-04-22 17:59:03 281

原创 Go 设置阿里源镜像地址

go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/

2021-03-29 17:53:09 3125

原创 Go select详解

Go select调度Go中的select类似于Unix系统中的多路复用模型,当检测到有IO变化的时候,就会执行对应的case下的语句select 基本功能,接收功能下面的代码,我们创建了一个生成器,生成器随机睡眠1-2000ms并返回一个数值给C1和C2,然后channel有值以后,我们会把值写入到consumer(消费者)中,消费者会接收我们的数据并处理package mainimport ( "fmt" "math/rand" "time")// 生成器随机睡眠1-2000ms

2021-03-27 23:22:51 2031

原创 Go channel详解

无缓冲的channel下面代码一定报错,因为没有接收的函数就一个劲儿往c channel中发送数据func main() { c := make(chan int) c <- 1 c <- 2 n := <-c fmt.Println(n)}一定要创建一个go携程先接收,然后才可以往无缓冲的channel里面发送数据// 正确示范如下func main() { c := make(chan int) go func() { for { n := &l

2021-03-27 18:06:59 900

原创 Linux root用户rm -rf 无法删除文件 cannot remove ‘.user.ini’: Operation not permitted

大部分用户是在使用宝塔手动删除某个项目目录的时候出现的上述情况,就会很懵,为什么我已经是Root用户了,却依然无法删除这个文件呢?原因非常简单,是因为.user.ini这个文件通过chattr命令被设置了一个属性,不允许删除我们做下实验哈,进入Linux,随便找个目录都可以,我们以创建xxx这个文件为例,自行粘贴下面的bash操作自行演示一下即可touch xxxlsattr xxx # -------------e-- xxxchattr +i xxx # ----i--------e-- x

2021-03-16 22:01:32 1384

原创 PHP如何在json_encode的时候返回空对象{}而不是数组[]

前端用TypeScipt写的,后端在返回格式的时候最好格式统一掉比如PHP中经常犯的一个错误就是本来kv的结果,如果没有数据,可能塞个空数组就返回了,这样前端拿到以后就是像下面error_demo的数据一样,格式不统一,就会非常蛋疼了解决方法也非常简单, 想要输出空对象直接 new stdClass即可,具体看下面代码<?phpclass ResponseMessage{ public function errorDemo() { $results = [

2021-03-10 11:30:02 964

原创 PHP处理事务嵌套

Mysql是不支持事务嵌套的本来你定义了一个方法,如下function method1() { try { //开启事务 // 代码逻辑 // 提交事务 } catch(Exception $e) { // 回滚事务 }}上面的method1方法完美的支持了你的业务场景,随着业务场景越来越复杂,你同事也写了类似的method2,method3,最后你的BOSS要求你在一个接口里面一次性完成method1, method2,method3的功能,没有办法

2021-02-25 16:25:07 1510

原创 PHP轻量级延时队列任务实现以及可能存在的问题点

<?php$redis = new Redis;$redis->connect('127.0.0.1');$key = "order:delayqueue";function generateOrderNo(){ return '订单号:' . mt_rand(100000, 999999);}// 一秒后执行$redis->zAdd($key, ['NX'], time() + 1, json_encode(['orderNo' => generat

2021-02-23 16:31:38 202 2

原创 Elasticsearch常用写法

Elasticsearch这东西真没啥可说的,官方文档写的很详尽了,只不过是很多人英文水平比较弱,我说这话包括我自个儿哈,不过我硬着头皮是能看下去的,而且这东西也是支持SQL交互的,一般MySQL的写法在这里面也是兼容的,文档里也有写,不过写博客嘛,我就目前工作中碰到的查询语句,我会把SQL语言转化成同等的DSL查询,版本基于最新的Elasticsearch 7.9.1哈,大家仅供参考,官方文档才是唯一真理不过今天9-30号,明天九点回家的火车。。。今晚得早睡觉了,国庆后我找个时间把这个博客写完,祝大.

2020-09-30 22:43:27 2531

原创 Socket编程TCP协议粘包问题

Socket编程中,基于TCP协议的通信有时候会发生粘包问题,原因大家自行百度,已经收到这种问题应该了解粘包产生的原因哈TCP协议是可靠的字节流式协议,字节流可以理解为是水流,数据在网络中像水流一样传输,所以纯粹发送字符串一旦TCP底层发生粘包情况,数据表意将产生错误,比如你想发送,我今天发现一特有意思的事 这句话TCP可能给你拆成我今,天发,现一特有意,思的,事儿,只是举个简单例子哈,我们怎么处理这种问题呢,有多种方案一个是根据EOF拆分,这个EOF就是自定义的一个特殊符号,比如我们现在就约定.

2020-09-30 22:29:10 192

原创 Linux信号相关

Linux可以捕获信号,也可以忽略信号,在signal.h文件中宏定义了所有的信号名那么我选择忽略所有的信号的话,当前进程可能脱离系统控制,Linux并保留了SIGKILL信号永远无法忽略和捕获,所以向进程发送kill -SIGKILL 进程号或kill -9 进程号 是可以关闭掉进程的...

2020-05-01 19:46:23 109

原创 PHP员工考勤字符串算法

今天去面试,要求现场写一个算法,如上图,会议室里面试官+领导+我,还用我的笔记本连接了投影仪。。。我以为就是监控我不让我查百度或者不让查资料啥的,然后头皮发麻,原生PHP写吧,于是有了下面的方案function checkRecord($string){ $length = strlen($string); $i = 0; // 缺勤统计数 $absentCo...

2020-04-20 21:08:29 345

原创 PHP概率抽奖算法(空间换时间)

/** * 抽奖算法, * @param array $data * $array = [ * 'a' => 1, * 'b' => 1, * 'c' => 2, * 'd' => 4, * 'e' => 3, * ]; * @return mixed ...

2020-04-16 19:51:20 144

原创 PHP 值拷贝和引用拷贝

请出一个全国人民都认识的非著名人物,小明我们给小明起个好养活的名字,叫狗蛋小明有个双胞胎兄弟,叫阿发阿发是小明的值拷贝,狗蛋是小明的引用拷贝我让狗蛋把裤子脱了,那就是指挥小明脱裤子呗, 我让阿发把裤子脱了,那是阿发脱裤子,并不是小明,对吧上代码: // 这是小明$xiaoming = "小明";// 这是小明的小名狗蛋,这是引用拷贝$goudan = &$xiaomi...

2020-04-15 17:17:44 314

原创 PHP foreach中的问题

使用foreach总结下面几个问题,欢迎补充foreach不支持顺序输出数组代码如下:$commonArray = [1, 2, 3, 4, 5];$shuffleArray = [];$shuffleArray[1] = 1;$shuffleArray[2] = 0;$shuffleArray[0] = 9;$shuffleArray[3] = 2;$shuffleArra...

2020-04-15 15:37:50 232

原创 PHP中的陷阱【浮点数】

//TODO有空写,太忙了,主要是懒,刷微博抖音多好

2020-04-14 17:11:26 168

原创 PHP中的陷阱【函数】

TODO

2020-04-14 17:08:38 127

空空如也

空空如也

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

TA关注的人

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