自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot自动装配原理和自定义starter(小学生版)

用「早餐机做煎饼」的比喻 + 分步图解 + 面试模板,帮你彻底搞懂自定义starter(附可直接背诵的模板)。一、做煎饼的比喻假设要做一个自动煎饼机配方包(自动配置类):决定什么时候放鸡蛋、什么时候加葱花材料包(starter项目):把配方和必备材料(如面粉、油纸)打包智能开关(条件注解):检测用户有没有自带鸡蛋二、手把手四步实现第一步:新建项目(材料包)my-emoji-starter(空壳项目,只放pom.xml)└── my-emoji-autoconfigure(核心代码)

2025-02-22 21:10:39 856

原创 Sentinel

Sentinel 是阿里巴巴开源的分布式系统流量防卫组件,提供流量控制熔断降级系统自适应保护等功能。作为 Spring Cloud Alibaba 核心组件,广泛应用于电商秒杀、直播等高并发场景,防止系统因突发流量崩溃。

2025-02-16 20:48:40 775

原创 Java基础面试题day02——数据类型

另一个非常重要的原因就是在Java中绝大部分方法或类都是用来处理类类型对象的,如ArrayList集合类就只能以类作为他的存储对象,而这时如果想把一个int型的数据存入list是不可能的,必须把它包装成类,也就是Integer才能被List所接受。由于我们这里声明的sum为Integer类型,在上面的循环中会创建将近4000个无用的Integer对象,在这样庞大的循环中,会降低程序的性能并且加重了垃圾回收的工作量。因此在我们编程时,需要注意到这一点,正确地声明变量类型,避免因为自动装箱引起的。

2025-01-12 15:39:34 732

原创 Java基础面试题--概念 day01

跨平台主要依赖于JVM我们编写的Java源程序会被Java编译器(javac)编译成字节码文件(.class),Java虚拟机就是负责把字节码文件翻译成特定平台下的机器语言然后运行。也可以这样子理解:JVM就是一个“桥梁",一个中间件,是实现跨平台的关键!所以,运行Java程序必须有JVM的支持。注意跨平台的是Java程序而不是JVM(JVM是C/C++开发的,不同平台下安装不同版本的JVM)

2025-01-10 15:15:55 749

原创 freemarker了解

FreeMarker 是一个用Java编写的模板引擎,主要用于生成HTML网页、电子邮件、配置文件、源代码等文本输出。它最初是为Java服务器页面(JSP)的替代品而设计的,但可以用于任何需要动态生成文本输出的场景。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。常用的java模板引擎还有哪些?技术说明JspJsp 为 Servlet 专用,不能单独进行使用VelocityVelocity从2010年更新完 2.0 版本后,7年没有更新。

2024-12-04 19:58:11 1111

原创 真实情景之:处理用户密码时的“加盐”措施

盐:是一串随机生成的数据,它与用户的密码一起被哈希处理。加盐的目的:使得即使两个用户拥有相同的密码,由于使用的盐不同,最终存储的哈希值也会不同,从而增加安全性。

2024-12-02 15:46:57 1247

原创 JVM的生命周期

Java虚拟机(JVM)是Java应用程序运行的核心,它负责加载、验证、准备、解析和初始化Java类,并执行其字节码。JVM的生命周期涵盖了从启动到退出的全过程,其间涉及复杂的类加载、内存管理和垃圾收集机制。JVM提供自动内存管理,即垃圾收集机制,以释放不再使用的对象所占用的内存。常见的垃圾收集算法包括标记-清除、复制、标记-整理等。(initial class)来完成的,这个类是由虚拟机的具体实现指定的。实际上,执行所谓的Java程序时,真正执行的是一个叫做Java虚拟机的进程。

2024-11-30 15:00:36 1160

原创 数据库主键设计:自增ID、UUID与雪花算法的探讨

在数据库设计中,选择合适的主键是至关重要的。主键的选择不仅影响到数据的唯一性,还关系到查询性能、存储空间以及系统的可扩展性。当雪花算法中的序列号达到最大值后重置为零时,可能会导致短时间内生成的ID分布不均匀。一种解决方案是在序列号部分引入时间戳的最后一位,这样即使序列号重置,ID也不会完全相同,从而解决了分布不均的问题。在实际应用中,应根据具体的业务需求和系统规模来选择最合适的主键策略。最终组合得到的64位ID将是这些部分的二进制形式的按位或运算结果。适用于单库单表且不需要考虑分布式环境的情况;

2024-11-29 15:08:41 1202

原创 初识JVM

初识JVM

2024-11-27 13:44:48 1087

原创 Docker 详解与入门案例

Docker 是一个开源的容器化平台,它可以让开发者将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速部署、可扩展性和一致性。Docker 的出现极大地改变了软件开发和部署的方式,使得应用程序的开发、测试和部署更加高效和可靠。(一)Docker 的历史Docker 最初是由 Solomon Hykes 在 2013 年创建的一个开源项目,其灵感来源于集装箱运输的理念。

2024-10-21 17:48:10 1201 1

原创 WebSocket介绍和入门案例

WebSocket 是一种在单个TCP连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时、双向的数据传输,克服了传统 HTTP 协议只能由客户端发起请求、服务器响应的单向通信模式的局限性。特点包括低延迟、实时性强、减少不必要的网络流量和服务器资源消耗等。HTTP协议和WebSocket协议对比:HTTP是短连接WebSocket是长连接HTTP通信是单向的,基于请求响应模式(浏览器发送请求给服务器)WebSocket支持双向通信HTTP和WebSocket底层都是TCP连接。

2024-10-17 21:51:55 1292

原创 Spring Task快速入门

Spring Task 是 Spring 框架提供的一个轻量级的任务调度工具。它允许开发者在 Spring 应用中方便地实现定时任务,无需引入额外的复杂的任务调度框架。简单易用:通过注解的方式即可轻松定义定时任务,配置简单。与 Spring 框架集成良好:可以充分利用 Spring 的依赖注入等特性。支持多种任务调度方式:如固定延迟、固定速率、cron 表达式等。

2024-10-17 21:26:22 444 1

原创 初识HttpClient之记录

除了基本的 HTTP 协议,一些 HTTP Client 还支持其他相关协议和功能,如 HTTPS(安全 HTTP)、HTTP/2、连接池管理、代理设置、身份验证等。:HTTP Client 能够构造各种类型的 HTTP 请求,包括请求方法(GET、POST、PUT、DELETE 等)、请求头部信息、请求参数和请求体。这些库提供了丰富的 API,允许开发人员轻松地与 Web 服务进行交互,处理请求和响应的头部信息、请求参数、响应实体等。它可以解析响应头部信息、获取响应状态码,并提取响应实体中的数据。

2024-10-13 13:54:08 1048

原创 Nginx快速入门

公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。但是慢慢的,使用我们平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。

2024-10-04 23:06:12 713

原创 Java中JWT(JSON Web Token)的运用

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间以紧凑的方式安全地传递信息。JWT可以被用作身份验证和信息交换的手段,特别适合用于前后端分离的应用程序。

2024-10-04 15:11:43 4435

原创 Spring之Bean的生命周期 2024-9-6 19:47

Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。

2024-09-06 20:17:33 870 2

原创 springboot中的配置类Configuration

使用。

2024-08-31 17:16:56 3696 1

原创 Redis 入门到精通2

输出:等待接收消息,当有发布者向“news”频道发布消息时,会显示消息内容。输出:显示读取到的消息内容,格式为一个数组,包含消息 ID 和字段值。输出:显示读取到的消息内容,格式为一个数组,包含消息 ID 和字段值。输出:返回订阅者的数量,表示有多少个订阅者接收到了这条消息。:向 Stream 中添加消息。:读取 Stream 中的消息。:消费者从消费者组中读取消息。输出:返回生成的消息 ID。:消费者确认处理完消息。:订阅一个或多个频道。:向指定频道发布消息。输出:确认的消息数量。

2024-08-30 12:32:36 839

原创 Redis 入门到精通1

设置一个键值对。输出:OKGET key:获取指定键的值。GET name输出:“John”INCR key:将键的值自增 1。输出:1DECR key:将键的值自减 1。输出:1:将值追加到指定键的现有值后面。输出:11(表示新字符串的长度)

2024-08-30 11:48:50 539

原创 Node.js自学速通---- 24-8-22 22-44

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可以让 JavaScript 在服务器端运行。

2024-08-23 00:22:43 1103

原创 StringBuffer与StringBuilder 2024-8-21 22-13

和都是 Java 中用于操作可变字符串的工具类。它们的主要区别在于线程安全性和性能。是线程安全的,但性能相对较低;是非线程安全的,但在单线程环境下性能更高。在选择使用哪个类时,需要根据具体的应用场景来决定。如果是在多线程环境下操作字符串,应该使用;如果是在单线程环境下,为了获得更好的性能,可以选择使用。

2024-08-21 22:24:29 790

原创 JavaFX入门01 制作简易计算器

*** Main 类,继承自 Application,是 JavaFX 应用程序的入口*//*** 主函数,用于启动 JavaFX 应用程序* @param args 命令行参数*/// 启动 JavaFX 应用程序,传递命令行参数/*** 重写 start 方法,用于设置应用程序的初始界面* @param stage 应用程序的主舞台* @throws Exception 如果在加载 FXML 文件时发生异常*/@Override// 设置舞台的标题。

2024-08-20 13:02:17 485

原创 MybatisPlus多表查询及分页查询 2024/8/18 19:10

具体来说,内连接会根据连接条件(通常是两个表之间的共同字段)将两个表中符合条件的行进行匹配,并将匹配的结果作为输出。例如,如果在第一段代码中,假设每页显示 10 条数据,当前是第 2 页,那么它会返回年龄为 18 岁的用户数据,并且按照每页 10 条,第 2 页的规则进行分页。例如,如果在查询用户数据时使用了这些条件,那么最终得到的结果将是年龄为 18 岁、用户名包含 “Jack” ,并且按照用户。内连接是SQL中最常用的连接类型之一,用于从多个表中检索相关数据,是数据查询和分析中非常重要的操作。

2024-08-18 19:11:21 2816 2

原创 力扣每日一题 2024.8.11 21:49

用。

2024-08-11 21:55:02 357

原创 MySQL入门 多表设计与查询

(One-to-Many)和这些关系描述了表之间如何相互关联的。

2024-08-09 20:34:09 1011

原创 MySQL入门 DDL\DML\DQL

然后,我们通过 INSERT 插入了几条员工记录,使用 UPDATE 命令将 Alice 的薪资更新,使用 DELETE 删除了 Bob 的记录,最后使用 SELECT 检索出薪水高于 60000.00 的员工信息。换句话说,product_id 列的值在 Orders 表中必须是来自 Products 表的合法产品标识符。通过外键约束,可以确保数据的一致性和有效性,因为它阻止在子表中插入不存在的父表主键值。:这是 Orders 表中的一个列,用于存储产品的标识符。命令来添加列,并指定默认值。

2024-08-08 21:02:46 1530

原创 字符串中的第一个唯一字符(简单)

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。输入: s = “leetcode”输出: 0输入: s = “loveleetcode”输出: 2输入: s = “aabb”输出: -1。

2024-08-06 17:38:42 402

原创 有效的括号(简单)

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。输入:s = “()”输出:true输入:s = “()[]{}”输出:true输入:s = “(]”输出:false。

2024-08-06 17:27:14 479

原创 力扣每日一题2024.8.5

给定一个正整数 n ,请你统计在 [0, n] 范围的非负整数中,有多少个整数的二进制表示中不存在。输入: n = 5输出: 5解释:下面列出范围在 [0, 5] 的非负整数与其对应的二进制表示:0 : 01 : 12 : 103 : 114 : 1005 : 101其中,只有整数 3 违反规则(有两个连续的 1 ),其他 5 个满足规则。输入: n = 1输出: 2输入: n = 2输出: 3。

2024-08-05 18:04:11 907

原创 Java修炼之反射 2024.7.30 15:13

Java 反射(Reflection)是一种强大且灵活的机制,允许程序在运行时检查和操作类、接口、字段和方法等高级结构。它使开发者可以动态地获取对象的信息,甚至可以在运行时创建新的类实例、调用方法和改变属性。反射是 Java 提供的一个API,可以对 Java 类的组成部分进行观察和操作类的名称类的方法类的字段(属性)类的构造函数修饰符(如publicprivate等)Java 的反射机制是一种强大的工具,可以在运行时动态操作对象及其成员。

2024-07-30 15:13:32 500

原创 2024.7.30力扣每日一题(笔记)

给你一个下标从 0 开始的二维数组 variables ,其中 variables[i] = [ai, bi, ci, mi],以及一个整数 target。输入:variables = [[2,3,3,10],[3,3,3,1],[6,1,1,4]], target = 2输出:[0,2]

2024-07-30 14:28:03 545

原创 289.生命游戏(中等)

通过使用一个复制数组,确保计算的准确性和逻辑的简单性,从而实现稳定、正确的细胞状态更新。这样能够避免直接在遍历过程中修改原始数据所带来的复杂性和潜在错误,是一种非常常见的编程技巧。public void gameOfLife(int[][] board) { // 定义游戏的主函数,输入参数为二维数组 'board',表示细胞的状态// 创建数组 'neighbors' 用于表示细胞相对于自身的偏移量,以便计算邻居// 获取 'board' 的行数// 获取 'board' 的列数。

2024-07-29 12:31:38 438

原创 2024.7.29力扣每日一题(笔记)

你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:1.- 表示本回合新获得分数 x2.- 表示本回合新获得的得分是。题目数据保证记录此操作时前面总是存在两个有效的分数。3.- 表示本回合新获得的得分是。题目数据保证记录此操作时前面总是存在一个有效的分数。4.- 表示前一次得分无效,将其。

2024-07-29 11:46:28 356

原创 54.螺旋矩阵(中等) 2024.7.28 18:01

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]

2024-07-28 18:09:54 338

原创 2024.7.28力扣每日一题(笔记)

每个方块都从一个比目前所有的落地方块更高的高度掉落而下。方块沿 y 轴负方向下落,直到着陆到 另一个正方形的顶边 或者是 x 轴上。一个方块仅仅是擦过另一个方块的左侧边或右侧边不算着陆。一旦着陆,它就会固定在原地,无法移动。表示:第 i 个方块边长为 sideLengthi ,其左侧边与 x 轴上坐标点 lefti 对齐。在每个方块掉落后,你必须记录目前所有已经落稳的 方块堆叠的。表示在第 i 块方块掉落后堆叠的最高高度。在二维平面上的 x 轴上,放置着一些方块。返回一个整数数组 ans ,其中。

2024-07-28 11:34:07 401

原创 Java入门TCP客户端和服务器应用程序 2024.7.27 22:14

首先,我们将创建一个简单的 TCP 服务器,它监听特定端口并能够接收来自客户端的消息。

2024-07-27 22:14:44 545

原创 算法训练 2024.7.27 17:25

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使合并后的数组仍然是有序的。: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,返回它们的数组下标。给定一个二维网格,其中 1(表示陆地)和 0(表示水),计算岛屿的数量。: 给定一个包含非负整数的 m x n 网格,找出一条从左上角到右下角的路径,使得路径上的数字总和最小。给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。: 反转一个单链表。

2024-07-27 17:57:54 417

原创 2024.7.27力扣每日一题(笔记)

理解题意,我们可以知道,题目就是要让我们从给定的字符串和k,让distance(s, t) <= k ,满足字典序最小。字典序最小,我们可以想到如果字符串字符是a,那么无疑是最小的字典序。所以,如果k足够大,我们可以考虑将s[i]直接变成a。与a的距离有两种情况,比如d,与a的距离就是d-a;将 s[0] 改为 ‘a’ ,s 变为 “abbz”。将 s[1] 改为 ‘a’ ,s 变为 “aabz”。将 s[2] 改为 ‘a’ ,s 变为 “aaaz”。因此,答案是 “aaaz”。

2024-07-27 12:03:05 384

原创 2024.7.26力扣每日一题(笔记)

第一反应就是排序完分割数组,因为从小到大排序之后,我们选择合适的地方进行分割,这样子就分割成了两个数组。然后我们取分割线的左边的元素,就是nums1的最大值,分割线右边的元素,就是nums2的最小值。这样,我们通过循环,就能找出分区值。其中,max(nums1) 表示数组 nums1 中的最大元素,min(nums2) 表示数组 nums2 中的最小元素。给你一个 正 整数数组 nums。返回表示分区值的整数。

2024-07-26 23:13:28 262

原创 Java修炼 Java SE 面试题目 (简答) 2024.7.26 22:16

所有对象都在堆中分配内存,堆是共享的,全局可见的,栈是用于存放局部变量和方法调用的内存区域。简单来说,当多个线程需要访问共享资源时,线程同步确保在同一时刻只有一个线程能够访问共享资源,从而维护数据的完整性和一致性。Java 的面向对象特性包括封装(将数据和代码封装在类中,通过访问控制符限制对数据的访问)、继承(允许一个类派生出子类,子类继承父类的属性和方法)、多态(同一方法在不同对象上有不同的行为)。:序列化使对象的状态能够直接保存到文件中,当程序需要恢复对象的状态时,可以通过反序列化读取文件并重建对象。

2024-07-26 23:06:31 1343

空空如也

空空如也

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

TA关注的人

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