- 博客(33)
- 收藏
- 关注
原创 企业级微服务开发实战(三):公共模块设计与统一规范封装
将一个Java对象(源Bean)属性值复制到另一个Java对象(目标Bean)中的操作DO:在DAO层与数据库进行交换的对象BO:存在于业务逻辑层,它封装了业务逻辑的相关的数据和操作,BO不仅仅是简单的数据容器,还包含了业务规则和业务流程的相关方法DTO:是一个用来传输数据的对象,DTO用于不同层之间数据的传递,比如service层传controller层,controller传service层,避免层与层之间传递一些不必要的数据,同时可以隐藏内部数据结构和实现细节。
2026-06-07 22:16:22
270
原创 企业级微服务开发实战(二):微服务基础设施搭建与中间件部署
1.环境介绍2.后端工程创建(1)拉取远程代码(2)创建feature分支3.云服务器4.虚拟机准备(与云服务器二选一)(1)虚拟机的安装:①ubuntu22.04下载,下载地址:②下载安装virtualbox,下载地址如下,点击即可完成下载③安装VirtualBox,并使⽤virtualbox安装1台虚拟服务器,双击安装virtualbox④点击新建按钮,填写名称,选择文件夹和Ubuntu的iso镜像⽂件⑤配置好内存,硬盘,cpu等信息(2)虚拟机网络设置。
2026-06-06 17:19:29
341
原创 企业级微服务开发实战(一):项目启动与工程化设计
开发环境联调环境测试环境(测试集群)线上环境(生产集群)环境区分开:避免不同的工作相互影响在apifox里可以随意进行切换环境,设置对应环境里的url设置环境变量,通常用于设置身份校验的token 本地值:只有当前机器上能看到 远程值:团队内的所有人都能看到。
2026-05-24 11:48:41
817
原创 基于SpringCloud的博客系统
适用于流量大的情况,可以减少数据库的压力,降低后端数据源的压力,提高访问的速度Redis使用快照和日志的形式存储在硬盘上,即使断电也不会丢失由于存储在内存上,所以迟早会有一天会内存爆满,所以Redis还提供了键值过期时间和内存溢出后的淘汰策略(即使你自己本身不设置也可能因为长期未使用而被删除)开源的消息代理和队列服务器,广泛用于实现消息队列和事件通知,MQ多用于分布式系统之间的通信系统间的通信方式通常有两种:(1)同步通信:直接调用对方的服务,一方数据可以直接到达另一方。
2026-05-18 17:36:19
634
原创 GateWay使用详解
当前应用的所有接口都是暴露在外面的,所有的应用都可以访问到,不安全,之前单体架构,我会对其进行权限校验,但是目前有多套服务,权限校验就得进行多次,维护起来会很麻烦例如:一个公司里一开始只有一个部门,刚开始只需要校验一次就可以进行办理业务(单体架构),后面衍生出了多个部门(微服务架构),一个人去不同部门办理业务都需要校验一次,这样就增多了工作流程和降低效率因此就产生了前台,由前台进行校验,再带去对应的部门进行业务办理,这样就只需要校验一次。
2026-04-27 18:36:09
655
原创 OpenFeign使用详解
(1)远程调用需要拼接参数,如果拼接的参数过多那就会复杂并且多(2)目前远程代码调用的可读性差,单纯这样拼接并不能知道当前调用的url做了什么如何能优雅地实现远程调用?
2026-04-26 18:05:00
589
原创 Nacos的使用详解
原因:2020年后bootstrap被禁用了,但是我们Nacos的配置我们需要先读取bootstrap.yml,再与application.yml合并,因此不引入依赖不能用bootstrap报错。前提:服务发现(服务管理)的配置都是在application.yml里进行的,配置中心(配置管理)的配置都是在bootstrap.yml里进行的。(2)启用:如果当前使用的是其他框架的负载均衡策略,此时Nacos的负载均衡策略无法生效,此时要让Nacos的负载均衡策略生效需要引入配置。
2026-04-26 00:16:09
694
原创 第十二章 多态
1.定义/特性:(1)完成某个行为时,同个引用指向不同对象时会呈现出不同形态(2)并且需要根据上下文来决定是哪种形态例如:生活中说要给儿子弄点吃得,但是这个儿子引用可能指向儿子这个对象,也可能指向养的宠物这个对象,并且针对不同对象的弄点吃的这个行为所弄的食物不同,需要根据上下文来判断弄点吃的具体弄得是什么2.实现条件(1)必须在继承体系下(2)必须使用父类引用指向子类对象,通过父类引用调用重写过的方法注:若使用子类引用调用该方法,则只是普通的方法调用,并不算触发多态。
2025-01-01 15:59:24
847
原创 第十一章 继承
1.关系:解释:类是把现实事物抽象表示出来,但是现实事物之间是存在联系的(比如猫,狗都是动物,都有动物的一些特性)关系的分类(1)has-a(2)is-a2.产生原因:引出来继承这个概念来表示现实事物之间的is-a关系 (也就是类之间的关系),使得子类可以直接继承父类的属性和方法,就无需再重复定义本质目的:实现代码的复用2.使用:思考两个现实事物之间是否有共性的地方的,如果有,可以将其共性的地方抽取出来作为父类,然后二者不同的地方派生出子类去对其进行分别的实现父类:提取出来的公共代码。
2024-12-25 23:01:56
1242
原创 第三章线性表+第四章ArrayList与顺序表
1.解释:顺序表是基于数组实现,其在数组的基础上增加了增删改查功能(与数组的主要区别),是对数组的进一步封装2.特点:(1)元素的在数组中连续存放(2)存放线性结构的数据3.对顺序表的实现的集合类:ArrayList(新版本)与Vector(旧版本)区别:线程是否安全ArrayList为线程不安全,在单线程下可以使用多线程下则需要使用Vector1.特点:(1)基于数组实现,创建顺序表时,会先创建出一大块内存空间(导致资源浪费),其元素在内存中连续占用存储空间。
2024-12-25 16:04:10
2002
2
原创 第十章 类和对象(二)
C++在研发的时候希望一种属性和方法,是隶属于类的(区别于实例属性和实例方法),无论该类的实例创建多少个,此属性和方法都只会创建一份,为该类的所有实例所共有,所共用,并且无需创建实例,通过类名就可以使用的属性和方法。注:类的方法区中存储的内容:类的相关信息(类名是什么,有哪些属性,方法,这些属性被什么修饰,以及方法的一些相关信息等)+该类中的方法要执行那些指令(.java源代码编译生成的二进制字节码文件)+类中的类属性。注:别人写的代码也是用包的形式组织起来的,要使用别人的代码,就需要引入他们的包。
2024-12-16 21:51:11
2101
原创 第九章 类和对象(一)
1.定义:将生活中的事物根据需要提取某些特性和方法,利用计算机语言将其定义(抽象过程)出来的称为类,即抽象地表示现实事物的一种方式,便于计算机进行识别。(2)但方法不是每个对象都独有一份,其统一存放于方法区上,为所有成员共用根据其this引用,来决定其对应的成员属性调用谁的。(1)static方法中不存在this,其为公用的,为类方法,无需创建实例也能实现,所以不可以有成员变量和成员方法的存在。(ii)调用:无需手动调用,在创建对象时会由编译器自动调用,并且在对象的生命周期中只会调用一次。
2024-12-15 21:55:21
701
原创 第二章 包装类和泛型
区别于泛型:其进行类型指定后就相当于确定了该变量和该数组只能存放对应类型的变量,对其进行了约束(相当于一个容器,指定了该容器只能存放什么类型的值,并且编译器后续会对其做更严格的检查)6.类型擦除:编译器在编译的时候会将代表类型的形参擦去,在代码中出现的地方全都替换为Object,并且后续会做一系列检查,在实例化阶段,根据其指定的类型编译器会做更严格的检查。4.类型推导:一开始前面的类型写全其指定的类型,后面new可不写类型,根据类型推导猜出其是什么类型。
2024-12-13 21:00:01
641
原创 第一章 时间复杂度和空间复杂度
(2)二分查找:其关系满足2的查找次数方等于其数组的区间长度(相当于N),但由于我们求的是次数与问题规模N的关系,所以要对其取对数,得到O(logN)注:由于for循环内部的条件都较为简单,一般不会将其作为基准,而套在循环内部的内容可能较为复杂,都是以循环内的内容作为基准。(3)有些情况,时间复杂度是不确定的,但是我们一般考虑它最坏的情况,或是平均的情况,最好的情况没什么参考价值。注:问题规模如果有数组,则为数组长度,无数组,则为其对应的循环次数,或区间长度(包括递归所隐藏起来的循环)
2024-12-13 13:03:50
331
原创 第八章 数组的定义和使用
在Java中,其没有出错,因为其是创建了一个对象,该对象存储于堆中,只要堆上的对象还有在使用,其就不会被销毁,此时只是arr1整个临时变量被销毁了,其存储于堆上的对象并没有,其地址仍然为有效地址。(2)引用数据类型:其内存中存的是其引用的对象在堆区的地址,通过该地址可以去操作其对应的那个对象,其比较相等时是比较其引用的是否为同一个对象。在C语言中,其返回的是一个野指针,因为这个数组在出了这个方法之后就不存在,其在内存中的空间被释放了,arr1指向的不为有效地址。Java中支持变量作为数组长度。
2024-11-22 12:57:26
1237
原创 第七章 调试技巧
(iii)验证解决方案是否影响了以前的功能(以前的功能非常多,回归测试的工作量很大,程序员一般会另写一个代码来测试代码(测试开发))(2)使用:有专门的日志库/日志框架来负责打印,把日志按照时间分片存于不同文件中(每几分钟运行出的结果放于一个文件中)(4)解决问题:定位到对应位置,分析原因,给出解决方案,并解决问题。二者的核心思路:二分法,通过中间变量的值来判断问题出在前面还是后面。(1)实现:通过直接打印中间变量的值来检查代码。(3)应用:在实际程序开发过程中,会提前在。(ii)观察中间变量的值。
2024-11-21 11:50:18
375
原创 第六章 方法的使用
1.作用:(1)使代码简洁,精简(2)降低程序员思考代码的复杂程度(程序员做的核心工作就是针对项目的复杂程度做管理,即使项目为可控,简化)2.格式:修饰符 返回类型 方法名(参数列表){3.命名规则:变量名:一般用名词方法名:一般用动词4.注意事项(1)在同一个作用域中不能定义参数列表相同,方法名相同的两个方法(2)方法名的命名使用小驼峰命名规则(3)方法必须定义在类中(4)方法不能嵌套定义(5)在java中不存在方法声明这一说法。
2024-11-20 21:46:40
1008
原创 第三章 运算符
原因:正常编写程序的表达式一般都是有时候为true有时候为false,如果所写的表达式一直为固定的真值,其认为你写的程序可能有问题(学习初期不用理会)分析:在Java中会先执行a
2024-11-08 17:42:55
855
原创 第二章 数据类型和变量
(iv)特殊:根据上述,当一个数写出来默认其为int但是我们又希望它是long时可以在后面加上后缀L/l(最好时加L,不然有时候会辨别不清)(字面值常量要改变类型,经常需要此操作):这里要和C语言区分开,这里的布尔类型与整形不可以兼容,不可以互相转换,两者毫无关联,不可用布尔类型去做整形运算,0/1/非0也不再代表真假(不要惯性思维)(ii)由大到小:由大范围类型变为小范围类型,需要显性转换,,并且可能会有精度丢失(相当于告诉计算机,明知山有虎我偏向虎山行),如果不转会直接报错。
2024-11-07 21:18:51
1139
原创 第一章 初始Java
环境变量的本质作用相当于留个纸条告诉对方我在哪里,而如果我们安的是idea的话,它其实是能自动识别对应的JDK的,即使没有我们也能通过一开始安装的时候记的JDK的路径去找到它(相当于手动搜索取代了设置环境变量,环境变量的设置可有可没有)(1)定义:利用Java语言写出来的代码,编译器通过生成与特定计算机体系无关的字节码指令,(其构成字节码文件(.class)),可以通过不同版本的JVM(Java虚拟机)在不同的操作系统上使用。(1)小驼峰:第一个单词的首字母小写,之后的单词首字母都要大写(变量名和方法名)
2024-11-03 20:56:45
931
原创 11.3新起点开启Java之旅
周内 晚上看课 要求:当晚立刻梳理补笔记,隔天中午和晚上进行 梳理+敲代码(提交对应代码到gitte)+写博客+完成对应练习。周末:早上看课 要求:早上看完课立刻梳理补笔记 下午及晚上进行梳理+敲代码(提交对应代码到gitte)+写博客+完成对应练习。不要质疑不要焦虑 坚持把自己该做的事情一件件做完就好了!在C语言学习基础学习得差不多之后,结合自己的情况,选择开始Java的学习。
2024-11-03 18:57:04
286
原创 第六章 函数
1.自定义函数四要素:返回类型,函数名,函数参数,函数体2.返回类型:计算结果的类型(1)如果不需要返回值,可以写void(空)注:其在return的时候可以直接就写return;适用于不需要返回值但又需要提前返回的情况(2)如果返回类型和return的值不一致,则会隐形将返回的值转化为返回类型的类型(3)如果没有写返回类型,则默认为int类型,并且没有return也会返回随机值(4)如果写了返回类型但是没有对应的return,则会返回随机值。
2024-11-02 11:00:09
1194
原创 第五章数组
1.原理:利用sizeof(数组名)得到的是数组所有元素所占字节的大小总和,而数组内的每一个元素都是同一种元素,所以计算元素大小只需要总和去除以单个元素的大小即可(一般用于被除的单个元素都是arr[0],因为一个数组至少有一个元素。2.二维数组可以省略行,但不可以省略列(由于二维数组的元素是一维数组,而一维数组的类型是元素类型+[大小],列其实代表着一维数组的大小,故可以认为数组的大小可以省略,但是其数组的类型不可省略。(ii)分别设置其最右的元素(求出元素个数后-1,因为下标从0开始)和最左的元素。
2024-10-28 22:44:44
753
原创 第四章利用分支和循环实现猜数字游戏
原因:种子只需要在每次程序刚开始之前设置好即可,若每调用一次rand就设置一次种子,会导致其种子的数值临近或相同,并且是进行的相同的算法运算,生成的依旧是伪随机数,且值非常相近。(2)原理:根据所设置的种子进行固定的算法运算,生成伪随机数,如果不设置则默认种子为1,则此时不同次生成的随机数都相同,因此想要生成不同的随机数,需要改变其种子。例如:决定要用加法还是减法,可以rand%2,生成0和1,然后再用switch语句去变换到对应的case中进行加法或减法的实现(可以实现50%,50%的概率)
2024-10-24 13:04:06
585
原创 第三章分支和循环(上)
前提:C语言是一门结构化的程序设计语言,其中的结构化是指顺序结构,选择结构,循环结构,今天要着重讲的就是实现分支和循环的语句分支:switch和if循环:while,for,do-while。
2024-10-18 17:50:57
1013
原创 关于标记的问题
当代码运行到第二个for循环结束时,其有两种可能,一种是已经找到对应因子break出来了,一种是所有的数除完还是没有对应因子,所以此时为了区别是哪种情况,可以找一个标记,先假设其为素数,当其不符合素数要求时立刻改变标记,最后运行结束时根据这个标记来判定是否为素数。如上图所示,此时若在do-while循环体内定义flag,则会出了do这个循环体后flag变量消失,while条件在判断的时候会报flag未定义的警告,所以要小心警惕局部变量的作用范围,并且将标记定义于循环体外面,在里面再去假设和改变它的值。
2024-10-16 12:35:41
214
原创 关于输入多组数据的问题
解决方法:运用了scanf的返回值,即当你不想再输入数值,想结束时,可以按三次ctrl+z+回车进行结束,则scanf会给你返回一个EOF(-1),如此便可以将其不等于EOF的情况作为循环开始的条件,直到用户不想再比较或不再需要运用这个功能时,就可以令其读取失败,结束循环,就可以满足大家需要比较的数据组不同的问题。情况:今天在写题的时候遇到一个情况,即我放了三组输入数据但牛客网用例只输入了一组,但是当我只放一组数据的时候,他的用例输入却输了三组,我很困惑,不知道怎样才能满足他所需要的数据数量。
2024-10-14 10:57:52
281
原创 第二章C语言数据类型和变量
1.作用:将参数文本输出到屏幕,2.参数:参数与占位符是对应关系,有n个占位符,就有n=1个参数,参数之间用逗号隔开。
2024-10-13 21:26:20
2050
原创 第一章c语言的基本概念和工具
人与计算机交流也需要语言,这种语言叫做计算机语言,人通过计算机语言对计算机下达指令,然后计算机处理,再运行程序。c语言就是计算机语言的一种。
2024-09-29 17:09:42
536
1
原创 9.26学习编程的新起点
1.利用网络资源进行学习,在学习之后花时间梳理,自我理解2.然后边梳理边重新敲一次代码,看看有什么不对的地方进行调整,然后将代码块上传至gitee3.敲完代码后借助写博客整理一步步讲解自己对知识的理解。
2024-09-29 15:16:42
275
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅