与软件供应商合作:取法于上,方能得其中
管理学中有一个非常朴素却极度精准的规律:要求80分,最终往往只能做到60分;敢要求100分,大概率能稳稳拿到80分。这句经验总结,源自古训“取法于上,仅得为中;取法于中,故为其下”。在数字化项目落地、软件采购与服务商协作的场景中,这条定律几乎是铁律,精准解释了绝大多数软件项目“落地打折、效果不及预期”的核心原因。 很多企业与软件供应商合作时,总陷入自我妥协的误区:需求能凑合用就行、功能达标就可以、交付不延期就满意。看似降低了合作门槛、减少了沟通成本,实则从源头预留了效果折损的空间。软件项目不同于标准化实物采购,它存在天然的损耗:供应商的人力轮换、开发理解偏差、售后响应滞后、迭代优先级偏移、现场适配偏差,每一个环节都会让既定的交付标准悄悄降级。如果我们的目标和标准本身就是中等水平,经过层层损耗后,最终落地结果必然是下等水平。 低标准要求,是软件项目最大的隐患很多甲方对接供应商的常态,完美印证了“求其中,得其下”的短板。需求沟通时,只模糊提出“实现基础功能”,不明确性能指标、交互标准、容错机制和兼容要求;合同签订时,只约束交付周期和基础功能清单,不对响应速度、bug修复时效、迭代服务...
vscode 不同项目不同语言扩展插件隔离方案
VSCode 多项目 / 多语言插件隔离完整方案目标:前端 Vue、Java 后端、Python、Go 等不同项目,只加载对应语言插件,避免插件冲突、启动卡顿、多语言 LSP 同时抢占资源。 重要前提:VSCode 原生不支持「打开文件夹自动卸载 / 安装插件」,只能使用下面 4 种官方 / 主流方案,按你的需求选择。 方案一:Profiles(官方原生,首推!)【最适合日常多语言开发】VSCode 1.84 + 内置 配置文件 (Profiles),真正独立插件集合,互相隔离。 原理每个 Profile 拥有独立已安装扩展列表、settings、快捷键、主题;打开项目时绑定目录→自动切换 Profile;前端一套、Java 一套、Python 一套互不干扰。 操作步骤 左下角齿轮 → Profiles → Create Profile 命名示例:Frontend-Vue、Java-Spring、Python-AI 选择 Empty Profile(空白模板),避免继承多余插件 切换到新建 Profile,只安装当前技术栈必需插件 Fro...
SpringBoot 项目启动时执行初始化的 5 种常用方案
SpringBoot 提供了多种项目启动后自动执行初始化逻辑的方式,适用于不同场景(加载配置、初始化数据、预热缓存、启动定时任务等)。 1. 推荐首选:CommandLineRunner 接口(最简单)适用场景:简单的初始化逻辑,无依赖顺序要求。 特点:实现接口 + 重写 run 方法,SpringBoot 启动完成后自动调用。 12345678910111213141516171819202122232425262728293031import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;/** * 项目启动后执行初始化 */@Componentpublic class MyInitRunner implements CommandLineRunner { /** * 启动完成后自动执行 * @param args 启动参数 * @throws Exception */ @Override...
ARP协议详解之Gratuitous ARP(免费ARP)
ARP协议详解之Gratuitous ARP(免费ARP)Gratuitous ARP(免费ARP)Gratuitous ARP也称为免费ARP,无故ARP。Gratuitous ARP不同于一般的ARP请求,它并非期待得到IP对应的MAC地址,而是当主机启动的时候,将发送一个Gratuitous arp请求,即请求自己的IP地址的MAC地址。 免费ARP的产生免费ARP数据包是主机发送ARP查找自己的IP地址。通常,它发生在系统引导期间进行接口配置的时候。这里可以使用Wireshark捕获主机启动时候的数据,以验证是否发送Gratutious arp数据包。这里捕获到的数据包,如图1.21所示。 图1.21 Gratuitous ARP包 从该界面可以看到第44、45、47数据包都是Gratuitous ARP包。 免费ARP的作用免费ARP有两个方面的作用。分别如下所示: 1.验证IP是否冲突 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。发送主机并不需要一定收到此请求的回答。如果收到一个回答,表示网络中存在与自身IP相同的主机。如果没有收到应答,则表示本机...
MySQL Router 和 ProxySQL 区别
MySQL Router 和 ProxySQL 都是位于客户端应用程序和 MySQL 数据库服务器之间的中间件,用于管理连接、提升性能和提高可用性。但它们的设计目标、核心功能、灵活性以及适用场景有显著的区别: 核心区别总结: 特性 MySQLRouter ProxySQL 开发背景 Oracle 官方提供 第三方开源 (Percona 支持) 核心目标 简化 InnoDB Cluster/ReplicaSet 的高可用和读写分离接入 高性能数据库代理,极致灵活性,高级流量管理 主要优势 无缝集成 MySQL Shell/InnoDB Cluster, 自动故障转移 极高灵活性, 查询规则、缓存、防火墙、查询重写 配置方式 配置文件 (INI style),通常需要重启生效 内置 SQL 接口 (Admin>) 动态配置,可在线生效 高级功能 有限 (连接路由, 简单读写分离, 自动故障转移) 丰富 (查询规则重写, 结果缓存, 防火墙, 连接复用/池化) 用户认...
在PG 数据库中的是否的类型选择
在PG 数据库中表示”是/否”选择boolean还是char(1)还是int类型更为高效?在 PostgreSQL 中表示“是/否”选择,最高效且最推荐的方式是使用原生的 boolean 类型。 这主要是从存储空间、操作性能和语义清晰度三个维度来考量,boolean 类型在各方面都优于 char(1) 或 int。 📊 存储空间对比在存储空间上,boolean 的优势非常明显,并且能避免其他类型因数据对齐产生的额外开销。 数据类型 存储空间 说明 boolean 1 字节 最小,且无对齐填充开销。 char(1) 至少 2 字节 实际需要约5字节或更多,因为有类型开销和对齐填充。 int / smallint 4 字节 / 2 字节 int为4字节,smallint为2字节。两者都有对齐填充开销。 根据一份资料,存储100万行数据,boolean 类型仅需 1 MB,而 char(1) 和 smallint 都需要 2 MB。 ⚡️ 性能与语义对比除了存储空间,boolean 在性能和语义上也是最佳选择。 b...
如何让更新远程仓库中的Git子模块到最新的提交版本
要将远程仓库中的 Git 子模块更新到最新提交版本,核心是先更新本地子模块到最新代码 → 提交主项目中对子模块版本的引用 → 推送到主项目远程仓库,以下是分步骤的完整操作指南(覆盖核心场景 + 避坑点): 一、核心流程(本地更新 → 提交主项目 → 推送远程)步骤 1:拉取主项目最新代码(确保基础版本一致)先进入主项目目录,拉取远程最新代码,避免冲突: 12cd 你的主项目目录git pull origin 主分支名 # 如 main/master 步骤 2:更新本地子模块到远程最新提交有两种方式更新子模块,按需选择: 方式 1:单个子模块更新(指定子模块)适合仅更新某个子模块的场景: 1234567891011# 进入子模块目录cd 子模块文件夹路径 # 如 ./submodule-common# 切换到子模块的目标分支(如 main)git checkout main# 拉取子模块远程最新代码git pull origin main# 返回主项目目录cd .. 方式 2:批量更新所有子模块(推荐)适合多个子模块需统一更新的场景: 12# 遍历所有子模块,拉取各自远程分...
git拉取项目将子模块也拉取下来
要在 Git 拉取主项目时自动同步所有子模块,核心是通过 Git 内置的子模块命令实现,以下是完整的操作指南(覆盖「首次拉取」「已有项目更新子模块」「批量拉取」等场景): 一、场景 1:首次拉取主项目(含子模块)如果是第一次克隆主项目,直接用 --recurse-submodules 参数,可一键拉取主项目 + 所有子模块代码: 12345# 克隆主项目并自动初始化、拉取所有子模块git clone --recurse-submodules <主项目仓库地址># 例如git clone --recurse-submodules https://github.com/xxx/main-project.git 效果:克隆主项目后,会自动进入每个子模块目录,拉取对应分支的代码,无需手动操作。 二、场景 2:已克隆主项目,补拉子模块如果已经克隆了主项目(但子模块目录为空),执行以下命令补全子模块: 123456789101112# 进入主项目目录cd 主项目文件夹# 1. 初始化子模块(首次拉取子模块必须执行)git submodule init# 2. 拉取所有子模块的最...
装debian系统之后,很多命令找不到,需要添加sudo之后才能使用
问题描述 安装debian12系统之后,很多命令找不到,需要添加sudo之后才能使用。 解决方案:1.临时解决方案1export PATH=$PATH:/sbin/ 输入以上命令,即可临时解决问题,但是重启之后依然有问题! 2.永久解决方案如果需要永久使用,需要添加需要编辑 .bashrc 文件(注:每个用户都有.bashrc 文件,想要每个用户都能正常使用,需要去编辑每个用户的 .bashrc 文件) 1export PATH=$PATH:/usr/sbin:/sbin 1source ~/.bashrc 或者直接在/etc/profile文件中增加环境变量
windows、linux查看域名解析、跟踪路由 dns
查询域名对应的ipwindows&&linux查看域名对应的ip,无论在windows还是在linux下都是用 nslookup ,这里还是拿 www.baidu.com做测试。我们可以看见www.baidu.com 对应的IPV4有 110.242.68.3和110.242.68.4 。 我们再看一下浏览器请求走的ip,可以看见,走的110.242.68.4这个下面我们来分析一下 nslookup www.baidu.com 的结果 123456789服务器: UnKnownAddress: 10.234.144.207非权威应答:名称: www.a.shifen.comAddresses: 2408:871a:2100:3:0:ff:b025:348d 2408:871a:2100:2:0:ff:b09f:237 110.242.68.3 110.242.68.4Aliases: www.baidu.com 第1行,服务器,指的是默认dns服务器,也就是local DNS,就是局域网的DN...

