2025

前端多项目放在一个仓库,常见的Monorepo模式就3种。先讲模式,再讲具体怎么创建。一、前端Monorepo常见3种模式模式1:Workspaces(最常用、最轻量)代表工具:pnpmworkspacesyarnworkspaces特点:自动软链依赖统一管理node_modules配置简单,适合多数团队典型结构:repo/apps/web/admin/packages/utils/components/pnpm-workspace.yamlpackage.json模式2:Turborepo(大项目常用)优势:强大的构建缓存...
随着阿里云宣布Docker镜像加速服务开始收费,很多开发者突然发现:本地拉镜像开始变慢了,CI/CD也受影响了。那么,国内还有哪些免费且稳定可用的Docker镜像加速源?本文整理了2025年仍可用的一批免费镜像加速服务,并附上快速使用方案,适合开发者收藏或转发给团队。一、为什么要找替代的Docker镜像加速?对于国内开发者来说,DockerHub在没有加速器的情况下经常出现这些问题:连接不稳定、拉取速度极慢CI/CD经常timeout镜像拉到一半失败拉国外镜像特别痛苦(GCR、GHCR等)阿里云加速器过去是很多人的首选,但随着收费或限制收紧,更换免费镜像源成了刚需。二、目前可用的免费镜像加速/...
在日常运维或开发中,Nginx重定向(Redirect)是非常常见的需求,例如域名跳转、HTTP转HTTPS、路径迁移等。本文用最简单的示例,带你快速掌握Nginx重定向的核心配置方式。一、常见的重定向状态码301永久重定向适用于资源永久迁移,例如老域名迁移到新域名。浏览器会缓存结果。302临时重定向适用于临时跳转,例如灰度发布或检查维护。二、域名跳转(www与非www互转)非www→wwwserver{listen80;server_nameexample.com;return301$scheme://www.example.com$request_uri;&#...
一、GitToolBox是什么?在使用IntelliJIDEA进行开发时,虽然内置的Git功能已经很强大,但在日常团队协作中,你可能仍会遇到这些痛点:想快速看到当前文件的最近提交人、最近修改时间?想让代码变化提示更明显,而不是默认的小蓝色条?希望在编辑器侧边直接看到Gitblame信息?想在状态栏快速查看当前分支、未提交文件数量?GitToolBox插件就是为这些增强需求而生的一个非常实用的Git辅助工具,它为IDEA原生的Git功能提供了补充。二、GitToolBox提供了哪些核心功能?1.编辑器内实时Blame信息(最常用)打开文件后,GitToolBox会在每一行的右侧显示:最近修改该行...
一、为什么MySQL要引入JSON字段?在互联网业务中,经常会遇到以下情况:字段属性不固定(如商品属性、用户画像标签等)结构会随着业务变化而变化,不适合频繁修改表结构希望兼顾查询能力和灵活性MySQL从5.7版本开始原生支持JSON类型,提供了结构化存储、自动校验、丰富查询函数等能力,用于解决传统text/varchar存储JSON的不足。二、JSON字段有哪些特点?1.存储格式是二进制(不是纯文本)MySQL内部会将JSON数据解析为binaryJSON,查询更快。插入时会进行语法校验,不是合法JSON会报错。2.可索引,但有限制MySQL给JSON字段建立索引有两种方式:方式1:生成列(G...
一、什么是RabbitMQ的预取值?在使用RabbitMQ的消费者确认机制(ACK)时,RabbitMQ会按照一定策略分配消息给消费者。预取值(prefetch)的作用就是:控制消费者在未确认(unacked)消息的数量上限。达到上限之前,RabbitMQ会继续给该消费者分发消息;达到上限后,不再推送新消息。简单说:prefetch决定了“消费者最多能同时处理多少条消息”。二、为什么需要设置prefetch?如果不设置prefetch或设置为默认值0(无限),RabbitMQ会不断推消息给消费者——只要它“空着”。这会带来两个问题:1.单一消费者被塞满某个消费者可能瞬间积压几十几百条消息,压力...
一、为什么需要WebView?在微信小程序开发中,大多数功能可以用原生组件实现,但仍有一些情况需要加载已有网页、H5活动页、客服页、表单页或外部系统。此时,就需要官方提供的组件——WebView。WebView可以让小程序在自身页面内打开网页,实现“嵌入式”页面展示,避免跳转外部浏览器,提高用户体验。二、WebView的基础使用方法要使用WebView,需要满足两个前提:1.后端域名需加入业务域名白名单路径:微信小程序后台→开发→开发管理→业务域名只有加入白名单的HTTPS域名才能被WebView加载。2.页面中直接使用WebView组件WXML示例:<web-viewsrc=...
一、为什么要关注“空值”问题?在Java开发中,**NullPointerException(空指针异常)**是最常见也最头疼的异常之一。很多时候,我们写的逻辑本身没问题,但因为某个变量意外为null,就让整个程序崩溃。正所谓:“空指针一时爽,调试火葬场。”因此,如何“优雅地处理空值”,不仅是写出健壮代码的关键,也体现了开发者的编程素养。二、传统做法:繁琐的空值判断最常见的写法大概是这样👇if(user!=null){if(user.getAddress()!=null){Stringcity=user.getAddress().getCit...
一、为什么要限制容器内存?在使用Docker部署服务时,如果不加限制,某个容器可能因为内存泄漏或负载过高,导致主机内存被耗尽,拖垮其他容器甚至整个系统。因此,在生产环境中,限制容器内存使用量(MemoryLimit)是一项关键的资源控制措施。二、Docker中的内存限制参数Docker基于Linux的cgroups(控制组)机制实现资源隔离。和内存相关的主要参数如下:参数说明--memory或-m限制容器最大可使用的物理内存--memory-swap限制容器可使用的总内存(物理内存+swap)--oom-kill-disable是否禁用OOMKiller(不建议在生产中关闭)三、基础用法示例1...
一、前言在前端开发中,保留两位小数是非常常见的需求(比如金额、利率、百分比等)。看似简单,但JS的浮点数精度问题会带来一些坑。本篇汇总几种常用做法、优缺点和推荐场景,帮你快速选对方案。二、常见方法与示例1.最简单:toFixed(2)(用于展示)返回字符串(用于UI展示最方便)。直接四舍五入,语法最简洁。letn=3.14159;console.log(n.toFixed(2));//"3.14"console.log((3.1).toFixed(2));//"3.10"注意:toFixed返回的是字符串...