- 博客(257)
- 收藏
- 关注
原创 面试问到:你的项目难点是什么?
其实这种东西不是考察有多难,所有编程应用开发做出来的东西,不是那种难到没法理解的程度。所以,更多的考察是你对你所做项目的理解程度。
2025-07-17 11:44:57
133
原创 一条Redis命令是如何执行的?
注意,本次执行 readQueryFromClient 前,client 状态已被设置为 「CLIENT_PENDING_READ」 ,所以执行时,client 不会再次加入任务队列,而是进入真正的执行流程。前面我们提到,每次事件循环,Redis 会执行预处理函数「beforeSleep」,该函数内会将 clients_pending_read 读就绪队列进行分发。执行完命令后,主线程进入最后一步「addReply」,调用 prepareClientToWrite,将执行结果,加入 「具体为以下两个步骤。
2025-07-09 23:54:41
877
原创 为什么 MySQL 不推荐用 Docker 部署?
尽管 Docker 在许多场景下都非常强大,但对于大型 MySQL 数据库,它并不是最合适的选择。主要是因为在性能、管理复杂性、稳定性等多个方面,Docker 的一些特性可能对 MySQL 的运行带来挑战。下面我们详细分析一下。对于大型 MySQL 数据库,Docker 并不是最佳选择性能开销大,特别是在 IO 密集型操作中,Docker 容器会引入额外的性能损耗。配置和管理复杂,特别是容器内部和宿主机之间的协调,以及容器化数据持久化的配置都相对麻烦。
2025-06-26 09:21:24
925
原创 MCP很好,但它不是万灵药|一文读懂 MCP
MCP是一种开放的技术协议,旨在标准化大型语言模型(LLM)与外部工具和服务的交互方式。你可以把MCP理解成像是一个AI世界的通用翻译官,让AI模型能够与各种各样的外部工具"对话"。
2025-06-22 22:18:37
905
原创 什么是桩代码?
桩代码(Stub)是软件开发中的一种测试方法,用于模拟还未实现或无法在测试环境中执行的组件。通常用于单元测试,以隔离被测试的代码部分,确保测试的焦点仅集中在特定模块上。桩代码替代了实际的功能实现,提供预定的响应,从而使得测试更加简洁、高效,并有助于检测和修复错误。
2025-05-25 16:32:43
166
原创 Github 2FA(Two-Factor Authentication/两因素认证)
多因素用户认证(Multi-Factor Authentication),基本上各个大互联网平台,尤其是云平台厂商(如:阿里云的MFA、华为云、腾讯云/QQ安全中心等)都有启用了,Github算是搞得比较晚些了。双因素身份验证(Two-Factor Authentication)是多因素用户认证的一种、一种增强账户安全的方法。传统的用户名和密码登录方式容易受到黑客的攻击,而通过2FA,用户需要在登录时提供两种不同类型的身份验证,通常是密码和手机验证或者密码和一次性验证码。
2025-04-16 17:02:20
2060
1
原创 微服务nacos配置优先级,如何修改本地优先
我们想启动两个内容管理微服务,此时需要在本地指定不同的端口,通过VM Options参数,在IDEA配置启动参数。各配置文件 的优先级:项目应用名配置文件 > 扩展配置文件 > 共享配置文件 > 本地配置文件。通过-D指定参数名和参数值,参数名即在bootstrap.yml中配置的server.port。启动ContentApplication2,发现端口仍然是63040,这说明本地的配置没有生效。这时候本地配置的就生效了。3、以共享配置文件 方式引入。2、以扩展配置文件方式引入。
2024-11-25 21:05:52
1133
原创 JSR303校验
前端请求后端接口传输参数,是在controller中校验还是在Service中校验?答案是都需要校验,只是分工不同。Contoller中校验请求参数的合法性,包括:必填项校验,数据格式校验,比如:是否是符合一定的日期格式,等。Service中要校验的是业务规则相关的内容,比如:课程已经审核通过所以提交失败。Service中根据业务规则去校验不方便写成通用代码,Controller中则可以将校验的代码写成通用代码。
2024-11-23 21:35:39
784
原创 解决跨域问题
在浏览器通过http://localhost:8601/地址访问前端工程。提示:从http://localhost:8601访问http://localhost:63110/system/dictionary/all被CORS policy阻止,因为没有Access-Control-Allow-Origin 头信息。CORS全称是 cross origin resource share 表示跨域资源共享。
2024-11-23 14:47:22
1007
原创 修改仓库中子模块并推送到远程仓库的指定分支
因为现在修改的是仓库的子模块的东西,我们要先提交子模块,然后在提交主题仓库。更新主项目中的子模块状态:在主项目中,将子模块的状态更新到新的提交。查看子模块中的更改情况,确认哪些文件需要添加和提交。添加子模块中的文件:将子模块中的更改添加到暂存区。提交子模块中的更改,并附带一条描述性的提交信息。提交主项目中的更改,包括子模块的状态更新。首先,进入 XGBDIM 子模块目录。将更改推送到远程仓库的 zhb 分支。返回到主项目的根目录。
2024-11-20 15:39:49
499
原创 github克隆项目中的子模块submodule时遇到“无法访问远程仓库,请检查权限“
在拉取仓库的时候发现了新东西。仓库中有两个文件夹提示@点击之后,发现跳转到了另一个仓库 ,原来这是仓库的子模块,第一次见,也就是仓库中包含了其他的的仓库,就是这么简单的原理。但是在拉取仓库以后发现这两个子模块下是空的。原来拉去子模块要使用要是使用图形化工具,小乌龟之类的,拉取的时候记得勾上recursive但是这还没完。包含子模块一起拉取的时候又报了错。报错说我权限不够,我以为是SSH权限的问题,把自己的SSH重新在gittee上配置了一遍,发现还是报错。
2024-10-13 08:38:52
820
原创 SpringBoot中各种O的分层模型
设计模式的单一职责:各种XXOJavaBean,就是会做一些逻辑处理,包括接收事件,和查找事件等POJO的使用:在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应于数据库中存储的数据(数据表),DTO对应于除二者之外需要进行传递的数据。
2024-09-26 12:34:17
1379
原创 Spring数据校验
/ 校验注解 绑定 校验器@Constraint(validatedBy = {GenderValidator.class}) //校验器去真正完成校验功能。Class<?Class<?我们上面的Vo中就用了@Gender的自定义校验,而我们只是标注了一个校验注解,真正的校验还是得交给校验器进行校验。@Constraint(validatedBy = {GenderValidator.class}) 就是指定我们的校验器在写一个校验器实现ConstraintValidator接口。
2024-09-26 11:18:03
1059
原创 Spring异常处理-@ExceptionHandler-@ControllerAdvice-全局异常处理
异常的处理分两类编程式处理:也就是我们的try-catch声明式处理:使用注解处理。
2024-09-26 10:24:36
925
原创 【Bug解决】Nacos启动成功,但却无法访问(提示:无法访问此网站,192.168.10.88的响应时间过长)
在虚拟机上通过Docker创建Nacos容器,已经创建成功,查看Nacos启动日志也是成功。但通过端口号加8848/nacos(如:http://IP:8848/nacos)无法访问到Nacos管理页面。可以看出我是因为用以前项目的nacos容器,以前配置过网段,所以我现在用虚拟机的IP访问不到,解决办法,在启动一个容器呗,不配置网段,多简单,这就是docker的方便之处。先检查好自己在虚拟机中的nacos容器确实是启动了,端口映射也是正确的。2、查询8848端口是否开放。3、开放8848端口。
2024-09-19 15:11:10
2615
原创 黑马点评27—原理—Redis内存回收
Redis本身是一个典型的key-value内存存储数据库,因此所有的key、value都保存在之前学习过的Dict结构中。内存淘汰:就是当Redis内存使用达到设置的上限时,主动挑选部分key删除以释放更多内存的流程。可以发现,当key的TTL到期以后,再次访问name返回的是nil,说明这个key已经不存在了,对应的内存也得到释放。惰性删除:顾明思议并不是在TTL到期后就立刻删除,而是在访问一个key的时候,检查该key的存活时间,如果已经过期才执行删除。当内存使用达到上限时,就无法存储更多数据了。
2024-09-12 22:04:51
1130
原创 黑马点评26—原理—Redis通信协议
try {// 1.建立连接// 2.获取输出流、输入流// 3.发出请求// 3.1.获取授权 auth 123321// 3.2.set name 虎哥sendRequest("set", "name", "虎哥");// 4.解析响应// 3.2.set name 虎哥// 4.解析响应// 3.2.set name 虎哥// 4.解析响应// 5.释放连接try {if (reader!if (writer!if (s!
2024-09-12 16:49:10
464
原创 黑马点评25—原理—Redis网络模型(真的是单线程吗?)
就去等待,在用户态创建一个空的events数组,当就绪之后,我们的回调函数会把数据添加到list_head中去,当调用这个函数的时候,会去检查list_head,当然这个过程需要参考配置的等待时间,可以等一定时间,也可以一直等, 如果在此过程中,检查到了list_head中有数据会将数据添加到链表中,此时将数据放入到events数组中,并且返回对应的操作的数量,用户态的此时收到响应后,从events中拿到对应准备好的数据的节点,再去调用方法去拿数据。我们的应用都需要通过Linux内核与硬件交互。
2024-09-12 13:25:06
1262
原创 黑马点评24—原理—Redis数据结构
对⼀个内部表示成long型的string执行append, setbit, getrange这些命令,针对的仍然是string的值(即⼗进制表示的字符串),而不是针对内部表⽰的long型进⾏操作。String的内部存储结构⼀般是sds(Simple Dynamic String,可以动态扩展内存),但是如果⼀个String类型的value的值是数字,那么Redis内部会把它转成long类型来存储,从⽽减少内存的使用。我们可以看到,key的类型固定是string,而value可能的类型是多个。
2024-09-12 08:46:20
963
原创 黑马点评23——最佳实践-服务端优化
客户端缓冲区:指的就是我们发送命令时,客户端用来缓存命令的一个缓冲区,也就是我们向redis输入数据的输入端缓冲区和redis向客户端返回数据的响应缓存区,输入缓冲区最大1G且不能设置,所以这一块我们根本不用担心,如果超过了这个空间,redis会直接断开,因为本来此时此刻就代表着redis处理不过来了,我们需要担心的就是输出端缓冲区。lua和事务都是要保证原子性问题,如果你的key不在一个节点,那么是无法保证lua的执行和事务的特性的,所以在集群模式是没有办法执行lua和事务的。
2024-09-11 22:31:17
1118
原创 黑马点评22——最佳实践-批处理优化
集群下的时候,使用Spring提供的SpringRedisTemplate这个已经做了关于集群的批处理优化,直接拿来用就行。pipeline就是大数据量的导入,pipeline是在单机模式下的。redis的处理耗时相比较网络传输的耗时其实是比较低的。所以我们最好采用批处理,
2024-09-11 21:52:35
431
原创 docker安装部署Canal-监听mysql
接下来添加一个仅用于数据同步的账户,出于安全考虑,这里仅提供对heima这个库的操作权限。恰好笔者这里就是使用了8.0.24的mysql,刚好遇到了这个问题,就在这里解决一下。Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。改成自己的密码哦,我们这里设置的密码是canal,所以我就要写canal。也就是密码的验证方式变化了,我们前面创建的用户使用的密码验证方式不行。运行完之后,我们可以查看用户,是不是真的添加进去了。打开mysql容器挂载的日志文件,我的在。
2024-09-11 19:41:55
2897
原创 黑马点评18——多级缓存-OpenResty
因为我们实际的tomcat一定是集群的,那我们的nginx会代理到tomcat的某一台服务器上(8081),在tomcat这一台服务器查询后返回结果,会形成一个JVM进程缓存,但是我们的nginx的默认负载均衡策略是轮询,下一次查询同一个商品id,nginx就把请求发到另一个tomcat服务器上(8082),那上次tomcat形成的jvm进程(8081)缓存无法命中,因为jvm进程缓存是不能共享的,所以,还得让8082服务器再次处理,那每次都这样,必然降低我们的命中率,降低性能。(注意:防火墙得关闭)
2024-09-11 16:59:25
1141
原创 安装OpenResty(Linux)
nginx的默认配置文件注释太多,影响后续我们的编辑,这里将nginx.conf中的注释部分删除,保留有效部分。看到里面的nginx目录了吗,OpenResty就是在Nginx基础上集成了一些Lua模块。默认情况下,OpenResty安装的目录是:/usr/local/openresty。opm是OpenResty的一个管理工具,可以帮助我们安装一个第三方的Lua模块。NGINX_HOME:后面是OpenResty安装目录下的nginx的目录。仓库,这样就可以便于未来安装或更新我们的软件包(通过。
2024-09-09 21:58:42
1852
原创 黑马点评16——多级缓存-JVM进程缓存
但是现在的nginx的压力太大了,所以nginx也要部署成集群当然我们的redis、tomcat都可以部署成集群。
2024-09-09 20:40:07
1053
原创 win11控制台卡顿,白色空窗问题解决
在使用win11的时候,cmd打开控制台执行命令的时候,经常出现只弹出一个半透明窗口,卡好久才行的问题。打开cmd窗口,在标题栏上右键,打开属性。勾选“使用就控制台样式”
2024-09-09 19:59:14
1218
原创 黑马点评15——分布式缓存-Redis分片集群
这是自动的故障转移,但有时候需要手动的故障转移——比如更换机器的时候,进行数据迁移。在分片集群中配置分片的每一个节点。添加新的节点后要重新分配插槽,
2024-09-09 17:56:28
634
原创 黑马点评14——分布式缓存-Redis哨兵
我们监控集群中的节点状态,发现master宕机,立马选一个新节点作为master。那谁来检测?——哨兵。
2024-09-09 15:19:20
327
原创 黑马点评13——分布式缓存-Redis主从
我们的repl_baklog是有上线的,一旦我们的环中,master持续记录,slave宕机的话,这时候增量同步就失败了,因为还没有同步的数据被新的master覆盖了。无法避免,只能尽量优化、减少。搭建过程参考我的博客。
2024-09-09 10:21:01
514
原创 单机部署Redis集群
我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。
2024-09-07 11:36:07
2157
原创 黑马点评11——UV统计-HyperLogLog
我们这里没有真正的实现UV统计,但是我们在测试中测试1000000条数据,可以看出我们的内存占用非常小,而且误差也非常小。当高并发环境下的用户打过来的时候,我们把数据直接往HyperLogLog中放就可以了,误差完全可以接受。即使将来需要实现的话,其实难度也不是很大,直接把这些实现就可以了。简直就是天生用于UV统计的,太爽了!
2024-09-07 09:06:29
466
万亿级通用标签管理与应用系统设计:抖音电商塔阁平台的实践探索
2025-07-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人