自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 八股文——JAVA基础:包装类型的缓存机制了解么?

对于包装类中的整形包装类,Byte、Short、Integer、Long等,对于数值在-128到127的内容会在堆中创建缓存,比如拿Integer举例,Integer a = 10,Integer b =10,10对应在缓存数组CACHE[138],所以a == b是比较的就是CACHE[138]对应的地址,显然两者地址是相同的。

2025-06-25 23:01:12 69

原创 八股文——JAVA基础:基本数据类型与包装类的区别

1.用途不同,在目前编程而言,基本除了使用局部变量会使用基本数据类型外,都会去使用包装类。包装类能够适用泛型是目前企业编程使用包装类的主要原因,而基本类型不行。对于这个内容终于弄清了:无论是基本数据类型还是包装类还是其他引用类型,首先都是从jvm中的栈去取值,而基本数据类型拿到的是数值,而引用类型和封装类(封装类就是引用类型)拿到的是地址,地址对应在堆中。3.存储方式不同,基本数据类型作为局部变量会被存放在栈中,如果作为引用类型会被存放在堆中。2.内存占用不同,包装类的占用会大一些。对于包装数据类型来说,

2025-06-25 22:51:35 260

原创 八股文——JAVA基础:标识符与关键字

关键字是特殊的标识符,有其公认的意义,比如private、public等都是用于对方法、参数进行修饰的。标识符就是一个名字,比如我们对方法、参数取得名字就是标识符。需要注意的是true/false/null不是关键字。

2025-06-25 22:28:55 205

原创 八股文——JAVA基础:说一下C++与java的区别

其次,java无法直接访问内存,java通过引用对向,比如new一个对象,拿到的对象实例实际上是地址的副本,通过对对象实例进行修改,最终可以实现对内存的修改。而C++提供指针直接访问内存。首先,c++与java都是面向对象编程,都包含封装、继承、多态的特性。但是c++多继承,而java只能单继承与多实现。由于java不能直接访问内存,以及GC机制,使得java不会出现野指针。野指针指的是内存已被回收,但是指针还没被回收。除此之外,java不支持对操作符的重载,而c++可以。

2025-06-25 22:24:17 243

原创 sentinel与seata组件在微服务中的基本作用

以鉴权举例,网关通过拦截器拿到userInfo,存储在threadLocal中,当本次调用的微服务要调用下一个微服务,并且需要userInfo时,会使用openfeign工具,将userInfo存储在这个网络请求的请求头中,转发的请求仍然再一次访问网关,网管拦截器拿到userInfo,提取出放入该微服务执行线程的threadlocal中。在微服务中,首先学习了微服务的横向拆分与纵向拆分,纵向拆分指按照功能拆分模块,横向拆分指将高复用的模块单独拆分,使纵向拆分的模块去调用这部分内容。

2025-06-25 21:54:30 519

原创 JAVA基础:讲一下equals()与hashcode(),什么时候重写,为什么重写,怎么重写?

因为equals方法进行重写,那么原本不同的两个对象可能就会相同了,比如两个学生,我们的eqauls判别标准是两个学生的id相同,就会认为(学生A).equals(学生B),然而A与B显然是不同的对象,对应不同的地址,那么hashcode此时不重写,此时hashcode就会产生两个不同值,这与哈希表的逻辑不符,所以此时hashcode需要将这两个学生看作是同一个对象,并且产生相同的散列值。当equals方法进行重写后,hashcode方法也需要重写。

2025-06-24 20:55:05 109

原创 八股文——JAVA基础:= =和equals有什么区别?

=比较的是地址,equals底层是由==实现,equals对于非基本类型都会进行方法重写,也就是让其去比较值。

2025-06-24 20:32:06 87

原创 八股文——JAVA基础JDK、JRE、JVM 三者之间的关系?

JRE是运行java运行环境。

2025-06-24 20:15:27 62

原创 八股文——JAVA基础:Java 中的参数传递时传值呢?还是传引用?

如果对引用对象进行传递,实际上传递的是原对象地址的副本,所以通过引用对引用对象进行修改,会使得原本的内容进行修改。java中对于基本数据类型比如int、string等,进行传值时,如果对传入值进行修改,不影响原本值得变更。java中只有传值没有引用的说法,c语言的指针是一种引用。

2025-06-24 20:13:58 78

原创 八股文——JAVA基础:解释下什么是面向对象?面向对象和面向过程的区别

由于封装的对象是多样的,比如现在有车、飞机、自行车,这几个物体实际上都是交通工具,所以可以将这几个内容抽象一个父类,父类命名为交通工具,交通工具的功能是交通运输,那么车、飞机、自行车都能够继承父类的方法,然后对父类方法进行特有的重写来满足个性。多态就是指对父类的实现,因为父类有多个子类,那么创建子类的实例,以父类来接收,此时就是一种多态。面向过程如c语言的编程形式,在编程时定义的是一个方法,然后后续执行只需要关注这个方法的作用,而不会将方法进行抽象,也就是只关注程序执行的过程细节。

2025-06-24 19:13:27 177

原创 八股文——java基础:Java为什么被称为平台无关性语言?

多平台.java文件->javac编译为.class文件->多平台jvm能够通用识别.class文件->jvm解释与编译.class文件为机器码,jvm中包含解释器和编译器,解释器会翻译全部内容,而JIT编译器会编译热点内容,不需再重复解释。1.首先java语言是一种解释与编译共存的语言,.java文件首先会被javac编译器编译为.class文件,.class文件能够被jvm识别,而jvm将.class翻译为机器码,机器码最终被底层计算器执行。

2025-06-24 19:02:55 170

原创 基于openfeign拦截器RequestInterceptor实现的微服务之间的夹带转发

其次,清空购车还需要userId,所以需要使用RequestInterceptor来实现夹带信息。显然,清空购物车需要调用cart服务,也就是这个功能的实现涉及到了微服务之间的转发。trade服务需要在下单后清空购物车。

2025-06-23 21:58:09 331

原创 springcloud/springmvc协调作用传递验证信息

前端请求携带请求头,请求头中的authorization为携带的对应token,这个token如何转发给各个微服务模块?微服务架构的拆分,各模块之间使用feign组件来进行相互http转发通信。前端与后端之间使用springcloud的网关来进行协调。现在问题出现,用户的信息如何进行传递?

2025-06-23 19:59:11 180

原创 微服务网关/nacos/feign总结

2.feign:nacos只是对生产者进行注册,而实际的转发并不是由nacos来完成的,简单来讲nacos的主要作用就是维护一张表,这张表只写了对应的生产者微服务的名称和一些基本信息,消费者能够知道对方的名字。4.3网关通过nacos注册中心中拉取user-service的微服务列表,并使用负载均衡选取合适的服务器,假设现在选取的是注册列表中的端口号为8084的服务器,从而网关会向下转发localhost:8084/users/search。网关关注的是前端单端口请求与后端多端口接收的不匹配问题。

2025-06-22 21:00:06 351

原创 Feign进行微服务转发的实现

在我学习的项目中,单独拆分一个api模块,该模块用于存放公用工具以及各种服用模块,client自然也放在其中,这算是横向拆分的一种。但是问题是,现在的client存放在单独的复用模块,在我的项目中命名为api模块,那么api模块是不需要去启动的,那么A模块如何去自动注入client代理的实例?显然需要让A模块找到需要的client对象。重点,容易遗忘的一点:假设A模块调用B模块的内容,调用过程是A请求client,client通过网络连接请求B,B执行对应接口内容,返回A具体执行结果。

2025-06-22 12:46:21 343

原创 微服务拆分——nacos/Feign

将两者有机结合起来,是设计和构建成功微服务架构的关键。1.首先就是注册中心,国内使用较多的是nacos,部署完nacos后,在各个微服务的配置文件中,对nacos进行配置,注意:nacos在部署时,就需要与数据库进行绑定,所以可以看作nacos默认模块需要有数据库。处理方式采用网络通信的形式,A模块调用B模块的接口,让B模块执行A模块需要的功能,然后将功能输出的结果返回给A即可。1.5难以扩展:比如,某个模块的流量剧增,这个模块的压力很大,想要为其分配更多资源,只能整个项目重新部署,这需要很高的时间花销。

2025-06-21 16:28:15 769 1

原创 vmware虚拟机部署docker安装mysql,外部主机无法连接报错

原本能够在我的主机idea自带的数据库中连接到dockers中的mysql的,但是,我重启了电脑之后,一切都变了。显示连接超时,这时候我就开始产生误解了,因为主机重启了,那么虚拟机自然也是重启了,虚拟机重启就会导致虚拟机中en33分配的ip出现变更,从而导致mysql 的url中ip地址出现偏差,从而出现连接错误。这段代码的 -p 3306:3306实际上就是进行端口映射,外部主机通过en33的ip来访问虚拟机,虚拟机得到3306端口号,从而去访问端口号为3306的容器,这样来建立连接的。

2025-06-20 12:37:09 141

原创 微服务:服务治理

也就是构建一个第三方来进行管理:生产者一旦开始生产,就需要去注册中心进行注册,将其ip地址等有效请求信息存放在注册表中,消费者从此之后不会在未建立连接时就去访问生产者,而是先通过注册中心,让注册中心去查找注册表,让消费者与某一个生产者进行匹配。最后,生产者与注册中心构建一个心跳协议,如果生产者挂掉了,注册中心的表与某个订阅该生产者的消费者维护表都会进行更新,从而不会错误的访问这个挂掉的生产者。为了让两者之间能够正常沟通,构建一个代理,称为注册中心,注册中心的作用就是用于分配消费信息到不同的生产者。

2025-06-20 11:04:26 188

原创 docker使用Volume对Nginx进行挂载

使用volume:在创建容器时,使用-v指令来指定对应的虚拟卷volume。将容器的虚拟卷volume与宿主机的文件进行挂载,通过访问宿主机的文件系统来对容器对应内容进行修改即可。原始方法:由于docker会为每一个容器创建其对应的文件信息,但是创建的信息内容只有其最基础的运行信息,所以想要直接去访问其index.html就无法做到。1.容器的虚拟卷为什么能够与宿主机直接进行挂载,或者说为什么修改宿主机的文件信息,可以使对应容器的内容发生修改,底层如何实现?答:挂载(bind mount)让。

2025-06-19 21:08:06 126

原创 MybatisPlus枚举类的应用与转换

二、Jason字符串与类的转换User类中有个info 属性,用于描述用户的年龄、基本介绍以及性别,现在这个属性需要以jason格式来进行存储,显然我们自行定义jason格式就会很麻烦。所以引入MP的类型转换功能:1.将原本的String info 转换为UserInfo info。也就是自行定义一个类,类中属性包含年龄、基本介绍以及性别。2.使用MP的注解来使其能够正确转换:@TableFiled(typeHandler = JacksonTypeHandler.class)

2025-06-09 15:34:56 350

原创 MybatisPlus使用DB静态工具出现找不到实体类的报错

猜测大概的原理应该是DB会去查找实体类对应的mapper,然后通过mapper去查找对应的实体类。原因在于没有创建实体类对应的mapper,并且该mapper还必须继承baseMapper。

2025-06-08 17:25:18 175

原创 Mysql批处理写入数据库

所以想要提高插入速度,我们可以将这些批量插入的语句使用foreach来进行拼接,也就是将这些插入语句合并为一条,那么最终只需要进行提交一次。还需要注意:mysql批处理的缓存大小为4MB,建议每次缓存数据不要超过1000条,否则会出现存储max的异常。原本的数据插入是一条一条进行插入,每次插入都会进行提交,每次提交都会造成网络延迟,所以时间自然就会缓慢。需要注意的是,这个参数仅适用于MySQL JDBC 驱动的私有扩展参数。简单来说,省下来的时间实际上是网络延迟。

2025-06-07 21:12:19 402

原创 java.lang.invoke.SerializedLambda.capturingClass accessible: module java.base does not “opens java.l

Java 9 之后引入模块系统(Jigsaw)于是当 MP 试图访问。

2025-06-07 18:17:07 127

原创 Mybatis-Plus的Iservice接口

基于SSM的框架是service接口与serviceImpl类,spring通过自动代理,创建出serviceImpl层,在serviceImpl层中又使用@Autowired去注入mapper,并且在service层中使用mapper中定义的持久层语句来进行增删改查。所以去增加一个IserviceImpl,让service去继承IserviceImpl并且实现Iservice,那么所有的方法统一存放在IserviceImpl就可以了。

2025-06-07 18:15:22 254

原创 Mybatis-Plus的LambdaWrapper

在企业开发中,MP很多的代码会出现在Service层,但按照基本规范来说,不应该在service层出现持久层的代码,应将这部分调用至Mapper层中。现在的理解是引入函数变成,相当于在面向对象编程中引入了面向过程编程的形式,免去了面向对象编程重复创建对象的开发成本。为了能够使用MP,可以将复杂的where语句用MP包装,其余语句使用标签的形式直接在mapper接口中书写,那么效率依然能提升。在MP中,Lambdawrapper是一种较为特殊的包装器,主要的功能是用于解耦sql语句。

2025-06-07 15:46:33 245

原创 Leetcode日记

简单来讲,我们遍历一次数组,让target去与数组中的值nums[i]做减法,然后我们去hashmap利用其随机存取的特性,以O(1)的时间复杂度判断是否存在与target-nums[i]的值,从而减少了时间复杂度。hashmap的算法使用特性就在于其对数组的特殊处理,数组有下标和value值,而hashmap有键值对,正好可以同时存储数组的下标与值。同样的事讲数组替换为hashmap,时间复杂度能够提升。显然优势体现在hashmap的随机存取。

2025-06-04 23:14:29 306

原创 单锁与分布式锁

顾名思义,单锁只能对单个设备进行上锁,多个设备就会出现问题,也就是说单锁的作用范围就在本机内,如果本机外完成与本机相同的操作,那么本机的锁自然是锁不到本机范围之外的主机。单锁的局限:刚才讲了,单锁作用域为本机,而现在的项目体量越来越大,后端服务器可以有多个服务器进行拼接,再通过类似于nginx服务器来进行反向代理实现负载均衡。也就是说,多个主机都需要执行相同的代码,假设目前代码段A需要上锁,而在分布式服务器部署的情况下使用单锁,比如synchronized,此时服务器1、2、3都。

2025-06-04 21:40:44 150

原创 缓存穿透、缓存击穿、缓存雪崩目前记录(纯日记)

那此时某个进程A进去访问缓存,发现缓存命中但是过期了(啥意思呢,就类似于数据库的逻辑删除,数据没删但是标记这数据删了),此时这个进程A说,爱咋咋地,我管你这那的,我拿着已经被逻辑删除的数据我就回了,然后通知另外一个牛马进程B取对数据进行读取与缓存回写。缓存本身存储的就是高热点的内容,那么当每个热点数据对应的缓存在某个时间消失了,最简单的就是TTL过期,那么此时大量的并发线程来访问某个数据热点,此时缓存没命中,显然就会去查询数据库。缓存雪崩就是缓存宕机了,也甭管咋宕机了,反正就是某一时刻,缓存用不了了。

2025-05-30 21:21:17 526

原创 redis缓存与数据库协调读写机制设计

但从微观来看,是没有问题的,因为线程B是在A修改结束前(A此时正在修改数据库,B读取了缓存,此时数据库的信息还未更新,可以看作是原来的数据库,所以可以简单的看作数据库与缓存的信息是吻合的)我们刚才讲了,缓存的设计初衷(大部分情况),就是为了读,而写是为读来服务的,所以我们理所应当的将设计重心放在读,刚才的极端案例也想表明一件事,我们很难在实际应用中判断一个数据到底是读多还是写多,如果这个数据写多读少,我们对该数据进行重复写就会占用大量的时间与空间,得不偿失。所以,我们为了避免这样的情况,就设计一个。

2025-05-30 15:03:25 355 1

原创 基于Session与基于Redis与Token验证码登录校验

HTTP 是“无状态”协议浏览器和服务器每一次请求/响应,默认互不“记忆”彼此信息。也就是说,服务器无法知道这一次请求和上一次请求是同一个用户发过来的。Session 的作用“会话”(Session)是服务器为每个用户专门开辟的一块存储空间,用来在多次请求之间保存用户的数据。当用户第一次访问网站时,服务器会为他创建一个session 对象,并给浏览器返回一个Session ID(通常使用 Cookie 存放)。

2025-05-29 17:48:18 1107

原创 局部内部类与成员内部类的一些简单理解

就是简单的在外部类中重新定义一个类,内部类可以访问外部类的所有属性与方法,外部类却无法获取到内部类的属性,但是能够调用内部类的方法。就以现在的浅薄理解,我认为访问内部类的方法是创建内部类的唯一意义。

2025-05-27 17:17:02 306

原创 springAI调用deepseek模型使用硅基流动api的配置信息

主要就是model格式,一直提示模型不存在,我真服了。还有就是下面的.base-url与.chat.base-url不知道这俩的区别是啥,可能出错,注意甄别。但是硅基流动的格式不是这样,这个伞兵网站的api文档真是一坨,找了很久没找到具体格式,给的格式也不对。

2025-05-21 21:41:45 463 1

原创 找不到自定义包出现报错ModuleNotFoundError: No module named

很奇怪的报错,时不时抽风来一下,找不到的包是我自定义的一个包,这个包我放在根路径下的,同时包里也有__init__.py,使用相对路径与绝对路径去导包都不行。添加上述代码在根目录中搜索相应包,并将找到的路径进行添加,然后解决。

2025-05-08 16:26:09 211

原创 Post与Get以及@Requestbody和@Pathvariable标签的应用

这里添加PostMapping指定了使用Post形式进行数据传递,而RequestBody标签会将传递的Body(在这里使用的是jason格式)自动转换为自定义实体EmployeeDTO的新建对象。Post的使用场景:简单来讲适用于有安全性限制的,因为post请求的内容会被存在某个封装内容中(比如表单、jason格式等),这部分内容是不会被浏览器的cache所捕捉,安全性较强。Get的使用场景:与post对比而言,不具备安全性,所传输的信息会在url中进行展示。@Pathvariable标签。

2025-04-29 16:32:08 266

原创 nginx.exe打不开或者打开后浏览器显示连接出错

最近在敲一个烂大街项目时需要用到nginx服务器,由于直接下载的打包资源,打开nginx.exe后浏览器出现连接错误。创建好后,继续在该目录下的cmd控制台输入nginx.exe运行nginx服务器,即可解决该问题。根据名称排序查找nginx.exe进程,如果不存在,说明Nginx.exe启动出现了问题。如果在cmd中运行出现其他报错,可以参考报错信息,添加其余的空文件夹。2.如果1无法解决,ctrl+alt+del打开任务管理器,点击。,没有找到缓存文件需要的文件夹,按其需求进行创建即可。

2025-04-28 14:15:55 413

原创 Spring-SSM整合时GET方法出现404报错

后续思考是否是service的对象没有被接收到,重新调试后发现service对象的地址是存在的,不为null,到这里我就真的无语了,到底啥问题给我干的404,后来搜寻各大AI,还是CLAUDE3.7靠谱啊,问题居然出现在我的Controller层的命名不能为Controller,好吧,那无敌了。持续报错404,我从头到尾进行排查了一编,并且对service层进行了测试,都没有问题。上述代码为Controller层的测试代码,运行。

2025-04-23 20:52:47 207

原创 AOP基本概念

上述语句解释感觉太过玄妙不似常人能够听懂,所以结合自己理解,给自己留点备注:首先。

2025-04-18 16:15:55 292

原创 报错:Bean 必须为 ‘javax. sql. DataSource‘ 类型

后来想想用的jdk版本为17,可能有些高了,降jdk版本为11解决冲突,这个问题如果在设置源的时候有提示,那么应该不是源的问题,可以尝试降低jdk版本。仍然出现报错,我的pom.xml文件从网上下载下来的,应该不是包冲突。

2025-04-15 14:37:57 305

原创 SpringMvc获取请求数据

在url中将name与age进行编写,通过框架可以提取url中的name与age,这个条件是我们的形参要与url中的内容进行对应。比如现在的url运行服务器,输入url后会得到。

2025-04-02 17:59:58 539

原创 SpringMVC响应数据:页面跳转与回写数据

<body></body>

2025-04-02 13:34:48 1081

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除