- 博客(153)
- 收藏
- 关注
原创 2021年蓝桥杯——杨辉三角形
下面的图形是著名的杨辉三角形:如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ⋯给定一个正整数 N,请你输出数列中第一次出现 N是在第几个数?输入一个整数 N。输出一个整数代表答案。示例 161131评测用例规模与约定对于 20% 的评测用例,1≤N≤10;对于所有评测用例,1≤N≤1000000000。运行限制最大运行时间:1s。
2025-03-24 20:01:29
459
原创 MyBatis面试常见问题
MyBatis的执行流程如下:读取MyBatis配置文件。构造会话工厂。会话工厂创建SqlSession对象。操作数据库的接口,Executor执行器。Executor执行方法中的参数。输入参数映射。输出结果映射。
2025-03-19 22:20:04
502
原创 SSM框架——Spring面试题
AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。记录操作日志缓存处理Spring中内置的事务处理记录操作日志思路获取请求的用户名、请求方式、访问地址、模块名称、登录ip、操作时间,记录到数据库的日志表中。核心是:使用aop中的环绕通知+切点表达式。
2025-03-17 22:45:35
847
原创 MySQL——事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
2025-03-10 20:47:35
609
原创 MySQL面试篇——性能优化
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2025-03-08 20:32:01
1458
原创 Redis面试常见问题——分布式锁
Redis实现分布式锁主要利用Redis的setnx命令。setnx是SET if not exists(如果不存在,则 SET)的简写。由于redis是单线程的,用了这个命令之后,只能有一个客户端对某一个key设置值。在没有过期或删除key的时候,其他客户端是不能设置这个key的。redis的SETNX指令不好控制这个问题。我们采用的是redis的一个框架Redisson实现的。在Redisson中需要手动加锁,并且可以控制锁的失效时间和等待时间。
2025-03-03 23:13:51
285
原创 Redis面试常见问题——使用场景问题
布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是Redisson实现的布隆过滤器。它的底层原理是,先初始化一个比较大的数组,里面存放的是二进制0或1。一开始都是0,当一个key来了之后,经过3次hash计算,模数组长度找到数据的下标,然后把数组中原来的0改为1。这样,三个数组的位置就能标明一个key的存在。查找的过程也是一样的。布隆过滤器有可能会产生一定的误判,我们一般可以设置这个误判率,大概不会超过5%。其实这个误判是必然存在的,要不就得增加数组的长度。
2025-03-02 23:25:46
850
原创 微服务——分布式事务
而微服务中的事务并未遵循ACID的原则,归其原因就是参与事务的多个子业务在不同的微服务,跨越了不同的数据库。虽然每个单独的业务都能在本地遵循ACID,但是它们互相之间没有感知,不知道有人失败了,无法保证最终结果的统一,也就无法遵循ACID的事务特性了。分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上的一种事务处理方式。,与多个分支事务通信,检测每个分支事务的执行状态,保证全局事务下的每一个分支事务同时成功或失败即可。如果有分支事务失败,需要回滚。
2024-10-03 23:17:14
1567
2
原创 微服务——服务保护
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站:核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。为了方便监控微服务,我们先把Sentinel的控制台搭建出来。1)下载jar包。
2024-09-26 22:41:19
1270
原创 微服务配置管理——动态路由
要实现动态路由首先要将路由配置保存到Nacos,当Nacos中的路由配置变更时,推送最新配置到网关,实时更新网关中的路由信息。我们就可以在项目启动时先更新一次路由,后续随着配置变更通知到监听器,完成路由更新。配置 ID,保证全局唯一性,只允许英文字符和 4 种特殊字符("."、":"、"-"、"_")。在项目启动的时候加载,并且一经加载就会缓存到内存中的路由表内(一个Map),不会改变。,如果希望 Nacos 推送配置变更,可以使用 Nacos 动态监听配置接口来实现。网关的路由配置全部是在项目启动时由。
2024-09-25 11:29:04
1470
原创 微服务——配置管理
微服务配置管理是指对微服务架构中各个服务的配置信息进行管理、更新、查询和审计等操作,以确保系统的正常运行和高效管理。例如,网关路由或某些业务配置在配置文件中写死了,每次修改都要重启服务。每个微服务都有很多重复的配置,维护成本高。这些问题都可以通过统一的解决。而Nacos不仅仅具备注册中心功能,也具备配置管理的功能。微服务共享的配置可以统一交给Nacos保存和管理,在Nacos控制台修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。
2024-09-24 22:08:01
1215
原创 微服务——网关登录校验(一)
无论是还是都支持自定义,只不过编码方式、使用方式略有差别。自定义不是直接实现,而是实现。@Component@Override@Override// 获取请求// 编写过滤器逻辑System.out.println("过滤器执行了");// 放行注意:该类的名称一定要以GetwayFilterFactory为后缀。spring:cloud:gateway:- PrintAny # 此处直接以自定义的GatewayFilterFactory类名称前缀类声明过滤器。
2024-09-21 21:35:31
1260
1
原创 微服务——网关路由(Spring Cloud Gateway)
网关又称网间连接器、协议转换器,是在网络层以上实现网络互连的复杂设备,主要用于两个高层协议不同的网络之间的互连。网关就是络的口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的。而微服务网关起到同样的作用。前端请求不能直接访问微服务,而是要请求网关:网关可以做安全控制,也就是登录身份校验,校验通过才放行通过认证后,网关再根据请求判断应该访问哪个微服务,将请求转发过去在SpringCloud当中,提供了两种网关实现方案:Netflix Zuul:早期实现,目前已经淘汰。
2024-09-13 19:55:06
1301
原创 微服务——服务注册和发现(二)
服务的消费者要去nacos订阅服务,这个过程就是服务发现,步骤如下:引入依赖配置Nacos地址发现并调用服务。
2024-09-05 16:49:02
479
1
原创 微服务——服务注册和发现(一)
我基于Docker来部署Nacos的注册中心,首先我们需要一张MySQL数据库表,用来存储Nacos的数据。在大型微服务项目中,服务提供者的数量会非常多,为了管理这些服务就引入了。调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除。当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表。当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表。
2024-09-04 22:51:49
1077
1
原创 微服务——远程调用
lombok库?Lombok是一个Java库,它可以帮助开发者自动生成getter和setter方法、构造函数、equals、hashCode和toString方法等,从而减少样板代码,提高开发效率。
2024-08-23 22:41:12
1118
原创 认识微服务
微服务是一种软件架构风格,它将一个大型的应用程序拆分成一组小的、自治的服务单元。每个服务单元都运行在独立的进程中,通过轻量级的通信机制(如HTTP/RESTful API、消息队列等)进行交互,并且可以使用不同的编程语言、框架和技术栈来实现。
2024-08-19 21:32:20
1163
原创 【LeetCode】148. 排序链表
给你链表的头结点head,请将其按排列并返回。[1,2,3,4]head = [][]你可以在O(n log n)时间复杂度和常数级空间复杂度下,对链表进行排序吗?
2024-08-18 22:40:28
1164
原创 Docker——项目部署
而稍微复杂的项目,其中还会有各种各样的其它中间件,需要部署的东西远不止3个。如果还像之前那样手动的逐一部署,就太麻烦了。docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。project就是当前compose文件中设置的多个service的集合,是逻辑概念。编写好docker-compose.yml文件,就可以部署项目了。
2024-08-18 20:31:23
775
原创 【LeetCode】138. 随机链表的复制
给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的。深拷贝应该正好由n个节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。。例如,如果原链表中有X和Y两个节点,其中。那么在复制链表中对应的两个节点x和y,同样有。返回复制链表的头节点。用一个由n个节点组成的链表来表示输入/输出中的链表。
2024-08-17 19:02:24
1208
原创 Docker 基础—— 数据卷
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。使用数据卷可以实现宿主机目录与容器内目录的双向映射绑定,方便操作容器内的文件,或迁移容器产生的数据。html:放置一些静态资源conf:放置配置文件如果我们要让Nginx代理我们的静态资源,最好是放到html目录;如果我们要修改Nginx的配置,最好是找到conf下的nginx.conf文件。但遗憾的是,容器运行的Nginx所有的文件都在容器内部。所以我们必须利用数据卷将两个目录与宿主机目录关联,方便我们操作。
2024-08-16 20:19:05
1008
原创 Docker——常用命令
Docker 是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。它可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
2024-08-15 19:09:52
1103
原创 【LeetCode】141.环形链表和142. 环形链表 II
首先,我们使用快慢指针来检测链表中是否存在环。(跟上一题一样)一旦我们检测到环,我们可以将其中一个指针(通常是慢指针)移回链表的头部,然后将两个指针以相同的速度移动,直到它们再次相遇。为了判断链表中是否存在环,可以使用快慢指针(也称为Floyd的循环检测算法或龟兔赛跑算法)的方法。来表示链表尾连接到链表中的位置(索引从 0 开始)。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。
2024-08-14 23:05:08
953
原创 【LeetCode】234. 回文链表
给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。truefalse[1, 105]你能否用O(n)时间复杂度和O(1)空间复杂度解决此题?
2024-08-12 21:18:11
471
原创 MybatisPlus——插件功能
其中缺少的仅仅是分页条件,而分页条件不仅仅用户分页查询需要,以后其它业务也都有分页查询的需求。在查询出分页结果后,数据的非空校验,数据的vo转换都是模板代码,编写起来很麻烦。这里用到了分页参数,Page,即可以支持分页参数,也可以支持排序参数。MybatisPlus提供了很多的插件功能,进一步拓展其功能。所以,我们必须配置分页插件。:分页查询条件的实体,包含分页、排序参数、过滤条件。这个实体中定义一个工具方法,简化开发。:分页结果实体,包含总条数、总页数、当前页数据。在未引入分页插件的情况下,
2024-08-11 20:57:20
658
原创 MybatisPlus——扩展功能(二)
程序在返回给前端结果时是Spring MVC进行处理,Spring MVC底层在处理时JSON格式的数据时可以使用注解,让页面查询结果也是枚举格式。因此MybatisPlus提供了很多特殊类型字段的类型处理器,解决特殊字段类型与数据库类型转换的问题。这样一来,我们要读取info中的属性时就非常不方便。如果要方便获取,info的类型最好是一个。MybatisPlus提供了一个处理枚举的类型转换器,可以帮我们。,枚举中的哪个字段的值作为数据库值。,再读取数据库时,手动转换为。例如:我们数据库采用的是。
2024-08-11 16:55:08
490
原创 MybatisPlus——扩展功能(一)
在使用MybatisPlus以后,基础的MapperServicePO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成POMapperService等相关代码。只不过代码生成器同样要编码使用,也很麻烦。这里推荐使用一款的插件,它可以基于图形化界面完成的代码生成,非常简单。
2024-08-10 18:42:52
1926
原创 MybatisPlus——service批量新增
的预编译模式,然后批量提交,最终在数据库执行时还是会有多条insert语句,逐条插入数据。修改项目中的application.yml文件,在jdbc的url后面添加参数。这个参数的默认值是false,我们需要修改连接参数,将其配置为true。可以看到使用了批处理以后,比逐条新增效率提高了10倍左右。值是否为true并重写SQL的功能。顾名思义,就是重写批处理的。
2024-08-09 20:44:19
516
原创 MybatisPlus——Service接口
MybatisPlus不仅提供了BaseMapper,还提供了通用的Service接口及默认实现,封装了一些常用的service模板方法。通用接口为IService,默认实现为save:新增remove:删除update:更新get:查询单个结果list:查询集合结果count:计数page:分页查询save是新增单个元素saveBatch是批量新增是根据id判断,如果数据存在就更新,不存在则新增是批量的新增或修改removeById:根据id删除:根据id批量删除:根据Map中的键值对为条件删除。
2024-08-08 22:31:33
1965
原创 【LeetCode】240. 搜索二维矩阵 II
编写一个高效的算法来搜索m x n矩阵matrix中的一个目标值target。truefalse。
2024-08-08 16:47:05
677
原创 MybatisPlus自定义SQL
就当前案例来说,由于条件是in语句,只能将SQL写在Mapper.xml文件,利用foreach来生成动态SQL。理论上来讲MyBatisPlus是不支持多表查询的,不过我们可以利用Wrapper中自定义条件结合自定义SQL来实现多表查询的效果。但是基于自定义SQL结合Wrapper的玩法,我们就可以利用Wrapper来构建查询条件,然后手写SELECT及FROM部分,实现多表查询。可以看出其中最复杂的就是WHERE条件的编写,如果业务复杂一些,这里的SQL会更变态。
2024-08-07 21:44:34
524
原创 【LeetCode】48. 旋转图像
给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在旋转图像,这意味着你需要直接修改输入的二维矩阵。使用另一个矩阵来旋转图像。。
2024-08-07 14:58:56
560
原创 MyBatis-Plus 条件构造器
MyBatis-Plus 的条件构造器(Wrapper)是 MyBatis-Plus 提供的一个非常强大的功能,它允许你以链式调用的方式构建复杂的 SQL 查询条件,而无需手写繁琐的 XML 映射文件或注解。
2024-08-07 14:16:07
1162
原创 【LeetCode】54. 螺旋矩阵
给你一个m行n列的矩阵matrix,请按照,返回矩阵中的所有元素。首先,我们需要定义四个边界变量,分别表示矩阵的上边界(top)、下边界(bottom)、左边界(left)和右边界(right初始时,这些边界分别设置为矩阵的第一行、最后一行、第一列和最后一列。使用一个循环来遍历矩阵的边界。在每次循环中,我们按照顺时针的顺序遍历矩阵的四个边界(上、右、下、左),并将遍历到的元素添加到结果列表中。在遍历完每个边界后,我们需要根据遍历的方向来更新相应的边界变量。
2024-08-06 18:07:19
543
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人