
面试
文章平均质量分 62
AlbenXie
这个作者很懒,什么都没留下…
展开
-
Tomcat优化
通过上述的测试,可以总结出,对tomcat性能优化就是需要不断的进行调整参数,然后测试结果,可能会调优也可能会调差,这时就需要借助于gc的可视化工具来看gc的情况。再帮我我们做出决策应该调整哪些参数。转载 2023-07-01 20:59:56 · 171 阅读 · 0 评论 -
Java启动参数、调优及分析
java启动参数共分为三类;其一是(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;一、标准参数参数描述-client设置jvm使用client模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或者PC应用开发和调试-server。转载 2023-06-30 21:22:22 · 2020 阅读 · 0 评论 -
大厂面试题:Springboot可以同时处理多少请求?
像我们刚刚应用程序当中所示,我们的最大连接数呢配置的是30,最大等待数是10,最大工作线程数是20,最小工作线程数是10,然后我们的连接我们的qps是100,那这个过程是什么样的呢?可以看到此时的这个异常数是60%,也就是我们的100请求当中呢,只有40次成功了,其中60次是失败的。实际我们在服务器当中,要去调整这几个参数的话,得结合很多的指标,比如说我们服务器的硬件的性能,io模型,网络,还要结合一些压测,服务器的监控,实际的数据,才能设置最佳性能的一个配置。的一些参数,参数的意思呢,后面会讲到。原创 2023-06-24 21:14:56 · 731 阅读 · 1 评论 -
Bridge设计模式
Bridge设计模式:分离抽象和具体,然后抽象部分可以按照自己的继承树来发展;同样具体部分也可以按照自己的继承树来发展;最后用聚合方式(桥)连接抽象和具体。原创 2023-05-28 20:36:20 · 133 阅读 · 0 评论 -
Adapter(Wrapper)设计模式
Adapter(Wrapper)模式-适配器/接口转换器通俗解释:当一个类不能直接访问另外一个类的时候,中间加一个转换;就叫适配器。原创 2023-05-28 19:54:02 · 152 阅读 · 0 评论 -
一次Full GC导致CPU飙升的排查过程
我们决定调整jvm参数,扩大内存,修改jvm垃圾收集器,扩大内存后,后面还是出现了该问题,不过这次只是cpu飙升,系统没有出现卡顿,出现问题后,我们使用如下命令,查看jvm堆内存快照,线程堆栈,等信息。因为这次调整了堆内存大小,触发问题后,没有进行full gc,对象还在,查看内存对象占用比,发现相关代码问题,一次性加载了150万的实例到对象中,调整内存之前加载该对象后,导致内存飙升,触发gc,进而引起cpu使用率飙升。从监控看到,cpu,内存,磁盘,网络在异常发生时都有明显的抖动。转载 2023-05-04 21:35:28 · 1323 阅读 · 0 评论 -
性能优化-内存泄漏、内存溢出、cpu占用高、死锁、栈溢出、FullGC频繁检测手段-总结与分享
含义:内层溢出通俗理解就是内存不够,程序要求的内存超出了系统所能分配的范围。危害:内存溢出错误会导致处理数据的任务失败,甚至会引发平台崩溃等严重后果。应用程序CPU使用率高,甚至超过100%死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。Java 里的 StackOverflowError。抛出这个错误表明应用程序因为深递归导致栈被耗尽了。转载 2023-05-04 21:27:01 · 1732 阅读 · 0 评论 -
java程序CPU使用率高可能的原因
在Java并发编程计算密集型要进行大量的计算、逻辑判断等操作,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数,我们设置线程数一般是:计算机核数n+1。计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python这样的脚本语言运行效率很低,完全不适合计算密集型任务。原创 2023-05-04 20:53:23 · 4955 阅读 · 0 评论 -
从3s到25ms!看人家的接口优化技巧,确实很优雅!
批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次 IO。//for循环单笔入库insert();});//批量入库JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原原先数组中的内容复制过来,最后,原先的数组再被回收。可见Vector容量的扩大是一个颇费时间的事。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小。更正:自己设定初始大小。转载 2023-05-02 01:27:29 · 341 阅读 · 0 评论 -
细数线程池的10个坑
使用线程池时,如果没有给线程池一个有意义的名称,将不好排查回溯问题。这不算一个坑吧,只能说给以后排查埋坑,哈哈。我还是单独把它放出来算一个点,因为个人觉得这个还是比较重要的。/*** 关注公众号:捡田螺的小男孩*/System.out.println("关注公众号:捡田螺的小男孩");});关注公众号:捡田螺的小男孩可以发现,默认打印的线程池名字是,如果排查问题起来,并不友好。因此建议大家给自己线程池自定义个容易识别的名字。其实用。转载 2023-04-23 18:03:29 · 338 阅读 · 0 评论 -
Java Agent 探针技术
是指 JVM 提供的一种进程间通信的功能,能让一个进程传命令给另一个进程,并进行一些内部的操作,比如进行线程 dump,那么就需要执行 jstack 进行,然后把 pid 等参数传递给需要 dump 的线程来执行。这里每个类加载的时候都会走这个方法,我们可以通过className进行指定类的拦截,然后借助javassist这个工具,进行对Class的处理,这里的思想和反射类似,但是要比反射功能更加强大,可以动态修改字节码。查找类的特定于平台的机制失败后,引导类加载器会搜索这些路径。按列出的顺序搜索路径。转载 2023-02-24 17:13:54 · 1729 阅读 · 0 评论 -
全链路灰度
这里的服务概念就比较模糊了,可以是特定版本的服务,比如说V1、V2。也可以是,服务起来之后打对应tag标签,这一类的服务是灰度标识,灰度流量走这边~其中能负载的是那种根据serviceId来查询服务,如果你通过host、url那种来请求,拜拜了,干不了。其实很简单,首先我们需要一套规则体系,rule,然后在网关层进行筛选流量,进行打标。在网关流量染色之后,通过Nacos注册中心,改写负载均衡算法,进行路由到对应的服务。这个更好理解了,小明是老赖,我看见小明就知道他是老赖,不需要去翻他资料,对吧。转载 2023-02-21 21:37:31 · 796 阅读 · 0 评论 -
系统设计系列之如何设计一个短链服务
短链服务其实比较简单,没有太多的业务逻辑,主要考察对于分布式系统常用设计的理解,也是经常被用在面试过程中的一道题。这里只是提供大家一些设计思路,文中涉及到的发号器(分布式ID)、布隆过滤器、MurmurHash等都没有太过深入,因为每一个都不是三言两语可以说明白的,需要大家自行解决了。转载 2023-02-06 14:05:20 · 537 阅读 · 0 评论 -
java 实现 生成短链接服务
现在常用的还是第二种,用自增的发号器生成对应的短链接。生产环境要用,可以用数据库的自增id来发号,或者分布式下生成id用类似雪花算法来发号。同时,避免原始链接重复,可做重复判断,可用布隆过滤器或redis长链接和短链接的对应关系,可保存在数据库,也可保存在类似redis中,顺带还可以设置过期时间。也有开源的生成短链接的,比如yourls,PHP实现,安装只需要装PHP和mysql即可。转载 2023-02-03 16:46:53 · 1938 阅读 · 0 评论 -
浅析什么是哈希算法/散列函数/哈希函数
我们来分析一下,由于这个这个函数过于简陋,它的冲突概率是较高的,比如我们分别输入“张三”、“章五”,“电话簿哈希”都输出了“z”,对于这种冲突,在哈希函数具体实现中处理方法有多种,例如“链地址法”、“再哈希法”等,文章也有很多,需要理解的是为啥它们要这么做,好处都有啥,此处不谈。即使我们已完美解决了冲突的问题,但是回顾咱们“电话簿哈希”这个哈希函数的设计原理,咱们的电话簿哈希依然存在问题——假设我姓“刘”,那么由于我会保存很多姓“刘”的亲戚,电话簿中大量的联系人都映射在了“L”这个地址下。原创 2023-04-20 22:38:56 · 1521 阅读 · 0 评论 -
信息技术安全之哈希算法(Hashing)的基本概念
理想的加密哈希函数应该是确定性的,这意味着相同的输入值应该始终返回相同的哈希值,此函数应具备计算速度快且效率高的特性。加密哈希与加密(encryption)截然不同,因为加密哈希函数应该是单向的,而它们的相似之处在于,可以将纯文本输入到哈希函数中,并获得难以理解的输出,但无法获取哈希输出并恢复纯文本。哈希算法是一种函数或操作类型,它接受任意数据输入并将其映射到固定大小的输出,我们称之为哈希或摘要。在后续分享中,我们将探讨哈希算法的一些示例,并深入探讨哈希函数的弱点或针对其的安全攻击。转载 2023-02-01 20:58:53 · 559 阅读 · 0 评论 -
哈希与哈希算法
哈希是一种加密算法。原创 2023-02-01 20:52:59 · 328 阅读 · 0 评论 -
哈希算法(哈希函数)基本
哈希也称“散列”函数或“杂凑”函数。它是一个不可逆的单向映射,将任意长度的输入消息M(或文件F)映射成为一个较短的定长哈希值H(M),也叫散列值(HashValue)、杂凑值或消息摘要。可见,这是一种单向密码体制,只有加密过程,没有解密过程(因此Hash求逆很困难)。二、哈希的原理和特点单向性:从哈希值不能反向推导原始数据(计算不可行),即从哈希输出无法倒推输入的原始数值。这是哈希函数安全性的基础。灵敏性:对输入数据敏感,哪怕只改了一个Bit,得到的哈希值也大不相同。转载 2023-02-01 20:26:31 · 7427 阅读 · 0 评论 -
Linux--Vi编辑命令(插入、替换、命令行模式、撤销)
【:set fileencoding=utf-8】 设置当前文件编码格式为utf-8,也可以设置成其他编码格式。【:set fileformat=unix】 将当前文件的断行格式设置为unix格式。【o】 英文小写字母o,在目前光标所在行的下一行处插入新的一行并开始插入。【O】 英文大写字母O,在目前光标所在行的上一行处插入新的一行并开始插入。【R】 会一直替换光标所在字符,直到按下[ESC]键为止。【a】 从当前光标所在的下一个字符处开始插入。【A】 从光标所在行的最后一个字符处开始插入。转载 2023-04-04 14:44:18 · 3754 阅读 · 0 评论 -
关于架构师的一点思考
但是,这个程序还是被推倒了,当然也有其公司派系斗争的因素在里面。但是,不得不引起我们的注意,这个程序败就败在了太拘泥于细节,而忽略了顶层设计被客户牵着鼻子走,想知道客户自己说什么吗?某公司,建立的程序又被推倒,外人觉得很奇怪,这个程序的主管非常敬业,关注到了程序每一个细节,甚至包括每一个按钮的文字和位置。可以从看似复杂的东西中找到共性,抽象出共性的东西,以最直接和最简洁的方案通过逻辑构造出千奇百怪的应用结构!这个主管很委屈,他说,他完全是按照客户需求制作的,客户怎么说的,他就怎么做了,难道有错?原创 2022-11-29 07:18:18 · 177 阅读 · 0 评论 -
JAVA 中的 / 和 % 区别
(除) 注意:整数相除结果还是整数,向下取整。只要相除中有一个小数,结果带小数。4/5 //输出结果为06/5 //输出结果为15/5 //输出结果为14.2/5.2 //输出结果为0.8076923076923077%(取模) 结果为相除之后的余数。也叫取余。原创 2022-08-21 20:47:10 · 3475 阅读 · 1 评论 -
删除gitlab仓库上的master分支
gitlab项目仓库中的master分支作为默认分支,一般不会动它,但如果master分支存在问题,可以将master分支删除。转载 2022-06-13 14:12:15 · 7083 阅读 · 0 评论 -
JAVA日期格式化中的“yyyy”与“YYYY”
“YYYY”表示的是Week year,就是这天所在的周所属的年。转载 2022-06-07 18:32:55 · 1462 阅读 · 1 评论 -
为什么阿里巴巴不建议MySQL使用Text类型?
由于MySQL是单进程多线程模型,一个SQL语句无法利用多个cpu core去执行,这也就决定了MySQL比较适合OLTP(特点:大量用户访问、逻辑读,索引扫描,返回少量数据,SQL简单)业务系统,同时要针对MySQL去制定一些建模规范和开发规范,尽量避免使用Text类型,它不但消耗大量的网络和IO带宽,同时在该表上的DML操作都会变得很慢。...转载 2022-06-05 22:40:51 · 1525 阅读 · 0 评论 -
mysql Blob和Text类型
存储一部小说或者text类型的文档,此时考虑使用TEXT系列. TEXT系列对应Java中的String类型. 仅仅只需要把VARCHAR改成TEXT系 列 即可,Java代码不需要改动.转载 2022-06-05 22:34:24 · 4202 阅读 · 0 评论 -
tinyint和int区别
int(1)和tinyint(4) 相比,肯定int 大。转载 2022-06-05 22:30:06 · 1048 阅读 · 0 评论 -
Maven项目发布jar包到Nexus私服
在编码过程中,有些通用的代码模块,有时候我们不想通过复制粘贴来粗暴地复用。因为这样不仅体现不了变化,也不利于统一管理。这里我们使用maven deploy的方式,将通用的模块打成jar包,发布到Nexus私服,让其他的项目来引用,以更简洁高效的方式来实现复用和管理。一、Maven的settings.xml文件中设置标签<server> <id>nexus-releases</id> <username>admin</username转载 2022-05-30 23:12:39 · 1859 阅读 · 0 评论 -
maven仓库,snapshot快照仓库和release发布仓库的区别
首先看下snapshot类型建立一个maven-privider项目,版本定义为1.1-SNAPSHOT创建一个privider类,写一个hello()方法,并推送maven私有仓库然后再建立一个deploy-practice项目,并引用maven-privider项目然后用main方法测试,如下图所示:打印出hello下面修改下hello方法,推送maven仓库然后我们,不做任何修改,直接运行测试的main方法,结果如下,直接打印出最新修改内容转载 2022-05-30 23:02:49 · 968 阅读 · 0 评论 -
maven快照版本和发布版本
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解...转载 2022-05-30 22:57:43 · 2784 阅读 · 0 评论 -
IDEA Maven Helper 安装使用
一般用这款插件来查看maven的依赖树。在不使用此插件的情况下,要想查看maven的依赖树就要使用Maven命令maven dependency:tree来查看依赖。想要查看是否有依赖冲突也可以使用mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>只查看关心的jar包,但是这样还是需要我执行命令,并且当项目比较复杂的时候,这个过程是比较漫长的。maven helper就能很好的解决这个问题。一旦安装了Ma转载 2022-05-26 15:31:41 · 1111 阅读 · 0 评论 -
md5和sha256算法的区别,哪个比较安全
md5和sha256信息摘要算法,都属于加密哈希函数,而且算法比较复杂。那么md5和sha256算法有什么区别,哪个的安全性比较高呢?关于md5的简介md5是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(哈希值),用于确保信息传输完整一致。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。对于任意长度的消息,这个摘要相当于是个长度为16个字节的数组,通常用一个长度为32的十六进制字符串来表示。转载 2022-05-14 22:18:31 · 1812 阅读 · 0 评论 -
Lombok的@EqualsAndHashCode(callSuper=true)的使用
@EqualsAndHashCode原文中提到的大致有以下几点:1.此注解会生成equals(Objectother)和hashCode()方法。2.它默认使用非静态,非瞬态的属性3.可通过参数exclude排除一些属性4.可通过参数of指定仅使用哪些属性5.它默认仅使用该类中定义的属性且不调用父类的方法6.可通过callSuper=true解决上一点问题。让其生成的equals方法和hashcode方法包含父类属性另:@Data相当于@Getter@Setter @RequiredArg.转载 2022-05-11 14:19:32 · 5052 阅读 · 0 评论 -
Notepad++ 添加格式化代码插件
Ntoepad++ 64位 安装NppAStyle这个插件。下载在github上是可以直接下载64位:https://github.com/ywx/NppAStyle/releases导入插件1、 下载完成后,把它解压到安装目录的plugins下,C:\Program Files\Notepad++\plugins2、打开Notepad++软件;点击设置-->>导入-->>导入插件。选择刚才文件解压目录3、 然后重启软件,点击插件-->&转载 2022-05-10 17:23:16 · 1397 阅读 · 0 评论 -
解决Logback日志不会每天生成新文件的问题2
出现此问题的情况,很有可能是因为FileNamePattern中配置了多个%d的原因,logback默认按照第一个时间日期来分类文件,所以导致按第一个%d{yyyy-MM}配置按月分割的,并不是按照想要的按文件日期分割:而配置多个%d需要怎么处理呢?用aux关键字来进行标识(配置如下:)问题解决,日志文件可以按天进行分割了,并且按月进行归类...转载 2022-05-10 16:45:55 · 574 阅读 · 0 评论 -
解决Logback日志不会每天生成新文件的问题
logback配置文件: 问题现象:上图是最初的logback的配置, 线上发现经常不会按日生成日志文件, 而是一个日志越来越大, 只有在项目重启之后才会生成当天的日志文件。原因分析:该配置使用了基于时间的滚动切割策略 TimeBasedRollingPolicy,每天0点自动生成一份新的日志文件。但里面包含了一段 triggeringPolicy 触发策略,即最大单个文件超过 10MB 自动新成新日志文件,TimeBasedRollingPolicy 是基于时间的,不能和其他策略一转载 2022-05-10 16:43:47 · 5094 阅读 · 1 评论 -
Nginx停止、修改配置文件后重启
1、停止Nginx(1)、从容停止第一步:查看Nginx的进程 ps -ef|grepnginx第二步:通过mster进程的进程号进行关闭 kill -QUIT Nginx master进程号(2)、快速停止第一步:查看Nginx的进程 ps -ef|grep nginx第二步:通过mster进程的进程号进行关闭Nginx的快速关闭有两种方式:i、kill -TERM Nginx master进程号ii、kill -INTNginx m...转载 2022-05-08 21:10:29 · 1640 阅读 · 0 评论 -
HTTP503错误
HTTP503错误——服务不可用 (Service unavailable)介绍因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求。 其含义是, 这是一个暂时情况,会有一些延误, 过后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字(socket)连接,在这种情况下,可能会由于套接字建立超时而产生不同的错误信息。HTTP 循环中的 503 错误任何客户端 ( 例如您的浏览器或我们的 CheckUpDown 机器人 ) 在和您的网络服务器通讯时,都需经过以下循环:转载 2022-04-08 19:53:42 · 3261 阅读 · 0 评论 -
Mysql表设计时,完全使用自增主键ID进行应用开发和业务处理,会有什么问题吗
一、问题发现很多表设计(包括我们的大部分主要数据库表设计),都会有一个自定义的字符串作为业务处理字段,自增主键ID作用并不是很大,请问这样设计有没有必要性和合理性?抛弃这一个字段完全使用自增主键ID会不会有什么缺陷?二、解答解答1:自增主键要慎用。特别是数据库表自带的那种,在数据迁移和传输过程中都会带来很多问题。很多业务主键都要设计编码规则和范围,以便于表述。比如一个物料号,你可以定义其编号范围是RAW001~RAW99,前缀RAW表示原材料,后三为是序列号。这样的编码规则有利于记录转载 2022-04-05 21:53:06 · 1665 阅读 · 0 评论 -
springboot maven 项目打包jar 名称自定义
1、打成jar名字的设置maven 文件打包,输入 :package -Dmaven.test.skip=true 进行打包,一般生成的jar文件名称是:项目名+版本号在pom.xml 中加入finalname 属性,就可以获得稳定的jar名称<build> <finalName>pay</finalName> <plugins> <plugin> <groupId>org.springframework转载 2022-03-25 22:26:14 · 9751 阅读 · 0 评论 -
如何查看linux服务器内存使用情况
1. free命令free命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。直接输入free命令,显示如下free命令默认是显示单位kb,可以采用free -m和free -g命令查看,分别表示MB和GB另外,free -h会自动选择以适合理解的容量单位显示Mem:表示物理内存统计,如果机器剩余内存非常小,一般小于总内存的20%,则判断为系统物理内存不够Swap: 表示硬盘上交换分区的使用情况,如剩余空间较小,需要留意当前系统内存使用.转载 2022-03-17 14:49:15 · 15590 阅读 · 0 评论