自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 tomcat正常启动但 SpringMVC 控制器无法启动

摘要: 排查Tomcat启动后无法访问SpringMVC接口的问题,发现是IDEA工件配置缺失导致依赖JAR未复制到out/artifacts/.../WEB-INF/lib目录。尽管Java类文件正常编译到WEB-INF/classes,但缺少Servlet/SpringMVC核心JAR导致请求无法路由。解决方法是手动将依赖JAR添加到lib目录并重新构建。文中对比了IDEA的out目录(IDE专属)与Maven的target目录(构建工具标准)的区别,强调out/artifacts是Tomcat实际加载

2025-12-10 21:33:27 713

原创 使用docker部署Java项目

本文介绍了使用Docker部署Java项目的完整流程:1.准备Java项目的jar包;2.编写Dockerfile文件,详细说明FROM、WORKDIR、COPY等核心指令;3.通过docker build命令构建镜像;4.使用docker run命令运行容器,包括端口映射等参数设置。重点解析了Docker镜像的只读特性和分层结构,以及容器运行时与镜像的关系,为Java项目容器化部署提供了标准化操作指南。

2025-11-09 19:29:36 744

原创 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon?

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon?

2025-11-07 10:54:15 369

原创 238.除自身以外数组的乘积

本文介绍了一种高效计算数组中除自身外元素乘积的方法。通过两次遍历(左乘积和右乘积)实现O(n)时间复杂度,避免使用除法。具体步骤:1)正向遍历计算每个元素左侧乘积;2)反向遍历结合右侧乘积完成最终结果。该方法空间复杂度O(1),且避免了除零错误,适用于含零数组。以[1,2,3,4]为例,详细演示了计算过程,验证了算法的正确性。

2025-11-03 22:22:47 410

原创 189.轮转数组

摘要:该算法实现将整数数组元素向右循环移动k位。关键处理包括:当k大于数组长度时取模运算,创建临时数组存储后k位元素和前n-k位元素,最后将临时数组复制回原数组。示例显示输入[1,2,3,4,5,6,7]和k=3时输出[5,6,7,1,2,3,4]。算法时间复杂度O(n),空间复杂度O(n)。(149字)

2025-11-02 21:58:14 186

原创 56.合并区间

摘要:该算法解决合并重叠区间问题。首先对区间按起始点排序,然后逐个处理:若当前区间与结果列表最后一个区间不重叠则直接添加,否则合并两个区间的右端点(取较大值)。示例表明该方法能正确处理各种重叠情况(如[1,3]和[2,6]合并为[1,6])。核心思想是通过排序确保区间有序,再通过比较端点实现高效合并,时间复杂度主要取决于排序步骤。

2025-11-01 22:22:11 220

原创 53.最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。方法二:遍历相加的同时选出最大值,每次相加后经过对比选出结果最大的值(最小遍历原则)可以把所有子数组求和情况算出来,每次求和进行比较选出最大值即可。连续子数组 [4,-1,2,1] 的和最大,为 6。子数组是数组中的一个连续部分。

2025-11-01 19:14:11 307

原创 560.和为k的子数组

摘要:本文介绍了求解数组中连续子数组和等于k的两种方法。方法一通过双重循环枚举所有可能的子数组,时间复杂度O(n²);方法二利用前缀和与哈希表优化,将时间复杂度降至O(n)。具体实现时,哈希表需初始化mp.put(0,1)以处理前缀和直接等于k的情况。两种方法都能正确统计满足条件的子数组数量,示例代码展示了两种循环方向(从左到右/从右到左)的实现方式。

2025-10-25 21:32:23 257

原创 438.找到字符串中所有字母异位词

摘要:本文介绍了一个解决字符串异位词查找问题的算法。给定字符串s和p,需要在s中找出所有与p构成异位词的子串,返回这些子串的起始索引。算法使用滑动窗口技术,通过维护两个字符计数数组来比较子串与p的字符分布是否相同。时间复杂度为O(n),空间复杂度为O(1)。示例展示了算法的正确性,如s="cbaebabacd"、p="abc"时输出[0,6]。该解法高效且易于实现。

2025-10-24 22:26:53 242

原创 3.无重复字符的最长子串

所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。,请你找出其中不含有重复字符的。请注意,你的答案必须是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。,所以其长度为 1。,所以其长度为 3。

2025-10-23 22:15:33 346

原创 42.接雨水

本文探讨了如何计算柱状图中能接住的雨水总量。通过双指针法,分别从左右两端遍历,记录左右最大值,并比较当前指针高度。若左指针高度较小,则计算左指针处能接的雨水(左最大值减去当前高度),并右移左指针;反之同理。该方法时间复杂度为O(n)。示例展示了输入[0,1,0,2,1,0,1,3,2,1,2,1]时输出6,输入[4,2,0,3,2,5]时输出9。官方解法通过动态更新左右最大值高效求解,优于直接填充柱子的朴素思路。

2025-10-22 20:23:06 252

原创 15.三数之和

三个数之和用双指针遍历所有情况然后通过Arrays进行排序再添加到集合中。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。下面是暴力算法结果 超出时间限制。答案中不可以包含重复的三元组。唯一可能的三元组和不为 0。唯一可能的三元组和为 0。,判断是否存在三元组。

2025-10-21 22:23:04 233

原创 11. 盛最多水的容器

本文探讨了如何计算由数组元素构成的容器能容纳的最大水量。关键思路是使用双指针法:初始化时左右指针分别指向数组首尾,计算当前面积(两指针较小值×间距),并移动较小值的指针以寻找更大面积。通过逐步缩小范围,最终确定最大储水量。相比暴力解法(时间复杂度O(n²)),该算法优化至O(n)。示例代码展示了这一高效实现,通过比较指针值决定移动方向,确保每次迭代都更接近最优解。

2025-10-20 22:06:02 306

原创 283.移动零

本文介绍了一个将数组中的0移动到末尾的算法问题。要求在不复制数组的情况下原地操作,保持非零元素的相对顺序。通过双指针法实现:p0指向当前待处理位置,p1遍历数组。当p0位置为0且p1位置非0时交换元素,否则继续移动指针。示例展示了算法效果,如输入[0,1,0,3,12]输出[1,3,12,0,0]。关注公众号可获取完整解题代码。该解法时间复杂度O(n),空间复杂度O(1)。

2025-10-19 22:20:27 115

原创 128.最长连续序列

摘要:本文介绍如何找出未排序整数数组中最长连续数字序列的长度。通过排序去重后遍历数组,统计连续序列的最大长度。示例输入如[100,4,200,1,3,2]输出4(对应序列[1,2,3,4])。实现方法使用Arrays.sort排序,Math.max记录最大值,时间复杂度O(nlogn)。欢迎关注公众号获取更多学习资料。

2025-10-18 21:13:04 286

原创 49.字母异位词分组

题目要求将字母异位词分组。字母异位词指字母相同但排列不同的字符串。解决思路是对每个字符串排序,将排序后相同的字符串归为一组。例如["eat","tea","ate"]排序后均为"aet",归为一组。使用哈希表存储,键为排序后的字符串,值为原始字符串列表。最终返回哈希表中的所有值集合即可。时间复杂度O(nklogk),其中n是字符串数量,k是字符串最大长度。

2025-10-17 20:19:40 302

原创 手写简易版rpc框架

RPC(远程过程调用)框架的核心作用是将跨服务的远程调用变得像本地调用一样简单。文章通过电商App案例,演示了订单服务如何通过RPC调用用户服务,并详细拆解了RPC框架的四个关键组件:客户端、服务端、序列化组件和网络传输组件。随后逐步实现了一个简易RPC框架,包含服务注册、动态代理、序列化、请求处理等核心模块,最终通过Vert.x服务器完成服务调用测试。该框架采用JDK动态代理和Java原生序列化,展示了RPC的基本工作原理,为理解分布式系统通信机制提供了实践参考。

2025-10-17 11:24:48 934

原创 Centos7安装Docker(包成功下载镜像)

本文介绍了在CentOS7系统上安装Docker的完整步骤:首先确保虚拟机联网,更新yum源并安装依赖包;然后配置Docker的yum源,安装Docker社区版;关闭防火墙后启动Docker服务;为提高下载速度,配置了多个国内镜像加速器;最后通过加载配置文件和重启服务完成安装,并以拉取nginx镜像进行测试。文中还提供了相关问题的参考链接。

2025-09-16 09:31:01 269

原创 Git的安装和配置(idea中配置Git)

本文详细介绍了Git的安装、配置及常用操作。首先,推荐使用Git 2.40.x或更高版本,并提供了下载和安装步骤。接着,讲解了如何配置用户名和邮箱、创建本地仓库、克隆远程仓库以及文件操作指令。此外,还介绍了如何创建远程仓库、设置SSH公钥实现免密登录,以及如何在IDEA中配置Git并管理项目。最后,文章涵盖了分支与合并的操作,包括创建、切换、推送和合并分支,并提供了处理合并冲突的解决方案。通过本文,用户可以全面掌握Git的基本使用和高级操作。

2025-05-14 21:41:30 13448

原创 Spring Boot项目(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot前后端分离)

本文详细介绍了如何搭建一个基于Vue3和Spring Boot的前后端分离项目。前端部分使用Vue3框架,结合Element Plus组件库和Axios进行数据请求,并通过代理服务器解决跨域问题。后端部分使用Spring Boot框架,集成MyBatis Plus进行数据库操作,并配置了Druid数据源和分页插件。项目实现了家居信息的增删改查功能,前端通过表单进行数据校验,后端通过JSR303进行数据验证。文章还介绍了如何通过拦截器统一处理请求和响应,并详细说明了跨域问题的解决方案。最后,总结了项目使用的技

2025-05-11 18:56:43 1865

原创 实现SpringBoot底层机制【Tomcat启动分析+Spring容器初始化+Tomcat 如何关联 Spring容器】

当启动springboot程序时,通过netstat -anb命令查询得到。解决:在pom.xml文件中引入依赖 (刷新)创建HspMainApp作为主程序。运行该springboot程序。HiController类。通过浏览器发送请求得到。hspConfig类。

2025-04-23 09:40:31 508

原创 前端vue+后端ssm项目

本文详细介绍了如何搭建一个基于SSM(Spring、Spring MVC、MyBatis)和Vue的前后端分离项目。首先,项目的基础环境搭建包括新建Maven项目、配置pom.xml文件引入依赖、配置Tomcat环境以及配置Spring和MyBatis的整合。接着,通过逆向工程生成数据库表对应的Bean、Mapper接口和Mapper XML文件,并完成了家居信息的增删改查功能。前端部分使用Vue搭建,通过Element Plus组件库实现页面布局和交互,并通过Axios与后端进行数据交互。

2025-04-19 21:54:44 2426

原创 实现 MyBatis 底层机制【 封装 Sqlsession到执行器 + Mapper 接口和 Mapper.xml + MapperBean + 动态代理Mapper的方法

mybatis-config.xml: 进行全局配置,全局只能有一个这样的配置文件,XxxMapper.xml 配置多个 SQL,可以有多个 XxxMappe.xml 配置文件。在sqlSession包中增加方法,该类主要是实现 InvocationHandler 接口并重写动态代理对象调用的invoke方法,这个方法采用硬编码的方式,之后再完善。2、配置pom.xml文件(注意MySQL的版本,自己的版本是8.0,有些人的版本是5.1的)实现接口execute,用于封装SQL语句的查询方法。

2025-04-09 16:46:12 782

原创 实现 SpringMVC 底层机制【 核心分发控制器+ Controller 和 Service 注入容器 + 对象自动装配 + 控制器方法获取参数 + 视图解析 + 返回 JSON 格式数据 】

创建controller类 MonsterControllertry {writer.write("<h1>你好</h1>");创建自定义注解 Controller创建注解RequestMapping功能说明: : 如果给某个类加上, @Service, 则可以将其注入到我们的 Spring 容器编写自定义注解@Service/*** 该注解用于将Service层的对象注入到容器*/增加一个Service层@Service。

2025-04-03 16:14:10 633

原创 手动实现 Spring 底层机制 【初始化 IOC容器+ 依赖注入+BeanPostProcessor 机制+AOP】

最后在测试类中调试得到singleton中也有后置处理器对象,因为在原生的容器中,后置处理器是被当作一个主键 经历createBean和getBean方法,相当于将该后置处理器对象存储在singleton对象中然后再从该对象取出进行调用,但是现在为了方便调用后置处理器的方法,就直接将该对象放入list集合中,并在createBean方法中的初始化方法前后调用before和after方法。原生的后置处理器即使你返回的结果是空,他也不影响原来的初始化的对象。

2025-03-27 16:47:59 793

原创 手写简单的Spring基于注解配置的程序

新建一个包用于存放自己手写的程序创建一个自定义注解:ComponentScan/*** 这个自定义的注解的作用相当于原配置文件中的component-scan* @Target(ElementType.TYPE)表示该注解作用的对象* @Retention(RetentionPolicy.RUNTIME)表示该注解的生命周期表示注解的属性value用于存放包名(即:要扫描的包路径),默认是空字符串*/

2025-03-22 13:14:21 504

原创 韩顺平教育-家居网购

注意细节:1、将html修改为jsp文件时一定要加上下面的声明标签,否则会出现乱码!!!注意下载地址:https://download.csdn.net/download/2401_83418369/90467290​MVC 全称。

2025-03-16 09:24:50 764

原创 tomcat的安装与配置(包含在idea中配置tomcat)

JDK 版本 下载对应的 Tomcat 版本对照表下载官网:Apache Tomcat® - Welcome!JDK 版本兼容的 Tomcat 版本支持范围说明​​早期兼容已淘汰,仅供历史参考。​JDK 1.4​JDK 1.4+Tomcat 5.5 需 JDK 1.4 或更高。JDK 5.0+Tomcat 6.x 最低需 JDK 5.0。​Java SE 6​JDK 6+Tomcat 7.x 需 JDK 6+(推荐 JDK 7+)。

2025-03-05 20:45:40 5661 10

原创 c3p0、Druid连接池+工具类 Apache-DbUtils (详解!!!)

数据库连接池是在应用程序启动时创建一定数量的数据库连接,并将这些连接存储在池中。当应用程序需要与数据库通信时,它可以向池中请求一个连接,使用完后将连接归还给池,而不是关闭连接。这样可以减少创建和关闭连接的开销,提高应用程序的性能。

2025-02-21 07:00:00 2007

原创 jdbc批量插入数据到MySQL

批量插入数据是指一次性插入多条记录到数据库中,这可以提高数据插入的效率。

2025-02-20 16:39:12 493

原创 jdbc连接mysql(5种连接方式,循序渐进!!!)

方法一:直接实例化Driver(静态加载)实现步骤直接创建对象通过方法传递URL和Properties@Test// 显式依赖MySQL驱动类// 直接调用connect方法注意事项:2、URL格式是:jdbc:mysql://主机:端口/数据库名3、MySQL用户名和密码要填自己的,不要写错了方法二:反射动态加载Driver实现步骤通过反射加载驱动类实例化Driver对象后调用connect()@TestClass<?

2025-02-20 15:23:37 4002

原创 坦克大战项目(超详细!!!循序渐进!!!)

项目是一个涉及图形界面、事件驱动编程和算法设计的经典游戏项目。本项目由韩顺平教育开源结合自己的经验总结改编而成。有任何问题可以发表评论!!!

2024-12-10 12:30:57 1240

原创 Centos7 dhcp服务的搭建(超详细)

本期是两台Centos7系统在仅主机模式下搭建dhcp服务1、确保server的网络适配器为仅主机模式

2024-12-06 15:22:08 1928

原创 dhcpd服务器的配置与管理(超详细!!!)

网络中的DHCP服务器收到来自客户端的DHCP Discover报文后,会从IP地址池中挑选一个尚未出租的 IP 地址预分配给 DHCP客户端,并且在网络上广播一个DHCP Offer 响应报文,该报文包含了客户端的MAC地址、服务器所提供的IP地址、子网掩码、租用期限,以及DHCP 服务器本身的 IP 地址。客户端在向服务器请求一个IP地址时,如果DHCP 服务器的IP地址数据中能提供IP,则登记IP信息并分配这个地址给客户端使用,顺带相关的配置选项。按需求进行环境准备和信息采集,如表所示。

2024-12-02 20:58:47 4333

原创 vsftpd 的安装和应用(超详细!!!)

FTP(File Transfer Protocol,文件传输协议)是一种用于在计算机网络上进行文件传输的标准协议。它允许用户从一台计算机向另一台计算机上传或下载文件。FTP的工作原理涉及到客户端和服务器之间的交互,以及数据传输的过程。

2024-11-29 20:14:23 4025

原创 CentOS7 NAT模式不能联网(成功解决!!!)

虚拟机联网的详细过程:虚拟网络接口:假设我们在宿主机上使用VirtualBox或VMware等虚拟化软件创建了一个虚拟机,并为该虚拟机分配了一个虚拟网络接口(通常是虚拟网卡)。NAT转换器:宿主机上会运行一个NAT转换器,它负责将虚拟机的内部IP地址转换为主机的外部IP地址。以下是具体的联网过程:步骤1:虚拟机发起网络请求虚拟机内部的应用程序发起一个网络请求,比如尝试访问一个网站步骤2:虚拟机内部网络栈处理虚拟机的操作系统将请求发送到其网络栈,然后通过虚拟网络接口发出。步骤3

2024-11-26 20:37:07 4986 1

原创 单列集合Collection和双列集合Map(超全面解析)

ArrayList:适用于读操作频繁、插入删除操作较少的场景,查询效率高,插入删除效率低。它是大多数情况下的首选实现。LinkedList:适用于插入和删除操作频繁,尤其是列表两端插入删除操作较多的场景。由于是链表结构,查询效率较低。Vector:与ArrayList类似,但内置同步机制使其线程安全。由于同步的开销,Vector性能较差,不推荐在单线程环境下使用。HashSet:适用于需要快速查找、插入和删除元素的场景,但不关心元素的顺序。:适用于需要保持插入顺序的场景,同时保持HashSet。

2024-11-23 18:58:17 1955

原创 线程的概述

Thread类是 Java 中实现并发编程的核心,通过创建多个线程可以实现任务的并发执行。我们可以通过继承Thread类或实现Runnable接口来创建线程。多线程的同步机制(如)确保了共享资源的安全性。线程的优先级可以通过方法进行调整,但最终的调度还是由操作系统来决定。

2024-11-18 18:13:41 1087

原创 HashSet中remove方法的底层原理

如果不为空,再次判断hash值是否相等,如果hash值相等,再次判断是否认是同一对象,如果是同一对象就不添加,否则添加到链表上。这段代码后name修改成功,但是hash值还是原来根据name="tom"和id=1001计算出来的值,即hash=3567790。因为计算出来的hash值不同,所以通过 & 按位与计算出来的索引也可能不同,那么索引对应table数组里的Node节点就可能为空,那么就删除失败。如图:通过debug调式,在断点前,p1对象被存储到索引为14的节点上,hash值为3567790。

2024-11-15 16:40:59 1404

原创 字符串常量池(详解)

字符串常量池是Java运行时环境(JRE)的一部分,它用于存储字符串字面量。字符串字面量是源代码中直接用双引号括起来的字符串,例如"hello"。在Java中,字符串是不可变的,这意味着一旦创建了一个字符串对象,它的值就不能改变。当Java编译器遇到字符串字面量时,它会将这些字面量放入字符串常量池中。如果常量池中已经存在相同的字符串字面量,编译器会复用已有的字符串对象,而不是创建一个新的对象。这样做可以节省内存,并提高性能。

2024-11-06 22:35:42 1685

家居项目的前端资源,采用vue+Element-plus

家居项目的前端资源,采用vue+Element-plus

2025-05-11

家居项目后端springboot+mybatis-plus

家居项目后端springboot+mybatis-plus

2025-05-11

使用Spring原生的组件实现springboot底层Tomcat的创建和spring容器的联系

使用Spring原生的组件实现springboot底层Tomcat的创建和spring容器的联系

2025-04-23

家居项目,前端技术栈vue

家居项目,前端技术栈vue

2025-04-19

家居项目后端资源采用ssm架构

家居项目后端资源采用ssm架构

2025-04-19

手写mybatis底层机制(部分硬编码等待完善)

手写mybatis底层机制(部分硬编码等待完善)

2025-04-09

手动实现的Springmvc底层,部分功能尚未完善

手动实现的Springmvc底层,部分功能尚未完善

2025-04-03

手动实现Spring底层(包括后置处理器+aop)

手动实现Spring底层(包括后置处理器+aop)

2025-03-27

register登入页面两个

register登入页面两个

2025-03-07

工具类,韩顺平教育家居网购

工具类,韩顺平教育家居网购

2025-03-07

韩顺平教育-家居网购,前端资源

这里面有图片上显示的前端资源

2025-03-07

自动封装javaBean的工具类

自动封装javaBean的工具类

2025-03-08

MySQL数据库的创建

MySQL数据库的创建

2025-03-16

韩顺平教育家居网购整个项目

这个项目还有很多细节需要完善....

2025-03-16

这是Google的一个登录验证码调用api

这是Google的一个登录验证码调用api

2025-03-11

坦克大战项目(超详细!!!循序渐进!!!)

坦克大战项目(超详细!!!循序渐进!!!)

2024-12-10

坦克大战项目(超详细!!!循序渐进!!!)

bob类

2024-12-10

坦克大战项目(超详细!!!循序渐进!!!)

坦克大战项目(超详细!!!循序渐进!!!)

2024-12-10

坦克大战项目(超详细!!!循序渐进!!!)

坦克大战项目(超详细!!!循序渐进!!!)

2024-12-10

坦克大战项目(超详细!!!循序渐进!!!)

坦克大战项目(超详细!!!循序渐进!!!)

2024-12-10

坦克大战项目(超详细!!!循序渐进!!!)

坦克大战项目(超详细!!!循序渐进!!!)

2024-12-10

坦克大战项目(超详细!!!循序渐进!!!)

坦克大战项目(超详细!!!循序渐进!!!)

2024-12-10

空空如也

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

TA关注的人

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