自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 告别频繁 GC:C#.NET PooledList 的设计与使用场景

是 高性能集合类型,由提供,用于替代List<T>,通过 对象池 () 复用内部数组来减少GC(垃圾回收)压力。⚡ 核心目标: 在需要频繁创建/销毁List<T>的场景下,通过数组租借与归还的机制避免频繁分配内存,从而提升性能并降低GC负担。

2025-12-16 15:46:43 671

原创 剑指offer-50、数组中重复的数字

但是上⾯的做法,不适合求解多个重复数字的例⼦,因为调换的时候,很容易将后⾯的数字换到前⾯去,就会导致求解出来不是第⼀个重复的数字(可以⽤来求解任意的重复数字),可能是第2,3... 或者其他的重复数字。例如,如果输⼊⻓度为 7 的数组 [2,3,1,0,2,5,3] ,那么对应的输出是第⼀个重复的数字 2。可以直接借助数组,因为所有数字都在 0 到 n-1 的范围内,⽤⼀个⼤⼩为 n 的数组,就可以对所有的数字进⾏统计个数,如果个数超过 1 ,那么肯定是重复的数字,如果没有重复的数字,则返回 -1;

2025-12-16 15:45:02 268

原创 Node.js 编程实战:MySQL PostgreSQL数据库操作详解

Node.js 操作 MySQL 与 PostgreSQL 的基本方式使用连接池提升性能常见的 CRUD 操作与事务处理MySQL 与 PostgreSQL 的差异实际项目中的数据库使用建议MySQL 与 PostgreSQL 仍然是 Node.js 后端开发的重要基石。熟练掌握它们的使用方式,可以让你在面对复杂业务场景时更加从容。

2025-12-16 15:44:30 595

原创 Node.js 编程实战:MongoDB 基础与 Mongoose 入门

Mongoose 是 MongoDB 的 ODM(Object Document Mapper),它为 MongoDB 提供了一层抽象。定义数据结构(Schema)提供模型(Model)进行数据操作内置数据校验与默认值支持中间件(钩子函数)提高代码可维护性在中大型 Node.js 项目中,Mongoose 是事实上的标准方案。Schema 用来描述文档结构和规则。Schema 可以定义字段类型、是否必填、默认值等。MongoDB 的基本概念与使用场景。

2025-12-16 15:43:53 767

原创 亲爱的圣诞老人,这里有一点小小的帮助,献给圣诞节

几个世纪以来,他一直用羊皮纸卷轴、羽毛笔,以及一个极度过度工作的精灵来运行一切。但今年, Santa 彻底现代化了他的 Naughty-and-Nice 运营技术栈。而强大的集群,也带来了对……命令行的强烈需求。

2025-12-16 15:39:50 783

原创 Spring 循环依赖终极答案:为什么一定要三级缓存?(源码+图解)

Spring 如何解决循环依赖?这也是我在面试高级 Java 岗位时最喜欢问的问题之一。大多数人能背出“三级缓存”,也能说出的流程。但如果我追问一句:“如果把第三级缓存去掉,只用两级,能解决循环依赖吗?或者:“第三级缓存里存的到底是个什么东西?为什么要存个工厂而不是直接存对象?很多人就卡壳了。今天我们不背八股文,我们从 Spring 的设计哲学 出发,配合源码与时序图,彻底把这块骨头啃下来。一级缓存:存成品。二级缓存:存半成品。主要为了解决 AOP 场景下,单例对象的一致性问题。

2025-12-16 15:39:17 723

原创 字符串匹配算法

KMP算法的关键在于构建一个部分匹配表(也叫失败函数或者next数组),这个表记录了当匹配失败时,模式串指针应该回退到的位置,让算法跳过已知不可能匹配的位置,提高匹配效率。KMP算法是字符串处理中的经典算法,用来解决字符串匹配问题,理解它对提升算法设计能力还是很有帮助的。Sunday算法是另一种Boyer-Moore的变种,它关注的是文本串中模式串后面的字符。,时间复杂度平均为O(n+m),n是文本串长度,m是模式串长度。,时间复杂度是O(m+n),m是模式串长度,n是文本串长度。

2025-12-16 15:38:31 719

原创 一站式了解数据库三大范式(库表设计基础)

举个例子来解释第二范式,订单表里面就不能出现商品的库存信息,因为商品的库存信息依赖于商品的ID而不依赖于订单ID。那么简单来说就是表里面的每个列都必须完全依赖于主键,不管这个主键是联合主键还是独立主键,不能出现部分依赖的情况,否则就要拆分部分依赖的列到其他表里面去。举个例子来解释第三范式:订单表里面有用户ID,就不应该还冗余一列用户的注册时间。因为用户的注册时间依赖于用户ID(在订单表里面是非主键,在用户表里面是主键),所以用户的注册时间如果存在于订单表,就是有间接依赖,即依赖传递的情况。

2025-12-16 15:37:36 273

原创 移动端H5弹窗“滚动穿透”的终极解决方案:为什么 overflow: hidden 没用?

你打开了一个全屏弹窗(Modal/Popup)。弹窗下面有一层长列表背景。当你在弹窗上滑动手指时,底下的背景页面竟然跟着一起滚动了!这不仅体验极差,还容易导致弹窗错位或用户迷失上下文。虽然这段 JS 代码看起来有点“重”,甚至操作了 DOM,但它目前是解决移动端(尤其是 iOS)滚动穿透问题兼容性最好、副作用最小的方案。下次遇到弹窗滚动穿透,别再纠结了,直接上“Body 固定定位法”吧!

2025-12-15 21:59:21 435

原创 别再“苦力”写后台,Spec Coding “跑” 起来

2025年2月,OpenAI 联合创始人、AI 研究者 Andrej Karpathy 首次提出 Vibe Coding(氛围编程),引发了编程的新变革。例如,你给它一句指令:“做一个有列表和搜索的用户管理页”它会写代码,写得还挺像回事。易出现理解偏差:接口、字段、业务逻辑经常“凭空被 AI 想象出来”;风格不统一:每次生成结构都不一样,“像每个工程师风格都完全不同”;越复杂越不稳:跨模块、校验逻辑、多状态处理、复杂组件等情况容易崩溃;维护困难:代码不是不能用,但半年后团队没人敢动。

2025-12-15 21:58:58 686

原创 一种基于 Service Worker 的渐进式渲染方案的基本原理

这样用户感知到的加载时间接近于零,体验类似于原生 App。前面笔者的文章中,提到关于H5页面的快照是客户端做的。本篇文章讲述一种基于 Service Worker 的渐进式渲染方案的原理,简单来讲就是将客户端的工作挪到了service worker中。通过给站点开启一个后台运行的service worker(service worker可以独立于webview运行在后台),在service worker中劫持包括主文档在内的网络请求,对文档内容进行存储,并修改返回。

2025-12-15 21:57:49 344

原创 如何实现流式输出?一篇文章手把手教你!

流式输出是一种数据传输模式,在这种模式下,数据不是作为一个完整的、单一的包裹在一次响应中发送给客户端,而是被分成许多小的数据块 (chunks),并在服务器端生成的同时,持续不断、逐块地推送到客户端。例如下面的Gemini回答过程——

2025-12-15 21:57:07 728

原创 SpringBoot 企业级接口加密【通用、可配置、解耦的组件】「开闭原则+模板方法+拦截器/中间件模式」

** * 接口级注解:标记该接口需要加密入参、解密出参 */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface ApiEncrypt { // 加密算法(默认AES-GCM) String algorithm() default "AES-GCM";// 密钥标识(关联yml中的密钥配置) String keyId() default "pay_default_key";

2025-12-12 22:50:07 548

原创 从一维到二维:用Spire.XLS轻松将Python列表导出到Excel

通过本文的详细教程,我们深入了解了如何利用Spire.XLS for Python库高效、灵活地将Python List数据写入Excel文件。无论是简单的一维列表,还是复杂的二维数据,亦或是需要添加标题和精细格式化,Spire.XLS for Python都提供了强大且易用的解决方案。这个库不仅解决了Python数据处理中将数据输出到Excel的常见痛点,更通过其高性能和丰富的功能集,为自动化报告生成、数据分析结果可视化等场景提供了坚实的基础。

2025-12-12 22:49:27 868

原创 三种方式打 Java 可执行 JAR 包,你用对了吗?

如果最终的 jar 包被其他的项目所依赖的话, classpath 中可能存在重复的 class 文件,直接地引用此 jar 包中的类可能会导致类加载冲突。为了解决这个问题,我们可以使用 shade 提供的重定位功能,把部分类移动到一个全新的包中。写完代码只是开始,如何打包成一个“开箱即用”的 JAR 文件,才是交付的关键一步。✅ 优点:一个文件搞定,部署简单 ❌ 缺点:依赖类直接合并,,把你的代码 + 所有依赖的 class 全部塞进去。别慌,这很可能不是你的代码问题,而是——它只打包你自己的代码,

2025-12-12 22:48:54 756

原创 苹果App Store应用程序上架方式全面指南

这是最常见的方法,开发者需要先注册成为苹果开发者,然后在Apple Developer网站上创建一个应用程序ID和证书,并向苹果提交应用程序的二进制文件和元数据。通过审核后,苹果将应用程序发布到App Store上。其中,AppUploader 是一个高效的第三方工具,支持在Windows、Linux或Mac系统中上传IPA文件到App Store,无需Mac电脑,还能管理iOS证书和描述文件,简化上架流程。总之,无论采用哪种方式,开发者都需要遵守苹果的规定和审核标准,确保应用程序符合苹果的要求。

2025-12-12 22:48:24 299

原创 我只是给Typescript提个 typo PR,为什么还要签协议?

第一次给大公司的开源项目(Typescript)提 PR,提交完 GitHub 就弹出一条评论,让你签什么 CLA:什么玩意儿?我就改了个拼写错误,还要签协议?

2025-12-12 22:47:51 866

原创 从后端拼模板到 Vue 响应式:前端界面的三次进化

阶段类比第一阶段:后端拼模板厨房(后端)做好所有菜,直接端给你第二阶段:前端渲染厨房只提供食材,你自己炒第三阶段:Vue 响应式智能厨房:只要食材变,菜自动做好让开发者更轻松,让用户体验更好。而你上传的代码正好构成了一个完美的演示链路:从最原始的后端拼模板,到 fetch DOM 渲染,再到 Vue 响应式渲染。理解了这三步,你就理解了整个现代前端技术的发展脉络。

2025-12-11 21:53:07 596

原创 React Native 样式系统详解:与 Web CSS 的“似是而非”

❌ 不要用 Kebab-case (font-size),要用CamelCasefontSize❌ 不要加px单位,直接写数字。❌ 不要指望样式自动继承(Text 组件内的嵌套除外)。⚠️ 默认布局是纵向 (Column)的。⚠️ 所有的边框、阴影、圆角,在 iOS 和 Android 上可能表现不一致,多真机测试。

2025-12-11 21:52:33 654

原创 [特殊字符] “踩坑日记”:shadcn + Vite 在 Monorepo 中配置报错

按照官方文档配置,理应是没有错误的,但是我的项目特殊点就在于是一个项目。

2025-12-11 21:52:03 544

原创 [特殊字符]️ React 避坑指南:“闭包陷阱“

在对着屏幕发呆了 n 分钟,查阅了无数 StackOverflow 之后,我终于明白了真相。需求很简单:用户点击按钮开始倒计时 60 秒,每秒更新页面上的数字,倒计时结束后自动重置。找到了原因,解决就很简单了。这里提供两种方案,但我强烈推荐第一种。"噢,现在 count 是 60,我要把它变成 59。我保存了代码,刷新了浏览器,准备提交代码然后下班跑路。无论组件后来重新渲染了多少次,无论页面上的。这是最优雅的解法,不需要重置定时器。在那个函数"冻结"的记忆里,了啊(页面都变了),为什么。

2025-12-11 21:51:24 220

原创 解决npm publish的404/403和配置警告全记录

流程-登录 npm 官网 -> Avatar -> Access Tokens -> Generate New Token -> 选 Automation / Granular Access Token,确保有 publish 权限且支持 Bypass 2FA。在输出中找到包含 is-current 的位置(通常是在用户级或项目级 .npmrc)。执行该命令发现这个问题,于是带着问题去问了AI,说是需要去配置npm token。接下来报错,is-current,意思说多了这个属于,不允许提交,版本问题。

2025-12-11 21:50:45 240

原创 Node项目部署到阿里云服务器

与包管理器安装相比,NVM不受系统仓库版本限制,确保获取最新Node.js版本;更重要的是,NVM支持多版本管理,方便切换,且安装的Node.js位于用户家目录,无需sudo权限,有效降低了安全风险。Alibaba Cloud Linux 2 和 CentOS 7.x 仅支持 Node.js 17.x 及以下版本,例如需要安装 v17.9.1,则执行nvm install v17.9.1。通过以上步骤,你可以在CentOS 7.9服务器上部署多个Node.js项目,并通过不同的子域名访问它们。

2025-12-10 14:33:01 600

原创 从 nvm 到 fnm:一个前端老兵的版本管理工具迁移实录

默认安装在,可以自定义:绝对值得。时间:约 15-30 分钟学习曲线:几乎为零(命令高度相似)风险:极低(可随时回退)终端启动快 5-10 倍版本切换快 20-30 倍自动切换版本,告别手动nvm use跨平台一致性,团队协作更顺畅更少的 Bug 和怪异行为如果你每天要打开几十次终端、在多个项目间切换,fnm 节省的时间累积起来是非常可观的。更重要的是,那种丝滑无感的体验,会让你的开发心情都变好。

2025-12-10 14:32:15 703

原创 详细说说vue2何vue3的工作原理以及区别?为什么vue3会做此升级?

在理解 Vue 原理之前,必须先理解虚拟 DOM。虚拟 DOM 本质上是一个JavaScript 对象(VNode),它是真实 DOM 的“蓝图”或“替身”。2. 为什么需要它?操作真实 DOM 代价高昂:真实 DOM 节点非常重(包含大量属性和事件)。频繁操作 DOM 会导致浏览器频繁重排(Reflow)和重绘(Repaint),性能极差。JS 计算很快:在 JS 层面通过对比两个对象(新旧 VNode)的差异(Diff),计算出最小的更变操作,然后再去更新真实 DOM,效率最高。

2025-12-10 14:31:44 788

原创 JavaScript 内存机制深度解析:从执行上下文到闭包的内存视角

JavaScript 的内存机制是其高效运行的基石。通过栈与堆的合理分工,引擎在保证执行速度的同时,支持复杂的编程范式如闭包。理解这一机制,不仅能帮助我们写出更高效的代码,还能有效规避内存泄漏等常见问题。作为开发者,虽无需手动管理内存,但“知其所以然”方能游刃有余于现代前端工程的复杂场景之中。

2025-12-10 14:31:09 536

原创 原型-1: 理解 JavaScript 中的 原型

原型的核心是「对象之间的关联关系」——每个对象都通过__proto__关联到一个原型对象,从而共享原型上的资源。这种关联形成的「原型链」,决定了 JS 中属性查找、继承的逻辑。理解原型,就能理解 JS 面向对象的底层逻辑(比如new关键字的作用、继承的实现方式),也是后续学习classextends等语法的基础。

2025-12-10 14:29:53 846

原创 原型-2:prototype 和 __proto__ 的区别详解

特性prototype__proto__所有者​函数对象作用​构造函数创建对象的原型对象的原型链引用访问​构造函数.prototype对象.proto标准​正式标准非标准(但被广泛实现)推荐访问​推荐设置​prototype是函数的属性,用于定义通过该函数作为构造函数创建的对象所共享的属性和方法__proto__是对象的属性,指向创建该对象的构造函数的prototype原型链是通过__proto__链接的,而不是prototype使用标准方法和。

2025-12-10 14:28:58 263

原创 unplugin-vue-router文件路由实操

文件路由使用路由query 传参跳转页面需要为 router-view 添加唯一 key 不然就会出现。会根据你的文件结构自动生成路由配置。虽然路由是自动生成的,但你仍然可以通过。在页面组件中通过路由元信息配置layout的值来让页面使用哪种布局,一般在。然后可以通过createGetRoutes查看生成的路由。运行项目打印routes就会看到生成好的路由。在layouts文件夹创建不同的的布局文件。当然,如果是使用动态路由就不会有这个问题。来对组件做一些特殊处理。

2025-12-10 14:28:02 123

原创 UniApp Workspaces 编译报错(`Invalid pattern ...`)解决办法

UniApp 编译工具没有正确处理 Workspaces 引入依赖时带有的相对路径。可以直接修改utils内的对应函数,将相对路径替换成空。找到 normalizeNodeModules。等命令,该文件会被覆盖,需要重新修改。

2025-12-10 14:26:33 111

原创 为何前端圈现在不关注源码了?

但我觉得看 Vue react 这些源码对于开发提升并不会很直接,它也许会潜移默化的提升你的“内功”,但无法直接体现在工作上,除非你的工作就是开发 Vue react 类的框架。不光是这些新东西,就是传统的 Vue React 等框架源码现在也没啥热度了,我关注每日的热门博客,几乎很少有关于源码的文章了。而且,当年面试时,尤其是大公司,为了筛选出优秀的候选人(因为培训涌入的人实在太多),除了看学历以外,最喜欢考的就是算法和源码。业务没有增长了,之前是红利期,现在是内卷期,之前大量招聘,现在大量裁员。

2025-12-10 14:24:41 892

原创 「zotepad」用Gemini3pro写出一个高效写作和发文的记事本应用

这样在工作期间,理论上电脑端的内容是最新的,所以可以在移动端使用一个叫「拉取电脑端数据」的流,把客户端的数据直接用http请求获取过去,存在手机上。对于两台电脑,三个手机等类似问题,无非就是流内接口处理时增加不同机器的标识问题,似乎难度不大,也不需要处理冲突问题。此时用手机码字手机发文章,等第二天上班之后,打开电脑端,就可以再用另一个流「向电脑端传送数据」向电脑端发数据。发送草稿箱,读了读公众号的开发文档,发现只要这三个接口就可以。,基本就是自己怎么用,产品就往什么方向走。

2025-12-10 14:23:58 565

原创 从组件点击事件到业务统一入口:一次前端操作链的完整解耦实践

每个项目可能支持多种操作动作包括处理模型中暂停 / 恢复 / 重跑 / 删除”的地方相关的接口,每个动作按钮既要展示图标,也要执行对应的业务接口。各个组件内部都写业务导致维护成本高。const { projectId } = params 为解构写法,如果 params 中存在一个叫 projectId 的值,拿出来变成一个新的同名变量,然后再使用。{ projectId: project.projectId }是对象字面量中的[键:值]写法,传过去的数据是{projectId:123456}

2025-12-09 16:10:21 549

原创 Next.js 16 自定义 SVG Icon 组件实现方案 [特殊字符]

在现代Web应用中,SVG图标已成为提升用户界面质量的重要组成部分。本文将详细介绍如何在Next.js 16项目中实现一个高性能、可复用的自定义SVG Icon组件,支持动态加载和类型安全。在type.d.ts中定义Icon组件的类型,确保类型安全:动态加载:使用动态导入(import())实现图标按需加载,减少初始加载体积缓存机制:实现了图标缓存,避免重复加载相同的图标,提升性能类型安全:使用TypeScript定义图标名称类型,确保使用时的类型安全自动化工具。

2025-12-09 16:08:50 668

原创 字节磨皮算法详解

字节磨皮算法是字节跳动开发的一种高效图像美化技术,广泛应用于抖音、FaceU等产品的实时美颜功能中。该算法通过双重滤波技术(平滑降噪+锐化增强)在保留皮肤细节的同时实现自然的磨皮效果,特别适合移动端设备的实时处理需求。双重效果:平滑与锐化的完美平衡自适应处理:根据图像内容智能调整参数精准控制:通过蒙版实现区域化处理高效实现:单次渲染完成多重效果跨平台兼容:从移动端到Web端均可部署。

2025-12-09 16:05:11 334

原创 React Compiler Plugin

React 编译器会在构建时自动优化你的 React 应用【困扰:React 的性能也已经足够快,但有时你需要手动对组件和值进行记忆化(memoization)以保持应用的响应速度。这种手动记忆化既繁琐又容易出错,并且会增加需要维护的额外代码】使用之前手动记忆化存在一个会破坏记忆化效果的细微 bug:尽管被包裹,但每次组件渲染时,箭头函数都会创建一个新的函数。这意味着Item总会接收到一个新的onClickprop,从而破坏了记忆化效果使用之后。

2025-12-09 16:04:40 615

原创 js 单例模式 6 种实现方式

JavaScript 实现单例模式的方式很多,这里介绍常用的6种,主要分4大类:对象字面量、闭包实现、 ES6 class 实现、ES6 模块模式实现。选择哪种实现方式取决于具体需求,简单场景可以使用对象字面量,复杂场景建议使用 ES6 Class 或 ES6 模块模式实现。

2025-12-09 16:04:06 260

原创 React 19 生命周期:从入门到实战的完整指南

简单来说,生命周期就是组件从"出生"到"死亡"的整个过程。就像我们人一样,有出生、成长、衰老、死亡,React 组件也是:创建 → 挂载到页面 → 更新数据 → 再更新 → 最终卸载组件刚挂载时去请求数据数据更新后重新计算一些值组件要卸载时清理定时器、取消订阅等// 封装数据请求逻辑 function useFetch(url) { const [data, setData] = useState(null);}, [url]);

2025-12-09 16:03:41 729

原创 使用 Supabase 实现轻量埋点监控

基于 Supabase 构建一个轻量级、隐私友好的埋点分析系统,适合个人项目或小型团队快速搭建用户行为追踪方案。

2025-12-09 16:01:44 759

原创 JavaScript 为什么选择原型链?从第一性原理聊聊这个设计

约束原型继承的优势10 天开发时间实现简单,解释器轻量目标用户是业余开发者概念少,只有"对象"动态语言特性天然支持运行时修改浏览器性能有限内存效率高,方法共享从第一性原理看,对象系统的本质是"代码复用 + 对象创建"。代码复用:对象委托给原型,原型上的方法共享对象创建:复制现有对象,改改就行类继承更严谨、更适合大型静态系统。原型继承更灵活、更适合动态脚本语言。JavaScript 选对了。

2025-12-09 16:00:26 706

空空如也

空空如也

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

TA关注的人

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