项目实战
文章平均质量分 87
武梓龙_Wzill
CSDN博客专家、Java领域优质创作者
展开
-
如何解决循环引用的问题
循环引用是指在对象之间存在相互引用的情况。具体来说,当一个对象A引用了另一个对象B,而对象B又引用了对象A,它们之间形成了一个循环引用关系。原创 2023-07-18 20:36:16 · 2071 阅读 · 0 评论 -
案例15-创建大量对象导致cpu飙升
通过对于项目的部署使用发现,项目在使用不久会就发现非常的卡顿,内容加载不出来,或者加载非常慢的情况。但是每当我们构建完毕之后就不卡了,但是使用一点时间就又会出现卡顿的问题,带着这些现象对服务器进行了监控,看了服务对应的log日志。发现了一下两个问题。使用全局变量时要慎重,考虑他的作用域以及影响的内容。添加必要的说明,因为作用域大了别人也可以使用这个变量,减少别人使用对之前的业务产生影响。原创 2023-03-18 11:16:21 · 683 阅读 · 0 评论 -
案例16-消息队列的作用和意义
在学习消息队列之前,先说一下什么是队列。队列可以说是一个数据结构,可以存储数据,如下图,我们从右侧(队尾)插入元素(入队),从队头获取元素(出队)。了解了队列之后,我们来看一下什么是消息队列,消息队列就是我们常说的MQ,英文叫Message Queue,是作为一个单独的中间件产品存在的,独立部署。对于消息队列足够的了解我们在使用的过程中才会更加的得心应手。我们才能明确什么情况下应该使用消息队列。原创 2023-03-17 21:53:47 · 628 阅读 · 0 评论 -
案例10-对生产环境有敬畏之心
没有老师上课,但是却有很多的在线人员,并且这个在线人员的时间还对不上。对生产环境有敬畏之心,站在公司的角度去思考这件事情带来的影响。明确事情的边界,哪些是可以操作的哪些是坚决不能操作的。2.没有站在公司的角度去思考问题,生产环境关乎到用户,关乎到公司的生存,也关乎到公司的每一位开发人员。最后询问各个组长才发现,他们在生产环境上做测试,修改了生产的部分用户数据导致这个问题。3.对生产环境没有足够的重视,没有通过上级领导的通过就进行了测试和数据的修改。3.环境之间做到权限的隔离,没有权限的人无法操作生产环境。原创 2023-03-17 17:32:17 · 207 阅读 · 0 评论 -
案例07-在线人员列表逻辑混乱
类中写了公共变量最后导致数据混乱现象保存数据没有考虑业务的隔夜覆盖导致的逻辑漏洞涉及到继承,对于this,如果父类有同样的成员最终使用哪一个?参数不一致导致后续维护混乱mysql由于关联字段类型不一致导致产生索引失效问题,进而产生慢sqlsql不考虑业务导致有明显的逻辑漏洞公共变量导致数据混乱对于在线人员的业务存在逻辑问题(对应上面的 2 4 6 )面向对象继承的问题,this.属性和方法的问题mysql由于关联字段类型不一致导致索引失效的问题。 1.类中写了公共变量最后导致数据混乱现原创 2023-03-17 17:09:57 · 636 阅读 · 0 评论 -
案例04-生产环境App打包不能自动升级
App的打包关系到每个用户的使用。我们在执行的过程中不要因为疏忽而导致用户的流失。做事情可以通过两个人进行复查,减少出现风险的原因。也可以通过自动化的方式进行, 避免认为操作导致的问题。闭环反馈是一个非常好的习惯。原创 2023-03-17 16:00:27 · 410 阅读 · 0 评论 -
案例23-服务出现频繁掉线情况
各服务实例会上报自己的网络地址,这样服务中心就形成了一个完整的服务注册表,各服务实例会通过服务发现中心来获取访问目标服务的网络地址,从而实现服务发现的机制。我们这里使用的解决问题是注册的服务全部删掉,然后重新注册解决的。服务中心的协议信息的,它记录了服务注册中心所使用的协议类型,版本号等等。nacos的data文件是用来存储nacos服务的数据的,包括配置信息,服务信息等。通过查阅博客进行解决:先把服务停掉,再停nacos,再删除data目录下的protocol文件夹,最后重启需要注册的服务就可以了。原创 2023-03-17 15:20:44 · 6063 阅读 · 0 评论 -
案例03-fegin调用报404问题
在项目当中我们经常使用Nacos来管理配置文件。Nacos从中起到了两个作用一个是注册中心,一个是配置中心。配置中心将配置从应用中抽离出来,交给nacos统一的来管理配置,可以配置多套环境,发生改变各个微服务各自到nacos配置中心拉取相关配置,实现配置中心化避免频繁修改配置文件;作为注册中心实现服务调用者对服务提供者远程调用,项目中出现了两台使用同一个命名空间的nacos只更新了一台,导致请求到了没更新的那一台导致了404问题的出现。原创 2023-03-17 12:00:36 · 4346 阅读 · 0 评论 -
案例21-面向对象的实现
用面向对象的思想进行开发:易维护。采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。质量高。在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。原创 2023-03-16 21:28:47 · 322 阅读 · 0 评论 -
案例24-xxljob控制台不打印日志
在执行xxljob任务的时候发现没有任务执行的相关信息以及日志信息的打印。对于没有任务执行的信息进行排查日志是我们排查问题定位问题的方式。他就在和我们对象一样,把程序中发现的问题展示给我们,告诉我们。如果我们没有配置日志的打印。我们在排查问题就会无从下手,解决问题定位问题的效率自然也就非常低。所以打印日志是非常重要的。原创 2023-03-16 20:54:23 · 2254 阅读 · 0 评论 -
案例05-前后端分离的好处(发送调查问卷)
将同一功能的样式和逻辑计算进行了拆解,这样的好处1.提高了开发效率,前后端可以有对应的人员进行开发。2.增强了代码的可维护性,减少了样式和逻辑的耦合。解决问题方便定位。3.提高了复用性,适应能力强同一套后端程序代码,不用修改就可以用于Web界面、手机、平板等多种客户端。体现了面向对象的思想。高扩充、高复用、低成本维护。原创 2023-03-16 20:36:26 · 176 阅读 · 0 评论 -
案例11-生产环境Jenkins构建事故
项目有两套生产环境,A环境和B环境每次上线新功能只给一个服务上部署,另一个服务用来解决添加新功能有问题导致用户不能使用的时候直接进行切换。有一次在切换环境的时候没有构建,导致在生产环境测试的时候没有看到新功能。还有一次是jenkins构建失败,没有查看结果就直接进行测试了。两次都是因为没有形成闭环反馈造成的情况。闭环反馈是我们做事情必不可少的一部分,良好的习惯使我们避免很多不必要或者看起来很小的但危害很大的问题。原创 2023-03-16 20:06:30 · 231 阅读 · 0 评论 -
案例26-Nacos命名空间和ID不一致
在项目开发的过程中会有很多个环境,每个环境有对应的Nacos配置,但是由于dev和localhost使用的同一个命名空间,我们多个服务相互调用的时候,由于开发人员本地启动把本地服务注册到和dev同一个命令空间下,导致dev环境部分功能不能使用。原创 2023-03-16 19:37:11 · 806 阅读 · 0 评论 -
案例02-sql语句的优化
前端调用后端接口的时候发现接口的响应时间特别长,然后对后端接口进行分析。最后发现是sql语句的执行时间太长。看了一下sql语句的相关信息:course_id字段和class_id字段添加了索引,左连接两个表的id类型不一致,使用分组的方式进行去重。下面对sql语句进行分析明确sql语句的执行顺序有助于我们对于sql语句进行优化。提高我们对数据库和sql语句的理解。来编写效率更高的语句。优化SQL语句可以提高查询性能、减少系统负载、提高用户体验、节省成本和改善系统的可扩展性。原创 2023-03-15 16:01:47 · 363 阅读 · 0 评论 -
案例18-面向对象之开门小例子
面向过程和面向对象没有好坏之分,只是应用的场景不同。我们之所以要用面向对象的思想是因为我们要为后期的维护考虑,这样我们就需要写出来的代码容易扩展,复用性强。在面向对象的基础上使用反射,使我们的系统更加的灵活,在运行的过程中我们可以让给来开门都可以。原创 2023-03-11 15:42:57 · 422 阅读 · 3 评论 -
案例22-面向对象的原型设计
面向对象的思想无处不在,不仅仅可以在后端代码中应用。在前端的的组件中也是可以应用的。第一次封装看似比较复杂,但是为后面代码或者组件复用的时候提高了工作效率。整体来说效率是提高的。原创 2023-03-10 16:35:32 · 130 阅读 · 0 评论 -
案例01-修改数据redis没有同步更新
redis中存储了关于一个课程下多个班级的信息。但是难免会在一个课程下添加新的班级。添加了新的班级之后缓存中的数据是没有同步更新的,只能等数据的有效时间过了之后数据才会更新。这样就导致了我们添加了班级请求数据的时候却没有把新添加的数据返回回来。此代码的逻辑是通过redis查询该课程下所有班级的信息,如果没有从redis中查询到数据就从数据库中查询并存到redis里一份。这样就存在一个问题,更新数据库中的数据的时候没有同步把缓存中的数据也进行更新,在查询的时候就会有查询的数据和实际的数据是不一致的。原创 2023-03-10 14:46:31 · 861 阅读 · 0 评论 -
案例06-复用思想的接口和SQL
我们在开发项目的过程中非常容易出现的一种现象就是用什么我就直接写什么,就像我们从数据库读或者存数据一样。我们想要什么数据就从数据库中获取什么样的数据。没有考虑是否浪费了资源的开销。代码是不是复用的问题。 以上两个图都是没有体现复用思想的例子。两个类似的业务场景写了两个接口、两个接口、两个实现类、两个sql,下面我们将上面的代码进行改造。 两个接口都是都是实现查询在线人员的情况,区别在去两个接口的入参不同。这里我们可以通过使用mybatis的动态SQL进行实现。Controlle原创 2023-03-10 11:18:03 · 562 阅读 · 0 评论 -
案例14-代码结构逻辑混乱,页面设计不美观
1.明确概念,明确边界。只有我们对v-if足够明确我们在使用过程中才不会出现只使用v-if的情况。对于同一个变量的判断可以使用true和false的方式。2.封装的重要性,我们把类似的代码封装了之后,我们代码的复用性才强。在后期维护的过程中才会更加的容易。如果同样的代码写了很多份。维护起来很困难,花费时间也长。原创 2023-03-10 09:57:51 · 729 阅读 · 0 评论 -
案例17-混用环境的影响
1.只因为有三套环境就是让我们在不同的场景使用不同的环境,写代码使用开发环境,功能测试使用测试环境,给用户提供服务使用生产环境。2.环境的混用会导致数据的不准确性,和其它问题的不确定性。应用场景的不同对应的操作也就会不同。比如开发环境每天上下班可以进行服务器的开关机操作,如果生产环境连接了其他服务的开发环境,这样用些功能就没有办法使用了。给用户带来不好的体验。3.我们可以分配权限,或者是权限隔离,有权限的人才可以进行环境配置。也可以通过脚本的方式自动检测配置中心。原创 2023-03-08 19:45:09 · 142 阅读 · 0 评论 -
案例19-生产事故临时解决和最终解决方案
学生在使用AR助教机器人进行上课的时候,会去学习通上查找对应的课程信息。但是由于学生可能汇报课程放到一个文件夹里面进行管理。这样在使用AR系统进行上课的时候就会发现找不到这个课程了。这样的生产事故就需要及时进行处理。这有时候需要考虑临时解决问题的方案。确保用户能够正常上课。线上问题永远都是最重要的,对用户负责。确保用户能够正常使用软件。生产环境未经领导允许不可以进行操作。原创 2023-03-08 16:24:49 · 145 阅读 · 0 评论 -
案例27-单表从9个更新语句调整为2个
在写代码之前先去看一下项目中是否有类似的业务逻辑,是否有可以复用的代码。来减少我们做无用功。代码的复用对于我们后期对于项目维护的成本非常低。原创 2023-03-08 15:51:07 · 731 阅读 · 0 评论 -
案例25-用户、第三方和AR系统的耦合性
高内聚,低耦合。内聚关注模块内部的元素结合程度,耦合关注模块之间的依赖程度。短期来看,高内聚低耦合并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。原创 2023-03-07 09:13:44 · 248 阅读 · 0 评论 -
案例13-前端对localStorage的使用分析
localstorage 在浏览器的 API 有两个:localStorage 和sessionStorage,存在于 window 对象中:localStorage 对应 window.localStorage,sessionStorage 对应 window.sessionStorage。localStorage 和 sessionStorage 的区别主要是在于其生存期。理论上来说是永久有效的,即不主动清空的话就不会消失,即使保存的数据超出了浏览器所规定的大小,也不会把旧数据清空而只会报错。原创 2023-03-03 19:46:39 · 635 阅读 · 0 评论 -
案例09-数据类型不一致导致equals判断为false
在判断课程id和班级id的时候如果一致就像课程信息进行更新,如果不一致就插入一条新的数据。其实两个变量的值是一致的但是类型是不一致的。这就导致数据库中已经有一条这样的数据了,在判断的时候结果为false,就有插入了一条相同课程班级的数据。数据发生了混乱。 分析equals方法判断两个对象的什么内容,是对象的值还是对象的地址以及基本数据类型的对象是否重写了equals方法。1.通过demo来验证equals方法 从执行的结果来看,类型的不一致会导致调用equals方法为false。2.原创 2023-03-03 16:38:56 · 1096 阅读 · 0 评论 -
项目实战-NewFixedThreadPool线程池
多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。3.ScheduledThreadPool :适合使用在执行 定时任务和具体固定周期的重复任务。2.FixedThreadPool :适合使用在任务量比 较固定但耗时长的任务。1.CachedThreadPool :适合使用在任务量 大但耗时少的任务。4.SingleThreadPool :适合使用在多个任务 顺序执行的场景。中,这些独立运行的程序片段叫作“原创 2023-02-10 19:08:03 · 4167 阅读 · 1 评论 -
项目实战-错误日志分析
任何一个系统在使用的过程中会难免会出现一个错误,但是出现错误之后怎么能够更快速更准确的定位到问题的位置是关键的。其实打印日志信息和开发功能是同等重要的,只有我们在开发功能的时候把打印错误信息配置了,那在以后我们解决发生问题的时候才能提高定位问题的效率。2、我们有了一个大概的了解之后看蓝色部分提示我们错误的类型是什么以及错误类型的地址什么,图中提示的错误类型是ApplicationContextException:应用程序上下文初始化期间引发异常。3.记录用户操作的审计日志。1.快速定位问题的位置。原创 2023-01-30 10:57:06 · 961 阅读 · 0 评论 -
如何设计一个 70w 在线人数的弹幕系统
数据更新的策略是服务会定期发起RPC调⽤从弹幕服务拉取数据,拉取到的弹幕缓存到内存中,这样后续的请求过来时便能直接⾛走本地内存的读取,⼤大幅降低了调用时延。同时,采用柔性的处理方式,拉取用户头像、敏感词过滤等分支在调用失败的情况下,仍然能保证服务的核心流程不受影响,即弹幕能够正常发送和接收,提供有损的服务。如果打开Http的Keepalived开关,还可以节约握手的时间。要设计一款优秀的弹幕系统,首先要考虑人多的时候弹幕响应的完整性、保证弹幕不卡顿不丢失的问题并且要确保系统的稳定性可靠性。转载 2023-01-26 12:15:55 · 199 阅读 · 0 评论 -
项目实战-产品设计
完成之后进行了第二版的验收。但是在验收的过程中提出不能直接结束一个活动,因为活动属于一个课程班级的具体内容,因为我们用的是面向对象的思想,面向的是一个课程而不是一个活动,并且活动的检验在做课的过程中就需要进行检测,管理员关注的并不是单单一个活动而是一个课程班级,带着提出来的建议我们进行了第四版的绘制。优化完之后进行验收,这次的验收方式是以角色扮演的形式,我们有的人扮演管理员有的人扮演教师。管理员可以给老师停止课程,把课程中的活动整改完毕之后在进行推课"对于这个需求的原型设计用了4天的时间,迭代更新了八次。原创 2022-12-30 10:35:46 · 149 阅读 · 0 评论