- 博客(161)
- 收藏
- 关注
原创 设计模式-1(简单工厂与抽象工厂)
如果后续需求变复杂(比如外卖平台要区分“普通订单”和“会员订单”,且会员订单有额外折扣),你觉得现在的简单工厂模式还够用吗?如果不够,应该怎么优化?设计一个支持“暗黑主题”和“亮色主题”的组件工厂,每个主题需包含“按钮(Button)”和“输入框(Input)”两种组件,且组件样式与交互匹配主题。但问题来了:每次创建员工,都要手动判断“他是程序员还是产品”,再选对应的构造器——500个员工要判断500次?抽象工厂的本质是“用抽象类约定产品族的生产规则,具体工厂实现规则”,解决简单工厂的耦合问题。
2025-12-16 07:00:00
11505
1
原创 《第一章》TS vs JS:类型战争,谁主沉浮?
TypeScript与JavaScript的类型战争:从安全与效率看技术演进 本文深入探讨TypeScript(TS)与JavaScript(JS)的核心差异,揭示TS如何通过类型系统解决JS在大项目中的痛点。文章首先对比二者优劣:JS的灵活性在小项目中高效,但大项目中易引发类型错误;TS的类型检查则能提前发现问题,提升代码可靠性。随后详细解析TS学习路径,包括基础类型、函数与类、内置类型等核心概念,特别强调元组、枚举等TS特有特性如何增强类型安全。最后介绍SOLID原则在支付系统的实践案例,展示类型系统如
2025-11-05 08:00:00
6990
6
原创 【鸿蒙进阶-1】如何实现网络请求
本文介绍了HarmonyOS中网络请求的两种实现方式:HTTP模块和Axios库。HTTP模块是系统原生提供的网络请求工具,支持GET/POST/PUT/DELETE等请求方法,需要配置网络权限才能使用。文章详细演示了GET/POST请求的代码示例,包括请求参数设置、响应处理和错误捕获。Axios作为第三方HTTP客户端,提供了更简洁的API,支持请求/响应拦截和自动JSON转换。文中展示了Axios的安装方法、基本使用方式,以及如何处理带参数的GET请求和POST请求。两种方式均通过实际API示例演示了完
2025-04-08 14:46:16
7976
2
原创 学习javascript基础这一篇就够了(2025最新版)
JavaScript之父 Brendan Eich(布兰登·艾奇)在JavaScript诞生的前几年,有人说:JavaScript是一门四不像的语言;JavaScript是一门没有规范的语言;JavaScript是一门兼容糟糕的语言;JavaScript是一门不精准的语言;JavaScript是一个半成品语言;JavaScript是一门糟糕的语言;JavaScript只是一个玩具胶水语言;
2024-11-30 09:09:21
7500
4
原创 你不知道的JavaScript-1
本专栏将涉及作用域,高阶函数,闭包,面向对象,基础,原型链,原型,ES新特性,事件循环,宏任务,微任务,内存管理,Promise,异步函数,防抖,节流......一系列js高级语法欢迎大家订阅。
2024-11-19 10:59:41
9452
11
原创 鸿蒙HarmonyOS(ArkTS基础篇大合集!)
(ArkTS的基本语法已经更新完毕,接下来将更新ArkTS进阶语法,敬请期待.....)
2024-11-09 11:23:23
7284
3
原创 鸿蒙HarmonyOS(ArkUI基础篇大合集!)
(ArKUI的基本语法的综合更新,组件的进阶用法需要进一步了解ArkTS语言接下来将更新ArKTS的内容)
2024-11-08 10:50:33
7372
2
原创 设计模式-6(观察者模式与迭代器模式)
本文系统讲解了观察者模式和迭代器模式的设计原理与实现方法。观察者模式通过定义一对多的依赖关系,实现状态变更时的自动通知机制,在电商订单系统、Vue响应式等场景有广泛应用。迭代器模式则提供统一的集合遍历接口,支持数组、类数组及自定义数据结构的顺序访问。文章通过生活案例和代码示例(包含TS类型安全实现)详细展示了两种模式的核心价值:观察者模式实现发布者与订阅者的解耦,迭代器模式统一不同集合的遍历方式。两种模式都体现了"封装变化"的设计思想,是前端开发中高频使用的设计模式。
2026-03-21 10:00:00
5290
原创 设计模式-5(策略模式与状态模式)
摘要:本文系统讲解策略模式和状态模式的设计思想与应用场景。策略模式通过封装可替换算法(如商品询价规则、登录验证逻辑)实现解耦,利用对象映射消除if-else,符合开放封闭原则。状态模式处理对象状态切换(如咖啡机工作流程、自动门控制),将状态相关行为封装为映射对象,通过委托执行状态逻辑。两种模式都通过TS类型系统(接口、枚举)增强代码健壮性,策略模式侧重算法选择独立性,状态模式强调状态与行为的绑定关系。典型案例展示如何用设计模式重构复杂条件判断,提升代码可维护性和扩展性。
2026-03-21 08:00:00
6138
原创 设计模式-4(适配器模式与代理模式)
共性:所有代理类型均通过「中间层(代理器)」实现间接访问,核心是「分离访问与实现」差异:代理器的目标不同(性能优化、职责解耦、效率提升、权限控制)适用场景:当需要增强控制、拆分复杂逻辑、优化性能时,优先考虑代理模式。
2026-03-20 08:00:00
6041
原创 设计模式-3(装饰器模式)
装饰器模式详解:从理论到实践 本文系统介绍了装饰器模式的核心概念与应用实践。上篇重点阐述装饰器模式的定义(在不修改原对象前提下通过包装拓展功能)和设计原则(开放-封闭、单一职责),通过按钮功能迭代案例展示解决方案,并完成日志打印装饰器的TS实现,突出类型安全的优势。下篇深入ES7装饰器语法,解析类装饰器与方法装饰器的底层原理,结合React高阶组件、Redux等实际场景说明生产应用,最后通过函数性能监控案例演示TS泛型装饰器的实现,展现编译时类型检查的强大功能。全文通过渐进式案例,完整呈现装饰器模式从基础到
2026-03-19 11:03:04
6679
原创 设计模式-2(单例模式与原型模式)
本文系统讲解两种前端设计模式:单例模式和原型模式。单例模式通过静态属性或闭包确保类仅有一个实例,在Vuex中表现为"假单例",并通过全局弹窗管理器案例展示实践应用。原型模式作为JS核心范式,通过构造函数、原型对象和实例构成原型链,重点解析了深拷贝实现方式(JSON方法和递归遍历)及学生对象案例。两种模式分别解决了全局唯一性和对象共享/克隆问题,是前端开发的重要设计思想。
2026-03-19 10:58:18
4369
原创 工程化利器:ESLint统一代码风格
上一章节,我们介绍了工程化 Node.js 项目需要的配置文件 package.json。这一章节,我们开始介绍工程化所需的工具之一:ESLint。JavaScript 语言的代码书写形式比较宽松,只要符合基本的语法,都可以正确运行。对于空白符、括号、缩进、以及分号的形式,JavaScript 并没有强制的要求。许多前端程序员,都有自己的书写习惯。但是,在多人维护的项目,统一代码书写风格则很有必要,因为一致的书写风格,便于维护,可以提升模块质量。
2025-12-19 07:00:00
6050
原创 Node.js跨平台开发终极指南
本文介绍了如何在Node.js项目中实现跨平台兼容性,重点讲解了使用Babel工具将ES-Modules规范代码编译为CommonJS规范的方法。主要内容包括:1)Node.js原生ES-Modules规范存在的问题;2)Babel的安装与配置(包括@babel/core、@babel/cli和@babel/preset-env);3)通过.babelrc文件配置编译目标环境;4)示例演示如何将ES-Modules模块编译为CommonJS模块;5)根据目标环境调整Babel编译版本;6)在浏览器环境中直接
2025-12-19 07:00:00
1644
原创 Node.js工程化实战:打造高效前端开发
本文介绍了前端工程化的概念及其重要性,重点讲解了如何通过Node.js实现工程化。前端工程化关注性能、稳定性、可维护性等,涉及模块化、兼容性、规范化、自动化测试等方面。文章以"涂鸦板"项目为例,展示了工程化项目结构,并详细说明了package.json文件的配置要点,包括项目信息、入口文件设置和npm脚本设计。通过初始化npm环境和合理配置package.json,为后续实现完整的工程化流程奠定了基础。工程化是一种思想而非技术,旨在提高复杂项目的开发效率和质量。
2025-12-18 08:00:00
1049
原创 Node.js多进程HTTP服务实战
本文介绍了如何在Node.js中使用Cluster模块实现多进程HTTP服务器。Node.js的单线程模型虽高效但存在无法利用多核CPU和单点故障的问题。Cluster模块通过主进程管理多个子进程,可提高服务器吞吐量和稳定性。文章详细讲解了: 如何通过cluster.fork()创建子进程 主进程如何监听子进程退出并重启 进程间通信机制:使用process.send()和worker.on('message') 开发模式下的热更新实现:通过fs.watch监听文件变化并重启子进程 多进程模型的优势包括:充分
2025-12-18 07:00:00
1240
原创 Session机制:Cookie与用户身份识别的奥秘
本文介绍了基于Cookie的Session机制实现用户身份验证的过程。首先通过随机生成唯一ID作为Cookie,服务器能够识别不同用户请求。然后详细讲解了用户登录功能的实现,包括数据库设计、密码加密处理和Session表创建。重点阐述了Session的创建和获取方法,以及如何通过拦截切面实现登录状态检查。最后展示了如何在TodoList应用中运用Session机制,实现用户数据隔离和登录验证。整个流程实现了从用户登录、Session创建到业务处理的完整闭环,为Web应用提供了安全可靠的身份验证方案。
2025-12-17 09:00:00
681
原创 HTTP协议无状态?Cookie帮你解决!
Cookie 是用来保存访问网页的用户状态,可以通过 HTTP 响应头的Set-Cookie字段来设置。Max-Age:表示 Cookie 有效时长;Path:表示 Cookie 只在指定的 URL 请求中有效;Domain:表示 Cookie 在设置的 Domain 和它的子域名下都有效;Secure:表示 Cookie 只有使用 HTTPS/SSL 请求时有效;SameSite:可以用来限制第三方发来的 Cookie。
2025-12-17 07:00:00
1280
原创 LangChain工具使用:简化AI函数调用
本文介绍了如何在LangChain中使用OpenAI的tools功能,通过Zod简化参数定义流程。主要内容包括:1)使用Zod定义工具函数的JSON Schema,包括基础类型、对象、数组等;2)在LangChain中绑定工具到模型,实现单工具和多工具调用;3)控制模型调用工具的行为;4)应用实例:通过tools实现数据打标签和信息提取任务,展示了LLM在自然语言处理任务中的强大能力。文章通过具体代码示例,演示了如何利用这些功能简化开发流程,提高处理效率。
2025-12-16 14:22:01
1055
原创 AI函数调用实战:解锁LLM外部能力
本文介绍了OpenAI的Tools功能(原Function Calling),该功能使大语言模型能够调用外部函数。文章通过获取天气的案例,详细讲解了如何定义函数描述信息、控制函数调用行为(包括禁止调用、自动调用和强制调用),以及处理并发函数调用。作者还演示了将函数调用结果返回给LLM进行回答的完整流程,并指出该过程需要大量代码实现。最后提到虽然OpenAI在Tools功能上表现优异,但其他LLM在此方面仍有差距,建议读者尝试将现有函数接入Tools进行体验。
2025-12-16 14:21:22
851
原创 RAG聊天机器人终极优化指南
本文介绍了如何为RAG聊天机器人增加记忆功能和提问改写功能,使其成为更成熟的LLM应用。通过LLM改写用户提问(如将"介绍他的故事"改写为"介绍小明的故事"),提高了检索质量。文章详细展示了构建完整RAG链的过程,包括文档处理、向量数据库存储、提问改写、上下文检索等模块的组合使用。还演示了如何将RAG链部署为API,并支持流式响应。最后讨论了工程实践中策略选择的权衡问题,建议根据业务需求选择合适的记忆机制和提示语言,强调在POC阶段应优先关注效果而非过早优化。
2025-12-16 14:20:51
782
原创 大型HTTP服务器架构演进全解析
大型HTTP服务器架构演进路线及思路 摘要:本文阐述了大型后端服务器的架构演进过程,从初期单一服务器到成熟阶段的分布式系统。随着业务增长,架构逐步经历应用/数据/存储分离、负载均衡、缓存技术、分布式文件系统和应用拆分等阶段。演进过程遵循业务驱动原则,不同阶段采用不同技术方案(如Nginx负载均衡、Redis缓存、CDN分发等)。现代云服务已将这些技术基础设施化,企业可通过购买服务快速构建业务环境。架构设计需根据具体业务需求定制,没有统一标准。
2025-12-16 14:19:27
735
原创 Node.js实战:SQLite数据持久化
本文介绍了如何使用Node.js和SQLite实现Web应用的数据持久化存储。首先比较了SQLite与MySQL等数据库的特点,指出SQLite更适合轻量级应用。然后详细讲解了如何设计todo数据表结构,创建数据库连接,以及实现查询和添加任务数据的服务端逻辑。文章还介绍了POST请求数据的解析方法,包括application/x-www-form-urlencoded和application/json格式的处理。最后展示了前后端交互的实现方式,包括获取任务列表和添加新任务的功能。通过这个Todolist案例
2025-12-16 09:00:00
869
原创 动态HTTP服务器实战:解析请求与Mock数据
本文介绍了动态HTTP服务器开发中的关键功能实现。首先讲解了如何解析GET请求的URL参数,并展示了使用querystring模块的示例代码。接着详细说明了Mock数据的准备和使用方法,以疫情数据查询应用为例。文章重点对比了客户端渲染和服务端渲染的差异,并演示了如何使用Handlebars模板引擎实现服务端渲染,包括模板文件的编写和数据绑定。最后总结了两种渲染方式的优缺点:客户端渲染减轻服务器压力、实现前后端分离;服务端渲染加快首屏加载、利于SEO。课程还通过添加type=json参数展示了如何在同一接口中
2025-12-15 14:15:00
830
1
原创 前端设计模式:轻量级实战指南
前端设计模式具有独特特性:基于JavaScript弱类型和原型继承,设计模式实现更轻量;针对DOM操作、异步场景和组件化需求,结构型、行为型和创建型模式分别发挥重要作用;现代框架已内置封装常用模式,开发者更多需要理解原理而非重复实现;函数式编程倾向使模式实现更简洁。核心在于通过"封装变化"解决前端开发中的"变化与稳定"冲突,帮助开发者应对需求迭代、代码复用和组件耦合等挑战。
2025-12-15 09:29:39
2016
2
原创 Node.js拦截器模式实现动态HTTP服务
本文介绍了如何实现动态HTTP服务器的核心模块——拦截器和路由。拦截器采用洋葱模型设计,通过注册多个拦截切面实现业务流程控制,每个切面可以独立处理特定功能(如验证、数据处理等),并能复用共享。路由模块则根据URL路径将请求分发到不同处理模块,支持参数解析和规则匹配。文章详细展示了拦截器类和路由类的实现代码,并演示了如何将它们集成到HTTP服务器中,使服务器能够处理动态请求。这种架构设计提高了代码复用性和可维护性,为复杂业务逻辑提供了清晰的执行流程控制。
2025-12-14 08:00:00
1011
原创 HTTP压缩:提升Web性能的关键
本文介绍了HTTP服务优化中的文件压缩技术。浏览器通过Accept-Encoding头声明支持的压缩格式(gzip/deflate/br),服务器使用Node.js的zlib模块实现压缩传输。文章演示了如何通过流式处理将文件压缩后传输,并设置Content-Encoding响应头告知浏览器解压方式。通过1.3MB JS文件压缩为247KB的实例,展示了压缩带来的显著带宽节省效果。同时指出应针对文本类资源(text/application类型)选择性启用压缩,并实现根据客户端支持的算法动态选择最优压缩方案。该
2025-12-14 06:00:00
536
原创 HTTP缓存实战:强缓存与协商缓存
本文介绍了HTTP服务器中的两种缓存策略:强缓存和协商缓存。强缓存通过Cache-Control响应头设置,在缓存有效期内浏览器直接使用本地资源而不发起请求,但通过地址栏访问或强制刷新时会失效。协商缓存通过Last-Modified或Etag响应头实现,浏览器会发送带If-Modified-Since/If-None-Match的请求,服务器返回304状态码时使用缓存内容。两种缓存策略都可通过强制刷新清除。文章详细阐述了两种缓存的实现原理、触发条件和应用场景,并提供了代码示例说明如何在实际HTTP服务器中实
2025-12-13 08:00:00
834
原创 手把手教你实现静态文件HTTP服务
本文介绍了如何用Node.js实现静态文件HTTP服务。首先通过解析URL路径获取对应文件,使用fs模块判断文件是否存在并处理目录请求。重点讲解了MIME类型的重要性,通过mime库自动识别文件类型并设置正确的Content-Type响应头。针对大文件传输问题,推荐使用流式处理(fs.createReadStream和pipe方法)替代同步读取,避免内存占用和I/O阻塞。文章总结了实现静态服务器的三个关键步骤:路径转换、MIME类型判断和文件内容返回,并对比了同步读取和流式传输两种方式的优缺点。
2025-12-13 07:00:00
652
原创 Node.js HTTP模块实战:轻松创建Web服务
本文介绍了Node.js中http模块的使用方法,相比net模块更简便地创建HTTP服务。通过示例代码演示了如何处理不同URL路径的请求(返回200或404状态码),并讲解了HTTP内容协商机制,即根据请求头的Accept字段返回不同格式(HTML/JSON)的响应内容。文章还概述了HTTP协议的动作(GET/POST等)和状态码(200/404等)的分类及规范,强调遵循HTTP规范的重要性。最后指出http模块简化了HTTP请求处理和响应生成的过程,为后续实现静态文件服务器打下基础。
2025-12-12 07:00:00
666
原创 Node.js轻松实现HTTP内容协商
本文介绍了Node.js中使用http模块创建HTTP服务的方法。相比net模块,http模块简化了HTTP请求处理流程,自动处理报文解析和响应构建。文章详细讲解了如何根据请求路径返回不同响应,并重点介绍了HTTP内容协商机制,通过判断Accept请求头返回HTML或JSON格式数据。同时概述了HTTP协议的各种请求方法(GET、POST等)和状态码(200、404等)的含义及规范用法。最后强调遵循HTTP规范的重要性,为后续实现静态文件服务器打下基础。
2025-12-12 07:00:00
672
原创 网页版文章生成器实战教程
本文介绍了如何将命令行版文章生成器改造成网页版应用。首先通过HTML/CSS构建了包含参数设置面板的页面界面,然后利用ESModules直接在浏览器中加载生成器模块实现功能。针对兼容性和性能问题,文章详细说明了使用Esbuild打包工具将代码编译为单一文件的方法,包括配置build.js、修改package.json脚本等步骤。最终实现了支持浏览器直接使用的文章生成器,并提供了两种版本:ESModules原生版本和打包后的兼容版本。该项目完整代码已开源,为后续学习Web原理和服务端编程打下基础。
2025-12-11 08:00:00
774
1
原创 前端必学:Node.js打造HTTP服务器
摘要:本文介绍了前端工程师理解HTTP协议的重要性,并演示了如何使用Node.js的net模块创建TCP服务器来处理HTTP请求。通过代码示例展示了HTTP请求/响应的基本格式,包括状态码、响应头和内容体的组成。文章解释了TCP协议与HTTP协议的关系,以及如何手动构建HTTP响应报文。最后指出直接使用TCP处理HTTP较为繁琐,为后续介绍Node.js的http模块做铺垫。
2025-12-11 06:00:00
578
原创 Node.js命令行交互:stdin与readline实战
本文介绍了两种实现命令行交互的方式:process.stdin和readline模块。首先讲解了process.stdin的基本用法,通过监听readable事件获取用户输入,并演示了一个累加求和的示例程序。然后介绍了如何利用process.stdin实现文章生成器的交互功能,通过Promise机制处理多个问题的输入。最后对比了readline模块的优势,展示了如何用更简洁的API实现相同的交互功能。两种方式都能实现命令行交互,但readline模块代码更简洁易读。文章还提到process.stdout的用
2025-12-10 08:00:00
1634
1
原创 命令行交互配置文章生成
本文介绍了如何通过命令行交互配置文章标题和字数范围来生成自定义文章。首先使用process.argv实现基本参数传递功能,然后引入command-line-args库优化参数校验,并配合command-line-usage添加帮助文档功能。最后对代码进行模块化重构,将不同功能拆分到独立模块中,使主程序更加简洁清晰。文章还指出可以进一步改进为交互式运行模式,为后续课程留下伏笔。
2025-12-10 07:00:00
703
原创 随机文章生成器:高效随机选取算法解析
摘要:本课程介绍了如何创建随机模块(random.js)从语料库中随机选取内容。模块包含两个方法:randomInt用于生成指定范围的随机整数,控制文章和段落长度;createRandomPicker作为高阶函数,通过数组副本和元素交换算法实现不重复的随机选取,解决了连续选取相同元素的问题。该模块优化了语料库的使用效率,只需初始化一次即可多次调用,为后续生成随机文章奠定了基础。
2025-12-09 11:00:00
1937
原创 《最终章》:TS的控制反转和注入依赖
本文介绍了TypeScript中控制反转(IoC)和依赖注入(DI)的概念与实现。IoC将依赖创建权交给容器,DI是IoC的具体实现方式,通过自动注入解决手动维护依赖的痛点。文章展示了如何利用装饰器和反射元数据实现DI路由和简易IoC容器,包括依赖注册和自动注入功能。IoC/DI的核心价值在于解耦、减少重复代码和提高可维护性,这也是主流框架如Nest.js和Angular的底层机制。掌握这些概念有助于编写更简洁、可维护的代码。
2025-12-09 07:00:00
1876
1
原创 Node.js实战:打造随机文章生成器
本文介绍了一个基于Node.js的随机文章生成器开发项目。项目将实现类似"狗屁不通文章生成器"的功能,通过读取语料库、随机算法和字符串处理来生成随机文本。主要技术点包括:使用fs模块读取文件、process模块处理命令行参数、自定义随机算法模块、字符串模板替换等。项目结构包含语料库目录、核心模块和输出目录,将逐步实现从用户输入到文章生成的完整流程。该工具可用于网页布局测试、数据库测试或娱乐用途。
2025-12-08 14:00:00
920
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅