自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试问到:你的项目难点是什么?

其实这种东西不是考察有多难,所有编程应用开发做出来的东西,不是那种难到没法理解的程度。所以,更多的考察是你对你所做项目的理解程度。

2025-07-17 11:44:57 133

原创 亿级流量挑战下的高可用架构设计与实践

亿级流量挑战下的高可用架构设计与实践。

2025-07-17 11:10:24 112

原创 一条Redis命令是如何执行的?

注意,本次执行 readQueryFromClient 前,client 状态已被设置为 「CLIENT_PENDING_READ」 ,所以执行时,client 不会再次加入任务队列,而是进入真正的执行流程。前面我们提到,每次事件循环,Redis 会执行预处理函数「beforeSleep」,该函数内会将 clients_pending_read 读就绪队列进行分发。执行完命令后,主线程进入最后一步「addReply」,调用 prepareClientToWrite,将执行结果,加入 「具体为以下两个步骤。

2025-07-09 23:54:41 877

原创 Function Calling与MCP的区别

MCP和FC作用在链路的两个环节,并不是一个东西,所以不存在替不替换的问题,而是共存的状态。

2025-06-29 22:54:23 186

原创 为什么 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

原创 MySQL企业常见架构与调优经验分享

观看学习课程的笔记,分享于此~

2024-10-21 13:05:10 1304

原创 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

原创 黑马点评21——最佳实践-键值设计

动态修改的,重启后就又失效了,而且最好上线不要超过1000。这样解决也不存在bigkey的问题了。

2024-09-11 21:32:31 362

原创 黑马点评20——多级缓存-总结

结合前面几篇关于多级缓存的内容,对我们整个多级缓存做个总结。

2024-09-11 20:30:05 452

原创 黑马点评19——多级缓存-缓存同步

在多级缓存中的数据一致性问题,也就是缓存同步的问题。

2024-09-11 20:27:44 1372

原创 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-Docker)

直接在linux中安装请参考博客这篇博客讲解如何在docker中安装。

2024-09-10 09:14:35 1427

原创 安装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

原创 黑马点评17——多级缓存-Lua语法

centOs已经装好了lua,直接用~魔兽的一些插件就是用lua开发的。

2024-09-09 21:49:10 417

原创 黑马点评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

原创 黑马点评12——分布式缓存-Redis持久化

提高安全性,弥补RDB的缺陷。

2024-09-09 09:14:22 215

原创 单机部署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

亿级流量挑战下的高可用架构设计与实践

亿级流量挑战下的高可用架构设计与实践

2025-07-17

空空如也

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

TA关注的人

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