自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 由“cpu使用率”如何计算开始的基础知识学习过程

线程名是dubbo提供者,看堆栈是在从线程池获取task的时候没获取到于是处于waiting状态阻塞了,要等待被其他线程显式的唤醒。看来dubbo线程池还蛮大的,线程id都到142了,虽然此时都在waiting状态没有任务在被处理,但如果请求量上来了可能会频繁切换上下文,造成cpu开销增大。把jstack快照dump下来,top信息一起被dump了,这个时候300+个线程都处于sleeping状态,没有任何线程在running。废话不多说,直接找cpu占用率最高的线程。线上CPU飚高了,原因是什么?

2024-01-26 15:57:09 249

原创 项目管理经验总结

需求优先级管理需求阶段确保需求无漏洞、无歧义。确保开发/测试对需求理解到位。管理手段:需求评审流程沉淀:产品将需求文档在评审前1天发出,研发侧有时间去看再小的需求都必须有文字记录,比如用1句话在tapd进行描述开发阶段开发质量保证按时完成进度管理手段:早会、进步同步文档、项目群每日个人总结进度管理协同较多、跨域项目建议使用会议形式,有利于问题解决。协同较少、小型项目建议使用定期按量完成联调阶段前后端一致测试阶段

2024-01-23 17:01:48 383

原创 项目结构总结

1、防腐层,是为了在外部变化时,保持防腐边界内代码的不变。从而避免变化域内外的代码耦合度增高,引发频繁变更导致的边界内代码腐烂。

2024-01-22 11:43:05 372

原创 高可用初探

VRRP路由器是指运行VRRP的路由器,是物理实体;处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器,一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器VRRP协议从路由器组中选出一台作为主控路由器,负责ARP解析和转发IP数据包,组中的其他路由器作为备份的角色并处于待命状态,当由于某种原因主控路由器发生故障时,其中的一台备份路由器能在瞬间的时延后升级为主控路由器,由于此切换非常迅速而且不用改变IP地址和MAC地址,故对终端使用者系统是透明的。

2023-12-18 10:09:34 36

原创 【参数汇总】mysql服务端/客户端常见优化参数

一般地,mysql 5.7、8.0 下 INNODB_BUFFER_POOL_INSTANCES 默认为1(单实例),若 mysql 存在高并发和高负载访问,设置为1则会造成大量线程对 BUFFER_POOL 的单实例互斥锁竞争,这样会存在一定量的性能问题, 该参数可以设置为服务器 CPU 核心数,这样可在一定程度上提供并发性能。innodb_log_file_size 值越大,在缓冲池中需要检查点刷新的行为就越少,因此也越节约磁盘I/O,但更大的日志文件也意味着在崩溃时恢复得更慢。

2023-12-13 10:28:48 287

原创 业务设计原则

不同业务的流程,流程节点代码可重用,方便不同需求复用。

2023-12-08 16:45:48 172

原创 springboot参数汇总

(默认值: false)spring.groovy.template.expose-spring-macro-helpers 是否发布供 Spring 宏程序库使用的 RequestContext ,并将其命名为 springMacro- RequestContext。spring.velocity.expose-spring-macro-helpers 是否发布供 Spring 宏程序库使用的 RequestContext ,并将其名命为 springMacro- RequestContext。

2023-11-30 10:42:00 244

原创 服务器运行情况及线上排查问题常用命令

三个数字分别代表了1分钟,5分钟,15分钟的统计值,这个数值的确能反应服务器的负载情况。但是,这个数值高了也并不能直接代表这台机器的性能有问题,可能是因为正在进行CPU密集型的计算,也有可能是因为I/O问题导致运行队列堵了。内存信息和swap信息,所有程序的运行都是在内存中进行的,所以内存的性能对与服务器来说非常重要。Swap分区是由硬盘提供的交换区,当物理内存不够用的时候,操作系统才会把暂时不用的数据放到Swap中。RES 进程使用的、未被换出的物理内存大小,单位kb。以下是几个需要注意的参数。

2023-11-28 11:12:15 1215

原创 副本读最终一致性探究及其解决方案

其实,在读取请求中表现出一模一样的样子也是很难的,基本上业务系统只要求在所有数据大部分时间内表现出副本读一致性,而少部分数据是可以在少部分时间内读不一致的,但这个读不一致必须是可随着时间推移无操作自然恢复。副本读一致性则是不要求任何时刻它们真的一模一样,而是在读取请求中表现出一模一样的样子。其常见的场景如下:缓存和db之间的副本读一致性,es和mysql之间的副本读一致性,主库和从库的副本读一致性。下面让我们以redis和mysql之间的同步为例,来挨个探讨副本读一致性的解决方案。

2023-11-23 17:11:58 93

原创 mysql使用规范【转载】

update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘最后修改时间’,在修改表结构时,如果有缩短字段长度,且存在大于新的长度的表记录时,会导致修改失败并回滚,且回滚的时间比较长,整个过程是锁表操作,从而影响正常业务。注1:无法确认时,条件值允许统一加上单引号,因为MySQL会优先转换为数值,比如 where id=‘123’ 只会隐式转换’123’为123。

2023-11-22 15:38:50 74

原创 常见的幂等性保障方案

在实际的写入请求之前,先插入幂等表,幂等表插入成功则可以继续执行,若插入失败则表明已做过相应操作,执行失败时应回滚幂等表。当多次执行相同的操作时,如果没有幂等性,会产生不可预料的结果。例如在数据库中插入一条记录时,如果没有使用幂等性,可能会导致多条相同的记录被插入。上面的代码中,使用了VALUES子句来获取插入时的值,使得更新操作与插入操作一样。数据幂等性是指相同的操作在不同时间执行多次所产生的结果是一样的,它是保证操作的可靠性和正确性的重要标准。该方法能够保障数据库插入操作时的幂等性。

2023-11-21 14:55:11 85

原创 服务发布规范

服务发布是一次对线上环境的一次震荡,且前后端分离架构、微服务架构扩充了能够利用的服务器资源,却给服务发布带来很多衍生问题。ps:每次点写文章就要弹出新手指南、教我一次怎么发布,还必须手动点关闭。这交互和校验逻辑怎么设计的啊。1.配置维护:配置应当是原则上各环境一致,允许出现根据环境配置不同的情况,但是必须在发布灰度环境前有检查卡点。提供给前端的api,不可删除字段,新增字段不可为必填。1.已暴露给外部的api,必须兼容旧api。一、checklist。

2023-08-01 00:16:38 79

原创 微服务与sop工程结构的优缺点分析

2.从前者引出的,是微服务独立却完整,因此会有许多重复代码。大部分是service+repository构成一个微服务,微服务间不互相依赖,通过middle来复用代码,使用消息队列通信。sop的controller、service和repository是独立的,且controller还会根据业务领域划分。1.微服务的service是相对完整、独立可运行的单元,sop更强调层、间、互相协作的概念。

2023-07-31 23:45:34 108

原创 降级场景(待整理)

降级可以分为前端或者后端降级。

2023-07-31 17:12:32 67

原创 canal之作为万能数据触发流

canal数据变更之后再触发写日志,真正的解藕且数据已经执行成功才会收到通知,canal发到kafka的stream,用消息做了最终一致性。canal的思想是以数据变更为触发点,实现异步操作。它是高一致性的异步。它是无侵入性的后置流程处理。后续学习canal基础知识之后再填坑。以前日志需要做切面,还需要考虑写入失败的问题。有了canal就什么都想往里面扔。

2023-07-25 00:14:30 56

原创 kafka topic迁移方案及过程记录(待整理)

kafka的topic如果一开始没有做合理拆分,在业务不断膨胀的情况下,容易产生消息堆积,问题难以定位排查。二、新增发送者、从原topic拆出部分消息作为新topic、consumer group不变。三、新增发送者、从原topic拆出部分消息作为新topic、新增consumer group。四、新增发送者、从原topic拆出部分消息作为新topic、旧topic消息不变。一、发送者不变、topic不变、新增consumer group。五、新增发送者、旧发送者下线、新增topic。

2023-07-25 00:02:27 1182

原创 表冷热改造方案及过程记录

冷热分离的目的在于提升热数据的性能,给冷数据分配较少的资源从而节约资源。热数据的范围越小,冷热改造的意义就越大。同时,需要确保冷数据足够冷,应该是终态数据(无改动),且访问频率低、性能要求低。阶段改造点序号冷表创建创建冷表,结构与热表一致1冷热双查改造单条查询改为先查热表,查不到则访问冷表,同时加冷表读开关,平时开关是关闭状态,业务特殊需求时才需要开启2冷热双查改造多条查询改为同时查冷热表并聚合返回,分页先查热再拼凑冷表数据3冷表写入改造定时任务每天将

2023-07-24 23:49:36 164

原创 后端服务迁移方案及过程记录

阶段时序动作双写+数据对比1新rdb集群上线双写+数据对比2新服务上线,无流量双写+数据对比2后台处理程序,新服务上线一份新的双写+数据对比2消费二方mq,新服务使用新的消费组消费原有消息双写+数据对比3新旧服务比较转发服务comparator上线,定时拉取新旧库数据对比是否一致,并打印对比日志双写+数据对比4旧服务改造上线双写+数据对比4旧服务http读、写请求转发comparator,再转发到新服务双写+数据对比

2023-07-24 23:15:07 721

原创 后台项目的类别配置化及通用化设计

不好的地方是由于场景类别对应的语义是动态的,保存在数据库里,前端操作框只能强绑定场景code,导致前端出现魔数和表意模糊等问题。通用化除了减少重复性工作外,往往还意味着功能升级,在原有共同基础功能的基础上,迭代出更强大的能力。比如权限,层级,排序等。其次是性能问题,每次用户查询类别或者代码根据类别走不同逻辑的判断,都需要一次dsl。3后端统一接口根据场景及权限筛选类别,查询类别表返回。4前后端详情及保存,使用类别编码交互,查询类别表。具体产品场景的类别通用化,统一管理,统一开发护。

2023-07-24 12:36:16 114

原创 搭建elasticsearch过程中遇到问题记录

解压es之前,新建用户做后续操作,root用户无法启动es。关掉ssl或者使用https://访问。##2.增大普通用户可打开最大文件数。##3.增大普通用户可启动线程数。保存后,执行:sysctl ‐p。##5.启动es成功后,不可访问。##4.增大用户可使用虚拟内存。

2023-07-21 14:04:43 200

原创 限购设计

我们的限购是耦合在商品,当作商品和sku属性,而不是单独的限购模块。限购需要在结算页及提交订单时进行校验。购物车和商品详情不校验历史,只校验当前加购数。所以重点及难点在于下单,就以下单为例说明限购设计。下单时,在校验完参数及优惠券、活动有效性等校验之后,增改业务之前,调用限购校验服务。...

2019-12-03 22:43:29 1523

原创 mysql学习笔记

一、连接查询中用较小的表作为驱动表,或在单表筛选条件后更少记录的那张表作为驱动表

2019-09-11 14:50:55 123

原创 子类调用spring中注入的父类属性不生效问题

在使用shiro过程中,在启动注入时在shiroConfig中,指定了authenticationCachingEnabled=true。 @Bean("shiroRealm") public ShiroRealm shiroRealm() { ShiroRealm shiroRealm = new ShiroRealm(); shiroRea...

2019-08-08 11:02:26 2229

原创 shiro整合springboot,前后端分离项目踩坑记录

一、重写过滤器shiro自己帮我们封装了一系列过滤器,对于常见的一些操作,比如登陆,登出,认证不通过等,shiro会通过我们配置的url,找到相应过滤器,做完操作会跳转到我们配置的跳转url中。但是对于前后端分离项目,前端通过ajax调用接口,获取返回值展示后再跳。比如展示“暂无权限”等提示语,友好一些。所以要对shiro已有的过滤器进行继承重写。登出过滤器:public class...

2019-07-15 14:19:03 1039

原创 建表注意问题-相关经验

2019.05.13:这次需求是拼团。一开始思考是建3张表。拼团配置表、团的表、用户参团表。最后改动了点小地方:拼团配置表的相关商品信息以及开始结束时间等信息冗余到了团的表。因为配置会在活动过程中被编辑改变,而我们不希望已经开团的团被改变。...

2019-05-14 10:30:32 284

原创 maven重复引入jar包导致的一次问题

现象:项目启动时不断刷这一行,启动失败。2019-05-05 17:35:04 WARN org.springframework.beans.factory.support.DefaultListableBeanFactory:1490 - Bean creation exception on non-lazy FactoryBean type check: org.springframe...

2019-05-06 14:51:08 1679

原创 新增字段时注意问题

*当实体类字段为包装类型时为null,数据库字段不可为null且有默认值,用mybatis增操作会失败。*当实体类字段为基本类型,mybatis有判空操作(test field != null),不会失败。...

2019-04-09 11:27:52 474

原创 bug锦集

仅为记录所有大大小小的bug,谨为警示自己。需求列表:19.03.28:首页弹窗需求19.04.04:猜你喜欢后台编辑&前台展示19.04.09:会员专属优惠券,会员课程详情,领取优惠券,付费详情19.04.15:用户对课程评分,评分统计与展示19.04.26:“用户领取”优惠券,猜你喜欢“换一换”19.05.15:拼团功能,详情页重构19.05.31:签到...

2019-04-02 15:05:59 216

原创 解决cmd控制台tomcat乱码 和 idea控制台tomcat乱码

cmd:https://www.cnblogs.com/blogzhangwei/p/8889651.html只做了前两步idea:https://blog.csdn.net/nan_cheung/article/details/79337273全部步骤照做才好

2019-03-28 17:22:00 280

原创 建造者(内部类)两种实现

用内部类作为建造者的建造链路,好处是方便、快捷,可以自由选择想要赋值的参数而不用写一大堆set,也不知道能set啥。第一种:内部类不维护变量,调用方法时直接赋值给需要建造的对象public class Dinner{ private boolean hasCandle; private boolean hasFlower; private int peop...

2019-03-26 17:37:25 355

原创 git报错“could not read from remote repository”

昨天在一台新电脑配环境,用idea pull项目,点击test后在下面的界面报错“could not read from remote repository”。我点击下面的lot in to github输入密码然后提示unable to access host by token。。。具体错误忘了。反正提示是token相关错误。token。。token?突然想到git的ssh方...

2019-03-26 14:49:45 1849

原创 java8 菱形继承问题

java8的接口新增了默认方法的功能,这样使得接口的功能跟抽象类更为接近,不过却导致了一个菱形继承问题。interface top{ default int face(){ return 1; }}interface middle1 extends top{ @Override default int face(){ re...

2019-03-26 14:35:50 1234

原创 dubbo

dubbo疑难杂症:https://blog.csdn.net/u012100371/article/details/78849813dubbo原理:https://blog.csdn.net/moshowgame/article/details/85048716

2019-03-23 23:40:44 60

原创 rocketmq推-拉模式

rocketmq不管是推模式还是拉模式底层都是拉模式,突然想明白为什么。因为消息存储在broker中,通过topic和tags区分消息队列。这时producer在发送消息时不关心consumer对应的topic和tags,只将消息发送到对应broker的对应topic和tags中。如果是推模式,broker则需要知道哪些consumer拥有哪些topic和tags,但在consumer重启或更...

2019-03-22 22:48:27 4263

原创 fastjson解析对象中的坑

最近敲demo时JSON.parseObject,遇到了一个坑,json字符串解析对象时有两个字段一直赋值不正确,json字符串中字段值=1,但解析出来的对象字段值=0。看了一下正跟一个构造函数的默认赋值相吻合。代码如下:public static class Funnel { int capacity; float leakingRate; int leftQuot...

2019-03-19 22:35:05 3028

原创 java后台实现大量数据的实时展示+条件查询+分页

需求是,实时展示数据库里大量各种设备的实时值,加上条件查询和分页。需求难点在于,实时和大量。如果是实时排行榜,那么全部存在redis的zset里,前端轮询读取即可。但这是大数据,还有分页和条件查询,总不能把数据库的数据都塞进redis,如果要,则要多加几个数据结构来支持分页和条件搜索,每次查询都变得笨重,难看。我的解决方案如下:既然是实时,那么就不要笨重的前端轮询,而是用数据库的bin...

2019-03-03 11:24:57 9020 1

原创 一个简单邮件发送需求的实现涉及到的知识点

最近在开发一个监控的需求,我需要将分库分表没有落地的数据校验出来,制作成邮件发送出去。我们环境的分库分表是分成32个库(32台机器),每个库中32张表,crc32会将任何字符串转换为一个long型数字。任何数字模以x的结果都会平均分布在0-(x-1)区间内,利用这一点,我们以字符串为维度去分库分表,先用crc32算法得到一个long值,再用他模以表的总数得到key。这个key/32就是db索引...

2018-07-17 17:17:12 1423

原创 拷贝简单对象的四种方法及性能分析

前言实际项目中,我们常常需要对对象进行拷贝,此文将列出四种常见的对象拷贝方式,并针对它们分别做出实验进行性能分析。此次实验用于拷贝的简单对象如下:class CurrencyDailyBo implements Serializable { private static final long serialVersionUID = 1L; private int id; private Date day;

2018-06-29 15:51:56 1011

原创 高并发的琐碎

一、https://www.cnblogs.com/sheseido/p/5038562.html乐观锁(java代码)解决高并发。

2018-03-04 08:23:09 125

原创 多线程的琐碎

一、http://wangym.iteye.com/blog/1265973这篇文章介绍了:1.java的synchronize同步【静态】方法的监视器对象是类本身,非静态方法的监视器是对象。2.同一个监视器一段时间只允许一个线程运行它的代码。二、http://blog.csdn.net/jingzi123456789/article/details/69951057这篇文章介绍了:阻塞(wait...

2018-03-03 12:38:05 186

空空如也

空空如也

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

TA关注的人

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