告别Magnet!Hammerspoon窗口管理全攻略:从基础分屏到高级布局

news2026/3/14 18:27:21
告别MagnetHammerspoon窗口管理全攻略从基础分屏到高级布局如果你是一名Mac用户并且每天需要与十几个窗口打交道——浏览器、代码编辑器、终端、文档、通讯软件——那么你一定对窗口管理这件事又爱又恨。爱的是macOS流畅的动画和精致的界面恨的是它原生的窗口管理逻辑总让人觉得差那么一口气。于是像Magnet、Rectangle这样的付费工具应运而生它们通过简单的快捷键让窗口“吸附”到屏幕的各个位置效率提升立竿见影。但今天我想和你聊聊一个更强大、更自由的选择Hammerspoon。它不是一个简单的窗口管理工具而是一个通过Lua脚本驱动整个macOS自动化的“瑞士军刀”。当你从Magnet这类“开箱即用”的工具转向Hammerspoon时你获得的不是功能上的简单叠加而是一种**从“使用工具”到“创造工具”**的思维跃迁。窗口管理只是它能力的冰山一角却是我们进入这个奇妙世界最直观、也最实用的入口。这篇文章就是为你——那些不满足于固定快捷键渴望完全掌控自己的工作流并愿意为此投入一点学习成本的效率追求者——准备的。我们将彻底抛开对Magnet的依赖用Hammerspoon构建一套从基础到高级完全属于你自己的窗口管理系统。你会发现当窗口能听懂你的每一个指令时那种行云流水的感觉会上瘾。1. 从零开始Hammerspoon的安装与核心概念在深入窗口管理之前我们需要先搭建好舞台。Hammerspoon的安装非常简单但其背后的配置哲学决定了你未来能走多远。1.1 安装与初次配置最推荐的方式是通过Homebrew进行安装这是管理macOS软件包最优雅的方式。打开你的终端Terminal输入以下命令brew install --cask hammerspoon安装完成后你可以在“应用程序”文件夹中找到它并启动。首次运行时系统会请求辅助功能权限这是Hammerspoon控制窗口和模拟键盘输入所必需的。请务必在“系统设置” - “隐私与安全性” - “辅助功能”中勾选Hammerspoon。注意如果后续某些窗口操作功能失效请首先检查这里的权限是否被意外关闭。启动后你会在菜单栏看到一个锤子图标。点击它选择“Open Config”这会打开Hammerspoon的配置文件目录。所有的魔法都始于这个目录下的init.lua文件。1.2 理解配置结构你的自动化中枢~/.hammerspoon/init.lua是Hammerspoon的“大脑”。它是一个纯文本的Lua脚本文件你所有的自动化规则都写在这里。Lua是一门轻量级但功能强大的脚本语言语法直观即使没有编程基础跟着例子也能很快上手。一个最基本的配置框架如下所示-- ~/.hammerspoon/init.lua -- 这是你的主配置文件 -- 1. 加载必要的模块Spoons hs.loadSpoon(SpoonInstall) -- 一个强大的插件管理器 -- 2. 定义全局变量和配置 local hyper {cmd, alt, ctrl} -- 定义一个“超级键”组合方便后续引用 -- 3. 编写你的第一个功能重新加载配置 hs.hotkey.bind(hyper, R, function() hs.reload() hs.alert.show(配置已重载) end) -- 4. 更多功能将在这里添加...保存文件后点击菜单栏的锤子图标选择“Reload Config”你的配置就生效了。按下CmdAltCtrlR你会看到一个提示框说明配置重载成功。这个“重载”功能至关重要它让你在修改配置后无需重启应用就能立即测试。1.3 核心概念窗口、屏幕与坐标系在编写窗口管理脚本前需要理解Hammerspoon看待屏幕的方式。它将每个窗口视为一个可以精确操控的矩形对象其位置和大小由一个包含四个数字的“单位矩形”{x, y, w, h}定义。x,y: 窗口左上角在屏幕上的坐标以屏幕左上角为原点(0, 0)。w,h: 窗口的宽度和高度。更常用的是单位化坐标即所有值都在0到1之间。例如{0, 0, 1, 1}表示全屏窗口。{0, 0, 0.5, 1}表示占据屏幕左半部分。{0.5, 0, 0.5, 1}表示占据屏幕右半部分。{0, 0, 0.5, 0.5}表示屏幕左上角的四分之一区域。Hammerspoon提供了hs.window.focusedWindow()来获取当前焦点窗口以及win:moveToUnit(unitRect)方法来将其移动到指定区域。这就是我们实现所有分屏逻辑的基础。2. 基础分屏复刻并超越Magnet让我们从最常用的功能开始将窗口快速吸附到屏幕的左侧、右侧、上半部分等。我们将用几行代码实现Magnet的核心功能并且可以自由定义触发快捷键。2.1 实现经典的四向分屏首先我们定义一组最常用的布局左半屏、右半屏、上半屏、下半屏和全屏。我们将它们绑定到Cmd Alt 方向键上这是一个与许多工具类似且不易冲突的快捷键组合。-- 定义快捷键修饰键 local mash {cmd, alt} -- 左半屏 hs.hotkey.bind(mash, Left, function() local win hs.window.focusedWindow() if win then win:moveToUnit({0, 0, 0.5, 1}) end end) -- 右半屏 hs.hotkey.bind(mash, Right, function() local win hs.window.focusedWindow() if win then win:moveToUnit({0.5, 0, 0.5, 1}) end end) -- 上半屏 hs.hotkey.bind(mash, Up, function() local win hs.window.focusedWindow() if win then win:moveToUnit({0, 0, 1, 0.5}) end end) -- 下半屏 hs.hotkey.bind(mash, Down, function() local win hs.window.focusedWindow() if win then win:moveToUnit({0, 0.5, 1, 0.5}) end end) -- 全屏 (使用 CmdAltF) hs.hotkey.bind(mash, F, function() local win hs.window.focusedWindow() if win then win:moveToUnit({0, 0, 1, 1}) end end)现在试试将任意窗口聚焦然后按下CmdAlt左箭头它会立刻贴合到屏幕左侧。你已经实现了Magnet最基础的功能。2.2 进阶四象限与中心窗口四向分屏解决了大部分问题但有时我们需要更精细的布局比如将参考文档放在左上角代码编辑器在左下角终端在右侧。这时四象限布局就非常有用。-- 使用 CmdAltShift 方向键 进行四象限布局 local mashShift {cmd, alt, shift} -- 左上角 hs.hotkey.bind(mashShift, Left, function() local win hs.window.focusedWindow() if win then win:moveToUnit({0, 0, 0.5, 0.5}) end end) -- 右上角 hs.hotkey.bind(mashShift, Right, function() local win hs.window.focusedWindow() if win then win:moveToUnit({0.5, 0, 0.5, 0.5}) end end) -- 左下角 hs.hotkey.bind(mashShift, Down, function() -- 通常用 Down 代表左下 local win hs.window.focusedWindow() if win then win:moveToUnit({0, 0.5, 0.5, 0.5}) end end) -- 右下角 hs.hotkey.bind(mashShift, Up, function() -- 通常用 Up 代表右下 local win hs.window.focusedWindow() if win then win:moveToUnit({0.5, 0.5, 0.5, 0.5}) end end)此外一个居中的中等大小窗口非常适合阅读或临时任务-- 居中窗口 (占据屏幕80%面积) hs.hotkey.bind({cmd, alt}, C, function() local win hs.window.focusedWindow() if win then local margin 0.1 -- 10%的边距 win:moveToUnit({margin, margin, 1 - 2*margin, 1 - 2*margin}) end end)2.3 使用插件增强Spoon与WinWin手动编写所有布局函数虽然灵活但有些优秀的社区插件可以让我们事半功倍。Spoon是Hammerspoon的插件系统而WinWin是一个专精于窗口管理的Spoon。首先我们需要安装SpoonInstall来管理插件。将以下代码添加到你的init.lua中-- 安装并加载 SpoonInstall hs.loadSpoon(SpoonInstall) spoon.SpoonInstall:andUse(WinWin, { repo https://github.com/Hammerspoon/Spoons, hotkeys { -- 这里可以定义WinWin自带的快捷键但我们选择手动绑定以保持控制 } })保存并重载配置后你就可以使用spoon.WinWin对象提供的一系列强大函数了。WinWin不仅提供了预定义的布局还包含了窗口移动、微调、甚至跨屏幕移动的功能。下面是一个结合WinWin的配置示例它提供了比我们手写更流畅的动画如果系统支持和更多布局选项-- 假设已经加载了 spoon.WinWin -- 使用WinWin实现带动画的左半屏 hs.hotkey.bind({cmd, alt, ctrl}, Left, function() local win hs.window.focusedWindow() spoon.WinWin.moveAndResize(halfleft, win) -- “halfleft”是WinWin预定义的布局 end) -- WinWin的预定义布局包括 -- halfleft, halfright, halfup, halfdown -- cornerNW, cornerNE, cornerSW, cornerSE (四角) -- maximize, center (最大化居中) -- nextscreen, prevscreen (移动到下一个/上一个屏幕) -- 你甚至可以微调窗口位置每次移动10像素 hs.hotkey.bind({ctrl, alt, shift}, Right, function() spoon.WinWin.stepMove(right, hs.window.focusedWindow()) end)通过组合使用原生API和WinWin插件你已经在基础分屏的易用性和功能性上全面超越了Magnet。但这仅仅是开始。3. 高级布局自定义规则与智能管理当基础分屏成为肌肉记忆后你会发现更复杂的需求为特定应用设置专属布局、根据时间自动排列窗口、或者实现类似“调度中心”的一键场景切换。这才是Hammerspoon真正发光的地方。3.1 应用专属布局规则不同的应用适合不同的窗口布局。比如你希望Slack总是出现在屏幕右侧三分之一处而终端在左侧占据三分之二。我们可以通过监听应用激活事件来实现。-- 定义一个函数为特定应用设置布局 function setLayoutForApp(appName, unitRect) local app hs.application.get(appName) if app then local windows app:allWindows() for _, win in ipairs(windows) do -- 只对标准窗口和非最小化窗口进行操作 if win:isStandard() and not win:isMinimized() then win:moveToUnit(unitRect) win:focus() -- 可选将焦点移到这个窗口 end end end end -- 监听应用激活事件 local applicationWatcher hs.application.watcher.new(function(appName, eventType, appObject) if eventType hs.application.watcher.activated then -- 当应用被激活时触发 if appName Slack then setLayoutForApp(Slack, {2/3, 0, 1/3, 1}) -- 右侧1/3 elseif appName Code or appName Visual Studio Code then -- 为VSCode设置一个适合编码的布局左侧70%右侧30%给终端 setLayoutForApp(appName, {0, 0, 0.7, 1}) elseif appName iTerm2 or appName Terminal then -- 终端出现在右侧30% setLayoutForApp(appName, {0.7, 0, 0.3, 1}) end -- 可以继续添加更多应用规则... end end) -- 启动监听器 applicationWatcher:start()这个脚本会在你每次切换到这个应用时自动将其窗口调整到预设位置。你可以根据自己的工作流为每一个核心应用定制专属的“工位”。3.2 创建“工作场景”与一键切换这是Hammerspoon的杀手级功能。你可以定义不同的“场景”比如“写作模式”、“开发模式”、“会议模式”一键切换所有相关应用的窗口布局。我们通过一个配置表和一个切换函数来实现-- 定义不同的工作场景 local workScenes { coding { {Code, {0, 0, 0.6, 1}}, -- VSCode 占左60% {iTerm2, {0.6, 0, 0.4, 0.7}}, -- 终端在右侧偏上 {Google Chrome, {0.6, 0.7, 0.4, 0.3}}, -- 浏览器在右侧下方 }, writing { {Bear, {0.1, 0.1, 0.8, 0.8}}, -- 写作软件居中 {Safari, {0.7, 0, 0.3, 1}}, -- 浏览器在右侧用于查资料 }, meeting { {Zoom.us, {0, 0, 1, 0.7}}, -- 会议软件在上方 {Notes, {0, 0.7, 1, 0.3}}, -- 笔记在下方 } } -- 切换场景的函数 function switchScene(sceneName) local scene workScenes[sceneName] if not scene then hs.alert.show(未知场景: .. sceneName) return end for _, appConfig in ipairs(scene) do local appName, unitRect appConfig[1], appConfig[2] -- 先启动或聚焦应用 hs.application.launchOrFocus(appName) -- 等待一小段时间让窗口就绪 hs.timer.doAfter(0.3, function() setLayoutForApp(appName, unitRect) end) end hs.alert.show(已切换到场景: .. sceneName) end -- 为场景绑定快捷键 hs.hotkey.bind({cmd, alt, ctrl}, 1, function() switchScene(coding) end) hs.hotkey.bind({cmd, alt, ctrl}, 2, function() switchScene(writing) end) hs.hotkey.bind({cmd, alt, ctrl}, 3, function() switchScene(meeting) end)现在按下CmdAltCtrl1你的开发环境瞬间就位按下2立刻进入沉浸式写作状态。这种一键切换整个工作台的能力是任何现成窗口管理工具都难以提供的个性化体验。3.3 多显示器下的复杂布局管理对于使用多台显示器的用户窗口管理复杂度成倍增加。Hammerspoon可以精确控制窗口在哪块屏幕的哪个位置。-- 获取所有屏幕 local screens hs.screen.allScreens() local primaryScreen hs.screen.primaryScreen() -- 主屏幕 -- 将窗口移动到副屏并全屏 hs.hotkey.bind({cmd, alt, shift}, M, function() local win hs.window.focusedWindow() if win and #screens 1 then local nextScreen win:screen():next() -- 获取下一个屏幕 win:moveToScreen(nextScreen) win:moveToUnit({0, 0, 1, 1}) -- 在新屏幕上全屏 end end) -- 定义一个跨屏幕的“三栏布局”主屏左中副屏右 hs.hotkey.bind({cmd, alt, ctrl}, 3, function() local win hs.window.focusedWindow() if not win then return end local currentScreen win:screen() local screenFrames {} for i, screen in ipairs(screens) do screenFrames[i] screen:frame() end -- 假设有两块屏幕且副屏在主屏右侧 if #screens 2 then local totalWidth screenFrames[1].w screenFrames[2].w -- 第一栏主屏左半部分 if hs.mouse.getAbsolutePosition().x screenFrames[1].w then win:moveToUnit({0, 0, 0.33, 1}) -- 第二栏主屏右半部分延伸至副屏左侧 else -- 这是一个更复杂的计算需要将单位坐标映射到跨屏的绝对坐标 -- 此处简化直接移动到副屏并占据左半部分 win:moveToScreen(screens[2]) win:moveToUnit({0, 0, 0.5, 1}) end end end)多显示器布局的脚本相对复杂因为它涉及到具体的屏幕排列方式是水平并列还是垂直堆叠。你需要根据自己显示器的实际排列来调整坐标计算逻辑。Hammerspoon提供了hs.screen模块来获取所有屏幕的详细信息这为编写自适应脚本提供了可能。4. 超越窗口打造无缝的自动化工作流窗口管理是Hammerspoon的绝佳切入点但它的野心远不止于此。当你熟悉了Lua和Hammerspoon的API后可以将窗口管理与其它自动化任务结合创造出真正无缝衔接的工作流。4.1 与应用启动深度集成我们之前已经用hs.application.launchOrFocus来聚焦应用。我们可以将其与窗口布局结合得更紧密-- 一键启动或聚焦开发环境 hs.hotkey.bind({cmd, alt}, E, function() -- 启动或聚焦VSCode hs.application.launchOrFocus(Visual Studio Code) -- 给一点时间让窗口出现 hs.timer.doAfter(0.5, function() local win hs.window.find(Visual Studio Code) if win then win:moveToUnit({0, 0, 0.7, 1}) end end) -- 启动或聚焦iTerm2 hs.application.launchOrFocus(iTerm2) hs.timer.doAfter(0.7, function() local win hs.window.find(iTerm2) if win then win:moveToUnit({0.7, 0, 0.3, 0.7}) end end) -- 启动或聚焦Chrome并打开开发文档 hs.application.launchOrFocus(Google Chrome) hs.timer.doAfter(1.0, function() local win hs.window.find(Google Chrome) if win then win:moveToUnit({0.7, 0.7, 0.3, 0.3}) -- 甚至可以自动导航到特定网址需要辅助功能权限 hs.eventtap.keyStrokes(https://developer.mozilla.org\n) end end) end)这个快捷键CmdAltE不仅打开了所有需要的应用还将它们精准地摆放在了预设位置甚至为浏览器填入了网址。这就像为你的工作准备了一个专属的“作战指挥室”。4.2 状态监控与动态调整Hammerspoon可以监控系统状态并据此动态调整窗口。例如当检测到连接了外接显示器时自动启用一套不同的窗口布局。-- 监听屏幕配置变化 local screenWatcher hs.screen.watcher.new(function() local currentScreens #hs.screen.allScreens() hs.alert.show(屏幕配置已变更当前屏幕数量: .. currentScreens) -- 如果连接了外接显示器自动将某些窗口移动到副屏 if currentScreens 1 then -- 例如自动将通讯软件移到副屏 local chatApps {Slack, Discord, Telegram} for _, appName in ipairs(chatApps) do local app hs.application.get(appName) if app then local wins app:allWindows() for _, win in ipairs(wins) do if win:isStandard() then win:moveToScreen(hs.screen.allScreens()[2]) -- 移到第二块屏幕 win:moveToUnit({0.66, 0, 0.34, 1}) -- 放在右侧三分之一 end end end end end end) screenWatcher:start()4.3 故障排查与性能优化随着配置越来越复杂你可能会遇到快捷键冲突、脚本错误或性能问题。Hammerspoon提供了强大的控制台来帮助你。打开控制台点击菜单栏图标选择“Console”或者用快捷键Cmd;如果没改过。查看日志所有print()语句和错误信息都会输出在这里。交互式调试你可以在控制台里直接输入Lua代码并执行实时测试函数。例如输入hs.alert.show(Test)并回车会立即看到一个提示框。性能检查如果感觉反应变慢可以在控制台使用hs.timer.secondsSinceEpoch()来给代码块计时找出瓶颈。一个常见的优化是避免在频繁触发的事件如每次按键中执行重操作。对于窗口管理我们的操作通常很快但如果你集成了网络请求或文件操作就需要考虑使用防抖或延迟执行。5. 从配置到创作构建你的专属系统至此你已经掌握了用Hammerspoon进行窗口管理的核心技能。但真正的力量在于你不再受限于任何软件预设的功能列表。你可以根据自己独特的工作习惯创造出独一无二的自动化脚本。我的个人配置里有一个“演示模式”快捷键。它会隐藏所有桌面图标和菜单栏。将当前演示窗口通常是Keynote或浏览器全屏到主显示器。将讲稿和计时器窗口放在副屏仅对我可见。将系统音量调整到70%。按下快捷键后一切在2秒内自动完成。这种深度定制是Hammerspoon带来的终极自由。我建议你从模仿本文的示例开始然后尝试修改参数比如调整布局比例、更换快捷键。接着将不同的功能组合起来比如把窗口布局和一段文本扩展Text Expansion功能绑定到同一个快捷键上。网络上有一个非常活跃的Hammerspoon社区GitHub上有大量用户分享的精彩配置。当你遇到瓶颈或需要灵感时去那里逛逛总会有收获。但记住最好的配置永远是那个最贴合你双手和大脑的配置。最后别忘了定期备份你的~/.hammerspoon文件夹。这里面装着的是你为自己量身打造的数字工作环境是无价的效率资产。当你换到一台新Mac或者重装系统后只需把这个文件夹复制回去你熟悉的一切——窗口如何弹出、应用如何排列、那个神奇的快捷键——都会瞬间回归。这种掌控感和连续性才是告别Magnet这类工具后Hammerspoon带给你的最大礼物。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2408340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…