09 2024 档案
clickhouse压测
摘要:Clickhouse压测 压测工具: jemter 服务器监控脚本 sql准备: 简单sql select * from tb_plan_student where plan_id=1122980766105344 and region_id=330302 limit 10 简单sql 部分字段 s
线上间歇性卡顿问题
摘要:
事情起因 最近一段时间我们公司有个项目是做视力筛查的,平时都是正常的,但是最近这两天突然会时不时地卡顿一下,一卡就是几分钟。 排查过程 1.查看日志 卡顿首先是排查日志,日志报的是feign调用学生服务超时,进到学生服务查看时,看到日志报的是事务超时 2.继续排查,既然是事务超时,查看mysql锁

如何防止短信攻击
摘要:加密字符串sms_token 首先生成一个加密token,包含以下内容: 时间戳 设备id,优先通过前端的能力(比如uniapp自带的功能)获取设备id,如果获取不到则前端自己生成,然后存在本地(可以取为time这样,值采用时间戳) 加密方式: des+盐(盐暂时固定一个,后面有必要可以从服务端获取
项目推送到git新仓库
摘要:设置远程仓库 git remote add origin http://192.168.1.1:9580/program/name.git 如果已有仓库(如果从github开源下载下来默认是有的): git remote set-url origin http://192.168.1.1:9580/
spring @cacheable 注解使用spel表达式
摘要:这里主要讲一下复杂的spel表达式,简单的不写了 解析集合 集合需要先自定义一个方法,比如getAuthorsName,然后在注解里通过root.target.getAuthorsName把方法引用进去 public class BookService { public String getAuth
oauth2为什么一定要授权码?
摘要:引用网上图片来说明一下 理解这个OAuth2的关键是要记住,code是前端持有的,access_token是后端持有的,code是用来一次性换access_token的,access_token才是后续请求资源的认证信息 那么为什么第4步不是直接返回access_token,而是code呢? 原因:
各种限流算法对比
摘要:算法 实现 优缺点 固定窗口算法 固定窗口算法通过在单位时间内维护一个计数器,能够限制在每个固定的时间段内请求通过的次数,以达到限流的效果。 固定窗口算法的优点是实现简单,但是可能无法应对突发流量的情况,比如每秒允许放行100个请求,但是在0.9秒前都没有请求进来,这就造成了在0.9秒到1秒这段时间
记录奇思妙想
摘要:引言 生活中总会发现一些奇思妙想,但是又得不到科学验证,我一直想记录这些东西。 奇思妙想 1.有没有一种感觉,感冒病毒传染给别人了,自己就好了?仿佛病毒有一个主病毒,这个主病毒是有思想的一样。 2.飞机是通过空气动力学来运作的,而不是模仿鸟类,但是模仿鸟类是不是会更简单一些?能不能做一对翅膀,加上机
分布式环境如何更新本地缓存
摘要:引言 本地缓存是一种常用的缓存手段,在客户端会经常使用这种手段来提升效率,但服务端在分布式环境下它出现的频率并不高,原因是本地缓存无法做到多台服务器数据共享,因此我们会采用redis这种分布式缓存,然而在某些情况下我们还是要使用的话怎么办呢?网上基本查不到有人去做这种分布式环境使用本地缓存,又要实时
msyql排查锁超时和死锁
摘要:一、锁超时 先查看当前事务,看看有没有事务时间超时的 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 查到如下结果: INSERT INTO information_schema.INNODB_TRX (trx_id, trx_state, trx_star
线上锁超时排查(手动事务transactionTemplate导致的诡异锁超时)---此篇篇幅很长,带好瓜子
摘要:事情起因 起因是某天线上突然不停报锁超时,重启后又会变正常,但是在某个时刻又会重复发生。这个是报错的日志(日志对检测这种bug不一定有用,唯一的作用就是告诉我们啥表被锁了,但是看不出因为啥被锁的) ### SQL: INSERT INTO t_check_record ( id,create_tim
linux监控命令
摘要:分享一部分我写的监控命令,如下: 1.cpu监控 top -b -n 1 | grep Cpu | awk '{print $2}' | cut -f 1 -d '%' 这个命令返回的是cpu的用户那部分的使用率,就是us那一项,一般情况下我们监控这个指标就可以 这个使用率一般超90%需要警告 2.
mysql性能优化(索引)
摘要:mysql大部分性能的问题都出在索引上,因此索引优化是头等大事 1.最左匹配原则 这是索引基本的匹配原则,这里不多说,只要记住索引是要按顺序创建的,mysql是按顺序去b+树上查找的就行 2.Using temporary; Using filesort 往往出现这个都代表着不好的情况,通常是在gr
mysql事务隔离级别和spring事务传播机制
摘要:一、事务并发会出现的三个问题 数据库事务具有ACID4个特性: A:Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行; C:Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100; I:Isolati
记录一次线上oom排查
摘要:近日线上出现了一次oom,话不多说,马上排查。 排查经过 由于情况比较紧急,直接先重启了服务,这是老项目,当时也没有开启dump日志,所以获取不到当时的dump日志。 我们先是拿了一部分gc日志用于观察,下面是部分gc的日志 2023-10-09T10:01:08.920+0800: 15.687:
记录一次线上网关bug---gateway
摘要:问题描述 最近一次压测的过程中发现一个奇怪的bug,调A服务的接口,但是ip和端口却是B服务的,调B服务的接口,但是ip和端口却是A服务的。 比如调用A服务的接口,本来应该是 http://192.168.10.10:8100/api/testA,调用B服务的接口,应该是 http://192.16
关于扔硬币的概率问题
摘要:有趣的话题 如果连续扔了10次硬币,8次向上,2次向下,下一次硬币向下的概率是多少?在我们的认知里,这就是一个独立概率的问题,也就是概率永远是一半,不管前面扔了多少次向上,下一次向下的概率是不会变的,这是一个数学界都公认的原理,但是我偏偏不信科学,我就是觉得应该是向下的概率大,因此我想验证一下。 我
mysql优化技巧
摘要:一、mysql在线ddl 例如建索引,常规建索引会发生锁表的情况,特别是大表建索引会持续很久,一直锁表是肯定不行的,因此就有了在线建索引 SQL如下: ALTER TABLE tb_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE
电商系统的简单设计
摘要:订单模块 作为电商系统,首入眼帘的就是订单模块,也是电商基础的模块之一。订单流程包含了订单从下单到完成的整个流程,订单的状态如下: 这里迎来了第一个问题,可以看到订单状态有非常多种,如果用if else去做判断,逻辑会非常多,这时候就需要用到状态机模式了,状态机如何使用我这里不细讲,可以自行去百度。
限流器的实践
摘要:背景 我们有一个业务场景是给学生发布考试,发布的过程不复杂,就是一个老师传递一些考试相关的参数过来,服务器自动给所有学生生成一份任务,但是在学生上交的时候会有个问题,就是成百上千的学生一起上交,会有并发流量的问题。 这里由于我们的考试可能会设计多个班级的联考,乃至一个学校或多个学校的联考,因为上交成
领域驱动设计实战
摘要:领域驱动介绍: 什么是领域模型设计?基于对象vs基于数据库 设计上我们通常从两种维度入手: a. Data Modeling:通过数据抽象系统关系,也就是数据库设计 b. Object Modeling:通过面向对象方式抽象系统关系,也就是面向对象设计 我们目前就是依据Data Modeling设计
如何求算法复杂度
摘要:如何求算法复杂度?比如下面的例子 i=1; while (i<=n) i=i*2; 我们可以看到要跳出循环条件为i<=n,即最终结果是n=i,那么假设循环K次,n=2^(k-1),k=log2n+1,所以是O(log2n)的时间复杂度。 由于这里只用到一个变量i来存储结果,所以空间复杂度是O(1)
正确创建索引,索引何时失效?
摘要:正确的创建合适的索引,是提升数据库查询性能的基础。在正式讲解之前,对后面举例中使用的表结构先简单看一下: create table user ( id bigint not null comment 'id' primary key, name varchar(200) null comment '
线程池
摘要:ThreadPoolExecutor构造方法 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> wor
Mysql常备sql-1(数据库数据相关)
摘要:一、查看各个数据库的大小 select table_schema as '数据库',sum(table_rows) as '记录数',sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',sum(truncate(index_length/102
如何计算比给定数字大的2的幂数
摘要:举例 比如3,计算后得出4,比如6,计算后得出8, 这种根据人类最直观的想法,当然一下能看出来,因为我们会去估计大于这个数字的2^n方是多少,但是数字大了就不是人类该做的事情了 如果根据最简单的思维,从2的0次方开始,增加n值,一个个循环试过去,也可以找到这个值,但是效率显然很低,我从源码里找到了两
Linux查看日志各种方式
摘要:我发现有很多小伙伴都不会正确地查看日志,总喜欢拿tail和cat去查询,这里我分享一些查看日志的命令。先说结论,less是最适合的 一、less方式 命令格式 1.命令格式: less [参数] 文件 2.命令功能: less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅
lambda表达式从发烧到退烧,它为何效率低下?
摘要:我以前做压测的时候,偶然发现lambda表达式的效率很低,但凡有lambada表达式的地方cpu指标都会超限,那么现在我来研究一下为何会如此低下(以下内容部分会参考网上其他作者的) public static void main(String[] args) { List<Integer> list
机器学习-贝叶斯算法的研究和实践(评论检测)
摘要:项目背景: ★ 我们公司的应用有个需求是对用户发表的评论进行过滤,除了人工审核干预以外,我们还需要自动化检测评论来规避这些行为,为此我们研究贝叶斯算法,写了评论检测的项目用于过滤垃圾评论。 贝叶斯算法介绍 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,
TCP三次握手与四次挥手
摘要:一、三次握手 什么是三次握手? 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认; 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Ac