自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java实现两个线程交替打印的六种方式

【代码】Java实现两个线程交替打印的六种方式。

2023-07-13 10:52:07 2801

原创 自定义类加载器实现Java代码热部署

在测试时,我们需要在5s中之内将MyClass进行重新编译,因为重新编译的过程中是没有MyClass类的,此时执行类加载会报错。热部署指能够在运行时实时修改类文件,只需要重新编译更改的类文件,而不用重新启动项目。可以用自定义类加载器实现。1.创建自己的类加载器,继承ClassLoader并重写findClass方法。可以看到我们在不重启代码的情况下成功修改了MyClass类的print方法。每隔5s执行一次myClass的print方法,并打印自己的类加载器。

2023-06-30 16:29:26 398

原创 完全二叉树和数组的下标对应关系

当前数组长度为11,下标最大值为10。如果要添加一个数字num,则该num的下标是11,为奇数,则该点为完全二叉树的左子节点,其父节点的下标则为(11 - 1) / 2 = 5,即下标为5的数,这里是6,此时下标依然为奇数,他的父节点则为(5 - 1) / 2 = 2,即下标为2的数,这里是7;此时下标为偶数,他的父节点为(2 - 2) / 2 =0。对应关系:奇数则为左子节点,父节点为(i - 1) / 2;偶数则为右子节点,父节点为(i - 2) / 2;

2023-06-29 11:26:56 367

原创 手写一个基于netty的tomcat服务器:附压测对比

这里需要将netty封装的request信息转为自己的request类。注意netty在处理http请求的时候会拆分成请求头和请求头来分批处理,所以在处理完请求头信息后需要将解析到的request与channel绑定,使得处理请求头的时候可以得到当前的request,具体的封装逻辑可以参考源码。与之前的OutputStream流不同,netty中使用的是channel来传输数据,且需要使用到netty自己的请求头信息,所以需要更改响应数据的函数。可以看到使用netty后吞吐量和响应时间都有了提升。

2023-06-27 16:35:38 269

原创 手写框架专栏:实现tomcat和ssm框架核心功能

手写一个基于BIO的Java服务器手写spring框架预备知识:三级缓存解决循环依赖问题手写spring框架预备知识:责任链模式解决cglib多重代理问题手写spring框架:实现ioc和aop功能;使用三级缓存解决循环依赖问题手写springmvc框架:整合手写的spring和服务器,实现前后端的请求处理和视图渲染手写mybatis框架:完成对数据库的增删改查操作手写框架项目预备知识:整合spring和mybatis手写框架项目:实现基本的crud和自定义aop切面功能

2023-06-23 13:27:45 82

原创 手写框架项目:实现基本的crud和自定义aop切面功能

预期目标已经完成了,本专栏也差不多告一段落了。写项目的时候遇到了各种各样的问题,需要反复去框架代码中进行修改,所以之前的博客代码难免会有不同的地方。

2023-06-23 13:06:32 69

原创 手写框架项目预备知识:整合spring和mybatis

本文是手写框架实现web项目的前置文章,关于spring系列和mybatis的部分可以参考文章由于mybatis中并没有使用spring来管理自己的mapper类,而是用代理的方式动态的获取mapper对象,所以使用spring的依赖注入是无法获得mybatis生成的mapper对象的,需要提前交给spring管理。注意:整合过程中会对原来的框架进行一些细节上的修改,与博客有所出入,可以参考源码地址。由于这部分比较简单,就没有项目架构,直接贴代码和讲解了。

2023-06-23 12:51:18 62

原创 手写mybatis框架:完成对数据库的增删改查操作

负责解析mapper对象为预处理对象PreparedStatement,并将传入的参数填补到占位符中,执行真正的sql语句,处理结果并返回。初始化配置类信息,获取sqlSession对象,从sqlSession中获取对应mapper的动态代理对象。在增强方法中解析方法的参数信息并找到对应的mapper类,然后调用执行器执行真正的sql语句并返回结果。保存配置文件信息,并初始化所有的mapper.xml,解析为java类。

2023-06-21 10:46:04 140 1

原创 手写springmvc框架:整合手写的spring和服务器,实现前后端的请求处理和视图渲染

手写springmvc需要引入之前手写的spring和服务器的依赖,由于整合过程中需要添加和修改一些功能,所以之前的博客代码可能稍有不同,但是整体思路是一致的,最新代码可以参考我放在文末的gitee地址。老规矩,只列出整个思路,具体代码参考源码地址。

2023-06-19 10:59:38 144

原创 手写spring框架预备知识:责任链模式解决cglib多重代理问题

cglib在动态代理时,无法像jdk动态代理那样对代理对象再次执行代理。问题原理分析参考博客直接对bean进行反复代理和赋值即可。

2023-06-19 10:36:09 241

原创 手写spring框架:实现ioc和aop功能;使用三级缓存解决循环依赖问题

在main函数中注册自己,并添加ComponentScan注解。

2023-06-15 18:22:13 296

原创 手写spring框架预备知识:三级缓存解决循环依赖问题

A依赖B,同时B又依赖A,且两者都没有提前创建好,如下图所示: 打破循环的原理在出现循环的时候提前将其中的一个对象创建好,并注入到另一个对象。spring中采用的三级缓存的来实现这个操作,除了三级缓存外还需要一个set来判断是否出现循环依赖,那么在spring中创建对象的流程如下: 可能有眼尖的小伙伴就能看出来,二级缓存有什么用呢?spring为了保证单例的特性,会尽量保证对象在最后一步再进行Aop的动态代理操作,但是在出现循环依赖时就不得不提前进行Aop

2023-06-15 17:17:10 95

原创 自定义注解解决消息幂等性问题

自定义注解解决消费幂等性问题,采用适配器模式,提高代码的维护性和扩展性

2023-06-13 21:06:21 69

原创 手写一个基于BIO的Java服务器

在启动类中初始化配置信息和线程池信息,然后创建ServerSocket并使用socket.accept()阻塞等待http请求。

2023-06-12 16:21:25 167

原创 elasticsearch实现搜索的快速自动补全功能

给mapping添加completion类型的字段,completion字段中保存的是一个个的字符串集合,搜索时按照给定的词条进行匹配。

2023-06-05 16:41:15 181

原创 记录利用设计模式取代if-else的一些方法

提前注入所有的优点:扩展时只需要将新的接口实现类注入到sprin容器中即可缺点;每次都需要遍历全部的接口类,且无法控制执行顺序典型用例:springmvc中参数转换,将string类型的接收参数动态的转换成函数的参数类型提前注入实现类。如果在spring中的话可以使用@PostConstruct结果:优点:可以自定义处理器的获取方式,比如用class来获取缺点;无法控制执行顺序,扩展时需要额外修改context类。

2023-06-03 15:50:09 824

原创 用spring boot的@Order注解实现责任链模式

责任链可以将发送方和接收方的业务处理逻辑隔离开来,降低耦合,提高代码的可扩展性。比如在订单业务中,接收方处理订单时,需要先校验订单的合法性,然后计算订单的花费,接着校验库存和余额等信息,最后更新数据库。中途如果想要添加或者删除功能,都需要在接收方代码中进行修改。这时就需要责任链来处理中间过程,接收方只需要进行最后的数据库更新即可。使用责任链模式后,在任何一个步骤中添加操作只需要添加实现类即可,增加了代码的可扩展性。定义拦截器上下文类,由消费方直接调用。

2023-06-03 14:31:27 826

原创 Rocketmq中同一个消费者订阅两个topic

在聊天项目中,需要将消息异步保存到同步到数据库和ES文档中,而ES的mapping中包含了私聊和群聊两种消息模块。现在需要ES的消费组同时订阅私聊和群聊的topic,并都转为ES的消息文档格式并保存。

2023-05-24 15:57:28 2567

原创 Elasticsearch实现对同一字段既能精准查询也能模糊查询

使用@MultiField注解给字段取别名并设置为keyword类型。可以看到模糊查询content中一共有3条数据有我这个分词。可以看到精准查询就只有一条结果,符合精准查询。

2023-05-24 15:46:02 1588

原创 SpringSecurity + jwt + Oauth2实现动态权限管理(有源码)

spring security权限管理

2023-03-31 09:51:53 1215

原创 SpringSecurity+Jwt+Aouth2实现前后端分离的登录认证(有源码)

基于springSecurity的简易登录系统

2023-03-27 17:36:18 3020 1

原创 git从创建到推送。以及如何利用git在多台电脑上共同完成工程。(仅限个人使用)

绑定远程仓库(默认已经创建):git remote add (这里使用https,不需要密钥,只是每次提交都需要账号密码)推送到远程仓库:git push -u (第一次推送时需要利用这句话推送并绑定远程仓库分支)提交待提交区到本地仓库:git commit -m "本次操作名称"克隆远程仓库项目到本地:git clone 进入项目目录,查看远程仓库信息:git remote -v。查看本地仓库:git remote -v。

2023-03-06 20:58:59 351

原创 java中Collections.sort()与Arrays.sort()的区别

java中Collections.sort()与Arrays.sort()的区别

2022-10-07 16:22:37 865

原创 SpringSecurity登录失败返回错误信息

现在有这么一个需求,客户端登录验证失败之后显示两种错误信息--"用户名不存在"或者"账号密码错误",但是spring Security好像并没有返回错误信息的类,所以需要我们自己从request域中去获取错误信息,首先我们要设置验证失败后的返回地址。http.formLogin() //自定义自己编写的登陆页面 .loginPage("/login.html") //登陆页面设置 .loginProcessingUrl("/us..

2022-05-20 11:12:17 4384

原创 跨域问题-->前端method和methods

vue中定义ajax请求方法用methodsjs中请求方法用method任何一个错误在浏览时不会报错,但在请求后端时都会报跨域问题的错误。

2022-03-08 23:58:18 1260

原创 SpringMVC 中@ResponBody返回值乱码问题

在SpringMVC配置文件中添加如下配置,更改默认编码为UTF-8<!--解决返回值乱码--> <mvc:annotation-driven > <!-- 消息转换器 --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.String.

2022-01-22 17:08:25 55

原创 idea中maven下载的资源无法部署到服务器上的解决方法

今天在学习SpringMVC处理json数据时,需要导入jackson的依赖,但是通过maven导入后依旧无法在服务器的lib目录下找到,后来发现需要自己手动将依赖包添加进lib中,步骤如下:进入Project Structure进入该界面,查看自己的lib下是否有需要导入的jar包点击Available Elemes下的SpringMVC(自己的工程名),选中自己需要添加的jar包,点击右键选择Put into/WEB-INF/lib,然后点击apply->ok.回到..

2022-01-22 12:56:35 499

原创 List.remove(1)是删除索引还是删除数字1?

直接填数字是删除索引public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(2); list.add(10); list.add(20); System.out.println(list); list.remove(2); Syst

2022-01-20 20:58:59 1211

原创 SpringMVC访问静态资源和转发视图

访问静态资源:配置文件中添加 <!--开启servlet默认处理--> <mvc:default-servlet-handler></mvc:default-servlet-handler> <!--开启注解驱动--> <mvc:annotation-driven></mvc:annotation-driven>转发视图:必须开启注解驱动,否则其余所有的请求都会失效,只执行试图控制的功能

2022-01-19 23:24:10 227

原创 阻止超链接跳转return false 和 preventDefault的区别

今天在学习SpringMVC时遇到问题需要将一个超链接的get请求转换成delete请求,需要绑定点击事件通过表单去发送,并阻止超链接的默认行为,遇到的问题。preventDefault只停止页面跳转,但是请求依然会执行$(function () { $(".delete").click(function () { //绑定表单 var method = $("#delete_form"); ..

2022-01-19 22:54:23 916

原创 哪些题可以使用贪婪算法

每一步都必须有机会能填满题目所给的容器大小(即每一步局部最优解都有成为全局最优解的可能性),或者容器没有大小限制。如:普通背包问题(可以只取一部分)和0-1背包问题。前者可以保证每一步都有机会填满背包,而后者无法确保每一步都有机会填满容器,故无法使用贪心算法。如:Dijkstra算法求最短路径,对每一步的选择都没有路径大小限制,也即每一步的局部最优解都有机会成为全局最优解,故可以使用贪心算法。当然,以上只是大概率上的总结,缺乏严格的理论论证,所以啊,还是得慎用贪婪算法啊!!...

2022-01-04 22:02:06 431

原创 Kmp算法中求最大长度表

关于Kmp算法的思路和其解决什么问题可以参考这篇文章很详尽KMP算法(厉害) - ZzUuOo666 - 博客园本文主要写一下如何求最大长度表,在Kmp算法中,最大长度表规定了每次移动的距离。该表的值为字符串的各个子串的前缀和后缀的最大公共元素个数,如图所示:当然,最容易想到的就是穷举所有的前缀后缀情况并一一比对,显然这种方法过于复杂。通过观察可以发现,所有的前缀表达式都以第一个元素的值为开头,所有我们可以通过优先匹配头元素来排除很大一部分后缀表达式。现在将设前缀索引为j, 后缀索引为i,.

2021-11-08 21:35:41 250

原创 Java抽象类作为引用类型创建对象

抽象类无法用new直接实例化,但是可以定义为引用类型去实例化子类。上图创建了一个Employee的抽象类直接实例化会出错可以利用数组一样的方式创建一连串的引用类型变量,此处可理解为数组此时的抽象类可以引用其子类实例化,从而实现创建对象,注意此时的对象类型是子类类型,抽象类本身依然不能作为对象实例化。...

2021-09-29 23:54:08 1240

原创 2021-08-03

padding中same与valid对输出大小的计算对于转置卷积和卷积,padding的‘same’与‘valid’中,输入高宽(i),输出高宽(o),步长(s),卷积核的高宽(k)(设定高宽相等都为k)满足以下关系:卷积:padding = 'same’时,o = i/s 向上取整padding = 'valid’时, o = (i-k)/s + 1 向下取整转置卷积:padding = 'same’时,o = i * spading = ‘valid’ 时, o = (i-1)*s+k作者:毛路

2021-08-03 17:53:03 72

空空如也

空空如也

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

TA关注的人

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