- 博客(153)
- 资源 (6)
- 收藏
- 关注
原创 如何建立单元测试
zixun-quickstart-mk3生成的项目已经配置好了基础的BaseTest,各个测试类只需要继承BaseTest就可以开始进行单元测试的编写了。
2023-08-18 10:38:19
1036
原创 压测标准和接口
此处省略部分细节,介绍压测流程,提供给已了解细节的人快速进行压测。强烈建议首次进行压测者详细阅读全文注意最大qps和预期qps的区别估算预期qps准备数据,单一请求/固定值枚举随机/线上流量测试环境80.188压测:不求找到瓶颈,只为排查比较明显的程序问题,由于测试环境性能有限,可以将部分低性能依赖mock掉这一步可以这样压:wrk -t8 c200 d60s --latency -H “Host:host−−latencyhost−−late。
2023-08-18 10:37:28
268
原创 压测的注意事项
1、压测的时候需要不断对 自己当前的压测参数,观察后台的指标的变化,目的是为了 不让空跑的现象发生,另外如果接口的情况比较复杂的话,不要只压测最简单的接口,也要查看是否压到了最坏的情况(没有命中缓存的情况、链接数升高的情况)3、保证压测的结果更准,要记得去分析性能的瓶颈。2、压测的线程数 是内核的2-3倍。5、怎么分析系统的瓶颈。
2023-08-18 10:20:51
218
原创 什么是边车
Sidecar:边车。微服务中数据平面的进程,负责转发应用、服务请求,并支持限流、熔断、负载均衡等特性。Control-plane: 控制平面。微服务的配置中心,负责配置下发、数据搜集、服务发现等功能。应用: 应用是指服务的使用方。注:有些服务可能既有服务使用方又有服务提供方的角色。服务: 服务是指服务的提供方。
2023-08-18 10:20:16
442
原创 作为工程师应该具备哪些素质
美团技术团队做了很多我喜欢的框架他们的文章也非常棒,以下内容来自于 美团技术团队技术基本功存在于每一行代码中@美团金融技术负责人。
2023-08-18 10:19:06
237
原创 怎么写一个项目方案
线上qps2000,主要的性能瓶颈在于出现在数据库I/O上。另外,如果是一个正常部署的容器,qps能达到几百就不错了。资讯服务现在做了静态的底层页,所以热点新闻多数会命中底层页,即便没有命中底层页,也会走多层的缓存,不会直接打到资讯服务的接口上。
2023-08-18 10:17:22
131
原创 Mysql 几条好用的调优方法
区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。再或者使用连接来替换。这样的语句,普通索引是无法满足查询需求的。如果连接方式是inner join,在没有其他过滤条件的情况下MySQL会自动选择小表作为驱动表,但是left join在驱动表的选择上遵循的是左边驱动右边的原则,即left join左边的表名为驱动表。优化的方法如下:可以取前一页的最大行数的id,然后根据这个最大的id来限制下一页的起点。
2023-08-18 10:06:40
138
原创 Mysql 建索引规范
今天在建线上表的时候,做了一个varchar的索引,运维说varchar的索引会占用很大的内存。于是 上网搜了一下建索引规范。
2023-08-14 11:25:06
355
原创 了解一下Caffine
一、简介Caffeine 是基于Java 8 开发的、提供了近乎最佳命中率的高性能本地缓存组件,Spring5 开始不再支持 Guava Cache,改为使用 Caffeine。不管在并发读、并发写还是并发读写的场景下,Caffeine 的性能都大幅领先于其他本地开源缓存组件。本文先介绍 Caffeine 实现原理,再讲解如何在项目中使用 Caffeine。二、Caffeine 原理2.1 淘汰算法2.1.1 常见算法对于 Java 进程内缓存我们可以通过 HashMap 来实现。
2023-08-14 11:22:10
151
原创 什么是 fullgc
先说一下结论,Full GC这个概念是没有官方定义的,而且含义还特别混乱,在不同地方表达的含义是不同的,需要就不同的场景分别进行讨论。
2023-08-14 11:21:32
396
原创 Java堆、栈、内存的知识
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
2023-08-14 11:19:52
554
原创 HashMap源码 学习日志
int h;int h = 0;return h;一般的数据结构,不是查询快就是插入快,HashMap就是一个插入慢、查询快的数据结构。但这种数据结构容易产生两种问题:① 如果空间利用率高,那么经过的哈希算法计算存储位置的时候,会发现很多存储位置已经有数据了(哈希冲突);② 如果为了避免发生哈希冲突,增大数组容量,就会导致空间利用率不高。而加载因子就是表示Hash表中元素的填满程度。加载因子 = 填入表中的元素个数 / 散列表的长度。
2023-08-14 11:18:57
154
原创 如何给ELK日志加上索引
业务日志里的log patter放了seq 字段,那就可以在进入aop的时候 打上seq作为日志的字段索引,然后在处理流程结束的时候,拿出seq字段索引,这样排查的时候,就可以根据这个字段来排查了。1、遇到长流程的时候,日志记录是非常重要的。如何排查日志,可以在MDC中去put对应的值,这样就等于对你关心的关键字段加上了索引,在elk中可以通过该索引就能 容易排查到问题。同样的,如果是kafka的接受类,你可以把 offset和partition作为字段索引,也是及其好用的。
2023-08-14 11:13:27
863
原创 返回参数规范
目录接口参考 项目目录结构设计,增加部分领域模型后缀强制定义,方便统一编码风格。controller:请求处理module:按大业务区分,对多个业务对象数据聚合处理@Componentmanager:按业务对象区分,对同一业务对象的数据聚合处理@Componentservice:按业务对象区分,主要负责数据获取impl:主要负责数据获取的接口的具体实现@Servicedao:主要负责数据访问层xxxDao:固定后缀 Daoconfig:配置类集合目录。
2023-08-14 11:11:35
334
原创 Sentinel使用实例
默认限流异常处理URL 限流触发后默认处理逻辑是,直接返回 “Blocked by Sentinel (flow limiting)”。@Override使用注解下的限流异常处理如果需要自定义处理逻辑,填写注解的属性(针对所有类型的,需自行判断)或fallback属性(针对熔断降级异常),注意对应方法的签名和位置有限制,详情见Sentinel 注解支持文档。
2023-08-14 11:09:38
1321
原创 年轻代频繁GC ParNew导致http变慢
某日下午大约四点多,接到合作方消息,线上环境,我这边维护的某http服务突然大量超时(对方超时时间设置为300ms),我迅速到鹰眼平台开启采样,发现该服务平均QPS到了120左右,平均RT在2秒多到3秒,部分毛刺高达5到6秒(正常时候在60ms左右)。qps情况:rt情况。
2023-08-09 10:00:10
2169
原创 Jstack线上问题排查
1.top查找出哪个进程消耗的cpu高。执行top命令,默认是进程视图,其中PID是进程号(记下进程号)2.top中shift+h 或“H”查找出哪个线程消耗的cpu高 (记下最高的几个线程号)4、printf “%x\n” 线程号(得到线程16进制)
2023-08-09 09:52:44
310
原创 业务日志里加上traceId
业务日志里的log patter放了seq 字段,那就可以在进入aop的时候 打上seq作为日志的字段索引,然后在处理流程结束的时候,拿出seq字段索引,这样排查的时候,就可以根据这个字段来排查了。1、遇到长流程的时候,日志记录是非常重要的。如何排查日志,可以在MDC中去put对应的值,这样就等于对你关心的关键字段加上了索引,在elk中可以通过该索引就能 容易排查到问题。同样的,如果是kafka的接受类,你可以把 offset和partition作为字段索引,也是及其好用的。
2023-08-09 09:50:07
350
原创 线上容器卡顿的排查思路
CPU 内存不超过 80%Heap 不超过 80%non-Heap 正常[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-coGpw0v2-1691545686403)(/uploads/new2021/images/m_845526dc8feb927116914051c6d735d1_r.png)]这个曲线是正常的。表示jvm中有足够的空间。
2023-08-09 09:48:23
151
原创 mysql高并发下主键自增打来的问题
如果数据库的并发率很高,比如在插入记录后执行查询主键之前,数据库又执行了若干条插入记录的SQL语句,这时,通过表1 返回的主键值就是最后一条插入语句的主键值,而非我们希望的主键值了。在很多情况下,我们需要获取新对象持久化后的主键值。在JDBC 3.0之前的版本中,PreparedStatement不能绑定主键,如果采用表自增键(如MySql的auto increment或SqlServer的identity)将给获取正确的主键值带来挑战——因为你必须在插入数据后,马上执行另一条获取新增主键的查询语句。
2023-08-09 09:45:59
1123
原创 什么事P95、P99
前段时间,在对系统进行改版后,经常会有用户投诉说页面响应较慢,我们看了看监控数据,发现从接口响应时间的平均值来看在500ms左右,也算符合要求,不至于像用户说的那么慢,岁很费解,后来观察其它的一些指标发现确实是有问题,这个指标就是P95,P99.9,我们发现虽然平均响应时间并不高,但P95和P99.9却达到了2s以上,说明我们的接口确实存在慢查询。于是捞取了一些慢查询的请求日志终于发现问题。那么P95、P99又代表什么意思呢?
2023-08-09 09:45:04
1576
原创 如何阐述自己做了一个什么样的东西
线上qps2000,主要的性能瓶颈在于出现在数据库I/O上。另外,如果是一个正常部署的容器,qps能达到几百就不错了。资讯服务现在做了静态的底层页,所以热点新闻多数会命中底层页,即便没有命中底层页,也会走多层的缓存,不会直接打到资讯服务的接口上。
2023-08-09 09:39:26
112
原创 如何解决高并发问题(思路)
对于一些大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好。并发就是可以使用多个线程或进程,同时处理(就是并发)不同的操作。
2023-08-08 15:34:40
254
原创 Bean 和 static的区别
Static 没有办法控制在多个并发请求的时候,只生成一个实例。有多少个请求就会生成多少个 实例,那么此时如果用 @Bean的方式来注解,就会启用SpringBoot中的单例模式,从始至终都只有一个实例。静态方法我们都知道,那么@Bean的方式怎么使用呢?
2023-08-08 15:33:31
486
原创 静态方法为什么不能用非静态变量
写到这答案已经出来了,静态方法是属于类的,动态方法属于实例对象,在类加载的时候就会分配内存,可以 通过类名直接去访问,非静态成员(变量和方法)属于类的对象,所以只有该对象初始化之后才存在,然后通过类的对象去访问。这些内存都在方法区分配。注意此时就会为我们的类变量也就是静态变量分配内存,但是普通成员变量还没。我们需要首先知道的是静态方法和静态变量是属于某一个类,而不属于类的对象。也就是说如果我们在静态方法中调用非静态成员变量会超前,可能会调用了一个还未初始化的变量。验证的主要作用就是确保被加载的类的正确性。
2023-08-08 15:32:51
209
原创 Java Kafka 怎么写
KafkaListener 用于消费类,代表说你的topic产生一条数据时,只要你是对应的group,就会自动收到一条对应的消息,此时在里头写执行代码,就做到了 kafka放出消息自动执行。gruopid 是 org.springframework.kafka。pom文件 引入的jar包是 spring-kafka。
2023-08-08 15:31:58
981
原创 Java Mongo怎么写
注意这里有一个 if (StrUtil.isNotEmpty(replicaSet)) ,就是通过这层设置来判断是集群连接还是单点连接。这里因为是 单点的mongo,所以 replicaSet写成 “”,待会儿会对replicaSet的值进行判断,来判断它是单点还是集群。哦对了,还有Mongo的实体类是怎么定义的。先前积累了一套 mongo的做法,但是只能针对于单点进行操作,这个教程可以帮助你,无论是单点还是集群,都能连接的上进行操作。其实就是在原本的类的声明的基础上加了 @Document的注解。
2023-08-08 15:31:22
141
原创 项目规范 编写规范(范例)
目录接口参考 项目目录结构设计,增加部分领域模型后缀强制定义,方便统一编码风格。controller:请求处理module:按大业务区分,对多个业务对象数据聚合处理@Componentmanager:按业务对象区分,对同一业务对象的数据聚合处理@Componentservice:按业务对象区分,主要负责数据获取impl:主要负责数据获取的接口的具体实现@Servicedao:主要负责数据访问层xxxDao:固定后缀 Daoconfig:配置类集合目录。
2023-08-08 15:30:37
301
批量处理文件名.bat
2019-12-23
SSM网上商城项目.zip
2019-10-31
文件名批处理.7z
2019-10-12
【基础练习】jsp+servlet+jdbc 网上购物商系统(带sql脚本)
2019-08-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人