自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java集合框架总结(面试八股)

Java集合框架主要包括Collection和Map两大体系。Collection分为List(有序可重复)、Set(无序不可重复)和Queue(队列),常见实现类有ArrayList、LinkedList、HashSet等。Map存储键值对,主要实现包括HashMap、TreeMap等。不同集合类在线程安全、存储结构、性能特点等方面存在差异:ArrayList随机访问快,LinkedList插入删除快;HashSet查询快,TreeSet有序;HashMap查询快,TreeMap有序。线程安全方面,Vec

2025-12-28 10:22:19 657

原创 深入理解Java中的128陷阱与equals方法使用指南

比较基本类型:用==,直接比较值,没有任何问题。比较包装类型(Integer、Short等):优先用equals方法,避免128陷阱导致的判断错误;更推荐用Objects.equals工具类,防止空指针异常。避免用new关键字创建包装类型对象:除了会创建新对象(浪费内存),还会绕过缓存机制,增加踩坑风险。尽量使用自动装箱(Integer a = 127)或Integer.valueOf()方法。注意不同包装类型的equals比较。

2025-12-27 09:27:46 368

原创 Java面试题(SSM篇)

它与全自动的区别在哪里?1.59 AOP 作用是什么,底层如何实现在哪些地方会用到,分别简述切面,切入点和通知?1.60 Spring 中 AutoWired 和 Resource 之间区别是什么?它们之间的区别是什么?1.54 什么是基于 Java 的 Spring 注解配置?1.58 在 Spring AOP 中,连接点和切入点的区别是什么?1.50 MyBatis (IBatis) 的好处是什么?1.44 介绍一下 Spring 的事物管理?1.53 什么是 bean 的自动装配?

2025-12-21 09:10:42 221

原创 Java面试题(SSM篇)

1.39 Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?1.30 JDBC 编程有哪些不足之处,MyBatis 是如何解决这些问题的?1.40 MyBatis 里面的动态 Sql 是怎么设定的?1.34 简述 Mybatis 的插件运行原理,以及如何编写一个插件?1.25 mybatis 的缓存机制,一级,二级介绍一下?1.28 什么是 MyBatis 的接口绑定,有什么好处?

2025-12-21 09:09:02 221

原创 Java面试题(SSM篇)

本文总结了Spring框架的核心概念与应用要点:1)Spring容器机制,包括IOC控制反转思想与DI依赖注入实现;2)Bean生命周期管理,涵盖作用域配置及延迟加载;3)SpringMVC处理流程与事务管理方式对比;4)MyBatis中#与$的区别及动态SQL应用;5)Shiro认证授权流程;6)Spring设计模式与并发安全策略。全文系统梳理了Spring技术体系的关键知识点,涉及容器管理、Web开发、数据访问及安全控制等核心模块。

2025-12-21 09:05:52 434

原创 Windows上完成SSH密钥的添加

本文介绍了SSH密钥的基本概念与配置流程。私钥和公钥是一对加密密钥,私钥用于签名和解密,必须保密;公钥可公开用于验证和加密。文章详细说明了生成SSH密钥对的步骤:通过ssh-keygen命令创建RSA密钥,启动SSH代理并添加私钥,最后将公钥配置到Git平台(如Gitee或GitHub)。完成这些步骤后,用户即可通过SSH协议安全地访问远程仓库,实现代码的拉取和推送操作。整个过程确保了代码传输的安全性,是开发者必备的Git配置技能。

2025-12-11 15:31:32 979

原创 『Git Tag标签+项目远程操作全解:推送、拉取与版本同步实战』

本文介绍了Git标签(Tag)的创建、推送、拉取和删除等操作。主要内容包括:1)使用git tag命令创建轻量级和带附注的标签;2)通过git push origin --tags推送所有标签到远程仓库;3)使用git pull拉取远程标签;4)删除本地和远程标签的方法;5)标签检出的操作步骤。同时还介绍了远程仓库连接建立、分支推送与拉取协作等Git基础操作,帮助开发者实现项目版本的精准标记与团队同步。

2025-12-09 16:07:44 935

原创 《Git分支实战:从创建到合并的全流程》

本文系统介绍了Git分支的核心操作与应用场景。主要内容包括:1)分支基础操作(创建/切换/删除);2)分支合并与冲突解决;3)stash功能详解(apply与pop的区别);4)典型分支模型(master/develop/feature/release等)。重点讲解了如何通过分支管理并行开发、紧急修复等实际场景,以及处理代码冲突的具体方法。掌握这些分支技巧能有效提升团队协作效率,解决开发过程中常见的版本控制难题。文章还特别说明了stash功能在临时保存工作内容时的灵活应用方式。

2025-12-09 13:51:51 970

原创 《Git 日常操作:核心命令 + 忽略文件 + 临时存储》

本文介绍了Git日常开发中的核心操作:1. 基本命令流程:git init初始化仓库,git add将修改加入暂存区,git commit提交到本地仓库,git status查看状态,git log查看提交记录,git reset进行版本切换。2. .gitignore配置:详细说明如何创建和使用.gitignore文件来过滤不需要版本控制的文件,包括日志、缓存等,并提供了Java开发的通用模板。3. git stash应用:讲解如何临时保存未完成的修改,包括stash、apply和pop的区别,以及如何管

2025-11-30 19:31:19 881

原创 《Git 入门:从概念到环境准备》

《Git入门指南:从版本控制到高效协作》 摘要: 本文系统介绍Git的核心概念与应用。首先对比集中式与分布式版本控制系统,突出Git的分布式优势:每个开发者拥有完整代码库镜像,实现高效离线操作。其次详解Git仓库结构,包括远程/本地仓库、工作区、暂存区和版本库的关系。最后讲解多级配置体系(系统/用户/仓库级)及基础配置方法。作为系列文章首篇,后续将深入Git工作流、分支管理等进阶内容,帮助开发者掌握这个强大的版本控制工具,告别代码管理混乱,提升团队协作效率。

2025-11-30 19:12:16 873

原创 【MyBatis 从入门到实战下】超详细教程(含核心配置 + CRUD + 高级特性)

本文介绍了MyBatis框架中的关键特性与应用:1.特殊SQL执行包括模糊查询(三种实现方式)、批量删除和动态表名设置;2.自定义映射resultMap处理字段名与属性名不一致问题,并详细说明多对一(association)和一对多(collection)关系的映射处理;3.动态SQL技术(if/where/trim/choose/foreach等标签)实现条件查询;4.MyBatis缓存机制(一级缓存SqlSession级别,二级缓存SqlSessionFactory级别)及与Ehcache整合;

2025-11-27 16:17:56 871

原创 【MyBatis 从入门到实战上】超详细教程(含核心配置 + CRUD + 高级特性)

MyBatis是一款优秀的半自动ORM框架,由iBatis演变而来。文章详细介绍了MyBatis的环境搭建、核心配置、CRUD操作和参数传递方式。MyBatis通过XML或注解配置SQL映射,避免了JDBC硬编码,支持定制化SQL和高级映射。相比Hibernate,MyBatis更加轻量级且性能出色。文章还讲解了MyBatis获取参数的两种方式(#{}和${}),以及各种查询功能实现,包括单对象查询、集合查询和Map结果映射。最后预告了进阶内容,如动态SQL、缓存等高级特性。

2025-11-27 15:47:58 965

原创 Maven 项目管理从入门到进阶:基础与高级实战全解析

Maven核心知识点摘要:Maven是基于POM模型的项目管理工具,通过坐标(GAV)定位依赖资源。核心概念包括本地/远程仓库体系、依赖管理(传递/排除/范围)、构建生命周期与插件机制。高级特性涵盖聚合多模块构建、继承复用配置、自定义属性及私服部署(Nexus)。关键要点:1)依赖冲突遵循路径优先原则;2)父子工程通过dependencyManagement统一版本;3)私服实现资源内部分享与版权管控。掌握基础配置、常用命令和POM编写即可满足日常开发需求,遵循"约定优于配置"原则简化项

2025-11-22 17:12:41 671

原创 JavaWeb 文件上传全方案解析:从传统组件到现代框架实现

本文全面介绍JavaWeb开发中的文件上传实现方式,包括传统CommonsFileUpload组件、Servlet3.0原生上传、SpringMVC上传以及SpringBoot本地/云存储上传。详细讲解每种方式的环境配置、核心API和代码实现,并提供完整示例代码。对比分析各方案的优缺点及适用场景,如老旧项目适用CommonsFileUpload,企业级项目推荐SpringBoot+云存储。同时总结常见问题解决方案,如中文乱码、文件覆盖等。通过本文可系统掌握JavaWeb文件上传技术,满足不同开发场景需求。

2025-11-21 21:48:31 1117

原创 ssm框架之Spring(下)

AOP,Aspect Oriented Programming,面向切面编程,是对面向对象编程OOP的升华。OOP是纵向对一个事物的抽象,一个对象包括静态的属性信息,包括动态的方法信息等。而AOP是横向的对不同事物的抽象,属性与属性,方法与方法,对象与对象都可以组成一个切面,而用这种思维去设计编程的方式叫做面向切面编程。

2025-11-02 16:44:15 606

原创 ssm框架之Spring(上)

以上在xml配置的Bean都是自己定义的,例如UserDaoImpl。但是在实际开发中有些功能类并不是我们自己定义的,而是使用的第三方jar包中的,那么,这些Bean要想让Spring进行管理,也需要对其进行配置。配置非自定义的Bean需要考虑如下两个问题:1,被配置的Bean的实例化方式是什么?无参构造,有参构造,静态工厂还是实例工厂方式;2,被配置的Bean是否需要注入必要属性。1,加载xml配置文件,解析获取配置中的每个的信息,封装成一个个的BeanDefinition对象;

2025-11-02 16:27:52 812 1

原创 LeetCode 面试经典 150 题之判断子序列解题详解

LeetCode经典题目"判断子序列"采用双指针法高效解决。通过同步遍历字符串s和t,当字符匹配时移动双指针,否则仅移动t指针,时间复杂度O(m+n),空间复杂度O(1)。文章详细解析了算法思路、代码实现(Python/Java)和复杂度分析,并延伸讨论了多组查询时的预处理优化方案。该题考察基础算法能力,掌握双指针思想可迁移解决类似字符串问题。

2025-09-25 10:12:18 713

原创 基于完全分布式模式部署Hadoop(喂饭教程)

这篇文章我们来学习一下如何基于完全分布式模式来部署Hadoop,在安装Hadoop之前,我们先说明需要准备的东西。2,Centos9Stream镜像3,JDK安装包4,Hadoop安装包以上所需我们可以看出,我们将基于Centos9Sream来部署Hadoop,废话不多说,我们现在就开始了,大家可以完全跟着我一起安装。

2025-09-25 09:52:25 923 8

原创 LeetCode 面试经典 150 题之验证回文串:双指针解题思路详解

LeetCode经典题目"验证回文串"通过双指针法实现高效判断。核心思路是:从字符串两端向中间移动指针,跳过非字母数字字符,对称比较字符(忽略大小写)。时间复杂度O(n),空间复杂度O(1)。该题训练了对称匹配问题的解决能力,特别强调边界条件的处理技巧。典型示例如"A man, a plan"和"raceacar"分别演示了回文与非回文场景。掌握这一方法可拓展到其他对称校验问题。

2025-09-19 16:05:32 686

原创 LeetCode 面试经典 150 题之最长公共前缀:基准比较法高效解题

LeetCode 14题"最长公共前缀"要求查找字符串数组中的最长公共前缀。解题核心思路是以第一个字符串为基准,逐字符与其他字符串对应位比较,直至出现不匹配或字符串长度不足时停止。该算法时间复杂度为O(n×m),空间复杂度O(1)。关键点在于正确处理边界条件(空数组、单字符串、长度差异)和基准选择。通过这道题可以锻炼字符串处理、边界条件判断等基础编程能力,是面试中检验基础功的常见题目。

2025-09-19 15:26:30 1213

原创 LeetCode 面试经典 150 题之最后一个单词的长度:逆向遍历高效解法

本文解析了LeetCode经典面试题"最后一个单词的长度"的解题思路。该题考察字符串边界条件处理能力,建议采用逆向遍历法:先定位最后一个非空格字符(right),再向前找到单词起始位置(left),两者差即为长度。相比正向遍历可减少不必要的操作,时间复杂度O(n),空间复杂度O(1)。文章通过示例演示了关键步骤,并提供Python/Java代码实现,强调在处理"全空格字符串"等边界情况时的注意事项,体现了逆向思维在字符串处理问题中的优势。

2025-09-12 14:52:39 1291

原创 Java Servlet 完全解析:构建高效 Web 应用的关键技术

本文系统介绍了JavaWeb开发中的核心组件Servlet技术。从Servlet的基本概念出发,详细解析了其核心作用、与普通Java类的区别,以及运行依赖的核心组件和容器环境。重点阐述了Servlet的生命周期管理机制,包括初始化、服务、销毁和垃圾回收四个阶段。同时对比了Servlet的两种配置方式(XML与注解),分析各自的优缺点及适用场景。通过本文,开发者可以深入理解Servlet的运行原理和开发流程,为构建动态Web应用和后续学习高级框架奠定坚实基础。

2025-09-12 14:32:40 1631

原创 LeetCode 面试经典 150 题之罗马数字转整数:哈希表高效解题思路

本文解析了LeetCode经典面试题"罗马数字转整数"的解题思路。题目要求将罗马数字字符串转换为整数,关键在于处理特殊规则(如IV表示4)。核心解法是:1)使用哈希表存储罗马字符与数值的映射;2)遍历字符串,比较当前字符与右侧字符值的大小关系,决定加减操作。该方法时间复杂度O(n),空间复杂度O(1)。文章提供了Python和Java的代码实现,并建议通过这道题培养"将规则转化为算法逻辑"的能力,掌握哈希表在键值映射场景中的应用价值。

2025-09-11 11:49:31 744

原创 LeetCode 面试经典 150 题之买卖股票的最佳时机:高效解题思路解析

摘要:LeetCode经典题目“买卖股票的最佳时机”考察数组遍历和动态维护关键值的能力。解题核心是枚举每个卖出价,动态维护之前的最低买入价,计算最大利润。算法只需一次遍历,时间复杂度O(n),空间复杂度O(1)。Python和Java实现简洁高效,适用于面试场景。该题解法可扩展至股票买卖系列的其他变种问题,掌握其核心思想对解决类似题目大有裨益。

2025-09-11 09:11:52 913

原创 LeetCode 面试经典 150 题:轮转数组(三次翻转法详解 + 多解法对比)

摘要: 轮转数组是考察原地操作与逻辑转换的经典算法题。最优解三次翻转法通过三次数组翻转(整体、前k个、后n-k个元素)实现O(n)时间复杂度和O(1)空间复杂度的原地轮转。关键步骤包括:对k取模避免冗余操作,翻转调整元素顺序。对比额外数组法(O(n)空间)和多次右移法(O(nk)时间),三次翻转法效率最优。代码实现需注意边界条件,逻辑可扩展至向左轮转等变体问题,体现算法灵活性。掌握此方法有助于解决类似元素循环移动问题。

2025-09-09 19:31:55 786

原创 LeetCode 面试经典 150 题:多数元素(摩尔投票法详解 + 多解法对比)

摩尔投票法是解决 “多数元素” 问题的最优解,其核心优势在于 “线性时间 + 常数空间”,这种高效性使其在面试中备受青睐。数组中存在多数元素(若不确定是否存在,需在第一次遍历后进行二次遍历,统计候选元素的出现次数,确认是否满足 “多数” 条件);多数元素的定义是 “出现次数大于⌊n/2⌋”(若定义为 “出现次数大于⌊n/3⌋”,则需扩展为 “双候选人摩尔投票法”,可找出最多两个候选元素,再二次验证)。

2025-09-09 19:14:23 1038

原创 LeetCode 面试经典 150 题:删除有序数组中的重复项 II(最多保留 2 次 + 通用 k 次解法详解)

本文介绍了如何解决有序数组中保留最多k次重复元素的问题。解题核心在于利用双指针思想,通过判断当前元素与已处理数组倒数第k个元素的关系来控制重复次数。基础解法(保留2次)通过比较当前元素与nums[k-2]实现,通用解法(保留k次)只需调整判断条件即可。时间复杂度为O(n),空间复杂度为O(1)。文章提供了Python和Java代码示例,并指出该思路可扩展解决类似变形问题,如保留3次或只保留不重复元素等。掌握这种通用化方法能有效应对面试中的数组去重问题。

2025-09-08 16:46:00 1027

原创 LeetCode 面试经典 150 题:删除有序数组中的重复项(双指针思想解法详解)

本文详细解析LeetCode第26题"删除有序数组中的重复项"的解法。题目要求原地删除重复元素,保持元素顺序,返回新长度。核心思路是利用数组有序性,通过双指针(变量k)维护无重复区域:快指针遍历数组,慢指针记录无重复元素位置。时间复杂度O(n),空间复杂度O(1)。文章提供Python和Java代码实现,并指出该解法是双指针思想的简化应用,可拓展解决类似问题(如删除重复项II、移除元素等),帮助读者掌握有序数组筛选的核心技巧。

2025-09-08 16:26:38 984

原创 LeetCode 面试经典 150 题:移除元素(双指针思想优化解法详解)

这道题的核心是 “用变量 k 追踪有效元素的位置和个数”,本质是双指针思想的简化 —— 如果把k看作 “慢指针”,遍历数组的索引(或元素)看作 “快指针”,就是典型的 “快慢双指针” 解法:快指针负责遍历数组筛选元素,慢指针负责存放有效元素。

2025-09-07 14:18:19 1071

原创 LeetCode 面试经典 150 题:合并两个有序数组(双指针解法详解)

本文解析了LeetCode 88题"合并有序数组"的最优解法——双指针法。该算法通过从后向前遍历,比较nums1和nums2末尾元素,将较大值放入nums1末尾,避免了元素覆盖问题。时间复杂度为O(m+n),空间复杂度O(1)。文章详细讲解了指针初始化、遍历逻辑和终止条件,并提供了Python和Java代码实现。这种双指针技巧也适用于其他数组操作问题,如移除元素、两数之和等。掌握该方法能有效提升算法面试中的解题能力。

2025-09-07 14:09:58 637

原创 深入理解 Java 中的 Lambda 表达式:简化代码的利器

Lambda 表达式作为 Java 8 的核心特性之一,为 Java 编程带来了革命性的变化。它通过简洁的语法,将函数作为参数传递,极大地简化了代码编写,提升了代码的可读性和可维护性。在实际开发中,Lambda 表达式广泛应用于线程创建、集合排序、Stream API 等场景,与函数式接口紧密配合,成为现代 Java 开发不可或缺的工具。然而,在使用 Lambda 表达式时,我们也需要注意其适用范围(仅函数式接口)、避免过度使用以及变量捕获的限制等问题。

2025-09-06 10:33:57 1256

原创 Java 注解:不止 @Override,这篇讲透

Java注解(Annotation)是JDK5.0引入的语法元素,用于为代码提供元数据。它具有无直接执行性、可被工具识别和可自定义的特点。注解通过@interface关键字定义,可包含属性,并能通过元注解(@Target、@Retention等)指定作用范围和生命周期。Java内置了@Override、@Deprecated、@SuppressWarnings等常用注解。注解的实际应用需要通过反射机制解析,典型应用包括框架开发中的自动配置和日志记录等。通过注解可以简化代码、提高开发效率和增强代码可读性,是现

2025-09-06 10:23:39 1251

原创 Java 代理模式:从 “重复代码” 到 “优雅解耦”,这篇讲透静态与动态的核心差异

/ 业务接口:定义用户服务的核心行为// 新增用户// 删除用户// 附加功能处理器:统一处理日志逻辑// 持有目标对象(通用类型,可接收任何目标类)/*** 代理类的核心方法:每次调用代理对象的方法,都会触发invoke* @param proxy 代理对象本身(一般不用)* @param method 被调用的目标方法* @param args 目标方法的参数* @return 目标方法的返回值* @throws Throwable 目标方法可能抛出的异常*/

2025-08-30 09:48:22 951

原创 Java泛型:告别Object强转,拥抱类型安全的优雅编程!

还记得面对一箱子Object,每次取出都要心惊胆战地做类型强转的日子吗?一个不小心,就会在运行时给你当头一棒!Java泛型,正是为了解决这种“类型不安全”的痛点而生。它如同给容器和算法戴上了一副智能眼镜,让它们在编译期就能清晰地识别和约束操作的数据类型。今天,让我们一起推开泛型的大门,探索如何用它编写更健壮、更易读、更优雅的Java代码!定义类,接口,方法时,同时声明一个或者多个类型变量(如:),称为泛型类,泛型接口,泛型方法,他们统称为泛型。

2025-08-29 17:06:34 434

原创 驾驭程序的“意外”:深入理解Java异常处理

1,定义一个异常类继承RuntimeException2,重写构造器3,通过throw new 异常类(xxx)来创建异常对象并抛出。save(20);save(160);// 运行结果20以上就是今天异常中的所有内容。在Java的世界里,异常处理不仅是代码的“安全网”,更是我们构建健壮、可维护应用的基石。通过合理使用try-catch块、自定义异常和throws声明,我们不仅能捕获潜在错误,还能提升程序的容错性和用户体验。

2025-08-29 15:36:45 1068

原创 JavaSE阶段-反射

可以获取成员变量,成员方法,构造方法的所有信息。

2025-08-28 18:33:43 233

原创 JavaSE阶段(二)

该阶段继个阶段,我们继续从运算符开始讲解。

2025-08-27 21:16:45 505

原创 JavaSE阶段 (一)

计算机语言是人与计算机之间的通讯语言,分为机器语言、汇编语言、高级语言。Java是一种高级计算机语言,它是由Sun公司(已被Oracle公司收购)于1995年5月推出。

2025-08-06 12:11:12 714

原创 前端三剑客之CSS

id名{ 属性:属性值1;... }将id为nav元素中的内容设置为红色。*{ 属性:属性值1;... }

2025-07-16 23:07:02 1248

原创 前端三剑客之HTML

这是一个段落</p><p align="center">这是另一个段落

2025-07-14 14:05:44 831

空空如也

空空如也

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

TA关注的人

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