-
IntelliJ IDEA 中 Lombok 注解失效问题
问题尝试在 IDEA 中使用 Lombok 注解,但是在程序编译时出现找不到 get&set 方法、找不到 builder 方法等报错,但在对应的类中都已经加上了 @Data 和 @Builder 注解,但是编译器找不到注解。解决方法确保安装了 Lombok 插件,(Settings → Plugins 安装 lombok)并且启用了注解处理器(Settings → Build, Execution, Deployment → Compiler → Annotation Proce...…
-
Java的反射机制
1.什么是反射机制?反射(Reflection)是Java中的一个强大功能,允许程序在运行时动态地访问和操作类的元数据(如类名、字段、方法等)。通过反射,Java程序可以在运行时动态地获取类的信息,甚至动态地创建对象和调用方法。举个简单的例子,在编写程序时,通常是明确地知道类的名字和结构,然后直接使用它们。反射则允许你在运行时才知道类的信息,并通过这些信息去操作类。所以说,反射的作用就是获取类的信息(成员变量、方法、构造方法等)2.反射机制的工作原理反射的核心就是通过类的字节码来动态获取类...…
-
Java Stream
简介Java 的 Stream API 是 Java 8 引入的一项功能,它主要用于处理集合类(如 List、Set、Map 等)中的元素,提供了一种声明性的方法来进行数据处理。Stream API 提供了许多可以连缀使用的操作,支持高效的顺序和并行流处理。Stream 并不是存储数据的结构,而是对集合、数组或其他数据源进行操作的一种方式。Stream 对象可以从集合、数组、文件等多种数据源获取。Stream 的基本特征 惰性求值(Lazy Evaluation):Stream 的操作是...…
-
MyBatis-plus
简介MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具包,它在 MyBatis 的基础上进行了一些优化和提升,旨在简化开发,提高开发效率,减少冗余代码提升与特性1.无侵入式增强MyBatis-Plus 是在 MyBatis 基础上的增强,不需要修改现有 MyBatis 的配置和代码,最大程度地保持兼容性和灵活性。2.增强的 CRUD 操作MyBatis-Plus 提供了内置的通用 Mapper 和 Service,开发者不再需要编写常见的增删改查(CRUD)方法。通过...…
-
分布式锁
基本原理和实现方式 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行。 那么分布式锁他应该满足的条件呢? 可见性:多个线程都能看到相同的结果,注意:这个地方说的可见性并不是并发编程中指的内存可见性,只是说多个进程之间都能感知到变化的意思 互斥:互斥是分布式锁的最基本的条件,使得程序串行执行 高可用:程序不易崩溃,时时刻...…
-
泛型与函数式编程
泛型与函数式编程 函数式编程:在Java中,函数式编程是一种编程范式,它把计算视为数学上的函数求值,并且避免了状态和可变数据。这意味着在函数式编程中,函数是“一等公民”,它们可以作为参数传递给其他函数,也可以作为结果从函数中返回。此外,函数式编程鼓励使用不可变对象来减少副作用,从而提高代码的可读性和可维护性。 泛型:泛型是Java语言的一个重要特性,它允许你在定义类、接口和方法时使用类型参数。这样做的好处是可以重用相同的代码来处理不同的数据类型,同时还能获得编译时的类型安全检查,避免运...…
-
基于Redis的用户短信登陆功能
1.发送验证码功能实现前端会给后端传入 String 和一个 HttpSession ,然后对应的 controller 调用 service 层的 sendCode 方法:/** * 发送手机验证码 */@PostMapping("code")public Result sendCode(@RequestParam("phone") String phone, HttpSession session) { return userService.sendCode(phone, ses...…
-
缓存穿透、缓存雪崩、缓存击穿与缓存污染
1.缓存穿透什么是缓存穿透?我们使用 redis 大部分情况都是通过 key 查询对应的值,假如发送的请求传进来的 key 是不存在redis 中的,那么就查不到缓存,查不到缓存就会去数据库查询。假如有大量这样的请求,这些请求像“穿透”了缓存一样直接打在数据库上,这种现象就叫做缓存穿透。分析:关键在于在 redis 查不到 key 值,这和缓存击穿有根本的区别,区别在于缓存穿透的情况是传进来的 key 在 redis 中是不存在的。假如有黑客传进大量的不存在的 key ,那么大量的请求打在...…
-
MySQL原理
一、存储引擎1.MySQL体系结构 连接层:一些客户端和连接服务,主要完成一些类似于连接处理、授权认证及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层:第二层架构主要完成大多数的核心服务功能,如 SQL 接口,并完成缓存的查询、SQL的分析和优化、部分内置函数的执行。所有跨存储引擎的功能也在这一层实现。 引擎层:存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 和存储引擎进行通信。不同的存储引擎具有不同的功能。 存储层:将数...…
-
LCR-动态规划
1.斐波那契数斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n) 。答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1解释:F(2) = F(1) + F(0) = 1 + ...…
-
图论
前言整理自:https://algo.itcharge.cn/和代码随想录:https://www.programmercarl.com/qita/tulunfabu.html1.图的基础知识(1).图的定义图(Graph):由顶点的非空有限集合 V (由 n>0 个顶点组成)与边的集合 E(顶点之间的关系)构成的结构。其形式化定义为 G=(V,E)。 顶点(Vertex):图中的数据元素通常称为顶点,在下面的示意图中我们使用圆圈来表示顶点。 边(Edge):图中两个数据元素之间...…
-
LCR-位运算
1.位1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入...…
-
Spring Data + Mongo
1.什么是 Spring Data?Spring Data 是 Spring 框架中的一部分,专注于简化数据访问层的开发。其核心目标是减少开发人员编写的数据访问层代码,并为常见的数据访问模式提供开箱即用的解决方案。Spring Data 支持多种数据存储技术,如关系数据库(通过 JPA)、NoSQL 数据库(如 MongoDB、Cassandra 等)。主要功能如下: 简化的 CRUD 操作:通过 Spring Data,开发者可以轻松实现基本的 CRUD(增删查改)操作,无需编...…
-
LCR-二叉树
1.根据前序与中序遍历序列构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例 1:输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]示例 2:输入: preorder = [-1], inorder = [-1]输出: [-1]提示: 1 <...…
-
LCR-栈和队列
1.用两个栈实现队列读者来到图书馆排队借还书,图书管理员使用两个书车来完成整理借还书的任务。书车中的书从下往上叠加存放,图书管理员每次只能拿取书车顶部的书。排队的读者会有两种操作: push(bookID):把借阅的书籍还到图书馆。 pop():从图书馆中借出书籍。为了保持图书的顺序,图书管理员每次取出供读者借阅的书籍是 最早 归还到图书馆的书籍。你需要返回 每次读者借出书的值 。如果没有归还的书可以取出,返回 -1 。示例 1:输入:["BookQueue", "push", "pu...…
-
Docker
1.镜像和容器利用 Docker 安装应用时,Docker 会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用所需要的环境、配置、系统函数库(此处的环境是最轻量的,只包含容器内运行需要的环境,其他编辑操作可能包含)。Docker 会在运行镜像时创建一个隔离环境,称为容器(container)。镜像仓库:存储和管理镜像的平台,Docker 官方维护了一个公共仓库:https://hub.docker.com/2.命令解读docker run -d \ --name my...…
-
Spring Task
什么是 Spring TaskSpring Task 是 Spring 框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑,是一个定时任务框架。应用场景: 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单……cron 表达式通过 cron 表达式可以定义任务触发的事件构成规则:分为 6 或 7 个域,由空格分割开,每个域代表一个含义每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)。需要注意的是,周和日两者只能填一个,周代表是周几,日代表是这...…
-
Spring Cache
什么是Spring Cache?Spring Cache 是一个框架,实现了基于注解的缓存功能。Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如: EHCache Caffeine Redis要使用 Spring Cache 时,需要在工程的 pom 文件中导入相应的坐标:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>s...…
-
数位dp通用模板
数位动态规划(数位dp)主要用于解决“在区间 [l, r] 这个范围内,满足某种约束的数字的数量、总和、平方”这一类问题前置知识:位运算与集合论集合可以用二进制表示,二进制从低到高,第 i 位为 1 表示 i 在集合中,为 0 表示 i 不在集合中。例如集合 {0, 2, 3} 对应的二进制数为 1101 。设集合对应的二进制数为 x : 判断元素 d 是否在集合中:x >> d & 1 可以取出 x 的第 d 个比特位,如果是 1 就说明 d 在集合中。 把元素 ...…
-
分治——归并排序与二分查找
交易逆序对的总数在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录 record,返回其中存在的「交易逆序对」总数。示例 1:输入:record = [9, 7, 5, 4, 6]输出:8解释:交易中的逆序对为 (9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。限制:0 <= record.length <= 50000Code...…