自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 KlineChartQuant Tooltip 高频交互 200FPS 性能优化完整复盘

高性能金融图表交互优化实录 本文记录了金融图表库从200fps目标频现黄/红帧,到最终实现单帧2.12ms(CPU)+0.6ms(GPU)渲染速度的完整优化过程。通过五个关键阶段的深度优化: 数据层优化:消除5000条K线数据的无意义浅拷贝,减少GC压力 DOM测量改造:用ResizeObserver替代强制重排,节省1ms/帧 Vue框架瓶颈:v-memo等优化后跨Bar交互仍存在2.44ms固定开销 绕开框架方案:发现innerHTML触发HTML Parser产生1.31ms新瓶颈 终极方案:采用程序

2026-07-13 05:14:18 413

原创 K 线图高性能窗口化渲染

本文介绍了一个基于Canvas的K线图绘制项目,采用窗口化渲染技术优化性能。项目通过创建scroll-content div撑开容器,仅重绘可视区域内的K线数据。使用requestAnimationFrame实现节流渲染,避免滚动时过度重绘。关键技术点包括:计算渲染范围、坐标系对齐、高清适配处理等。项目已开源,支持Gitee、Github和NPM安装,持续更新中。核心思路是通过坐标系变换和视口计算,实现高效局部渲染,同时解决Canvas在高DPR屏幕下的模糊问题。

2026-01-03 00:35:55 1193

原创 芋道字段级权限扩展

本文介绍了在ERP系统销售模块中实现字段级权限控制的方案。针对原有系统不支持字段权限的问题,采用Spring MVC拦截器结合反射机制,通过@FieldPermission注解和@JsonInclude实现无权限字段的自动过滤。系统采用三级缓存架构(Caffeine+Redis+MySQL),其中Caffeine维护两种缓存结构:单字段权限和VO禁止字段集合,并配置合理的过期策略。Redis层使用字符串前缀管理键空间,支持批量刷新。该方案在保证性能的同时,实现了低侵入性的字段权限控制,适用于B端传统软件场景

2025-10-18 22:55:40 1019

原创 WebGL 检测踩坑记录(SwiftShader)

用的 TensorFlow.js。学校机房有集显,TF.js 默认走 WebGL 后端,跑起来没什么问题。但有一天我在远程桌面和虚拟机上测,应用直接白屏了——console 里报抛了异常。MDN 的官方 WebGL 检测却声称环境支持 WebGL。

2026-07-07 17:21:43 224

原创 Signal 带来的架构问题思考

本文从一个 K 线图增量加载提示的 Bug 入手,深入分析了信号时序问题导致的架构缺陷。初始修复通过调整信号顺序暂时解决问题,但暴露出更深的架构问题:逻辑事件被拆分为两个独立信号,依赖隐式的执行顺序和共享变量来协调。文章提出将变更描述编码进信号载荷的解决方案,通过定义包含数据和变更元数据的 DataChange 结构体,实现了原子化的信息传递。重构后消除了对共享变量的依赖,使系统行为更加确定和可靠。最后总结了"不要将单一事件拆分为多个信号"和"避免共享可变状态"两个重要的架构设计原则。整个案例展示了如何从具

2026-07-01 22:23:17 628

原创 记一次 Vite/Rollup 生产构建异常:sideEffects 路径不匹配导致 Tree-Shaking 误删

文章摘要:项目开发中遇到@DataFetcher装饰器在开发环境正常但生产构建后失效的问题,表现为数据源未注册。经排查发现,由于Vite alias直接引用源码导致Rollup的sideEffects配置路径不匹配(仅配置了dist路径),误删除了带有副作用的import语句。解决方案是在package.json的sideEffects中同时补充src和dist路径。经验教训指出,通过alias引用源码时需注意sideEffects路径覆盖范围,开发与生产环境的模块解析策略差异可能引发此类问题。文章最后推荐

2026-07-01 15:05:30 363

原创 spring单例bean线程安全问题讨论

本文探讨了不可变对象的实现与线程安全问题。通过final修饰基本类型和对象引用的区别,指出实现真正不可变对象需要类final修饰、私有final成员变量、构造时防御性拷贝等条件。对比了List.of()和unmodifiableList()的不可变特性差异。在Spring线程安全方面,分析了无状态Bean和有状态Bean的区别,提出使用无状态设计、线程安全类、ThreadLocal等解决方案。强调线程安全的核心在于对象状态的共享与可变性控制。

2026-03-29 20:05:53 214

原创 手写LRU缓存算法及一些进阶思考

本文介绍了LRU缓存的基本概念和TypeScript实现。LRU(最近最久未使用)是一种缓存淘汰策略,通过双向链表和哈希表实现O(1)时间复杂度的操作。文章详细讲解了节点结构设计、核心API(get/put)的实现逻辑,以及关键操作如删除节点和添加到头部的具体代码。同时对比了LRU与LFU、FIFO等策略的差异,并提供了完整的TypeScript实现代码。最后还提及了线程安全等进阶思考方向。

2026-01-28 02:40:27 699

原创 TypeScript { [key: string]: unknown } 索引签名写法和 Record 替代

本文解析了TypeScript中{ [key: string]: unknown }类型的使用方法。该类型表示键为字符串、值为任意类型的对象,其中unknown强制类型检查,比any更安全。文章介绍了其语法结构、与Record<string, unknown>的等价性,并列举了字典结构、处理JSON数据、泛型约束等应用场景。同时指出关键限制:当对象包含固定属性时,索引签名的值类型必须兼容这些属性类型,建议使用联合类型或交叉类型解决类型冲突问题。通过强制类型检查,这种写法能有效提升代码的安全性。

2026-01-16 17:48:41 637

原创 K 线图桌面端拖动适配

本文介绍了如何实现K线图的跨平台拖动交互方案。通过CSS隐藏滚动条但保留滚动能力,使用JS监听鼠标事件实现拖动逻辑:记录初始位置,计算位移差值动态更新scrollLeft。同时优化用户体验,通过cursor样式(grab/grabbing)提供视觉反馈,表明可拖动状态。该方案解耦了拖动与重绘逻辑,确保桌面端和移动端操作一致性,且不影响原有的scroll事件触发机制。

2026-01-04 08:00:00 903

原创 BEM规范

BEM命名规范是一种CSS类名组织方法,通过块(Block)、元素(Element)、修饰符(Modifier)的层级结构实现组件化样式管理。基本格式为.block__element--modifier,支持动态状态(如.is-open)。示例展示了TypeScript实现的BEM工具函数,可自动生成符合规范的类名,包含块、元素、修饰符的各种组合方式,以及状态判断功能。该规范有助于保持CSS结构清晰,避免样式冲突,特别适合大型项目中的组件开发。

2026-01-03 23:58:58 247

原创 优雅处理业务异常:自定义异常与全局映射

本文介绍了后端接口开发中错误处理的最佳实践。通过自定义业务异常(BusinessException)和全局异常映射器(ExceptionMapper)的结合使用,实现了业务逻辑与错误处理的解耦。该方法避免了直接构建Response对象导致的代码重复和耦合问题,统一了错误返回格式。自定义异常携带错误码和消息,映射器将其转换为HTTP 400状态码和标准JSON响应。重构后的代码更加简洁,关注点分离,使业务层只需抛出异常而无需处理响应格式。这种模式适用于JAX-RS架构,能有效提升API开发的规范性和可维护性。

2025-12-02 19:32:11 345

原创 Maven 命令构建成功但 IDEA 构建失败原因解析

摘要 在Java开发中,常出现Maven命令构建成功但IDEA内建失败的问题,核心原因是IDE与Maven对项目结构的认知偏差。Maven严格依赖pom.xml,而IDEA使用内部元数据缓存。当配置不同步时,如残留模块、非Maven模块混入或依赖更新滞后,就会导致构建失败。解决方案是重新通过根pom.xml导入项目,强制IDEA按Maven标准重建索引,统一构建上下文。这一操作清除脏数据、重建依赖树,确保IDEA与Maven配置完全一致,从而消除构建错误。

2025-11-21 17:53:30 1480

原创 el-table组件右侧出现空隙

AI生成的代码常因固定列宽设置不当导致布局空隙,表现为各列宽度总和小于容器宽度。解决方法是先取消固定列宽设置,再重新调整布局参数。该问题源于AI对列宽的机械式分配,通过灵活调整宽度参数即可有效修复布局缺陷。

2025-11-15 16:28:06 245

原创 Java 函数式接口

本文解析了Java中Optional、函数式接口及PECS原则的运用。首先通过Optional.empty()示例展示了ifPresent方法如何通过Consumer接口执行操作(如System.out::println)。接着解释了函数式接口(Consumer/Function)与Lambda/方法引用的关系,说明方法引用会被编译为Lambda对象。最后详细阐述了PECS原则(Producer Extends, Consumer Super)的类型安全机制,指出生产者(读取)用extends保证只读安全,

2025-10-27 11:48:03 433

原创 JDK23 ArrayList扩容策略

Java数组扩容机制采用1.5倍增量策略:新容量=原容量+max(最小增量,原容量/2)。若结果在安全范围(0,软上限值]内则直接采用。当超出软上限时:若最小需求容量不溢出且不超过软上限则扩容至软上限;否则尝试扩容至需求容量,但可能因JVM限制失败。这种设计平衡了扩容效率与内存安全,既避免频繁小增量扩容,又保留JVM管理超大数组的灵活性。

2025-07-26 16:06:32 205

原创 如何理解lambda排序

摘要:排序规则的核心是比较结果与位置关系。当a-b<0时保持原序(递增),a-b>0时交换位置。关键在于关注元素相对位置而非值的大小,调换是为维持左<右的关系。对于递减排序,只需改为b-a的比较。统一记忆法:比较结果<0时保持位置不变,最终满足左<右(递增)或右<左(递减)的排序目标。这种思考方式避免了复杂的大小关系判断,简化了排序逻辑的理解。

2025-07-05 22:02:18 372

原创 Vuetify v-data-table footer文本适配中文

后面那个文档中没提,但是可以写成 :pageText="'{0} - {1} 共 {2} 页'"的形式。每页显示条数API中提供了items-per-page-text的props,直接修改即可,

2025-03-15 14:54:17 354

原创 NodeJS安装后npm命令失效

这个问题再最近出现的就别去翻老文章了,大概率是因为自动添加的环境变量出错,应该在安装目录下的node.js/node_global/npm这个路径下,把这个加到环境变量,删除之前添加的即可。

2025-03-15 00:26:32 931

原创 服务器开了SSL后通过https访问后端API报net::ERR_SSL_PROTOCOL_ERROR

因为服务器上nginx监听的是443端口,所以用https访问端口不需要再指定后端端口号,所以删掉端口号,然后用https://www.xxx.xyz/api/v1/…的形式访问就可以了。

2025-03-08 00:00:05 747

原创 阿里云学生300元开的实例外网不通的解决方法

原因很简单,你买的是按量计费的实例,刚开的公网带宽上限是0mbps,没分配公网IP(所以这时候也看不到服务器公网IP),按需设置一个公网带宽即可。

2025-01-19 19:28:07 276

原创 HarmonyOS ArkUI Line组件直接绘制直线看不到

属性才能画出直线,但是由于预览器中通过。遇到这个问题的时候必须指定。

2025-01-17 01:58:54 299

原创 HarmonyOS 状态管理V2 @Event

调用回调函数后父组件的值会立刻更改,但是只有在父组件决定实际处理后才会在渲染前传回子组件。类似于vue的子传父,在鸿蒙中可以使用。这样子组件就可以调用父组件上重写的。函数去修改父组件的相应数据。实现父子组件数据传递。

2025-01-11 21:16:04 400

原创 宝塔面板非默认目录创建站点后403

其实这个问题一般是网站资源目录的权限问题,虽然你在子文件夹改了775权限,但是项目根目录没有改775,导致nginx访问不到子文件夹,进而403。其实看到403应该开心,不是502对吧哈哈哈。

2024-12-02 20:13:36 1186

原创 vite.config.mts中读取.env的环境变量为undefined的解决方法

搞了将近一下午其实挺无语的,最后发现。然后注意构建设置这里不能用。

2024-11-16 17:30:09 927

原创 栈和队列复习

现在已经有了后缀表达式,即可对其进行求值:遍历后缀表达式,得到一个操作数,则将操作数进栈,得到一个 op,出栈两个操作数进行计算,并且将计算结果重新入栈。最终栈顶元素就是最终的计算结果。两端都可以进行入队和出队。实现前端出队和后端入队其实就是对这两块地方的指针设计对应行为(实现-1 的指针操作)其实就是 DFS 递归问题,默认就是调用栈,否则是非递归实现,暂时不做讨论。中,遍历中缀表达式,遇到数字直接加入后缀表达式中,遇到。环形队列在顺序存储的基础上,规定。BFS 就是队列使用。

2024-10-31 23:51:22 586

原创 P8623

很显然本题应当分奇偶进行讨论来求出行列,这个过程应当使用取模和除法运算。因为第一行做相应的处理后计算结果会出现 0,所以行列号从 0 开始。

2024-10-21 20:39:52 918

原创 java子类构造的super

子类构造参数第一行一定是调用父类的构造函数,如果不写,默认调用的是父类的无参构造方法,即。,如果父类不存在无参构造方法,则会触发编译错误。

2024-10-16 23:29:34 291

原创 深入探究数据结构例子中常用的*&传参方式

结构体的指针,以引用形式传递,因此可以在函数内直接修改。的形式,就是容易误解所有了解较浅的人,难道不是写成。以上面代码例子为例,这里的。的形式更能突出性质吗?,某些书上老是爱写成。

2024-10-08 23:16:52 305

原创 彻底解决GB2312 GET结果乱码的问题

对于大部分网页来说这么做结果好像确实没有问题,但批量爬取总归会有问题,比如说肌这个字在转换过程中就会乱码,导致。此类网站共性都是响应头没有指定编码类型,导致。最近在爬一个GB2312编码的网站,直接用。库需要猜测编码,还猜错了,详见。至此,问题彻底解决。

2024-10-04 14:54:50 649

原创 vuetify移除v-text-field的下划线(variant属性)

【代码】vuetify移除v-text-field的下划线。

2024-09-26 20:42:02 338

原创 vscode npm脚本:正在执行任务: npm run start 参数格式不正确 - /d解决方案

【代码】vscode npm脚本:正在执行任务: npm run start 参数格式不正确 - /d解决方案。

2024-09-22 22:51:13 511 1

原创 NC275631 嘤嘤不想求异或

将上个周期附加在下个周期的开头,由于前两位都是。都是偶数,在排列组合中,两位的全排列需要。次完成,在这个周期内后面两位的异或结果为。当然,求异或和本质上是求每一位的二进制值。接下来推导为什么异或和的循环周期为。已经知道异或和的值反映的是当前位上。的奇偶数,进而求出该位的异或和值。的情况下,每 4 次前。,所以对异或结果没有影响。,根据已知规律可求的。

2024-07-08 15:02:34 179

原创 Codeforce 1982B Collatz Conjecture

问题有关,所以也能和循环扯上关系,不妨从这个角度考虑。),这个数会在不断地迭代过程中变为 1,然后在 1 到。出题人友好的用第三组样例提示了数组的循环性(既然题目背景有暗示,多测几组数据也能看出来(假定每次整除平均需要。

2024-06-26 09:02:35 726 1

原创 并查集 L2-048

并查集是一种用于处理不交集问题的数据结构,以及一些图的连通操作find操作→O1union操作Onlogn。

2024-04-12 19:11:43 378

原创 JOU1015

调这道题慢慢调了有一周吧(写成了屎山),其实这题不难,但是初次接触数据结构并不会注意到一些的特殊情况,导致被卡,也是到最后问朱哥要了两个测试点才恍然大悟 hhh。

2024-03-30 23:58:44 574 1

原创 Tree Traversals Again 递归过程详解

中序遍历顺序中,根节点都在中间,上述情况唯一可能就是中序元素为 1 的情况,也就是说,当搜到叶子节点的时候,那俩 dfs 的递归调用是被打断的,叶子结点则记入数组。众所周知,先序是先访问根节点的,因此在题目给出的建树顺序下(先根-后左-再右),所有 push 操作创建根节点的顺序就是先序遍历的顺序。明确一点,叶子节点可以看做没有后继节点的根节点,所以这最后三行的处理顺序也就代表了对树节点的访问顺序。的情况,显然是有的,那就是根节点取在中序边界左边界时候的情况。至于回溯的条件,当序列中只剩下一个元素,比如。

2024-03-20 17:59:05 1073 1

原创 Code::Blocks开启pretty_printer(整齐打印)优化调试数据显示

这是 GDB 中一个用 python API 实现的更加清晰的显示数据结构的一个扩展,如果不启用的话,调试器里的东西可能长这样启用后,它长这样。

2024-03-01 20:45:10 1040 1

原创 VSCode C/C++ GDB调试跳过标准库执行步骤及启用pretty-printing整齐打印

最近写题的时候调试经常被迫因为展示头文件执行步骤而不得不打一堆断点,改lanuch.json后又发现string类型在调试器中展示了其成员变量,想想这两个问题也是蛮常见的,网上能搜到的大都是零零散散的,很难搜到,这里一并给出配置。在lanuch加上这两段内容即可。

2023-10-21 23:09:16 1459 2

空空如也

空空如也

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

TA关注的人

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