WWW.YOUINFO.SITE
标签聚合 行版

/tag/行版

IT之家 · 2026-06-08 18:19:52+08:00 · tech

IT之家 6 月 8 日消息,小米今天在中国大陆市场推出 17T 系列手机,提供 17T 标准版 / 17T Pro 两款机型,分别配备天玑 8500 Ultra / 天玑 9500 处理器, 暑期特惠价 2999 元起 。 ▲ IT之家评测室:小米 17T Pro 手机体验 IT之家搜集小米海外官网、17T 发布会信息后发现,小米 17T 国行版配备了 7000mAh 电池,相比 17T 海外版的 6500mAh, 容量大了 500mAh 。不过,两者的最高有线充电速度都是 67W,均支持 50W PPS 协议快充。 此外,小米 17T Pro 国行版拥有 16GB 内存 +512GB 存储空间配置可选, 而国际版的最高配则是去到 12GB+1TB ,有显著差别。 相关阅读: 《 【IT之家评测室】小米 17T Pro 手机体验:以影像为抓手的全能旗舰 》 《 2999 元起:小米 17T 系列手机发布,天玑 8500-Ultra / 天玑 9500 芯片 》

LinuxDo 最新话题 · 2026-06-07 22:33:24+08:00 · tech

cd Change Directory(Linux 发行版命令)。 OK 算是最早的烂梗,“all correct”被错拼成“oll korrect”,然后就抽出首字母成了“OK”。 目测是国内到迅哥儿那时候就很常用了。《故事新编·理水》里边就有。 [!QUOTE] 每月一次,照例的半空中要簌簌的发响,愈响愈厉害,飞车看得清楚了,车上插一张旗,画著一个黄圆圈在发毫光。离地五尺,就挂下几只篮子来,别人可不知道里面装的是什么,只听得上下在讲话: “古貌林!” “好杜有图!” “古鲁几哩……” “O.K!” Leading 中文意思是“行距”,但是它不读作 /ˈliː.dɪŋ/,而是读作 /ˈled.ɪŋ/。因为这个词最早是用来指代排铅字时每一行中间的铅条,因此保留了铅(lead)的读音 /led/。 Dashboard 中文意思是“仪表盘”。dash 是马儿飞跑的意思,因为马奔跑时会不可避免地溅起泥点,因此有人就在马车前安装了一块挡泥板,就有了这个复合词 dashboard。后来到了汽车时代,挡泥板移动到了驾驶员的面前,变成了汽车操纵台,一直到今天,就把安装有各种表、按钮和仪器的板面叫做 dashboard。 1 个帖子 - 1 位参与者 阅读完整话题

IT之家 · 2026-06-02 09:31:24+08:00 · tech

IT之家 6 月 2 日消息,博主 @数码闲聊站 发文,透露苹果 iPhone 18 Pro 国行版打样电池容量约 4056mAh,美版打样电池容量约 4288mAh,而 Pro Max 电池容量“挤到五字头”。 该博主同时表示,苹果 iPhone 18 Pro 这代硬件加大电池,升级 2nm A20 Pro 处理器,同时引入 48Mp 可变光圈,原则上也得大涨价,不过也并不排除“苹果牺牲一点毛利抢市场”的可能性。 此前消息显示,苹果 iPhone 18 Pro 手机预计将搭载 6.3 英寸屏幕,“灵动岛”摄像头打孔区域尺寸预估会比 iPhone 17 Pro 和 iPhone 17 Pro Max 缩小约 25%,实现更沉浸全面屏体验。手机主打色为“深樱桃”(Dark Cherry),颜色偏向深酒红色。手机还将简化相机控制按钮交互,保留压力感应,不再提供电容触控层。

LinuxDo 最新话题 · 2026-05-31 03:59:10+08:00 · tech

又是一个老生常谈的问题了,我的娱乐生活办公都离不开电脑,但是window的系统环境就是一个消耗品,日常用起来非常的省心,但是有些时候吧就挺那个的。 最近是越来越想换了系统的,但是学习成本真的劝退,还有生态什么的。 我主要使用的软件如下 现在已知的是换系统后会面临一下问题 使用习惯需要重新适用(毕竟windows从小学用到现在) 很多软件不提供linux版本|linux是残缺版 打游戏不方便 光是这三点就够折腾的了,想换又被死死束缚在舒适区域(啊巨婴!) 想听听各位佬友们的建议 35 个帖子 - 25 位参与者 阅读完整话题

IT之家 · 2026-05-24 17:16:01+08:00 · tech

IT之家 5 月 24 日消息,第七代宝马 M5 上市尚且不久,我们就已频繁看到身披伪装的测试原型车在纽博格林赛道上路测试。为何节奏如此紧凑?宝马计划让 G90 车型贴合新世代平台的设计风格与技术标准。轿车版本频频被汽车摄影师抓拍,如今旅行版车型也开始出现在镜头中。 IT之家注意到,尽管原型车车身被全套伪装覆盖,但能判断 G99 并不会迎来彻底换代,此次仅为中期改款,不过改动幅度远超常规年度改款车型。斑驳的伪装遮挡了诸多细节,但这款高性能旅行车的前脸已然完成重新设计。新车融入了部分新世代平台设计元素,和 2027 款宝马 7 系一样,不属于整车全新换代。修长的车身造型更具现代感,大灯线条更为锐利,双肾格栅尺寸看上去有所缩小。 前保险杠造型也比现款更为硬朗激进,伪装涂装反倒凸显出多处进气口的视觉效果。车身侧面轮廓基本保持原样,仅沿用常规改款调整,更换全新轮毂样式与车身配色。驾驶位前翼子板处的充电口盖板足以证实,2028 款 M5 依旧搭载插电式混动系统,这一点毋庸置疑。 车尾部分,新款尾灯轮廓透过伪装隐约可见,摒弃了现款 G99 的双段式灯组造型。尾灯设计风格更贴近全新宝马 i3 轿车,而非改款 7 系,最终造型还需等到伪装褪去后才能定论。宝马大概率会微调后保险杠造型,同时保留标志性的四出排气布局。往后只有高性能运动版与正统 M 系列车型,才会采用外露式四出排气设计。 排气声浪方面,测试车的声浪相比现款 M5 明显更为浑厚激昂。宝马似乎对 S68 发动机进行了调校,进一步强化声浪表现,同时有望对这款 V8 发动机本体做出优化。不过测试车出众的声浪也可能另有原因,该车或许未装配欧版车型标配的汽油颗粒捕捉器,这也是音量显著提升的缘由。 受欧七排放法规限制,这款 4.4 升双涡轮增压 V8 发动机在欧洲市场动力下调 41 马力。得益于升级电机补足动力损耗,整车综合最大功率仍维持 717 马力。未执行欧七排放标准的海外市场,燃油发动机与电机的动力配比则保持不变。 除外观设计、发动机与排气系统优化外,改款 M5 的内饰中控台将迎来全面革新。改款 7 系搭载了全新车机系统及配套智能配置,5 系与 M5 也将同步换装宝马最新车载娱乐系统,机械式旋钮控制器就此取消,贯穿式挡风玻璃投屏功能将成为标配。 目前尚不确定新款 5 系是否会效仿 7 系配备副驾娱乐屏。即便搭载该配置,大概率也会选装提供,而非全系标配,新款 7 系便采用此种配置方案。这样的设计更为合理,并非所有车主都需要额外车载屏幕。数月前亮相的 M5 旅行版测试车并未配备副驾屏,但不代表该配置不会后续上线。 这款中期改款 M5 预计将于明年正式发布,上市时间与普通版改款 5 系相近或紧随其后。

V2EX - 技术 · 2026-05-22 22:29:19+08:00 · tech

Spring Boot 3.x 循环依赖实战:从 allow-circular-references 到纯 DAG ,一个支付系统的重构之旅 项目背景:Jeepay 计全支付,Spring Boot 3.3.7 + MyBatis-Plus + Vue 3 ,多模块 Maven 项目。 前端集成引发的连锁反应 原本前后端分离部署( Nginx + 独立前端容器),想把前端 dist 直接打进 JAR 简化部署。几个坑: Vue SPA 路由 fallback:Spring Boot 3.x 默认用 PathPatternParser ,addViewControllers 不支持 {spring:\w+} 正则。最终用 @Order(HIGHEST_PRECEDENCE) 的 Filter 拦截无后缀路径 forward 到 index.html 。 Spring Security 6 ignoring() 不生效:日志明确警告 You are asking Spring Security to ignore... This is not recommended 。改为 authorizeHttpRequests().permitAll() 才生效。 字体文件 401:Security 的静态资源豁免模式漏了 .woff/.woff2/.ttf/.eot 。 前端构建 API baseURL 双层 /api/api/:VITE_API_BASE_URL=/api 拼接 url: '/api/xxx' → /api/api/xxx 。改为空值。 发行包瘦身:260MB → 120MB 三个模块的 fat JAR 共 288MB ,其中 130 个公共依赖(72MB) 重复存储 3 次。方案: 去掉未用依赖:jaxb-api(零 import)、mysql-connector-j(纯配置模块不需要)、activemq(仅编译,运行时用 RabbitMQ) 共享 lib:maven-dependency-plugin 收集所有传递依赖到 lib/(自动去重 182 个),antrun 解压 fat JAR 提取 BOOT-INF/classes/ 打包为 flat thin JAR(1.7-5MB) 启动方式:从 java -jar fat.jar 改为 java -cp "lib/*:apps/app.jar" MainClass 循环依赖根治 去掉 allow-circular-references: true 后直接启动,Spring Boot 3.x 严格检测报出完整依赖链: ┌─────┐ │ SysConfigService 自引用 (删 @ Autowired self ,直接用 this) ↑ ↓ │ IsvInfoService 自引用 (同上) 修复策略: 自引用:删字段,改用 this.xxx () 三角循环( PayInterfaceConfigService ↔ MchAppService/MchInfoService ):PayInterfaceConfigService.selectAllPayIfConfigListByAppId() 内部反向调用了 mchAppService.getById() 和 mchInfoService.getById()——这些只是 MyBatis-Plus 的简单 CRUD 委托。将这两个查询上移到 Controller 层,Service 方法改为接收 MchInfo 参数,依赖方向恢复。 两两循环:MchInfoService 注入 IsvInfoService 只是为了 getById(),IsvInfoService 注入 MchInfoService 只是为了 count()。直接替换为对应的 Mapper 注入,因为 MyBatis-Plus 的 ServiceImpl.getById() 底层就是 BaseMapper.selectById()。 关键认知: 依赖只能单向流动。找到"谁在反向调用"就是断环点。 大多数循环依赖是 CRUD 委托导致的。ServiceImpl 包装 BaseMapper ,循环往往是因为 A 需要 B 的 getById(),B 需要 A 的 count()——直接用 Mapper 替代 Service 注入,不改任何业务逻辑。 不要用 @ Lazy 、不要用 allow-circular-references ,这些都是掩耳盗铃。Spring Boot 3.x 默认禁止循环是为了逼你写出正确的分层。 最终效果 ┌───────────────────────────┬────────┬───────────────┐ │ 指标 │ 修复前 │ 修复后 │ ├───────────────────────────┼────────┼───────────────┤ │ 发行包大小 │ 260 MB │ 120 MB (-54%) │ ├───────────────────────────┼────────┼───────────────┤ │ 循环依赖 │ 5 个 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ allow-circular-references │ true │ 已移除 │ ├───────────────────────────┼────────┼───────────────┤ │ @ Lazy │ 2 处 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ 启动时间 │ ~8s │ ~4s │ └───────────────────────────┴────────┴───────────────┘

V2EX - 技术 · 2026-05-22 22:29:19+08:00 · tech

Spring Boot 3.x 循环依赖实战:从 allow-circular-references 到纯 DAG ,一个支付系统的重构之旅 项目背景:Jeepay 计全支付,Spring Boot 3.3.7 + MyBatis-Plus + Vue 3 ,多模块 Maven 项目。 前端集成引发的连锁反应 原本前后端分离部署( Nginx + 独立前端容器),想把前端 dist 直接打进 JAR 简化部署。几个坑: Vue SPA 路由 fallback:Spring Boot 3.x 默认用 PathPatternParser ,addViewControllers 不支持 {spring:\w+} 正则。最终用 @Order(HIGHEST_PRECEDENCE) 的 Filter 拦截无后缀路径 forward 到 index.html 。 Spring Security 6 ignoring() 不生效:日志明确警告 You are asking Spring Security to ignore... This is not recommended 。改为 authorizeHttpRequests().permitAll() 才生效。 字体文件 401:Security 的静态资源豁免模式漏了 .woff/.woff2/.ttf/.eot 。 前端构建 API baseURL 双层 /api/api/:VITE_API_BASE_URL=/api 拼接 url: '/api/xxx' → /api/api/xxx 。改为空值。 发行包瘦身:260MB → 120MB 三个模块的 fat JAR 共 288MB ,其中 130 个公共依赖(72MB) 重复存储 3 次。方案: 去掉未用依赖:jaxb-api(零 import)、mysql-connector-j(纯配置模块不需要)、activemq(仅编译,运行时用 RabbitMQ) 共享 lib:maven-dependency-plugin 收集所有传递依赖到 lib/(自动去重 182 个),antrun 解压 fat JAR 提取 BOOT-INF/classes/ 打包为 flat thin JAR(1.7-5MB) 启动方式:从 java -jar fat.jar 改为 java -cp "lib/*:apps/app.jar" MainClass 循环依赖根治 去掉 allow-circular-references: true 后直接启动,Spring Boot 3.x 严格检测报出完整依赖链: ┌─────┐ │ SysConfigService 自引用 (删 @ Autowired self ,直接用 this) ↑ ↓ │ IsvInfoService 自引用 (同上) 修复策略: 自引用:删字段,改用 this.xxx () 三角循环( PayInterfaceConfigService ↔ MchAppService/MchInfoService ):PayInterfaceConfigService.selectAllPayIfConfigListByAppId() 内部反向调用了 mchAppService.getById() 和 mchInfoService.getById()——这些只是 MyBatis-Plus 的简单 CRUD 委托。将这两个查询上移到 Controller 层,Service 方法改为接收 MchInfo 参数,依赖方向恢复。 两两循环:MchInfoService 注入 IsvInfoService 只是为了 getById(),IsvInfoService 注入 MchInfoService 只是为了 count()。直接替换为对应的 Mapper 注入,因为 MyBatis-Plus 的 ServiceImpl.getById() 底层就是 BaseMapper.selectById()。 关键认知: 依赖只能单向流动。找到"谁在反向调用"就是断环点。 大多数循环依赖是 CRUD 委托导致的。ServiceImpl 包装 BaseMapper ,循环往往是因为 A 需要 B 的 getById(),B 需要 A 的 count()——直接用 Mapper 替代 Service 注入,不改任何业务逻辑。 不要用 @ Lazy 、不要用 allow-circular-references ,这些都是掩耳盗铃。Spring Boot 3.x 默认禁止循环是为了逼你写出正确的分层。 最终效果 ┌───────────────────────────┬────────┬───────────────┐ │ 指标 │ 修复前 │ 修复后 │ ├───────────────────────────┼────────┼───────────────┤ │ 发行包大小 │ 260 MB │ 120 MB (-54%) │ ├───────────────────────────┼────────┼───────────────┤ │ 循环依赖 │ 5 个 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ allow-circular-references │ true │ 已移除 │ ├───────────────────────────┼────────┼───────────────┤ │ @ Lazy │ 2 处 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ 启动时间 │ ~8s │ ~4s │ └───────────────────────────┴────────┴───────────────┘

V2EX - 技术 · 2026-05-22 21:49:51+08:00 · tech

Spring Boot 3.x 循环依赖实战:从 allow-circular-references 到纯 DAG ,一个支付系统的重构之旅 项目背景:Jeepay 计全支付,Spring Boot 3.3.7 + MyBatis-Plus + Vue 3 ,多模块 Maven 项目。 前端集成引发的连锁反应 原本前后端分离部署( Nginx + 独立前端容器),想把前端 dist 直接打进 JAR 简化部署。几个坑: Vue SPA 路由 fallback:Spring Boot 3.x 默认用 PathPatternParser ,addViewControllers 不支持 {spring:\w+} 正则。最终用 @Order(HIGHEST_PRECEDENCE) 的 Filter 拦截无后缀路径 forward 到 index.html 。 Spring Security 6 ignoring() 不生效:日志明确警告 You are asking Spring Security to ignore... This is not recommended 。改为 authorizeHttpRequests().permitAll() 才生效。 字体文件 401:Security 的静态资源豁免模式漏了 .woff/.woff2/.ttf/.eot 。 前端构建 API baseURL 双层 /api/api/:VITE_API_BASE_URL=/api 拼接 url: '/api/xxx' → /api/api/xxx 。改为空值。 发行包瘦身:260MB → 120MB 三个模块的 fat JAR 共 288MB ,其中 130 个公共依赖(72MB) 重复存储 3 次。方案: 去掉未用依赖:jaxb-api(零 import)、mysql-connector-j(纯配置模块不需要)、activemq(仅编译,运行时用 RabbitMQ) 共享 lib:maven-dependency-plugin 收集所有传递依赖到 lib/(自动去重 182 个),antrun 解压 fat JAR 提取 BOOT-INF/classes/ 打包为 flat thin JAR(1.7-5MB) 启动方式:从 java -jar fat.jar 改为 java -cp "lib/*:apps/app.jar" MainClass 循环依赖根治 去掉 allow-circular-references: true 后直接启动,Spring Boot 3.x 严格检测报出完整依赖链: ┌─────┐ │ SysConfigService 自引用 (删 @ Autowired self ,直接用 this) ↑ ↓ │ IsvInfoService 自引用 (同上) 修复策略: 自引用:删字段,改用 this.xxx () 三角循环( PayInterfaceConfigService ↔ MchAppService/MchInfoService ):PayInterfaceConfigService.selectAllPayIfConfigListByAppId() 内部反向调用了 mchAppService.getById() 和 mchInfoService.getById()——这些只是 MyBatis-Plus 的简单 CRUD 委托。将这两个查询上移到 Controller 层,Service 方法改为接收 MchInfo 参数,依赖方向恢复。 两两循环:MchInfoService 注入 IsvInfoService 只是为了 getById(),IsvInfoService 注入 MchInfoService 只是为了 count()。直接替换为对应的 Mapper 注入,因为 MyBatis-Plus 的 ServiceImpl.getById() 底层就是 BaseMapper.selectById()。 关键认知: 依赖只能单向流动。找到"谁在反向调用"就是断环点。 大多数循环依赖是 CRUD 委托导致的。ServiceImpl 包装 BaseMapper ,循环往往是因为 A 需要 B 的 getById(),B 需要 A 的 count()——直接用 Mapper 替代 Service 注入,不改任何业务逻辑。 不要用 @ Lazy 、不要用 allow-circular-references ,这些都是掩耳盗铃。Spring Boot 3.x 默认禁止循环是为了逼你写出正确的分层。 最终效果 ┌───────────────────────────┬────────┬───────────────┐ │ 指标 │ 修复前 │ 修复后 │ ├───────────────────────────┼────────┼───────────────┤ │ 发行包大小 │ 260 MB │ 120 MB (-54%) │ ├───────────────────────────┼────────┼───────────────┤ │ 循环依赖 │ 5 个 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ allow-circular-references │ true │ 已移除 │ ├───────────────────────────┼────────┼───────────────┤ │ @ Lazy │ 2 处 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ 启动时间 │ ~8s │ ~4s │ └───────────────────────────┴────────┴───────────────┘

v2ex · 2026-05-22 21:49:51+08:00 · tech

Spring Boot 3.x 循环依赖实战:从 allow-circular-references 到纯 DAG ,一个支付系统的重构之旅 项目背景:Jeepay 计全支付,Spring Boot 3.3.7 + MyBatis-Plus + Vue 3 ,多模块 Maven 项目。 前端集成引发的连锁反应 原本前后端分离部署( Nginx + 独立前端容器),想把前端 dist 直接打进 JAR 简化部署。几个坑: Vue SPA 路由 fallback:Spring Boot 3.x 默认用 PathPatternParser ,addViewControllers 不支持 {spring:\w+} 正则。最终用 @Order(HIGHEST_PRECEDENCE) 的 Filter 拦截无后缀路径 forward 到 index.html 。 Spring Security 6 ignoring() 不生效:日志明确警告 You are asking Spring Security to ignore... This is not recommended 。改为 authorizeHttpRequests().permitAll() 才生效。 字体文件 401:Security 的静态资源豁免模式漏了 .woff/.woff2/.ttf/.eot 。 前端构建 API baseURL 双层 /api/api/:VITE_API_BASE_URL=/api 拼接 url: '/api/xxx' → /api/api/xxx 。改为空值。 发行包瘦身:260MB → 120MB 三个模块的 fat JAR 共 288MB ,其中 130 个公共依赖(72MB) 重复存储 3 次。方案: 去掉未用依赖:jaxb-api(零 import)、mysql-connector-j(纯配置模块不需要)、activemq(仅编译,运行时用 RabbitMQ) 共享 lib:maven-dependency-plugin 收集所有传递依赖到 lib/(自动去重 182 个),antrun 解压 fat JAR 提取 BOOT-INF/classes/ 打包为 flat thin JAR(1.7-5MB) 启动方式:从 java -jar fat.jar 改为 java -cp "lib/*:apps/app.jar" MainClass 循环依赖根治 去掉 allow-circular-references: true 后直接启动,Spring Boot 3.x 严格检测报出完整依赖链: ┌─────┐ │ SysConfigService 自引用 (删 @ Autowired self ,直接用 this) ↑ ↓ │ IsvInfoService 自引用 (同上) 修复策略: 自引用:删字段,改用 this.xxx () 三角循环( PayInterfaceConfigService ↔ MchAppService/MchInfoService ):PayInterfaceConfigService.selectAllPayIfConfigListByAppId() 内部反向调用了 mchAppService.getById() 和 mchInfoService.getById()——这些只是 MyBatis-Plus 的简单 CRUD 委托。将这两个查询上移到 Controller 层,Service 方法改为接收 MchInfo 参数,依赖方向恢复。 两两循环:MchInfoService 注入 IsvInfoService 只是为了 getById(),IsvInfoService 注入 MchInfoService 只是为了 count()。直接替换为对应的 Mapper 注入,因为 MyBatis-Plus 的 ServiceImpl.getById() 底层就是 BaseMapper.selectById()。 关键认知: 依赖只能单向流动。找到"谁在反向调用"就是断环点。 大多数循环依赖是 CRUD 委托导致的。ServiceImpl 包装 BaseMapper ,循环往往是因为 A 需要 B 的 getById(),B 需要 A 的 count()——直接用 Mapper 替代 Service 注入,不改任何业务逻辑。 不要用 @ Lazy 、不要用 allow-circular-references ,这些都是掩耳盗铃。Spring Boot 3.x 默认禁止循环是为了逼你写出正确的分层。 最终效果 ┌───────────────────────────┬────────┬───────────────┐ │ 指标 │ 修复前 │ 修复后 │ ├───────────────────────────┼────────┼───────────────┤ │ 发行包大小 │ 260 MB │ 120 MB (-54%) │ ├───────────────────────────┼────────┼───────────────┤ │ 循环依赖 │ 5 个 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ allow-circular-references │ true │ 已移除 │ ├───────────────────────────┼────────┼───────────────┤ │ @ Lazy │ 2 处 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ 启动时间 │ ~8s │ ~4s │ └───────────────────────────┴────────┴───────────────┘

V2EX - 技术 · 2026-05-22 21:49:51+08:00 · tech

Spring Boot 3.x 循环依赖实战:从 allow-circular-references 到纯 DAG ,一个支付系统的重构之旅 项目背景:Jeepay 计全支付,Spring Boot 3.3.7 + MyBatis-Plus + Vue 3 ,多模块 Maven 项目。 前端集成引发的连锁反应 原本前后端分离部署( Nginx + 独立前端容器),想把前端 dist 直接打进 JAR 简化部署。几个坑: Vue SPA 路由 fallback:Spring Boot 3.x 默认用 PathPatternParser ,addViewControllers 不支持 {spring:\w+} 正则。最终用 @Order(HIGHEST_PRECEDENCE) 的 Filter 拦截无后缀路径 forward 到 index.html 。 Spring Security 6 ignoring() 不生效:日志明确警告 You are asking Spring Security to ignore... This is not recommended 。改为 authorizeHttpRequests().permitAll() 才生效。 字体文件 401:Security 的静态资源豁免模式漏了 .woff/.woff2/.ttf/.eot 。 前端构建 API baseURL 双层 /api/api/:VITE_API_BASE_URL=/api 拼接 url: '/api/xxx' → /api/api/xxx 。改为空值。 发行包瘦身:260MB → 120MB 三个模块的 fat JAR 共 288MB ,其中 130 个公共依赖(72MB) 重复存储 3 次。方案: 去掉未用依赖:jaxb-api(零 import)、mysql-connector-j(纯配置模块不需要)、activemq(仅编译,运行时用 RabbitMQ) 共享 lib:maven-dependency-plugin 收集所有传递依赖到 lib/(自动去重 182 个),antrun 解压 fat JAR 提取 BOOT-INF/classes/ 打包为 flat thin JAR(1.7-5MB) 启动方式:从 java -jar fat.jar 改为 java -cp "lib/*:apps/app.jar" MainClass 循环依赖根治 去掉 allow-circular-references: true 后直接启动,Spring Boot 3.x 严格检测报出完整依赖链: ┌─────┐ │ SysConfigService 自引用 (删 @ Autowired self ,直接用 this) ↑ ↓ │ IsvInfoService 自引用 (同上) 修复策略: 自引用:删字段,改用 this.xxx () 三角循环( PayInterfaceConfigService ↔ MchAppService/MchInfoService ):PayInterfaceConfigService.selectAllPayIfConfigListByAppId() 内部反向调用了 mchAppService.getById() 和 mchInfoService.getById()——这些只是 MyBatis-Plus 的简单 CRUD 委托。将这两个查询上移到 Controller 层,Service 方法改为接收 MchInfo 参数,依赖方向恢复。 两两循环:MchInfoService 注入 IsvInfoService 只是为了 getById(),IsvInfoService 注入 MchInfoService 只是为了 count()。直接替换为对应的 Mapper 注入,因为 MyBatis-Plus 的 ServiceImpl.getById() 底层就是 BaseMapper.selectById()。 关键认知: 依赖只能单向流动。找到"谁在反向调用"就是断环点。 大多数循环依赖是 CRUD 委托导致的。ServiceImpl 包装 BaseMapper ,循环往往是因为 A 需要 B 的 getById(),B 需要 A 的 count()——直接用 Mapper 替代 Service 注入,不改任何业务逻辑。 不要用 @ Lazy 、不要用 allow-circular-references ,这些都是掩耳盗铃。Spring Boot 3.x 默认禁止循环是为了逼你写出正确的分层。 最终效果 ┌───────────────────────────┬────────┬───────────────┐ │ 指标 │ 修复前 │ 修复后 │ ├───────────────────────────┼────────┼───────────────┤ │ 发行包大小 │ 260 MB │ 120 MB (-54%) │ ├───────────────────────────┼────────┼───────────────┤ │ 循环依赖 │ 5 个 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ allow-circular-references │ true │ 已移除 │ ├───────────────────────────┼────────┼───────────────┤ │ @ Lazy │ 2 处 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ 启动时间 │ ~8s │ ~4s │ └───────────────────────────┴────────┴───────────────┘

IT之家 · 2026-05-21 15:24:25+08:00 · tech

IT之家 5 月 21 日消息,科技媒体 cyberkendra 昨日(5 月 20 日)发布博文, 报道称 Linux 内核再次曝光名为 PinTheft 的提权漏洞,相关补丁已经进入上游内核。 在 Copy Fail (4 月 29 日)、 Dirty Frag (5 月 7 日)、Fragnesia (5 月 13 日)以及 Qualys 威胁研究部门(TRU)披露 CVE-2026-46333 漏洞外,这是过去 3 周内曝光的第 5 个高危漏洞。 PinTheft 漏洞由 V12 安全团队的 Aaron Esau 发现,问题出在 RDS(Reliable Datagram Sockets,可靠数据报套接字)的零拷贝发送路径。 rds_message_zcopy_from_user()在逐页把用户态内存固定到内核空间后,如果后续页面触发错误,错误处理路径会先释放已固定页面;但后续 RDS 消息清理又会再次释放一次,于是形成 double-free。 单看引用计数错误,这类问题通常不容易直接变成稳定提权。不过 PinTheft 把 io_uring 拉进了利用链。 攻击者先把一个匿名内存页注册成 io_uring 固定缓冲区,并赋予 1024 个引用偏置;随后通过 1024 次故意失败的 RDS 发送,逐步耗尽这些引用,最终让 io_uring 手里留下一个本不该再持有的悬空指针。 接下来,利用代码会把目标 SUID 二进制的第一页逐出缓存,再回收同一个物理页,并借助 io_uring 的悬空缓冲区指针覆写特权程序的页缓存。 原文提到, /usr/bin/su 、passwd 和 pkexec 都是优先目标,攻击者随后运行被改写的程序,就能直接拿到 root shell。 不过,这个漏洞的利用门槛并不算低。除了需要加载 RDS 模块,系统还必须启用 io_uring,存在可读的 SUID-root 二进制文件,并且运行在 x86_64 平台。 按原文测试结果,在常见发行版中,只有 Arch Linux 默认加载了所需的 RDS 模块,其他主流发行版并不会开箱即用加载它,因此受影响范围相对有限。 IT之家附上参考地址 PinTheft

IT之家 · 2026-05-21 15:17:39+08:00 · tech

IT之家 5 月 21 日消息,今日,三星 Galaxy S23 Ultra 国行版手机获推 One UI 8.5 版本。“升级至 One UI8.5,获取焕然一新的外观和更深层次的个性化体验。通过简化日常程序任务,您将拥有更多自由,从而提升效率和创造力。” IT之家附主要内容如下: 界面设计 焕然一新的界面设计 :One UI 将沉浸式视觉与深度个性化相结合,无缝融入您的日常生活,带来更精致、更有质感的设计。透明模糊效果增添了层次感,让内容浏览更清晰;同时浮动元素会随您的操作自然响应,带来更专注的体验。通过直观易懂的数据可视化,One UI 提供了既个性化又亲切的设计,帮助您专注于重要事项。 盖乐世 AI 连续进行图片生成 :创作无需中断。照片助手现支持您在结果界面直接使用不同功能生成 AI 图片,而无需保存每一步的迭代版本。完成后,您可在历史记录中回顾所有创作,并挑选最喜爱的作品。 Bixby 更智能的设备控制 :使用您自己的语言与 Bixby 交流。即使不使用精确的命令或功能名称,Bixby 也能更好地找到您需要的设置或功能。只需说出您的需求,剩下的交给 Bixby。 随时随地提出任何问题 :无论是快速解答还是详细信息,只需询问 Bixby 即可获得即时响应。无需花费时间进行多次搜索或在多个应用程序之间切换。 对话历史记录 :回顾与 Bixby 的过往对话比以往更加便捷。现在,您可以从 Bixby 应用程序的侧边面板访问对话历史记录。 主屏幕和锁定屏幕 锁定屏幕自动布局 :人物或宠物照片的壁纸现在每次都能完美适配。当您为锁定屏幕选择照片时,该照片将自动调整,以最佳方式适配您的时钟和小组件布局。 新增可下载壁纸 :发现具有交互元素的新壁纸。壁纸可下载,因此在不使用时不会占用您的存储空间。 更多可自定义的时钟字体 :个性化您的锁定屏幕时钟。现在,您可以调整更多字体样式的粗细,以匹配您偏好的外观。 时钟 天气闹钟背景 :查看当前天气的同时开启新的一天。为让您直观地了解天气状况,闹钟响起时,背景将显示当前天气。 时区转换器 :一目了然地对比时区。时钟应用程序中新增滑动条功能,让您轻松查看世界各地之间的时差。 连接性 存储分享 :随时随地访问您的文件。您其他三星手机、平板电脑和个人电脑中的文件,均可通过手机上的“我的文件”应用程序访问。您也可以在其他三星设备 (甚至电视) 上访问您手机中的文件。 自动开启热点 :更轻松地分享手机的互联网连接。您可以与三星账户的家庭群组共享热点,也可以自行创建热点共享群组,与任意选择的人共享。 家庭设备分享 :轻松与家人连接并分享文件、屏幕、相机、存储空间等。家庭设备分享让您能与家庭成员的盖乐世设备一起使用 S 互传、相机分享、存储分享、自动开启热点和多重控制等功能。 快速连接至 Smart View 设备 :更快地连接到您喜爱的显示设备。您现在可以在主屏幕上添加快捷方式,将手机屏幕即时镜像到电视或其他显示设备。 增强型 Auracast 功能 :使用 Auracast 收听和广播声音比以往更加便捷。广播和收听选项现在都位于“设置”中的“音频广播”菜单中。 语音广播 :使用 Auracast 向周围的人广播您的语音。除了媒体声音之外,您现在还可以使用手机内置麦克风广播您的语音。 电池和电源 改进的电池信息 :更清晰地查看电池使用情况。重新设计的“电池”设置屏幕让您更轻松地查看剩余使用时间、充电状态以及过去一周的每日使用情况。 改进的省电模式 :使用省电模式,让您的电池在不充电的情况下续航更久。选择“标准”以提供适度省电效果,可自定义限制项;或选择“最大”以关闭所有非必要功能,使电池续航最大化。 安全与隐私 隐私提醒 :随时掌握您的隐私动态。现在,当某个应用程序权限可能使您的个人数据面临风险时,您将收到警告,并获得相应的应对建议。 临时关闭自动拦截程序 :如果您需要临时关闭自动拦截程序的安全保护,新增的选项可让其在 30 分钟后自动重新开启,以防您忘记打开。 辅助功能 停留操作和角动作 :“在指针停止后的自动操作”功能已分为 2 个功能。“停留操作”可让您设置当鼠标停止移动达到指定时长后触发的自定义操作。“角动作”为屏幕的四个角落分别设定不同的触发操作。 更多改进 更可自定义的快捷面板 :按照您喜欢的方式排列快捷设置。现在,您可以在快捷面板中添加、移除、重新排序和重组控件。 提醒的提前提示 :在提醒到期前接收通知,以确保您不会忘记重要任务。您可以为每个提醒选择提前多久收到通知。 在三星笔记中插入表格 :使用表格整理笔记中的信息。您可以调整列宽、颜色和边框样式,同时自动计算功能可帮助您提高效率并节省时间。 部分屏幕录制 :在您的屏幕录制中仅包含您需要的内容。您现在可以仅选择您想要录制的屏幕部分。 计算器提示 :节省计算时间。复制到剪贴板的数字和公式将在您打开计算器时自动提示,轻点即可输入。