个人技术日常分享

个人技术日常分享

个人技术文章分享 日常记录 图片分享

从 scoped 到 @scope:CSS 样式隔离的进化
在前端开发中,“样式污染”一直是一个反复出现的问题。尤其在构建大型项目或维护多个组件库时,全局 CSS 的不确定性会带来许多调试难题。为了实现组件级样式隔离,我们使用过许多手段:BEM 命名规范、CSS Modules、Vue 的 scoped 样式、甚至 Shadow DOM。但今天,我们迎来了一个更加原生、简洁的解决方案:@scope。 本文将带你了解 CSS 的这项新特性,以及它在组件样式管理中的应用实践,并结合 Vue 的 scoped 实战与对比,探讨 @scope 的优势与适用场景,看看它是否真的值得期待。 为什么我们需要作用域 CSS?我们先从一个经典的例子开始说起: 12...
手写一个微型 Spring 框架(五):单元测试实践
前面我们马不停蹄地实现了 Javelin 框架的许多基础功能。从 HTTP 路由、IoC 容器、注解扫描到数据库访问层,像是在快速奔跑、不断构建着新的地基。但到了某个时刻,我在想是不是应该停下来,回头看看。就像赵雷在《静下来》中唱的那样: 我想应该静下来走一段路 我想应该静下来看一本书 我只想静下来做这些事 … 我只想静下来去反省自己 当我在 IDE 中一行行堆砌代码的时候,突然哼起这首歌,意识到,是时候慢下来——看看自己已经写了什么,有哪些内容真正被验证过,哪些又仅停留在“自信”层面。这篇文章正是在这种状态下写出来的,它或许谈不上多全面的反思,但却记录了我作为框架开发者,在某个时...
手写一个微型 Spring 框架(四):数据访问层设计实战
在前几篇文章中,我们已经完成了 Javelin 框架的核心功能构建,包括 HTTP 路由注册、注解扫描与 IoC 容器等内容。本篇将深入探讨 数据访问层(DAL,Data Access Layer) 的设计与实现,从理念到代码,全面展示如何在 Javelin 中构建一个灵活、可维护、可扩展的数据访问模块。 痛点驱动设计在构建 Javelin 的数据访问层过程中,我们并不是一开始就拥有完整的设计蓝图,而是源于开发过程中反复遇到的一些实际痛点。下面列举几个典型问题,并结合示例代码说明 Javelin 是如何逐一解决这些问题的: 1. JDBC 样板代码冗余、可读性差 原始写法: 12345...
构建自己的微型 Spring 框架(三):接入内嵌 Tomcat 与 Servlet
在前两篇中,我们已经实现了一个具备依赖注入、路由注册、参数绑定、中间件、JSON 返回、异常处理的微型 Web 框架 —— Javelin,它基于 JDK 自带的 HttpServer 实现了最小运行闭环。 曾几何时,我一度以为HttpServer就是我的最终目标,直到我被告知它存在一定的局限性,不适合生产使用。显然我们的目标不仅仅是一个简单的最小闭环,而是一个完整的、可扩展的、强壮的 Web 框架。本篇将带你将 Javelin 接入内嵌 Tomcat,并运行在标准 Servlet 容器之上,向真正的工程化迈进一步。 为什么 HttpServer 不适合生产环境? 项目 说明 ...
手写一个微型Spring框架(三):NHttpContext的详解
在Javelin框架中,NHttpContext类在HTTP请求处理流水线中扮演着至关重要的角色。它是一个封装了请求-响应生命周期各个方面的对象,管理着HTTP请求的各个环节。下面我们将深入探讨NHttpContext的功能、组成部分及其设计思路。 NHttpContext概述NHttpContext是一个容器,保存了处理HTTP请求所需的所有必要元素。它不仅代表当前HTTP交换的状态,还管理流水线上下文、日志记录、错误处理等内容。其设计使其成为HTTP请求生命周期中的主要上下文对象,提供了一种有组织的方式来管理请求和响应。 以下是NHttpContext中主要属性的介绍: Htt...
手写一个微型 Spring 框架(二):从路由到生命周期管理
书接上回,在上一篇文章中,我们展示了如何构建一个简单的微型 Spring 框架,涵盖了端口监听、路由动态注册和依赖注入(IoC)。本篇将进一步扩展我们的框架,涵盖 参数绑定、中间件机制、全局异常处理、JSON 返回支持 以及 生命周期管理。 这些功能将使我们的微型框架更加完整,能够处理更多的应用场景。让我们开始深入探讨这些新增功能。 参数绑定在上一篇文章里面虽然我们已经能够通过访问接口来获取返回值。但是请求的参数是如何绑定到方法的参数上的呢?这就是参数绑定的作用。在 Web 开发中,参数绑定是一个非常重要的特性,通常用于从请求中提取参数并绑定到方法的参数上。在 Spring 框架中,我们...
手写一个微型 Spring 框架:从端口监听到依赖注入
书接上回,作为一个从.NET转Java的开发人员,Spring框架肯定是无法绕过的。在学习 Spring 框架的过程中,我们往往只是停留在“使用”层面,而对其底层实现机制知之甚少。但我始终觉得,学习框架的过程中,理解其设计思想和实现原理是非常重要的。因此,我决定手写一个微型的Spring框架,来深入理解Spring的核心设计思想。为了加深我对 Spring 的理解,并锻炼 Java 框架设计能力,我决定手写一个微型的 Spring 框架 —— Javelin。 这篇文章我们将实现: 一个简单的 IoC 容器 JavelinContext,用于管理 Bean 实例的生命周期。 支持 @R...
👨‍💻 十年开发老兵,从.NET到Java:我为何选择重新出发? 🚀
🌱 初心依旧,岁月如梭 3️⃣4️⃣岁的我,作为一名软件开发工程师,已经在这个行业整整🔟年。过去的职业生涯中,我曾以.NET(C#)作为自己的主要技术方向。诚然,C#语言优雅的语法、强大的生态系统以及微软对.NET的持续优化,都曾给我带来极佳的开发体验。然而,最近我却做出一个令朋友们感到意外的决定:从.NET(C#)转向Java开发。为什么我要从看似舒适的技术领域跳出,踏入另一个全新的生态圈呢?我想在这里分享一下我的真实想法和背后的原因。 🌧️ 瓶颈浮现,渴望成长 回想刚进入职场时,我最先接触的是PHP。没错,就是那个被戏称为“世界上最好的语言”的PHP。当时的技术门槛相对较低,我...
从入门到实战:一文搞定JS无埋点监控方案
在前端性能与用户行为分析愈发重要的今天,埋点监控成为各类业务不可或缺的基础设施。但传统手动埋点方式存在维护成本高、容易遗漏等问题。本文将带你从0到1构建一套JavaScript无埋点监控方案,真正实现自动上报用户行为与性能数据。 什么是无埋点监控?无埋点监控,指的是在不修改业务代码的前提下,通过全局监听或劫持的方式自动采集用户行为与性能数据。常见的采集内容包括: 页面访问(PV)和跳转(UV) 用户点击行为 控件输入行为 JS错误和Promise异常 页面性能数据(如白屏、DOM加载时间等) 无埋点监控通常具备以下优势: 减少开发和维护成本; 实时自动化捕捉用户行为; 高效适应业务...
MCP:AI 时代的“USB-C”,解锁模型上下文新范式
MCP 出现的背景MCP(Model Context Protocol,模型上下文协议)是一个开放协议,它标准化了应用程序向大语言模型(LLM)提供上下文的方式。可以将 MCP 类比为 AI 应用的 USB-C 端口。就像 USB-C 提供了一种标准化的方式来连接不同设备和配件一样,MCP 也为 AI 模型提供了一种标准化的方式,使其能够与不同的数据源和工具进行交互。这样,开发者可以更轻松地将 MCP 集成到各类 AI 解决方案中,提高模型的上下文获取能力,并增强其对外部数据的适配性。 本文将深入探讨 MCP 的核心概念、适用场景、架构设计以及如何在实际应用中使用 MCP,并提供具体的代...
avatar
乐予吕
witness me