
后端
文章平均质量分 66
后端从入门到精通
作者keying,擅长mysql,负责项目组mysql调优,jvm调优,代码性能优化,欢迎私信加好友(ke1ying)探讨问题。
展开
-
架构风格-架构师(六十六)
1、若信息码为111000110,生成多项式G(X)=x^5+x^3+x+1,计算出CRC校验码为()。4、RUP软件开发生命周期是一个二维的软件开发模型,其中,RUP的9个核心工作流不包括()。仓库 仓库工具之间不可以互相交互,通过仓库数据库交互,因此仓库更灵活。仓库:劣势,仓储中间件和仓库交互性能低,优势,支持并发。管道过滤器是 数据驱动机制,处理流程事前确定,交互差。管道过滤器:劣势需要数据转换,性能低。管道过滤器是数据驱动机制,处理流事前确定。管道过滤器:管道过滤器是顺序结构,所以。原创 2023-11-01 20:25:28 · 570 阅读 · 0 评论 -
2018架构真题&案例(四十九)
在系统架构设计中,决定系统架构设计的非功能性需求主要有四类:操作性需求、性能需求、安全性需求和文化需求。请简要说明四类需求的含义。基础数据是实实在在从用户需求获取对应关系的用例,抽象则是避免冗余数据,抽取公共关系的数据,从基础数据抽取。面向服务架构(SOA)强调集中式管理,服务之间是相互独立的,但所有系统的数据是互通,方便获取数据。请从(a)~ (j)中选择相应内容填入图5-1的(1)~ (6),补充完善架构设计图。实体是数据建模,类是面向对象建模,实体只有属性,类有属性和操作。原创 2023-10-10 14:41:47 · 661 阅读 · 1 评论 -
软件结构化设计-架构真题(二十七)
实际问题的熟数学模型都是相近的,根据数据模型求出最优解或满意解后,还需进行灵敏度分析,对计算结果进行检验,分析计算结果对参数变化的反映程度。()是根据系统功能要求,从具体的器件、逻辑部件或相似系统开始,通过对其进行相互连接、修改和扩大,构成所要求的系统。如果访问也一样,则看修改位,如果未被修改的,则优先淘汰,因为没被修改的,与辅存内容一致,淘汰无需修改,代价小。页号1/2/5/7在内部内存里,而2的被访问是0,代表没有被访问,则被优先淘汰。软件性能测试包含:负载测试、容量测试和强度测试。原创 2023-09-12 16:36:08 · 217 阅读 · 0 评论 -
Es、kibana安装教程-ES(二)
当我们分词器不管选择默认的,还是english还是chinese,分词结果都如右边,每个中文都是单独分词,这样肯定达不到我们想要的结果,查询的时候并不合适。上篇文章介绍了ES负责数据存储,计算和搜索,他与传统数据库不同,是基于倒排索引来解决问题的。Kibana是es可视化工具。Dsl语句有两个字段,analyzer表示分词器,standard是默认分词器,text则是需要分词的文本。下载好解压在es的目录plugins新建ik目录,将解压后的文件放进去。用cmd进入解压好的es目录下的bin目录,执行。原创 2023-08-13 22:57:15 · 879 阅读 · 0 评论 -
Arthas & GC日志-JVM(十八)
从这些日志可以看到,我们cms垃圾收集器的过程,初始化标记,是会STW的,然后会并发标记,之后重新标记又会STW,之后并发清理会有新对象,这时候标记成黑色方便下次清理,这属于浮动垃圾。为什么都是元空间不够导致的fullGC呢,因为项目刚启动,加载类,每次元空间加载类信息满了,会扩展内存加载新的类,所以项目启动时候会因为元空间不够多次fullGC。当我们系统上线,但我们感觉并没有把代码上线,或者上错分支,这时候怎么办呢,于是可以用这个命令来反编译代码,看看是否正常。启动成功后,选择我们项目的进程。原创 2023-08-04 16:45:46 · 1192 阅读 · 0 评论 -
Jvm实际运行情况-JVM(十七)
如果没有设置,则直接fullGC,如果fullGC完还不能,则会发生OOM。如何设置了,则会看老年代可用空间大小是否小于每次minor gc对象平均大小。上篇文章说jmap和jstat的命令,如何查看youngGc和FullGc耗时和次数。每天发生1万多次,则每分钟发生1次,每次YoungGC耗费50ms。算下来fullGC平均耗时,0.4s(每次400ms左右)期间发生FULL GC次数和耗时:500多次,200多秒。期间发生Yoing GC次数和耗时:1万多次,500多秒。JVM内存大小:2G。原创 2023-08-01 23:17:01 · 864 阅读 · 0 评论 -
Jmap-JVM(十六)
下面则是堆正在用的信息,eden的空间容量是capacity,已经使用和空闲的都显示在内,还有from svrvivor和to survivor容量和使用情况,最后old generation代表老年代使用情况。我们可以先通过jmap -histo 进程ip 来查看,但是这样看不太清晰,我们可以用这行命令生成一个文件:jmap -histo > ./print.txt。分别代表最大堆空间是3G多,年轻代74M,年轻代最大1个G,老年代171M,元空间则是20多M。原创 2023-07-26 22:49:33 · 666 阅读 · 0 评论 -
ZGC垃圾收集器-JVM(十五)
UMA(Uniform Memory Access Architecture)表示内存只有一块,所有CPU都在这块内存运行,那么就存在竞争关系,争夺内存的访问权,有竞争就有锁,必然影响效率,CPU内核越多则竞争越激烈。),记录旧对象到新对象转换关系。Zgc收集器仅从引用就能知道对象是否处于重分配中,如果用户线程此时访问了重分配对象,这次访问会被预置的内存屏障(读屏障)所截获,然后根据region上转发表到新复制对象上,并同时修正该引用值,使其直接指向新对象,zgc这种行为称为指针的“自愈”能力。原创 2023-07-23 21:26:59 · 578 阅读 · 0 评论 -
G1垃圾收集分类-JVM(十四)
上篇文章说了G1不在是连续的老年代年轻代,而是分为不同的region,有eden,survivor,old,humongous,当大于百分之50region的数据则直接进入humongous,如果对象太大,会连续的存储,分为初始标记,并发标记,最终标记,筛选标记,其中只有并发标记不会STW,G1可以设置STW的时候,从而利用成本算法排序回收一部分垃圾。:在一次回收过程中指定做几次筛选回收(默认8次),在筛选回收阶段会分次回收,回收一会暂停回收,后面又继续开始,这样不至于让停顿时间太长。原创 2023-07-19 16:56:37 · 786 阅读 · 1 评论 -
G1垃圾收集器-JVM(十三)
而不是让大对象进入老年代中,节约老年代空间,正常大于region百分之50的对象就属于大对象,直接进入humongous,当对象太大的时候,会跨多个humongous存储。(注意:CMS回收阶段是用户线程一起并发,G1内部太复杂,并没有并发回收,不过到了ZGC,Shenandoah就实现并发收集,Shenandoah可以看做并发升级版本)一般默认就是划分2048个region,比如堆内存是4096M,则Region是堆的大小除以2048,每个region的大小是2M。原创 2023-07-17 23:08:55 · 290 阅读 · 0 评论 -
垃圾收集器ParNew-JVM(十)
上篇文章介绍了老年分担机制,在minorGC前会先判断一下老年代剩余空间是否大于需要移动的数据,如果大则直接fullGC,否则会看看是否配置了参数,没有则直接fullGC,有的话再算每次yangGC的平均值,再次比较老年代剩余空间,小于他的话则正常yangGC。串行是最基本的垃圾收集器,“单线程”收集器,效率比较低,并不仅仅一条线程去垃圾回收,在他收集的时候还会STW,直到他收集结束。前面和标记清除一直,利用可达性分析标记,但是清除完成之后,不会产生连续的碎片,会规整整个内存空间,将对象放在连续的空间。原创 2023-07-12 22:06:20 · 620 阅读 · 0 评论 -
Jvm对象回收算法-JVM(九)
因为两者相互引用,导致他们引用计数器不为0,而引用计数器必须是为0才会回收。当对象背回收之前,会判断这个对象是否覆盖了finalize方法,如果覆盖了,在回收之前则会执行这个方法,不回收则不执行。这个机制的目的是为了提升效率,在minorGC之前,会有三次判断,之后再次minorGC速度会很快。将GC roots对象作为节点,向下搜索,找到对象都标记为 非垃圾对象,其余未标记的都是 垃圾对象。软引用在实际场景很重要,例如浏览器后退按钮,这个后退是重新加载还是从缓存里取,这要看实际应用场景。原创 2023-07-10 15:06:35 · 611 阅读 · 0 评论 -
Jvm参数设置-JVM(八)
上篇文章说了逃逸分析和标量,代码实例解析了内存分配先从eden区域开始,当内存不足的时候,才会进入s0和s1,发生yangGC,之后大内存会放入old,因为我们昨天程序运行了一个45M的对象,于是小对象在eden,对象在老年代。如果对象eden经过第一次yangGc还能存活,并且被survivor容纳,则会进入survivor,这时候年龄会随着每次复制移动而增长,当年龄到了15岁(默认是15,CMS收集器默认6岁),就会进入老年代。可以通过命令指定堆位3G,对最大值也3G,栈帧1M,元空间512M。原创 2023-07-08 21:37:06 · 609 阅读 · 0 评论 -
Jvm对象创建-JVM(六)
有Mark word标记字段(32位占4字节,64位占8字节),自行运行时数据:哈希值,GC分代年龄,锁状态标志,线程持有锁,偏向线程ID,偏向时间戳。:默认是指针碰撞,如果java内存是绝对规整的,所有用过内存都放在一边,空闲的放在另一边,中间放指针分解指示器,当分配内存后,就把指针移动到右侧。前面说了klass没开启压缩是8个字节,开启是4个字节,那么我们刚打印的都是4个字节,为什么呢,因为jdk1.6之后默认都是指针压缩后的。从图可以看到分代年龄是4bit,最大是15,所以他的分代年龄不能超过15。原创 2023-07-05 21:31:44 · 596 阅读 · 0 评论 -
Jvisualvm&内存模型剖析-JVM(五)
当我们运行程序,通过visual工具可以看到visual GC的运行情况,如我们上篇文章所说,他会从Eden到s0到s1,s0和s1反复拷贝,直到代龄达到15次,则会到old,最后导致OOM。整个gc的过程中,有STW(stop the world)机制,会暂停用户线程,当用户下单的时候,gc过程可能会触发STW机制,这时候用户体验会受影响,会感受到网络卡顿。初始值是21m,最大的会把物理内存全部用完。我们写代码实例-Xss设置的小点,则count打印的更小,因为栈内存变小了,这也意味着可以有更多的线程。原创 2023-07-03 22:12:14 · 623 阅读 · 0 评论 -
Jvm内存模型剖析优化-JVM(四)
上篇文章代码实例详解如何自定义双亲委派,主要实现ClassLoader,有两个方法,一个直接loadClass用父类的,如果想在破坏,则需要重写loadClass,一个findClass必须要重新,因为父类是空的,也是用defindClass的方法,传入加载类的二进制数据和大小。栈这块放的是局部变量,官网叫虚拟机栈,又叫线程栈,当程序在修改数据的时候,并不是直接修改这个数据,而是java虚拟机会建立一个局部内存,放当前线程修改的值。当找到非垃圾对象,这时候不会gc,则会赋值到survivor区域的s0。原创 2023-07-02 21:43:04 · 844 阅读 · 0 评论 -
JVM类加载&双亲委派-JVM(二)
它的子类是ext加载器,ext的子类是app加载器,可以通过getSystemClassLoader来获取到。这就是双亲委派设置导致如此的,因为每次加载会从他的父加载器去加载,当bootStrap从核心类库加载不到,才会依次让子加载器尝试加载。类的初始化必须是类加载完才执行,所以类的构造方法初始化是在静态方法之后执行。这时候ExtClassLoader的父加载器是null,这时候走下面findBootstrap引导类加载器。为什么第一个打印的是null呢,因为引导类加载器是c++实现的,java不会显示。原创 2023-06-29 23:27:55 · 405 阅读 · 0 评论 -
JVM类加载机制-JVM(一)
(举个例子:main方法这一行都属于静态数据,会转换成内存里的指针,属于静态链接。先赋默认值,比如对象会先赋值为null,int会赋值为0,boolean的话会赋值为false等。,因为必须类加载完构造方法初始化才可以执行,类都没加载完,构造函数必定执行不了。(注意:final是常量,直接赋值真实的值,加了final就是常量,不可变)比如静态代码块,只有在加载某个类的时候执行,效果类似。Jvm属于懒加载,只有依赖的时候才会去加载。对类的静态初始化指定值,执行静态代码块。过程(类加载期间完成),原创 2023-06-28 23:47:12 · 586 阅读 · 0 评论 -
spring事务源码详解-spring原码(一)
Aop有加载切面通过注解加载,创建代理在createBean方法里,调用代理用自己定义的@before和@after等注解。这里会指定导入的配置类一个角色,用@Role指定,但这里会被后面的aop给覆盖,就是前面说的覆盖代码。Int是索引判断,事务的索引和aop的索引,会优先aop的定义覆盖之前的。NESTED,开启新事务,融合到外部事务,外层影响内层,内层不影响外层。事务也有这三步,但是调用代理是系统定义好的,而不是开发人员自行定义。这里的事务advice是内置设置的,和aop不同,aop的是自己定义。原创 2023-06-24 12:02:23 · 376 阅读 · 0 评论 -
数据结构-Redis(一)
这样好处就是可以代替数据库来做这些操作,最后在提交的时候持久化到数据库,提高使用效率,提升用户体验感。(数据库做复杂,并且性能低)当前命令也可以在分布式数据库的情况下,来作为id使用,但每次获取都用这个执行一次非常耗费性能,所以可以一次性批量生成。用法是在每个服务器取一次,一次取1000个号,在单机内存中使用,使用完再取一次,减少与redis交互。相信大家都存过,我们一般都是把对象value转json,获取的时候,再json转对象。当我们需要文章点击量时候,我们可以执行这个,执行一次代表一次点击量,原创 2023-06-06 23:18:45 · 440 阅读 · 0 评论 -
真题讲解(软件维护工具、水晶法)-软件设计(四十)
2015上半年真题讲解原创 2023-04-02 19:40:08 · 324 阅读 · 0 评论 -
法规法律-软件设计(三十九)
公民软件权:发表权、复制权、发行权、出租权、信息网络传播权、翻译权、使用许可权、获取报酬权、转让权。中国公民、法人或者其他组织作品,不论是否发表,都享有著作权。注册商标权:有效期10年,若注册人或者倒闭1年后,未转移则可注销(别人去注册),期满后6个月内必须续注。著作权法不适用于下列情况:法律,法规、国家机关的决策,司法、行政、及其官方正式译文。国际标准、国家标准、区域标准、行业标准、地方标准、企业标准、项目标准。国家标准:GB-中国,ANSI-美国,BS-英国,JIS-日本。发明专利权:保护期限20年。原创 2023-04-01 14:09:47 · 206 阅读 · 0 评论 -
数据结构与算法(真题讲解)-软件设计(三十五)
回溯法:优选搜索法,按优选条件向前搜索,达到目的,当目的没有达到的时候,就退回一步重新选择,这就是回溯法。(如果在某个问题求解过程设计到逐步试探下去,走到某个位置又要回退)(所以前面的1处填j=0,因为每一个货物存入的时候,都从第一个集装箱开始尝试。2处则是赋值给箱子体积,b[j] = b[j]+s[i])贪心法:在有限的时间,找到满意的解(局部最优),但不一定是最优解。都不能保证最优,最先的用了5个箱子,最优的用了4个箱子。则j++,再次比较下一个箱子容量,直到找到满意的箱子。Firstfit解析。原创 2023-03-26 14:54:24 · 356 阅读 · 0 评论 -
数据库设计(真题讲解)-软件设计(三十四)
员工和经理 是特殊的关系,经理是特殊的员工,可以画一根线,加个圈,经理在加两条竖线。1对n 部门和部门的员工,一个部门有多个员工,一个员工只对应一个部门。1对1 ,关系可以单独记录,也可以把关系记录在两方任意实体。n对m 老师和学生,一个老师对多个学生,一个学生对各种老师。1对n, 关系只能合并到多,不能合并到1。紧急联系人 1 对 m 员工,1对多。商场 1 对 多 部门 1:m。部门 1 对 多 员工 1:m。部门 1 对 1 经理 1:1。1对1 1对多 多对多。1对1 部门和部门经理就是。原创 2023-03-23 22:23:02 · 356 阅读 · 0 评论 -
系统开发-McCabe复杂度(下)-软件设计(三十三)
系统需求 之后就有了 功能需求、性能需求、设计约束(用java或者.net或者指定什么数据库等约束)。从QFD角度可以分为:基本需求(必须要做的需求)、期望需求(理所应当做到的需求)、兴奋需求。保持模块的大小适中、尽可能减少调用深度、模块作用域在范围之内。:黑盒测试法、白盒测试法、灰盒测试法。黑盒测试:等价类划分、边界值分析、错误推测、因果图。白盒测试:基本路径测试、循环覆盖测试、逻辑覆盖测试。:桌前检查、代码走查、代码审查。确认测试:需求确认。软件需求分为 业务需求、用户需求、系统需求。原创 2023-03-22 21:11:31 · 398 阅读 · 0 评论 -
系统开发(上)-软件设计(三十二)
短平快会议、小型版本发布、较少分档、合作为重、客户直接参与、自动化测试、适应性计划调整、结对编程、测试驱动开发、持续继承、重构。计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续继承、每周工作40小时、现场客户、编码标准。步奏:需求分析和定义->软件架构设计->构建库的建立->应用软件构建->测试和发布。(针对产品,在用户的环境做的测试,α测试是在开发环境做的测试)自适应开发、水晶方法、特征驱动开发、SCRUM、极限编程。结构化法、原型法、面向对象方法、面向服务方法。原创 2023-03-21 21:02:21 · 276 阅读 · 0 评论 -
信息系统安全(对称加密)-软件设计(三十一)
第二步:对方收到秘文,接收到刚刚生成的随机秘钥K(这个秘钥K直接发显然不安全,需要用接收方的公钥加密),接收方可以用自己的私钥解密。PGP证书包含PGP版本号,证书持有者的公钥,证书持有者的信息,证书拥有者的数字签名,证书的有效期,秘钥首选的对称加密算法。第三步:正文形成摘要,还要对摘要进行数字签名,数字签名用的是发送方的私钥,得到了前面后的摘要。(缺陷:加密速度慢):秘钥加密和解密不同,公钥加密私钥解,私钥加密公钥解。第四步:接收方解密摘要,然后用前面接受的秘文形成摘要,与解密的摘要对比。原创 2023-03-20 22:40:46 · 478 阅读 · 0 评论 -
计算机网络-计算子网掩码(下)-软件设计(三十)
(出故障导致不能上网,虚拟假地址,搜索不到DHCP,导致没有分配到地址,无法正常上网)基础不好的同学不知道怎么转,可以查看博主前面的文章《计算机组成原理(1)-软件设计(二十二)》把这两个ip地址化成十进制,看前面的网络号子网号是否相同,相同的,则是同一个子网内。(a是前面8个,b是前面16个)128.14.32.0/20表示的地址块共有2的12次方个地址。全1 的地址:本地的子网广播。解析:子网掩码为1的部分是网络号,为0的部分是主机号。第一步,先把十进制的ip地址,转成二进制的ip地址。原创 2023-03-19 20:19:48 · 541 阅读 · 0 评论 -
计算机网络-TCP/IP(上)-软件设计(二十九)
为什么中介域名服务器是递归,因为本地域名问他的时候,他去问了其他授权域名,全部调用确定后才返回。P和S之间隔着路由器,路由器属于网络层,也就是第3层,这时候就不能通过,不属于同一个局域网。因为IP地址不太好记,于是发明了域名,域名和IP如何转换的呢,于是有了DNS协议。TCP/IP协议:Internet,可扩展,可靠,应用广泛,牺牲速率和效率。为什么根域名服务器是迭代,因为其他服务器问他,他直接返回,问一次返回一次。汇聚层:网络访问策略控制,数据包处理,过滤,寻址。网络规划原则,并不是越先进越好,原创 2023-03-18 18:56:42 · 599 阅读 · 0 评论 -
数据库系统-3NF(上)-软件设计(二十七)
第一范式如何达到了,必须字段不可分,比如有字段学校名称,高级职称,这种显然不满足1NF,这时候把高级职称改为教授,副教授,则满足,因为不可拆分的原子值。比如向录入C08学科的学分,但是不能录入,因为学科和学生在这个表里强绑定,必须有学生学习才能录入学分,显然这是不合理的。比如学号 和姓名 性别,他们都可以确定性别,学号+姓名 不能是候选键,因为学号 和姓名都能分别确定性别,他有冗余属性。(比如 部门和员工,正常把联系记录在员工那边,因为部门对员工是1对多,只要在员工表加部门号就可以解决)原创 2023-03-14 23:07:18 · 308 阅读 · 0 评论 -
操作系统-PV操作(上)-软件设计(二十五)
如果一个进程在等待不可能发生的事就会造成死锁,如果一个或者多个进程产生死锁,则会造成系统死锁。这时候P1肯定走不通,因为P1需要6个R1资源,但还差5个,目前不够,所以排除A。当A和B同时运行一个目的地,但B比A块,B就需要停下来等A一起,这就是同步。同理P4肯定走不通,他需要R3资源为1一个,但目前分配0个。R2 2+1+1+2+1 = 7 所以还剩 8-7 = 1。R3 1+1+0+0+3 = 5 所以还剩 5-5 = 0。就绪态 表示所有的资源也已经配足,但是缺少cpu资源。原创 2023-03-12 15:03:46 · 242 阅读 · 0 评论 -
计算机组成原理(海明码效验)(3)-软件设计(二十四)
计算机组成原理(海明码效验)(3)-软件设计(二十四)原创 2023-03-08 23:54:43 · 199 阅读 · 0 评论 -
计算机组成原理(2)-软件设计(二十三)
计算机组成原理(2)-软件设计(二十三)原创 2023-03-07 23:15:26 · 148 阅读 · 0 评论 -
计算机组成原理(1)-软件设计(二十二)
计算机组成原理(1)-软件设计(二十二)原创 2023-03-06 22:25:43 · 310 阅读 · 0 评论 -
程序设计语言-软件设计(二十一)
程序设计语言-软件设计(二十一)原创 2023-03-05 13:25:00 · 422 阅读 · 0 评论 -
数据结构与算法(二十)快速排序、堆排序(四)
数据结构与算法(二十)快速排序、堆排序(四)原创 2023-02-28 20:44:33 · 800 阅读 · 0 评论 -
数据结构与算法(三)软件设计(十九)
数据结构与算法(三)软件设计(十九)原创 2023-02-27 23:08:55 · 138 阅读 · 0 评论 -
二叉树、队列、栈、广义表(二)数据结构与算法(十八)
二叉树、队列、栈、广义表(二)数据结构与算法(十八)原创 2023-02-26 20:14:34 · 405 阅读 · 0 评论 -
数据结构与算法(一)-软件设计(十七)
数据结构与算法(一)-软件设计(十七)原创 2023-02-25 20:52:42 · 653 阅读 · 0 评论 -
设计模式(十五)-面向对象概念
设计模式(十五)-面向对象概念原创 2023-02-22 21:30:16 · 237 阅读 · 0 评论