关于Serializable的认识
首先,如果对象需要网络传输或者持久化(我的理解是dto和entity/model),那么就需要实现Serializable接口。为了防止反序列失败,该对象需提供一个默认的serialVersionUID(该值在反序列化的时候会进行校验,如果校验失败会抛异常-InvalidClassException)。 但如果只是转换为json字符串的形式与网络打交道(比如MVC中前后端分离情况下,返回json-response给前端),那么这个response对象就不需要实现Serializable接口。 关于UID serialVersionUID有两种显式的生成方式: 12一个是默认的1L一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段, 如果没有显式地定义一个名为serialVersionUID的long型的变量,编译器在编译的时候也会根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,这就决定了这个类在序列化上一定不是向前兼容的 使用默认计算的serialVersionUID就会有一个明显的劣势 1234使用默认计算的seria...
利用KeyTool生成自签名证书
任何机构或者个人都可以申请数字证书,并使用由CA机构颁发的数字证书为自己的应用保驾护航。常用的两个证书管理工具:KeyTool,OpenSSL--->构建CSR(Certificate Signing Request,数字证书签发申请),交由CA机构签发,形成最终的数字证书。 最近用到p12文件,就记录一下如何使用jdk自带的keytool来创建p12文件 打开cmd,切换到jdk的bin目录下 输入命令 1keytool -genkeypair -alias serverkey -keyalg RSA -keysize 2048 -validity 3650 -keystore D:\rabbitmq\tls-gen-master\p12test.keystore 参数解释: 12345678storepass: keystore文件存储密码,不加这个参数会在后面要求你输入密码 keypass 私钥加解密密码 alias 实体别名(包括证书私钥) dname 证书个人信息 keyalg 采用公钥算法,默认是DSA,这里采用RSA keysize 密钥长度...
如何使用jstack分析异常线程以及线程状态
使用top命令定位异常进程。找到CPU和内存占用率都非常高的pid,假设为11268 top 此时可以再执行ps -ef | grep java,查看所有的java进程,在结果中找到进程号为11268的进程,可以查看是哪个应用占用的该进程。 ps -ef|grep java 使用top -H -p 进程号查看异常线程,(-H : 加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。) top -H -p 11268 使用printf "%x\n" 线程号将异常线程号转化为16进制,假设异常线程为11422 printf "%x\n" 11422 -> 2c9e 使用jstack 进程号|grep 16进制异常线程号 -A90来定位异常代码的位置(-A90是指输出的日志行数)。可以看到异常代码的位置。 jstack 11268|grep 2c9e -A90 介绍top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使用率排序 通过top -Hp 可以查看...
线程池知识记录
七大参数一、corePoolSize 线程池核心线程大小12线程池中会维护一个最小的线程数量,即使这些线程处理空闲状态,他们也不会被销毁,除非设置了allowCoreThreadTimeOut。这里的最小线程数量即是corePoolSize。 二、maximumPoolSize 线程池最大线程数量1234一个任务被提交到线程池以后,首先会找有没有空闲存活线程,如果有则直接将任务交给这个空闲线程来执行,如果没有则会缓存到工作队列中,如果工作队列满了,才会创建一个新线程,然后从工作队列的头部取出一个任务交由新线程来处理,而将刚提交的任务放入工作队列尾部。线程池不会无限制的去创建新线程,它会有一个最大线程数量的限制,这个数量即由maximunPoolSize指定。 三、keepAliveTime 空闲线程存活时间12一个线程如果处于空闲状态,并且当前的线程数量大于corePoolSize,那么在指定时间后,这个空闲线程会被销毁,这里的指定时间由keepAliveTime来设定 四、unit 空闲线程存活时间单位1keepAliveTime的计量单位 五、workQueue 工作队列12...
设计模式
面向对象设计原则我们在进行软件开发时,不仅仅需要将最基本的业务给完成,还要考虑整个项目的可维护性和可复用性,我们开发的项目不单单需要我们自己来维护,同时也需要其他的开发者一起来进行共同维护,因此我们在编写代码时,应该尽可能的规范。如果我们在编写代码时不注重这些问题,整个团队项目就像一座屎山,随着项目的不断扩大,整体结构只会越来越遭。 甚至到最后你会发现,我们的程序居然是稳定运行在BUG之上的… 所以,为了尽可能避免这种情况的发生,我们就来聊聊面向对象设计原则。 单一职责原则单一职责原则(Simple Responsibility Pinciple,SRP)是最简单的面向对象设计原则,它用于控制类的粒度大小。 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 比如我们现在有一个People类: 123456789101112131415161718192021222324252627282930//一个人类public class People { /** * 人类会编程 */ public void coding()...
QPS,PV,UV,RT之间的关系
QPS: 每秒查询率(Query Per Second),每秒的响应请求数,也即是最大吞吐能力。 QPS = rep/sec = 请求数/秒 QPS 统计方式【一般使用http_load进行统计 QPS = 总请求数 / (进程总数 *请求时间) QPS: 单个进程每秒请求服务器的成功次数 峰值 QPS: 每天 80% 的访问集中在 20% 的时间里,这 20% 的时间叫做峰值时间 公式: (总 pv 数 * 80%)/ (每天秒数 * 20%) = 峰值时间每秒请求数据(QPS) PV: 访问量即 Page View,即页面浏览量或点击量,用户每次刷新即被计算一次单台服务器每天 PV 计算 公式1(峰值): 每天总 PV = QPS * 3600 * 6 公式2(normal): 每天总 PV = QPS * 3600 * 8 UV: 独立访客即 Unique Visitor,访问您网站的电脑哭护短为一个访客,00:00-24:00 内相同的客户端只被计...
jmeter模拟浏览器行为发送请求(web页面端压力测试)
背景 在做性能测试的时候,有时候我们希望测试用户访问一个web页面的加载时间,使用 jmeter 压测的话,需模拟浏览器的行为,加载整个页面的内容。包含一些js,css,png图片资源等文件的加载。 参考: https://blog.csdn.net/meitingbee/article/details/53924469 https://blog.csdn.net/qq_27371025/article/details/117945423 https://www.jianshu.com/p/c5370860b142
jmeter线程组执行顺序设置
背景 当前请求需要上一个请求响应的数据做参数的值传入到当前请求里,这种情况必须保证上一个请求先执行,才能保证当前请求可以得到参数的值 操作 此示例为将登陆之后获取的cookie放置到全局变量中, 供后续线程组使用 按此配置后, 执行顺序会从上到下依次执行 注: 如果使用了不同的线程组可能会遇到非预期执行顺序的现象 除了主线程组,还有两种特殊的线程组:setUp线程组和tearDown线程组. 它们与主线程组区别在于,setUp线程在主线程执行前自动触发执行;而tearDown线程组在主线程结束后执行。 setUp线程组可以用于测试准备,比如用它来创建测试用户等。 Teardown线程组可以用于测试清理工作,比如删除测试用户等。
json提取器使用方法
一、 json path 语法 在线网站地址:链接 摘自https://blog.csdn.net/qq_45664055/article/details/121523930 1、提取lastName的值可以写$.lastName $: 代表整个json,根节点 . : 点代表下个节点 $.lastName 意思就是,找到根节点下的lastName的值 2、提取根节点下的 address,下的streetAddress 根节点下的 address是一个对象,在json中以{}括起来的叫对象,city是address对象的子节点,所以表达式写为:$.address.streetAddress 3、提取列表中的值 phoneNumbers的值是一个列表,列表使用[] 括起来,列表中可以存放多个对象。 提取phoneNumbers列表中的第一个对象的type的值,语法:$.phoneNumbers[0].type 取列表里面的值,要在后面加上[],里面填写索引值,第一个对象 对应索引0, 第二个对应索引1,以此类推。 二、JMeter中使用JSON 注:以下演示接口是自己写的,...
软链接和硬链接的用法
查看软/硬连接123456789101112[root@k3s-node4 bin]# ls -ltotal 25844-rwxr-xr-x 1 root root 26451968 Mar 29 02:23 docker-composelrwxrwxrwx 1 root root 26 Apr 6 02:16 node -> /usr/local/nodejs/bin/node-rwxr-xr-x 1 root root 3506 Apr 14 09:27 node-gyplrwxrwxrwx 1 root root 25 Apr 6 02:16 npm -> /usr/local/nodejs/bin/npm-rwxr-xr-x 1 root root 177 Apr 14 09:27 npx-rw-r--r-- 1 root root 27 Apr 14 09:28 package-lock.jsonlrwxrwxrwx 1 root root 25 Apr 14 09:37 pm2...
