- 博客(35)
- 收藏
- 关注
原创 MiniSpring框架学习笔记-动态代理:如何在运行时插入逻辑?
摘要 本文介绍了动态代理在MiniSpring框架中的实现与应用,重点讲解了JDK动态代理的工作原理和使用方法,为后续实现AOP(面向切面编程)奠定基础。 核心内容: 代理模式:通过中介对象间接访问目标对象,实现对业务逻辑的增强(如日志、事务等)。 静态代理:手动编写代理类,需与目标类实现相同接口,适用于少量场景但扩展性差。 JDK动态代理: 运行时动态生成代理类,通过Proxy.newProxyInstance()创建代理对象。 需基于接口,通过InvocationHandler统一处理方法调用,在inv
2026-07-05 21:27:23
326
原创 EMQX MQTT 压测连接数卡在 978 的原因与解决| TCP Listener | 连接数上限 | max_conns | 1024 | EMFILE | nofile | 物联网
文章摘要: EMQX MQTT压测时连接数卡在978问题的核心原因是TCP监听器默认max_conns=1024及Docker容器文件描述符限制(nofile=1024)触发了系统级EMFILE错误。解决方法需同步调整: 修改EMQX配置:将listeners.tcp.default.max_connections提升至65535; 调整Docker参数:启动容器时增加--ulimit nofile=1048576。 生产环境需根据实际设备规模、服务器资源及预留余量动态配置,并同步优化Linux内核参数。修
2026-06-30 20:34:27
288
原创 把本地电脑变成云服务器|Tailscale内网穿透|Peer Relay国内中转|UDP打洞直连|Ubuntu远程开发机|Windows远程访问|SSH私有云实战
如果只是偶尔出现 DERP,随后变成直连或 peer-relay,通常是正常的。它的优点是几乎不用配置,缺点是国内访问时可能绕路,延迟和带宽都不稳定。Peer Relay 的作用是:当直连失败时,让 tailnet 内的一台你自己的机器作为中转节点。如果一开始显示 DERP,过几秒后变成 peer-relay,通常也是正常的。登录完成后,在 Tailscale 管理后台可以把这台电脑的设备名改成更容易识别的名字,例如。到这一步,如果一切顺利,两边网络都没有限制时,步骤已经完成,只需要验证一下是否通了。
2026-06-28 14:57:03
433
原创 MiniSpring框架学习笔记-JDBC 访问框架: MiniBatis如何将 SQL 语句配置化?
摘要: MiniBatis 是 MiniSpring 框架中实现 SQL 配置化的组件,模仿 MyBatis 的核心思想,将 SQL 语句从 Java 代码剥离到 XML 文件中管理。通过解析 Mapper XML(如 UserMapper.xml),将 SQL 以 namespace.id 形式存储,运行时通过 SqlSession 根据 SQL ID 执行查询。示例中,UserService 通过 sqlId 调用 SqlSession.selectOne(),而 SQL 细节(如参数、结果类型)由 X
2026-06-27 17:01:10
297
原创 MiniSpring框架学习笔记-JDBC 访问框架:如何抽取专门的部件完成专门的任务?
文章摘要: MiniSpring框架通过职责分离优化JDBC访问,将参数绑定、结果集映射等逻辑拆分为独立组件(如ArgumentPreparedStatementSetter、RowMapper)。业务层仅需关注SQL与对象转换,简化代码。关键改进包括: 参数绑定:由ArgumentPreparedStatementSetter统一处理类型转换与JDBC下标; 结果映射:通过RowMapper实现单行数据到对象的灵活转换; 连接复用:引入连接池管理资源。最终使JdbcTemplate更专注流程控制,提升可维
2026-06-27 14:32:16
195
原创 一文了解物联网后端工程师必须知道的性能监控知识|ARMS|Prometheus|Grafana
本文介绍了物联网后端工程师需要掌握的性能监控知识。主要内容包括: 监控指标:以10万台设备的物联网平台为例,分析了需要监控的指标,包括上行/下行链路各环节(EMQX、Node-RED、消息队列、Java服务、数据库等)的关键性能数据。 性能监控概念:解释了可观测性的三大支柱(指标、日志、链路追踪),以及指标与维度的关系。 常用指标:介绍了流量、延迟、错误、饱和度四类核心信号,以及P50/P90/P99等百分位数的含义。 实现方案: APM探针方式(如阿里云ARMS):通过Java Agent实现无侵入式监控
2026-06-15 23:28:43
341
原创 MiniSpring框架学习笔记-JDBC 访问框架:如何抽取 JDBC 模板并隔离数据库?
MiniSpring JDBC框架设计与数据库解耦 本文介绍了MiniSpring框架中JDBC访问层的设计思路,主要包含两部分内容: 原生JDBC分析:通过示例代码展示了JDBC访问数据库的完整流程,包括驱动加载、连接获取、SQL执行和资源释放,并解释了JDBC如何通过标准API和厂商驱动实现与不同数据库的解耦。 模板方法模式应用:通过抽象固定流程(连接管理、资源释放等)和变化点(SQL、参数绑定、结果映射),设计了StatementCallback和PreparedStatementCallback等回
2026-06-09 23:07:02
295
原创 MiniSpring框架学习笔记-如何将处理结果返回给前端?|Java对象怎么变成浏览器数据?
本文介绍了如何将Controller处理结果返回给前端,重点讲解了基于@ResponseBody的JSON返回路径。通过DispatcherServlet和RequestMappingHandlerAdapter的协作,系统能自动识别@ResponseBody注解,使用HttpMessageConverter将Java对象序列化为JSON写入响应体,实现前后端分离的数据交互。文章还对比了JSON返回和传统ModelAndView视图渲染的区别,强调了源码设计中职责单一、解耦彻底的设计原则。示例演示了请求参数
2026-06-09 10:05:39
310
原创 MiniSpring框架学习-如何自动转换传入的参数?/user/save?name=Tom&age=18怎么自动转换成String和Integer格式
摘要:MiniSpring框架参数绑定机制解析 本文分析了MiniSpring框架如何实现HTTP请求参数到Java对象属性的自动转换。核心流程分为: 参数对象创建:通过反射为每个Controller方法参数创建空对象 数据绑定初始化:WebDataBinderFactory创建绑定器,注册自定义类型转换器(如日期格式转换) 属性绑定:从请求中提取参数值,通过BeanWrapper找到对应setter方法,使用合适的PropertyEditor完成字符串到目标类型的转换 设计亮点: 采用分层设计(Facto
2026-06-02 00:16:08
215
原创 MiniSpring框架学习-分解 Dispatcher
摘要: 本文以MiniSpring框架的Dispatcher模块为例,探讨如何通过拆分实现代码解耦。核心思路是将容器和分发逻辑分离: 容器分层:通过ContextLoaderListener创建父容器(存放Service/Dao等公共Bean),DispatcherServlet创建子容器(存放Controller等Web层Bean),子容器通过parent引用访问父容器资源; 功能拆分:将URL路由(HandlerMapping)和方法执行(HandlerAdapter)从DispatcherServle
2026-05-30 21:32:14
199
原创 一文了解后端工程师必须需要知道的 K8S 知识
摘要:后端工程师必备的Kubernetes基础知识 Kubernetes(K8S)是容器编排平台,负责管理容器集群。后端工程师需要掌握以下核心概念: 基本概念: Pod:最小调度单位 Deployment:管理Pod副本和发布 Service:提供稳定访问入口 ConfigMap/Secret:配置管理 可视化工具: Rancher/Kuboard通过界面调用K8S API 与kubectl命令行工具互补 日常操作: 查看Pod状态和日志 修改镜像版本 调整副本数 排查部署问题 部署方式: 使用YAML定义
2026-05-26 22:53:05
518
原创 MiniSpring框架学习-整合 IoC 和 MVC(NPC)
文章摘要: 本文介绍了如何在Web环境中整合IoC容器和MVC框架。主要内容包括: 通过web.xml配置ContextLoaderListener监听器,在Web应用启动时初始化IoC容器 使用DispatcherServlet作为MVC入口,从IoC容器获取Controller而非直接实例化 关键实现点: ContextLoaderListener创建WebApplicationContext并存入ServletContext DispatcherServlet从ServletContext获取IoC容
2026-05-24 20:50:00
481
原创 MiniSpring框架学习-为什么一个请求访问 /helloworld,最后能调用到某个 Controller 方法?原始 MVC实现
本文介绍了MiniSpring框架中请求如何映射到Controller方法的基本原理。通过分析Tomcat和DispatcherServlet的分工,解释了从浏览器请求到方法调用的完整流程:Tomcat接收请求并封装后,根据web.xml找到DispatcherServlet,后者通过XML配置建立URL与Controller方法的映射关系,最终通过反射调用目标方法并返回响应。文章重点剖析了DispatcherServlet的初始化过程,包括读取配置文件、建立映射关系表等核心逻辑,并展示了如何通过XML配置
2026-05-24 17:26:25
480
原创 MiniSpring框架学习-增加事件发布的简化 IoC 容器
本文介绍了如何在MiniSpring框架中实现事件发布机制。通过定义ApplicationEvent、ApplicationListener和ApplicationEventPublisher三个核心接口,构建了一个简化版的事件系统。文章重点讲解了事件模型的实现原理:容器刷新时先初始化发布器,注册监听器,最后发布事件并同步回调监听器。作者建议通过debug方式学习源码,理解设计思路而非死记代码,并强调该实现是同步调用机制,与消息队列不同。文中还提供了基础事件对象、容器刷新事件和简单发布器的具体实现代码,同时
2026-05-21 23:42:48
385
原创 跳槽涨薪的本质
职业发展的核心在于解决有价值的问题并证明自己的能力。文章反思了从秋招到工作中的常见焦虑——刷题、背八股、跳槽等表面问题,指出这些只是筛选工具而非本质。真正的竞争力在于:识别市场需求的高价值问题,培养稀缺的解决能力,并通过项目、博客等方式建立可信证明。当个人能力与市场需求形成不可替代的匹配时,就能获得职业自由和安全感。最终目标不是迎合筛选标准,而是成为能主动创造价值、拥有选择权的问题解决者。
2026-05-20 21:17:52
453
原创 MiniSpring框架学习-完成的 IoC 容器
本文介绍了MiniSpring框架中IoC容器的实现过程,重点讲解了如何通过@Autowired注解实现依赖注入。文章首先解释了注解的本质是元数据标记,需要容器通过反射处理才能实现注入功能。然后详细说明了反射读取注解字段的方法,并对比了XML配置注入和注解注入的区别。最后展示了ApplicationContext的改进,通过AutowireCapableBeanFactory支持自动注入和生命周期扩展。核心要点包括:注解本身不执行逻辑而是提供元信息;容器通过反射扫描字段并处理@Autowired标记;依赖注
2026-05-19 21:04:13
386
原创 MiniSpring框架学习笔记-解决循环依赖的简化IoC容器
本文介绍了MiniSpring框架中简化IoC容器解决循环依赖的核心机制。重点分析了IoC容器如何通过控制反转将对象创建和依赖装配权从业务代码转移到容器,并详细阐述了解决setter循环依赖的关键策略:分两步创建对象(先构造后注入)和提前暴露半成品对象(earlySingletonObjects)。文章还梳理了IoC容器的主要组件角色(BeanDefinition、BeanFactory、ApplicationContext)及其协作流程,通过XML配置→BeanDefinition→BeanFactory
2026-05-19 20:43:23
371
原创 MQTT丢消息|dropped.queue_full|emqx服务器丢消息
摘要:针对服务端发布1w条消息但客户端仅收到1000条的问题,排查发现是因确认报文回复延迟导致消息被丢弃。通过EMQX仪表盘观察到大量queue_full丢弃记录,解决方案是调整客户端配置参数(max_mqueue_len和max_inflight),使未及时处理的消息暂存队列而非直接丢弃,从而缓解消息丢失问题。
2025-11-24 18:36:41
359
原创 Relation Modeling in Spatio-Temporal Action Localization 技术报告翻译
报告链接https://www.youtube.com/watch?v=SEqFdkqdwlERelation Modeling in Spatio-Temporal Action Localization时空动作定位中的关系建模Abstract本文介绍了我们对 CVPR 2021 ActivityNet 研讨会 AVA-Kinetics Crossover Challenge 的解决方案。我们的解决方案利
2022-03-20 15:23:47
3525
2
原创 Actor-Context-Actor Relation Network for Spatio-Temporal Action Localization 论文翻译
论文地址:arxiv.org技术报告视频GitHub地址Actor-Context-Actor Relation Network for Spatio-Temporal Action LocalizationAbstract对人员进行定位并从视频中识别他们的行为是对高级视频理解的一项具有挑战性的任务。最近的进展是通过对实体之间的直接成对关系建模来实现的。在本文中,我们更进一步,不仅模拟了对之间的直接关系,而且还考虑了建立在多个元素上的间接高阶关系。我们建议对 Actor-Context-Actor
2022-03-17 12:08:15
3743
5
原创 【slowfast复现】SlowFast Networks for Video Recognition代码复现
2021年11月13日复现slowfast本文记录了利用大佬教程复现的过程,以及过程中遇到的问题和注意点。教程参考:https://blog.csdn.net/WhiffeYF/article/details/113527759?spm=1001.2014.3001.5501https://www.bilibili.com/video/BV1Pt4y1B7N9极链AI云平台可以用学生身份注册,会送100云币(100元)全程跟着大佬教程复现即可,注意路径问题,基本不会遇见bug。实验室服务器
2021-11-13 11:06:03
3338
2
原创 彩虹turtle
import turtle as tlst = ['red','orange','yellow','green','skyblue','blue','purple']size = 20pos_x = 0r = 100for i in lst: t.penup() t.goto(pos_x, 0) t.pendown() t.pensize(size) t.pencolor(i) t.left(90) t.circle(r, 180)
2021-07-15 19:08:51
149
原创 调色板turtle
import turtle as tt.speed(0)# x, y = t.pos()# a = t.xcor()# b = t.ycor()## p.setx(100)# p.sety(100)## print(x, y)p = t.Pen()def up(): # p = t.Pen() p.sety(p.ycor()+50)def up1(x,y): # p.setx(x) # p.sety(y) p.goto(x,y)c
2021-07-15 11:02:23
213
原创 计算器turtle
def isnum(c): return c not in '+-*/'def splitcal(content): numlist, oplist = [], [] start = -1 for i in range(len(content)): if isnum(content[i]) and start<0: start = i if not isnum(content[i]):
2021-07-12 10:57:36
286
原创 笑脸turtle
import turtle as tt.speed(0)def face(): t.pensize(2) t.pencolor("orange") t.fillcolor("yellow") t.begin_fill() t.circle(100) t.end_fill()def red(): for i in [-1, 1]: t.penup() t.goto(50*i, 100) t.pend
2021-07-08 09:48:05
143
原创 哆啦A梦2turtle
import turtle as tt.speed(0)def face(): t.fillcolor('blue') t.begin_fill() t.circle(100) t.end_fill() t.fillcolor('white') t.begin_fill() t.circle(80) t.end_fill()def eye(): t.fillcolor("white") for i in [-1,1]
2021-07-08 09:21:57
120
原创 哆啦A梦turtle
import turtledef face(): turtle.fillcolor('blue') turtle.begin_fill() turtle.circle(100) turtle.end_fill() turtle.fillcolor('white') turtle.begin_fill() turtle.circle(80) turtle.end_fill()def eye(): turtle.penup()
2021-07-08 08:39:27
178
原创 单词检查机
单词检查机# 设置是否检查的变量check = True# 设置生词本word_list = {"教师":"tutor","前进":"forward","后退":"backward","向左":"left","向右":"right","向右":"right"}# 设置检查本check_list = {}while check: # 将生词本赋值到检查本中 check_list = word_list.copy() # 循环比较检查本的单词,回答正确就删除生词本中的单词
2021-07-05 10:15:37
428
原创 Python程序设计 董付国 课后习题 第三章2、判断是否是闰年
判断是否是闰年闰年条件:1.年份能被400整除。2.年份能被4整除但并不能被100整除x = input('请输入4位整数,本程序将会告诉你是否闰年:')x = int(x)#将输入字符串转化为整形,不是数字程序报错运行终止if x%400 == 0 or (x%4 == 0 and x%100 != 0):#两个条件是或者关系 print('闰年')else: print('不是闰年')...
2021-03-04 19:40:58
738
1
转载 4.3二叉树的层次遍历王道数据结构例程实现
4.3二叉树的层次遍历王道数据结构例程实现#include<stdio.h>#include<stdlib.h>typedef int ElemType;#define MaxSize 50typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;} BiTN...
2019-07-28 10:25:35
637
1
转载 4.3二叉树的非递归中序遍历输出王道数据结构例程实现
王道二叉树的非递归中序遍历输出代码#include <stdio.h>#include <stdlib.h>#define MaxSize 50typedef int ElemType;typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;} BiTNode...
2019-07-26 14:09:45
391
转载 4.3二叉树的遍历王道数据例程实现
4.3二叉树的遍历王道数据例程实现#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct BiTNode{ ElemType data struct BiTNode *lchild,*rchild;} BiTNode,*BiTree;void PreO...
2019-07-25 12:19:22
292
转载 王道数据结构应用题1
#include<stdio.h>#include<stdlib.h>//静态分配#define MaxSize 50typedef int ElemType;typedef struct{ElemType data[MaxSize];int length;}SqList;bool Del_Min(SqList &L,ElemType &v...
2019-07-14 15:12:04
412
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅