首页 文章 精选 留言 我的

精选列表

搜索[HTTP/3],共10000篇文章
优秀的个人博客,低调大师

连接池满了、业务早结束的3个高发点

大家好,我是数据库小学妹👋 我踩过的坑,你别再踩。 有回报表导出改了异步,接口秒回「任务已提交」。业务侧看着挺好,可连接池的告警开始响。我以为导出量大,先把它往上调了一截。加了还是满,业务量也没涨。 最想不通的是,很多连接挂在库里。状态是 Sleep,时间越来越长。业务说早就结束了,连接却没回来。后来才想明白,池子满不一定是池子小,也可能是有人借了没还。 ## 先分清:不够用,还是不归还 连接池满,只有两种可能。一种是真不够用。并发上来,或者慢查询占着连接不放。这时连接都在跑,`Threads_running` 也高。另一种是借了不还。连接被拿走,代码没走到归还那一步。业务逻辑早结束了,连接还在池外漂着。这时 `Threads_connected` 高,`Threads_running` 却很低。 两种现象长得像,处置完全相反。不够用要扩容或优化 SQL。不归还,加多少池子都只是拖时间。 | 信号 | 不够用(容量/慢 SQL) | 借了不还(泄漏) | | --- | --- | --- | | `Threads_connected` | 高 | 高 | | `Threads_running` | 也高 | 低,大量 Sleep | | 连接空闲时间 | 短 | 越来越长 | | 加连接池 | 有效 | 短暂缓解,很快又满 | | 重启应用 | 会好,根因仍在 SQL 或流量 | 会好,但复发的时点没变 | ## 连接池里漏的到底是什么 这里得先掰开一个概念。连接池里的「连接」,和数据库里的「会话」,不是一回事。 应用 `getConnection()`,拿到的是池里的一个对象。它背后握着一条真实的数据库会话。用完 `close()`,对象被收回,会话留着复用。平时这两步是配对的。泄漏就卡在这一步。池对象被借走,`close()` 没执行。数据库那边一条会话一直开着,池这边这条也一直算「借出中」。两头都不释放。 所以加池子大小只是加了分母。泄漏还在,只是从五十条漏到一百条,满了的时间往后挪。这也解释了为什么重启管用。重启把进程里的池对象清空,数据库会话跟着断。可代码不改,过一阵又漏回来。 ## 怎么确认是泄漏 先看两个数。 ```sql SHOW STATUS LIKE 'Threads_connected'; SHOW STATUS LIKE 'Threads_running'; ``` 前者是已建立连接数,后者是正在执行 SQL 的连接数。前者高、后者低,差值一大,基本就是泄漏。两个都高,先往慢查询和突发流量查。 接着看连接都挂在哪。 ```sql SELECT host, command, COUNT(*) AS cnt, MAX(time) AS max_idle FROM information_schema.processlist WHERE user = 'app_user' GROUP BY host, command ORDER BY cnt DESC; ``` `command` 是 `Sleep` 或 `Query`,`time` 是连接在当前状态的秒数。Sleep 的 time 是空闲了多久,Query 的 time 是这条 SQL 跑了多久。两个语义别混,一个是占着不用,一个是正在用。 光看状态还不够,得看那会话到底在干什么。 ```sql SELECT t.processlist_id, t.processlist_host, t.processlist_command, t.processlist_time, e.sql_text FROM performance_schema.threads t LEFT JOIN performance_schema.events_statements_current e ON e.thread_id = t.thread_id WHERE t.processlist_user = 'app_user' ORDER BY t.processlist_time DESC LIMIT 20; ``` Sleep 的连接,这里能看到它最后一条 SQL。往往就是泄漏前借它的那次操作,直接指向问题代码。 有长事务挂着,连接也回不去。 ```sql SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_query FROM information_schema.innodb_trx ORDER BY trx_started ASC; ``` `trx_state` 是 `RUNNING`,`trx_query` 是空,`trx_started` 又很早,说明事务开了没提交,连接被它锁着。这种不算严格意义的泄漏,但表现一样,连接回不去。 国产数据库里面,金仓KES也有对应的视图。`sys_stat_activity`里能看到每个会话的状态、空闲时长和最后执行的SQL,用法和`processlist`类似。如果手上有KES Studio或KEMCC,还能直接下钻到会话级别看连接到底卡在哪一步,不用自己拼多个系统表。 ## 三个高发点 第一类,异常分支没归还。最常见。 ```java // 错误:异常抛出时,conn 不会关 Connection conn = dataSource.getConnection(); try { PreparedStatement ps = conn.prepareStatement(sql); ps.executeQuery(); } catch (SQLException e) { log.error("query failed", e); throw new BizException(e); } // finally 没写,异常路径更没有 ``` 正常路径忘了关,异常路径更不会关。一次两次看不出来,累积起来就是泄漏。 第二类,连接被交给异步线程。这正是我踩的那个。 ```java // 错误:连接借给异步线程,请求已返回,连接还占着 public void export(Long id) { Connection conn = dataSource.getConnection(); CompletableFuture.runAsync(() -> { // 长时间查数据、写文件 // 从头到尾没 close }); // 接口秒回,业务「结束」了 } ``` 接口返回了,业务看着结束了。可异步线程还攥着连接。一个导出任务占一条,跑得越久占得越死。 第三类,ResultSet 或游标没关。很多人记得关连接,忘了关结果集。 ```java // 错误:ResultSet 没关,等于连接一直被占 ResultSet rs = ps.executeQuery(); while (rs.next()) { ... } rs = null; // 置空不等于关闭 ``` 流式查询尤其危险。结果集没读完或没关,连接就一直被占着。ORM 里的懒加载、游标,本质也是这一类。 ## 止血和根治 止血先看能不能扛到低峰。能扛就等低峰重启。扛不住,再考虑在库里处理。 处理前先分清两条命令。`KILL QUERY id` 只终止这条连接正在跑的语句,连接还在。`KILL CONNECTION id` 才把整个会话断掉。 ```sql -- 先查,再决定杀谁 SELECT id, user, host, command, time, info FROM information_schema.processlist WHERE command = 'Sleep' AND time > 3600; ``` kill 之前一定先确认来源。还有个点容易忽略。你把数据库会话杀了,应用池那边还以为连接是好的。下次拿出来用,可能直接报 `Communications link failure`。所以真要杀,杀完最好配合应用重启或连接验证,别让池子继续发死连接。 根治在代码。连接的借和还,必须成对。 ```java // 正确:try-with-resources,异常也会归还 try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery()) { while (rs.next()) { ... } } catch (SQLException e) { log.error("query failed", e); throw new BizException(e); } ``` 异步任务里也一样。连接要么在任务内部借、内部还,要么别跨线程传。别让一个连接活过它该活的作用域。 再配一个泄漏探针。HikariCP 的 `leak-detection-threshold`,连接被借走超时没还,就打警告带调用栈。 ```yaml spring.datasource.hikari: leak-detection-threshold: 60000 # 60 秒未归还就打日志 ``` 它只报警,不帮你关。阈值设成业务正常最长用时的两三倍,太长没意义,太短全是误报。生产上开着,成本很低。 这里有个常被误解的点。`maxLifetime` 不是给泄漏兜底的。它主要回收池里空闲的连接。一条被借走一直没还的连接,它管不着。所以别指望配个 `maxLifetime` 就能治泄漏。 ## 加连接之前,先问一句 池子满了,第一反应是加参数。这条我踩过。加连接能把故障往后拖,但拖不掉根。 判断顺序其实很简单。先看 `Threads_running`,高就往慢 SQL 查;低就往泄漏查。低的时候再加池子,只是把泄漏藏得更深。下一次来得更晚,也更猛。 监控也提前定好。盯四个数:活跃连接、空闲连接、等待线程、获取超时次数。空闲长期是 0,等待开始出现,超时计数抬头,就是池子在喊救命。 连接池不是容量越大越安全。它是一笔账,借出去的每一条都得记着还。漏掉的那条,不会自己回来。 ## 避坑清单 池子满了,别急着加连接。先分清是不够用,还是借了不还。前者扩容,后者改代码,方向反了白忙。 连接一定要在借它的那个作用域里还。别跨线程传,别塞进异步任务,别指望 GC 帮你关。ResultSet 和游标也一样。 最后一条是我自己踩的。我以前觉得连接池满就是容量问题,加参数最省事。直到一次异步导出把连接耗光,才发现池子开多大,都填不满一个看不见的无底洞。现在我看连接告警,先看 `Threads_running`,再看来源 IP,最后才动参数。这一步多花十分钟,少一晚救火。 ## 写在最后 连接泄漏最难的地方,是它不喊疼。业务照常返回,接口照常 200。坏的地方在池子深处,一条一条地漏。等灯亮起来,往往已经漏了很久。 参数能调,代码得改。连接池满这件事,池子大小只是表象,借还成对才是根。你把它当成一笔账来管,它才不会在某天晚上,突然把账翻给你看。 你们的连接池监控了哪些指标?有没有被连接泄漏坑过?评论区聊聊。 我是数据库小学妹,帮你少走弯路少踩坑,咱们下篇见👋

优秀的个人博客,低调大师

Vue 3 中 watch 与 watchEffect 的依赖收集差异导致页面重复请求的排查记录

最近在维护一个后台管理页面时,遇到一个比较隐蔽的问题:列表页在筛选条件变化后,会连续发起两次相同的数据请求。第一次请求很快返回,但紧接着又发了一次,导致 loading 状态闪烁,偶尔还会因为响应顺序问题把旧数据覆盖到新数据上。排查后发现,问题出在 `watch` 和 `watchEffect` 的依赖收集机制差异上——`watchEffect` 会自动追踪回调里用到的响应式数据,而 `watch` 只监听显式指定的源。当两者混用,或者把 `watchEffect` 放在异步逻辑里时,依赖关系会变得不符合预期,从而触发额外的执行。这篇文章会从实际代码出发,说明依赖收集的细节、常见触发场景,以及如何用 `onCleanup` 和显式源来避免重复请求。 ## 问题现场 页面结构简化后大概是这样: ```vue ``` 输入关键字时,`keyword` 变化触发 `watch` 把 `page` 重置为 1。如果当前 `page` 不是 1,那么 `page` 的变化又会被 `watchEffect` 捕获。于是 `watchEffect` 执行两次:一次是 `keyword` 变化,一次是 `page` 被重置。两次都调用了 `fetchList`,请求就重复了。 ## 为什么 watchEffect 会捕捉到 page 的变化 `watchEffect` 在执行时会同步运行一次回调,执行过程中访问到的所有响应式属性都会被记录为依赖。上面代码里 `fetchList` 函数内部读取了 `keyword.value` 和 `page.value`,但由于 `fetchList` 是异步函数,真正的读取发生在 `await` 之前的部分。 `watchEffect` 的依赖收集只发生在同步执行阶段。`await` 之后的代码已经脱离了当前的 effect 作用域,不会继续收集依赖。所以 `page.value` 是在同步阶段被读取的,自然成了依赖。 `watch` 则不同,它只监听第一个参数指定的源,回调里读取其他响应式数据不会建立依赖关系。这种差异本身是设计使然,但在多个响应式源互相影响时,就容易出现重复触发。 ## 用 onCleanup 取消过期请求 重复请求本身可以通过竞态处理来缓解。`watchEffect` 的回调会收到一个 `onCleanup` 参数,用来注册清理函数。当 effect 再次执行或组件卸载时,清理函数会先被调用。 ```vue ``` 这样即使触发了两次,前一次请求也会被取消,不会出现旧数据覆盖新数据。但这只是掩盖了重复触发,真正的问题还是依赖关系不清晰。 ## 让依赖变得可控 如果希望只在 `keyword` 或 `page` 真正变化时请求,可以放弃隐式依赖收集,改用 `watch` 监听数组源,并开启 `flush: 'post'` 让回调在 DOM 更新后执行: ```vue watch( [keyword, page], ([newKeyword, newPage], [oldKeyword, oldPage]) => { if (newKeyword !== oldKeyword) { page.value = 1 // 如果 page 原本就是 1,上面这行不会触发新的 watch if (newPage === 1) { fetchList() } return } fetchList() }, { flush: 'post' } ) ``` 这里的判断逻辑是:当关键字变化时,如果页码已经是 1,就直接请求;否则先把页码重置为 1,等 `page` 变化引发的下一次 watch 回调再去请求。这样每个用户操作只会产生一次有效请求。 ## 在异步逻辑里使用 watchEffect 的坑 另一个常见场景是把 `watchEffect` 写在异步函数或 `setTimeout` 里: ```js setTimeout(() => { watchEffect(() => { console.log(keyword.value) }) }, 0) ``` 这样创建的 effect 不会绑定到当前组件实例的 effect 作用域,组件卸载时不会自动停止。如果它内部又读取了会变化的响应式数据,就可能一直运行并触发请求。正确做法是在 `setup` 顶层调用,或者用 `effectScope` 手动管理: ```js import { effectScope } from 'vue' const scope = effectScope() scope.run(() => { watchEffect(() => { // ... }) }) onUnmounted(() => { scope.stop() }) ``` ## 排查依赖的小技巧 Vue Devtools 的 timeline 里可以看到 effect 的触发记录,但更直接的方式是在 `watchEffect` 里打日志: ```js watchEffect(() => { console.log('deps:', keyword.value, page.value) }) ``` 如果日志里出现了你不希望被追踪的值,就说明它在同步阶段被读取了。把读取操作移到 `await` 之后,或者改成 `watch` 显式监听,通常就能解决。 另一个容易忽略的点是 `watch` 的 `deep` 选项。监听一个响应式对象时,如果不加 `deep`,对象内部属性变化不会触发回调;如果加了 `deep`,任何嵌套属性的变化都会触发,包括一些你没意识到的内部状态变更。在列表页这种数据量较大的场景下,`deep` 可能带来性能问题,也会让请求触发变得难以预测。 最后,如果多个 effect 之间存在依赖关系,尽量让数据流单向。比如用计算属性推导出请求参数,再统一用一个 `watch` 监听这个计算属性: ```js const query = computed(() => ({ keyword: keyword.value, page: page.value })) watch(query, (val) => { fetchList(val) }, { deep: true }) ``` 这样依赖来源只有一个,排查起来也简单。 推荐查看天气:https://www.40tianqi.com/yongde/zuotian.html 推荐查看天气:https://www.40tianqi.com/yongde/7tian.html 推荐查看天气:https://www.40tianqi.com/yongde/10tian.html 推荐查看天气:https://www.40tianqi.com/yongde/15tian.html 推荐查看天气:https://www.40tianqi.com/yongde/40tian.html 推荐查看天气:https://www.40tianqi.com/zhenkang/ 推荐查看天气:https://www.40tianqi.com/zhenkang/zuotian.html 推荐查看天气:https://www.40tianqi.com/zhenkang/7tian.html 推荐查看天气:https://www.40tianqi.com/zhenkang/10tian.html 推荐查看天气:https://www.40tianqi.com/zhenkang/15tian.html 推荐查看天气:https://www.40tianqi.com/zhenkang/40tian.html 推荐查看天气:https://www.40tianqi.com/shuangjiang/ 推荐查看天气:https://www.40tianqi.com/shuangjiang/zuotian.html 推荐查看天气:https://www.40tianqi.com/shuangjiang/7tian.html 推荐查看天气:https://www.40tianqi.com/shuangjiang/10tian.html 推荐查看天气:https://www.40tianqi.com/shuangjiang/15tian.html 推荐查看天气:https://www.40tianqi.com/shuangjiang/40tian.html 推荐查看天气:https://www.40tianqi.com/gengma/ 推荐查看天气:https://www.40tianqi.com/gengma/zuotian.html 推荐查看天气:https://www.40tianqi.com/gengma/7tian.html 推荐查看天气:https://www.40tianqi.com/gengma/10tian.html 推荐查看天气:https://www.40tianqi.com/gengma/15tian.html 推荐查看天气:https://www.40tianqi.com/gengma/40tian.html 推荐查看天气:https://www.40tianqi.com/cangyuan/ 推荐查看天气:https://www.40tianqi.com/cangyuan/zuotian.html 推荐查看天气:https://www.40tianqi.com/cangyuan/7tian.html 推荐查看天气:https://www.40tianqi.com/cangyuan/10tian.html 推荐查看天气:https://www.40tianqi.com/cangyuan/15tian.html 推荐查看天气:https://www.40tianqi.com/cangyuan/40tian.html 推荐查看天气:https://www.40tianqi.com/chuxiong/ 推荐查看天气:https://www.40tianqi.com/chuxiong/zuotian.html 推荐查看天气:https://www.40tianqi.com/chuxiong/7tian.html 推荐查看天气:https://www.40tianqi.com/chuxiong/10tian.html 推荐查看天气:https://www.40tianqi.com/chuxiong/15tian.html 推荐查看天气:https://www.40tianqi.com/chuxiong/40tian.html 推荐查看天气:https://www.40tianqi.com/shuangbai/ 推荐查看天气:https://www.40tianqi.com/shuangbai/zuotian.html 推荐查看天气:https://www.40tianqi.com/shuangbai/7tian.html 推荐查看天气:https://www.40tianqi.com/shuangbai/10tian.html 推荐查看天气:https://www.40tianqi.com/shuangbai/15tian.html 推荐查看天气:https://www.40tianqi.com/shuangbai/40tian.html 推荐查看天气:https://www.40tianqi.com/mouding/ 推荐查看天气:https://www.40tianqi.com/mouding/zuotian.html 推荐查看天气:https://www.40tianqi.com/mouding/7tian.html 推荐查看天气:https://www.40tianqi.com/mouding/10tian.html 推荐查看天气:https://www.40tianqi.com/mouding/15tian.html 推荐查看天气:https://www.40tianqi.com/mouding/40tian.html 推荐查看天气:https://www.40tianqi.com/nanhua/ 推荐查看天气:https://www.40tianqi.com/nanhua/zuotian.html 推荐查看天气:https://www.40tianqi.com/nanhua/7tian.html 推荐查看天气:https://www.40tianqi.com/nanhua/10tian.html 推荐查看天气:https://www.40tianqi.com/nanhua/15tian.html 推荐查看天气:https://www.40tianqi.com/nanhua/40tian.html 推荐查看天气:https://www.40tianqi.com/yaoan/ 推荐查看天气:https://www.40tianqi.com/yaoan/zuotian.html 推荐查看天气:https://www.40tianqi.com/yaoan/7tian.html 推荐查看天气:https://www.40tianqi.com/yaoan/10tian.html 推荐查看天气:https://www.40tianqi.com/yaoan/15tian.html 推荐查看天气:https://www.40tianqi.com/yaoan/40tian.html 推荐查看天气:https://www.40tianqi.com/dayao/ 推荐查看天气:https://www.40tianqi.com/dayao/zuotian.html 推荐查看天气:https://www.40tianqi.com/dayao/7tian.html 推荐查看天气:https://www.40tianqi.com/dayao/10tian.html 推荐查看天气:https://www.40tianqi.com/dayao/15tian.html 推荐查看天气:https://www.40tianqi.com/dayao/40tian.html 推荐查看天气:https://www.40tianqi.com/yongren/ 推荐查看天气:https://www.40tianqi.com/yongren/zuotian.html 推荐查看天气:https://www.40tianqi.com/yongren/7tian.html 推荐查看天气:https://www.40tianqi.com/yongren/10tian.html 推荐查看天气:https://www.40tianqi.com/yongren/15tian.html 推荐查看天气:https://www.40tianqi.com/yongren/40tian.html 推荐查看天气:https://www.40tianqi.com/yuanmou/ 推荐查看天气:https://www.40tianqi.com/yuanmou/zuotian.html 推荐查看天气:https://www.40tianqi.com/yuanmou/7tian.html 推荐查看天气:https://www.40tianqi.com/yuanmou/10tian.html 推荐查看天气:https://www.40tianqi.com/yuanmou/15tian.html 推荐查看天气:https://www.40tianqi.com/yuanmou/40tian.html 推荐查看天气:https://www.40tianqi.com/wuding/ 推荐查看天气:https://www.40tianqi.com/wuding/zuotian.html 推荐查看天气:https://www.40tianqi.com/wuding/7tian.html 推荐查看天气:https://www.40tianqi.com/wuding/10tian.html 推荐查看天气:https://www.40tianqi.com/wuding/15tian.html 推荐查看天气:https://www.40tianqi.com/wuding/40tian.html 推荐查看天气:https://www.40tianqi.com/lufeng/ 推荐查看天气:https://www.40tianqi.com/lufeng/zuotian.html 推荐查看天气:https://www.40tianqi.com/lufeng/7tian.html 推荐查看天气:https://www.40tianqi.com/lufeng/10tian.html 推荐查看天气:https://www.40tianqi.com/lufeng/15tian.html 推荐查看天气:https://www.40tianqi.com/lufeng/40tian.html 推荐查看天气:https://www.40tianqi.com/honghe/ 推荐查看天气:https://www.40tianqi.com/honghe/zuotian.html 推荐查看天气:https://www.40tianqi.com/honghe/7tian.html 推荐查看天气:https://www.40tianqi.com/honghe/10tian.html 推荐查看天气:https://www.40tianqi.com/honghe/15tian.html 推荐查看天气:https://www.40tianqi.com/honghe/40tian.html 推荐查看天气:https://www.40tianqi.com/gejiu/ 推荐查看天气:https://www.40tianqi.com/gejiu/zuotian.html 推荐查看天气:https://www.40tianqi.com/gejiu/7tian.html 推荐查看天气:https://www.40tianqi.com/gejiu/10tian.html 推荐查看天气:https://www.40tianqi.com/gejiu/15tian.html 推荐查看天气:https://www.40tianqi.com/gejiu/40tian.html 推荐查看天气:https://www.40tianqi.com/kaiyuan/ 推荐查看天气:https://www.40tianqi.com/kaiyuan/zuotian.html 推荐查看天气:https://www.40tianqi.com/kaiyuan/7tian.html 推荐查看天气:https://www.40tianqi.com/kaiyuan/10tian.html 推荐查看天气:https://www.40tianqi.com/kaiyuan/15tian.html 推荐查看天气:https://www.40tianqi.com/kaiyuan/40tian.html 推荐查看天气:https://www.40tianqi.com/mengzi/ 推荐查看天气:https://www.40tianqi.com/mengzi/zuotian.html 推荐查看天气:https://www.40tianqi.com/mengzi/7tian.html 推荐查看天气:https://www.40tianqi.com/mengzi/10tian.html 推荐查看天气:https://www.40tianqi.com/mengzi/15tian.html 推荐查看天气:https://www.40tianqi.com/mengzi/40tian.html 推荐查看天气:https://www.40tianqi.com/pingbian/ 推荐查看天气:https://www.40tianqi.com/pingbian/zuotian.html 推荐查看天气:https://www.40tianqi.com/pingbian/7tian.html 推荐查看天气:https://www.40tianqi.com/pingbian/10tian.html 推荐查看天气:https://www.40tianqi.com/pingbian/15tian.html 推荐查看天气:https://www.40tianqi.com/pingbian/40tian.html 推荐查看天气:https://www.40tianqi.com/jianshui/ 推荐查看天气:https://www.40tianqi.com/jianshui/zuotian.html 推荐查看天气:https://www.40tianqi.com/jianshui/7tian.html 推荐查看天气:https://www.40tianqi.com/jianshui/10tian.html 推荐查看天气:https://www.40tianqi.com/jianshui/15tian.html 推荐查看天气:https://www.40tianqi.com/jianshui/40tian.html 推荐查看天气:https://www.40tianqi.com/shiping/ 推荐查看天气:https://www.40tianqi.com/shiping/zuotian.html 推荐查看天气:https://www.40tianqi.com/shiping/7tian.html 推荐查看天气:https://www.40tianqi.com/shiping/10tian.html 推荐查看天气:https://www.40tianqi.com/shiping/15tian.html 推荐查看天气:https://www.40tianqi.com/shiping/40tian.html 推荐查看天气:https://www.40tianqi.com/mile/ 推荐查看天气:https://www.40tianqi.com/mile/zuotian.html 推荐查看天气:https://www.40tianqi.com/mile/7tian.html 推荐查看天气:https://www.40tianqi.com/mile/10tian.html 推荐查看天气:https://www.40tianqi.com/mile/15tian.html 推荐查看天气:https://www.40tianqi.com/mile/40tian.html 推荐查看天气:https://www.40tianqi.com/hongheluxi/ 推荐查看天气:https://www.40tianqi.com/hongheluxi/zuotian.html 推荐查看天气:https://www.40tianqi.com/hongheluxi/7tian.html 推荐查看天气:https://www.40tianqi.com/hongheluxi/10tian.html 推荐查看天气:https://www.40tianqi.com/hongheluxi/15tian.html 推荐查看天气:https://www.40tianqi.com/hongheluxi/40tian.html 推荐查看天气:https://www.40tianqi.com/yuanyangxian/ 推荐查看天气:https://www.40tianqi.com/yuanyangxian/zuotian.html 推荐查看天气:https://www.40tianqi.com/yuanyangxian/7tian.html 推荐查看天气:https://www.40tianqi.com/yuanyangxian/10tian.html 推荐查看天气:https://www.40tianqi.com/yuanyangxian/15tian.html 推荐查看天气:https://www.40tianqi.com/yuanyangxian/40tian.html 推荐查看天气:https://www.40tianqi.com/jinping/ 推荐查看天气:https://www.40tianqi.com/jinping/zuotian.html 推荐查看天气:https://www.40tianqi.com/jinping/7tian.html 推荐查看天气:https://www.40tianqi.com/jinping/10tian.html 推荐查看天气:https://www.40tianqi.com/jinping/15tian.html 推荐查看天气:https://www.40tianqi.com/jinping/40tian.html 推荐查看天气:https://www.40tianqi.com/lvchun/ 推荐查看天气:https://www.40tianqi.com/lvchun/zuotian.html 推荐查看天气:https://www.40tianqi.com/lvchun/7tian.html 推荐查看天气:https://www.40tianqi.com/lvchun/10tian.html 推荐查看天气:https://www.40tianqi.com/lvchun/15tian.html 推荐查看天气:https://www.40tianqi.com/lvchun/40tian.html 推荐查看天气:https://www.40tianqi.com/hekou/ 推荐查看天气:https://www.40tianqi.com/hekou/zuotian.html 推荐查看天气:https://www.40tianqi.com/hekou/7tian.html 推荐查看天气:https://www.40tianqi.com/hekou/10tian.html 推荐查看天气:https://www.40tianqi.com/hekou/15tian.html 推荐查看天气:https://www.40tianqi.com/hekou/40tian.html 推荐查看天气:https://www.40tianqi.com/wenshan/ 推荐查看天气:https://www.40tianqi.com/wenshan/zuotian.html 推荐查看天气:https://www.40tianqi.com/wenshan/7tian.html 推荐查看天气:https://www.40tianqi.com/wenshan/10tian.html 推荐查看天气:https://www.40tianqi.com/wenshan/15tian.html 推荐查看天气:https://www.40tianqi.com/wenshan/40tian.html 推荐查看天气:https://www.40tianqi.com/yanshan/ 推荐查看天气:https://www.40tianqi.com/yanshan/zuotian.html 推荐查看天气:https://www.40tianqi.com/yanshan/7tian.html 推荐查看天气:https://www.40tianqi.com/yanshan/10tian.html 推荐查看天气:https://www.40tianqi.com/yanshan/15tian.html 推荐查看天气:https://www.40tianqi.com/yanshan/40tian.html 推荐查看天气:https://www.40tianqi.com/xichou/ 推荐查看天气:https://www.40tianqi.com/xichou/zuotian.html 推荐查看天气:https://www.40tianqi.com/xichou/7tian.html 推荐查看天气:https://www.40tianqi.com/xichou/10tian.html 推荐查看天气:https://www.40tianqi.com/xichou/15tian.html 推荐查看天气:https://www.40tianqi.com/xichou/40tian.html 推荐查看天气:https://www.40tianqi.com/malipo/ 推荐查看天气:https://www.40tianqi.com/malipo/zuotian.html 推荐查看天气:https://www.40tianqi.com/malipo/7tian.html 推荐查看天气:https://www.40tianqi.com/malipo/10tian.html 推荐查看天气:https://www.40tianqi.com/malipo/15tian.html 推荐查看天气:https://www.40tianqi.com/malipo/40tian.html 推荐查看天气:https://www.40tianqi.com/maguan/ 推荐查看天气:https://www.40tianqi.com/maguan/zuotian.html 推荐查看天气:https://www.40tianqi.com/maguan/7tian.html 推荐查看天气:https://www.40tianqi.com/maguan/10tian.html 推荐查看天气:https://www.40tianqi.com/maguan/15tian.html 推荐查看天气:https://www.40tianqi.com/maguan/40tian.html 推荐查看天气:https://www.40tianqi.com/qiubei/ 推荐查看天气:https://www.40tianqi.com/qiubei/zuotian.html 推荐查看天气:https://www.40tianqi.com/qiubei/7tian.html

优秀的个人博客,低调大师

Web 教师 3 天换课:70% 学生转投 AI,家长别只看写完没

上周五晚上,你打开微信,看到家里群里孩子发了张截图。那是一张前端页面的作业,代码跑得很漂亮,布局也整齐。你心里刚松口气,却突然冒出个念头:代码是学生自己写的,还是 AI 写的? 这种风险,往往藏在看似完美的作业里。 先看一组被反复引用的统计。在一项面向编程教育者的调查里,超过 70% 的老师提到,学生遇到问题的第一步已经从翻文档变成直接问 AI;真正去查文档的比例,第一次掉到了不足 30%。 更直观的变化在课时上。以前讲透一个 flex 布局,可能要花 2 节课。现在把目标换成“用 AI 辅助完成响应式页面”,同样的深度,2 节课就能跑完。老师没偷懒,只是教的重点换了。 但很多人第一反应是:“能跑就行呗。” 这就误判了。能跑不等于学懂了。 AI 给的答案往往能跑通,但学生未必知道为什么。你让孩子抄答案,他确实拿到了分数,但真正该掌握的技能,他一次都没练过。 这里有两个关键点,得掰开看。 先,过程比结果重要。 以前老师看代码运行结果对不对。现在得看它是怎么写出来的。如果把判分标准从结果挪到过程,你才能看清学生是在“思考”,还是在“搬运”。 接着,家长的关注点要偏。 别盯着“写完了吗”,那没意义。孩子可能 10 分钟就跑通了,但那 10 分钟里,他的大脑在哪?家长最该问的不是写完没有,而是“这里你打算怎么告诉 AI?” 这场变化,其实早就开始了。这个变化不是一夜发生的。原文里那位讲师自己也说了:他抵触了三个月,最后还是在自己的课上用起了 AI。 今晚回家,就做两件事。 首要是,把孩子最近的一处代码发给他看。 不是看结果,让他讲讲每一行的逻辑。如果卡壳了,说明那里他可能只是“复制”过来的。 再下来,检查一下作业的求助记录。 如果全是 AI 对话,建议让孩子先把思路口述出来,再让 AI 验证。 记住,工具是用来练脑子的,不是用来替脑子干的。今晚就试试这招,看看孩子能说出多少道理。 这种“搬运式学习”的危害,远比我们想象的隐蔽。当学生习惯了直接获取成品代码,他们失去的不仅是调试能力,更是面对未知错误时的耐心与韧性。以前遇到 bug,孩子得盯着屏幕看半小时,逐行检查变量、逻辑、语法,这个过程虽然痛苦,却是大脑建立神经连接最关键的时期。现在,AI 瞬间给出答案,那个“卡住—困惑—突破”的闭环被彻底切断。孩子不再需要理解错误,只需要理解答案。长此以往,他们的思维会变得极度依赖外部输入,一旦脱离 AI,面对一行空白编辑器,竟然不知从何下手。这种“能力幻觉”在短期内看似高效,实则在长远职业生涯中会成为巨大的短板。 更重要的是,教育评估体系正在滞后于技术发展的速度。目前大多数学校的评分标准,依然以“功能实现”和“页面美观”为核心指标。只要网页能跑、按钮能点、布局整齐,就是满分。这种标准在 AI 时代已经失效。我们需要重新定义什么是“完成”。一个由 AI 生成、学生完全无法解释的代码库,和一个由学生亲手敲击、包含若干瑕疵但逻辑清晰的项目,哪一个更有价值?答案显然是后者。因为前者只是数据的堆砌,后者才是思维的结晶。家长和老师需要警惕那种“完美作业”带来的虚假安全感。如果你发现孩子的代码完美无缺,但问他问题时支支吾吾,那大概率是 AI 代劳了。这时候,不仅不能表扬,反而应该指出其中的疑点,引导他深入思考每一个决策背后的原因。 另外,我们要看到这一变化背后的社会契约重塑。过去,知识是稀缺资源,掌握知识就意味着优势。现在,知识变得廉价且易得,真正的稀缺资源变成了“判断力”和“提问能力”。未来的程序员,或许不再需要背诵所有 API,但必须具备辨别 AI 答案优劣的能力,以及提出精准问题的能力。这就是为什么老师必须在几周内就调整教学策略,把重点从“怎么写”转向“为什么这么写”以及“怎么问对问题”。这是一种生存技能的转移,而非单纯的教学技巧更新。如果家长还停留在旧有的评价维度,就会错过帮助孩子适应新规则的最佳窗口期。 还有,亲子互动的方式也需要随之改变。以前家长可能只会问“作业写完了吗”,这是一种结果导向的监控。现在,这种问法不仅无效,还可能破坏孩子的自主性。试着把问题换成:“今天用 AI 帮你解决了哪个难题?它是哪一步错了,你是怎么发现的?”或者“如果让你给 AI 改代码,你会改哪里?”这类问题能让孩子意识到,AI 是助手,不是替代品,而他才是主导者。这种对话不仅能检验学习的真实性,还能增进亲子间的深度交流,让孩子感受到父母对他思考过程的好奇,而不仅仅是对其产出的关注。 最后,我们要认识到,这场变革不是 AI 取代人,而是会用 AI 的人取代不会用 AI 的人。对于学生而言,关键在于如何从“使用者”转变为“驾驭者”。驾驭意味着理解工具的边界,知道什么时候该信任 AI,什么时候该怀疑它,什么时候必须亲自下场验证。这需要大量的实践和反思,而不是简单的复制粘贴。家长的角色,应该从监督者转变为教练,帮助孩子建立这套新的思维框架。 今晚,除了之前提到的两件事,建议再做一个小实验。给孩子出一道稍微复杂点的题目,不限制他用 AI,但要求他必须保留原始的报错记录和调试截图。如果他能完整展示从报错到修复的全过程,说明他真的学进去了。如果只有最终代码,没有任何中间过程,那就需要好好聊聊了。记住,过程的透明度,是衡量学习深度的唯一可靠指标。今晚就让孩子展示他的调试日志,看看里面有多少真实的思考痕迹。

优秀的个人博客,低调大师

Vue 3 中 watch 和 watchEffect 的依赖收集差异导致的一个隐蔽 bug

在最近维护的一个后台管理项目中,我遇到了一个很典型的问题:一个用于显示用户权限变更的 watch 回调在用户切换角色后偶尔不触发,但刷新页面后又恢复正常。排查后发现根源在于 watch 和 watchEffect 对响应式依赖的收集方式不同——watch 是惰性且显式声明依赖源,而 watchEffect 是立即执行并自动收集所有同步访问的响应式属性。这个差异在依赖包含条件分支或异步逻辑时尤其容易踩坑。文章会从实际代码出发,分析两者在依赖收集时机、副作用清除、以及嵌套引用场景下的行为区别,并给出如何根据业务场景正确选择的实践建议。 先看一段我最初写错的代码。这是一个权限管理组件,用 watchEffect 来监听用户角色和权限列表的变化,然后重新计算可访问的菜单。 ```vue ``` 问题出在 watchEffect 的依赖收集只跟踪同步执行期间访问的响应式属性。`await` 之后的代码属于微任务,此时 watchEffect 已经完成了初始的依赖收集。所以 `permissions.value` 的读取不会被记录为依赖。当 permissions 单独变化(比如其他地方更新了它)时,这个 effect 不会重新运行。而 currentRole 变化时因为它在 await 之前被访问,所以能触发——这就解释了为什么切换角色有时正常,但手动刷新权限列表时菜单不更新。 watch 的行为不同,它需要你明确指定监听源,并且不会自动追踪回调内部的任意访问。 ```javascript watch( () => currentRole.value, async (newRole) => { const perms = await getUserPermissions(newRole) permissions.value = perms menus.value = buildMenus(perms) }, { immediate: true } ) ``` 这样写虽然更啰嗦,但依赖关系清晰:只有 currentRole 变化才会重新请求权限。如果还需要监听 permissions 的变化,可以再写一个 watch,或者用 computed 组合。 另一个容易忽略的点是 watchEffect 的副作用清除。当依赖变化频繁时,前一次异步请求可能还没返回,新的请求又发出去了。Vue 提供了 onCleanup 来取消过期的请求。 ```javascript watchEffect((onCleanup) => { const controller = new AbortController() fetch(`/api/permissions?role=${currentRole.value}`, { signal: controller.signal }) .then(res => res.json()) .then(data => { permissions.value = data }) .catch(err => { if (err.name !== 'AbortError') throw err }) onCleanup(() => controller.abort()) }) ``` 这里 onCleanup 会在下一次 effect 执行前或组件卸载时调用,从而取消未完成的请求。如果不用 AbortController,至少也要用一个标志位来忽略过期响应。 那什么时候用 watch,什么时候用 watchEffect?我的经验是:只要依赖源是明确的一到两个 ref 或 props,并且需要拿到旧值、需要控制 immediate 或 deep 行为,就用 watch。如果副作用内部有多个条件分支,依赖项随着逻辑动态变化,或者你希望立即执行且不关心旧值,watchEffect 更合适。但务必注意:任何在 await 之后才读取的响应式数据,都不会被 watchEffect 追踪。如果确实需要,就把那部分逻辑拆到单独的 watch 里,或者用 computed 先算好。 还有一个隐藏的坑:在 watchEffect 里使用 `ref` 的解构或展开。比如 `const { role, permissions } = user`,如果 user 是 reactive 对象,解构会丢失响应性,watchEffect 自然也不会重新运行。保持对 `.value` 的完整访问路径是基本要求。 最后提一下调试技巧。Vue Devtools 可以查看组件内 effect 的依赖列表,但生产环境不方便。我通常会在 watchEffect 内部加一个计数,或者在 onCleanup 里打日志,观察 effect 重新执行的频率和时机。如果发现某个 effect 触发了但内部逻辑没有按预期走,优先检查 await 之后的代码是否访问了未被追踪的响应式属性。 推荐查看天气:https://www.40tianqi.com/yongxing/zuotian.html 推荐查看天气:https://www.40tianqi.com/yongxing/7tian.html 推荐查看天气:https://www.40tianqi.com/yongxing/10tian.html 推荐查看天气:https://www.40tianqi.com/yongxing/15tian.html 推荐查看天气:https://www.40tianqi.com/yongxing/40tian.html 推荐查看天气:https://www.40tianqi.com/jiahe/ 推荐查看天气:https://www.40tianqi.com/jiahe/zuotian.html 推荐查看天气:https://www.40tianqi.com/jiahe/7tian.html 推荐查看天气:https://www.40tianqi.com/jiahe/10tian.html 推荐查看天气:https://www.40tianqi.com/jiahe/15tian.html 推荐查看天气:https://www.40tianqi.com/jiahe/40tian.html 推荐查看天气:https://www.40tianqi.com/linwu/ 推荐查看天气:https://www.40tianqi.com/linwu/zuotian.html 推荐查看天气:https://www.40tianqi.com/linwu/7tian.html 推荐查看天气:https://www.40tianqi.com/linwu/10tian.html 推荐查看天气:https://www.40tianqi.com/linwu/15tian.html 推荐查看天气:https://www.40tianqi.com/linwu/40tian.html 推荐查看天气:https://www.40tianqi.com/rucheng/ 推荐查看天气:https://www.40tianqi.com/rucheng/zuotian.html 推荐查看天气:https://www.40tianqi.com/rucheng/7tian.html 推荐查看天气:https://www.40tianqi.com/rucheng/10tian.html 推荐查看天气:https://www.40tianqi.com/rucheng/15tian.html 推荐查看天气:https://www.40tianqi.com/rucheng/40tian.html 推荐查看天气:https://www.40tianqi.com/guidong/ 推荐查看天气:https://www.40tianqi.com/guidong/zuotian.html 推荐查看天气:https://www.40tianqi.com/guidong/7tian.html 推荐查看天气:https://www.40tianqi.com/guidong/10tian.html 推荐查看天气:https://www.40tianqi.com/guidong/15tian.html 推荐查看天气:https://www.40tianqi.com/guidong/40tian.html 推荐查看天气:https://www.40tianqi.com/anren/ 推荐查看天气:https://www.40tianqi.com/anren/zuotian.html 推荐查看天气:https://www.40tianqi.com/anren/7tian.html 推荐查看天气:https://www.40tianqi.com/anren/10tian.html 推荐查看天气:https://www.40tianqi.com/anren/15tian.html 推荐查看天气:https://www.40tianqi.com/anren/40tian.html 推荐查看天气:https://www.40tianqi.com/zixing/ 推荐查看天气:https://www.40tianqi.com/zixing/zuotian.html 推荐查看天气:https://www.40tianqi.com/zixing/7tian.html 推荐查看天气:https://www.40tianqi.com/zixing/10tian.html 推荐查看天气:https://www.40tianqi.com/zixing/15tian.html 推荐查看天气:https://www.40tianqi.com/zixing/40tian.html 推荐查看天气:https://www.40tianqi.com/yongzhou/ 推荐查看天气:https://www.40tianqi.com/yongzhou/zuotian.html 推荐查看天气:https://www.40tianqi.com/yongzhou/7tian.html 推荐查看天气:https://www.40tianqi.com/yongzhou/10tian.html 推荐查看天气:https://www.40tianqi.com/yongzhou/15tian.html 推荐查看天气:https://www.40tianqi.com/yongzhou/40tian.html 推荐查看天气:https://www.40tianqi.com/lingling/ 推荐查看天气:https://www.40tianqi.com/lingling/zuotian.html 推荐查看天气:https://www.40tianqi.com/lingling/7tian.html 推荐查看天气:https://www.40tianqi.com/lingling/10tian.html 推荐查看天气:https://www.40tianqi.com/lingling/15tian.html 推荐查看天气:https://www.40tianqi.com/lingling/40tian.html 推荐查看天气:https://www.40tianqi.com/lingshuitan/ 推荐查看天气:https://www.40tianqi.com/lingshuitan/zuotian.html 推荐查看天气:https://www.40tianqi.com/lingshuitan/7tian.html 推荐查看天气:https://www.40tianqi.com/lingshuitan/10tian.html 推荐查看天气:https://www.40tianqi.com/lingshuitan/15tian.html 推荐查看天气:https://www.40tianqi.com/lingshuitan/40tian.html 推荐查看天气:https://www.40tianqi.com/qiyang/ 推荐查看天气:https://www.40tianqi.com/qiyang/zuotian.html 推荐查看天气:https://www.40tianqi.com/qiyang/7tian.html 推荐查看天气:https://www.40tianqi.com/qiyang/10tian.html 推荐查看天气:https://www.40tianqi.com/qiyang/15tian.html 推荐查看天气:https://www.40tianqi.com/qiyang/40tian.html 推荐查看天气:https://www.40tianqi.com/dongan/ 推荐查看天气:https://www.40tianqi.com/dongan/zuotian.html 推荐查看天气:https://www.40tianqi.com/dongan/7tian.html 推荐查看天气:https://www.40tianqi.com/dongan/10tian.html 推荐查看天气:https://www.40tianqi.com/dongan/15tian.html 推荐查看天气:https://www.40tianqi.com/dongan/40tian.html 推荐查看天气:https://www.40tianqi.com/shuangpai/ 推荐查看天气:https://www.40tianqi.com/shuangpai/zuotian.html 推荐查看天气:https://www.40tianqi.com/shuangpai/7tian.html 推荐查看天气:https://www.40tianqi.com/shuangpai/10tian.html 推荐查看天气:https://www.40tianqi.com/shuangpai/15tian.html 推荐查看天气:https://www.40tianqi.com/shuangpai/40tian.html 推荐查看天气:https://www.40tianqi.com/daoxian/ 推荐查看天气:https://www.40tianqi.com/daoxian/zuotian.html 推荐查看天气:https://www.40tianqi.com/daoxian/7tian.html 推荐查看天气:https://www.40tianqi.com/daoxian/10tian.html 推荐查看天气:https://www.40tianqi.com/daoxian/15tian.html 推荐查看天气:https://www.40tianqi.com/daoxian/40tian.html 推荐查看天气:https://www.40tianqi.com/jiangyong/ 推荐查看天气:https://www.40tianqi.com/jiangyong/zuotian.html 推荐查看天气:https://www.40tianqi.com/jiangyong/7tian.html 推荐查看天气:https://www.40tianqi.com/jiangyong/10tian.html 推荐查看天气:https://www.40tianqi.com/jiangyong/15tian.html 推荐查看天气:https://www.40tianqi.com/jiangyong/40tian.html 推荐查看天气:https://www.40tianqi.com/ningyuan/ 推荐查看天气:https://www.40tianqi.com/ningyuan/zuotian.html 推荐查看天气:https://www.40tianqi.com/ningyuan/7tian.html 推荐查看天气:https://www.40tianqi.com/ningyuan/10tian.html 推荐查看天气:https://www.40tianqi.com/ningyuan/15tian.html 推荐查看天气:https://www.40tianqi.com/ningyuan/40tian.html 推荐查看天气:https://www.40tianqi.com/lanshan/ 推荐查看天气:https://www.40tianqi.com/lanshan/zuotian.html 推荐查看天气:https://www.40tianqi.com/lanshan/7tian.html 推荐查看天气:https://www.40tianqi.com/lanshan/10tian.html 推荐查看天气:https://www.40tianqi.com/lanshan/15tian.html 推荐查看天气:https://www.40tianqi.com/lanshan/40tian.html 推荐查看天气:https://www.40tianqi.com/xintian/ 推荐查看天气:https://www.40tianqi.com/xintian/zuotian.html 推荐查看天气:https://www.40tianqi.com/xintian/7tian.html 推荐查看天气:https://www.40tianqi.com/xintian/10tian.html 推荐查看天气:https://www.40tianqi.com/xintian/15tian.html 推荐查看天气:https://www.40tianqi.com/xintian/40tian.html 推荐查看天气:https://www.40tianqi.com/jianghua/ 推荐查看天气:https://www.40tianqi.com/jianghua/zuotian.html 推荐查看天气:https://www.40tianqi.com/jianghua/7tian.html 推荐查看天气:https://www.40tianqi.com/jianghua/10tian.html 推荐查看天气:https://www.40tianqi.com/jianghua/15tian.html 推荐查看天气:https://www.40tianqi.com/jianghua/40tian.html 推荐查看天气:https://www.40tianqi.com/huaihua/ 推荐查看天气:https://www.40tianqi.com/huaihua/zuotian.html 推荐查看天气:https://www.40tianqi.com/huaihua/7tian.html 推荐查看天气:https://www.40tianqi.com/huaihua/10tian.html 推荐查看天气:https://www.40tianqi.com/huaihua/15tian.html 推荐查看天气:https://www.40tianqi.com/huaihua/40tian.html 推荐查看天气:https://www.40tianqi.com/hecheng/ 推荐查看天气:https://www.40tianqi.com/hecheng/zuotian.html 推荐查看天气:https://www.40tianqi.com/hecheng/7tian.html 推荐查看天气:https://www.40tianqi.com/hecheng/10tian.html 推荐查看天气:https://www.40tianqi.com/hecheng/15tian.html 推荐查看天气:https://www.40tianqi.com/hecheng/40tian.html 推荐查看天气:https://www.40tianqi.com/zhongfang/ 推荐查看天气:https://www.40tianqi.com/zhongfang/zuotian.html 推荐查看天气:https://www.40tianqi.com/zhongfang/7tian.html 推荐查看天气:https://www.40tianqi.com/zhongfang/10tian.html 推荐查看天气:https://www.40tianqi.com/zhongfang/15tian.html 推荐查看天气:https://www.40tianqi.com/zhongfang/40tian.html 推荐查看天气:https://www.40tianqi.com/yuanling/ 推荐查看天气:https://www.40tianqi.com/yuanling/zuotian.html 推荐查看天气:https://www.40tianqi.com/yuanling/7tian.html 推荐查看天气:https://www.40tianqi.com/yuanling/10tian.html 推荐查看天气:https://www.40tianqi.com/yuanling/15tian.html 推荐查看天气:https://www.40tianqi.com/yuanling/40tian.html 推荐查看天气:https://www.40tianqi.com/chenxi/ 推荐查看天气:https://www.40tianqi.com/chenxi/zuotian.html 推荐查看天气:https://www.40tianqi.com/chenxi/7tian.html 推荐查看天气:https://www.40tianqi.com/chenxi/10tian.html 推荐查看天气:https://www.40tianqi.com/chenxi/15tian.html 推荐查看天气:https://www.40tianqi.com/chenxi/40tian.html 推荐查看天气:https://www.40tianqi.com/xupu/ 推荐查看天气:https://www.40tianqi.com/xupu/zuotian.html 推荐查看天气:https://www.40tianqi.com/xupu/7tian.html 推荐查看天气:https://www.40tianqi.com/xupu/10tian.html 推荐查看天气:https://www.40tianqi.com/xupu/15tian.html 推荐查看天气:https://www.40tianqi.com/xupu/40tian.html 推荐查看天气:https://www.40tianqi.com/huitong/ 推荐查看天气:https://www.40tianqi.com/huitong/zuotian.html 推荐查看天气:https://www.40tianqi.com/huitong/7tian.html 推荐查看天气:https://www.40tianqi.com/huitong/10tian.html 推荐查看天气:https://www.40tianqi.com/huitong/15tian.html 推荐查看天气:https://www.40tianqi.com/huitong/40tian.html 推荐查看天气:https://www.40tianqi.com/mayang/ 推荐查看天气:https://www.40tianqi.com/mayang/zuotian.html 推荐查看天气:https://www.40tianqi.com/mayang/7tian.html 推荐查看天气:https://www.40tianqi.com/mayang/10tian.html 推荐查看天气:https://www.40tianqi.com/mayang/15tian.html 推荐查看天气:https://www.40tianqi.com/mayang/40tian.html 推荐查看天气:https://www.40tianqi.com/xinhuang/ 推荐查看天气:https://www.40tianqi.com/xinhuang/zuotian.html 推荐查看天气:https://www.40tianqi.com/xinhuang/7tian.html 推荐查看天气:https://www.40tianqi.com/xinhuang/10tian.html 推荐查看天气:https://www.40tianqi.com/xinhuang/15tian.html 推荐查看天气:https://www.40tianqi.com/xinhuang/40tian.html 推荐查看天气:https://www.40tianqi.com/zhijiang/ 推荐查看天气:https://www.40tianqi.com/zhijiang/zuotian.html 推荐查看天气:https://www.40tianqi.com/zhijiang/7tian.html 推荐查看天气:https://www.40tianqi.com/zhijiang/10tian.html 推荐查看天气:https://www.40tianqi.com/zhijiang/15tian.html 推荐查看天气:https://www.40tianqi.com/zhijiang/40tian.html 推荐查看天气:https://www.40tianqi.com/jingzhouxian/ 推荐查看天气:https://www.40tianqi.com/jingzhouxian/zuotian.html 推荐查看天气:https://www.40tianqi.com/jingzhouxian/7tian.html 推荐查看天气:https://www.40tianqi.com/jingzhouxian/10tian.html 推荐查看天气:https://www.40tianqi.com/jingzhouxian/15tian.html 推荐查看天气:https://www.40tianqi.com/jingzhouxian/40tian.html 推荐查看天气:https://www.40tianqi.com/tongdao/ 推荐查看天气:https://www.40tianqi.com/tongdao/zuotian.html 推荐查看天气:https://www.40tianqi.com/tongdao/7tian.html 推荐查看天气:https://www.40tianqi.com/tongdao/10tian.html 推荐查看天气:https://www.40tianqi.com/tongdao/15tian.html 推荐查看天气:https://www.40tianqi.com/tongdao/40tian.html 推荐查看天气:https://www.40tianqi.com/hongjiang/ 推荐查看天气:https://www.40tianqi.com/hongjiang/zuotian.html 推荐查看天气:https://www.40tianqi.com/hongjiang/7tian.html 推荐查看天气:https://www.40tianqi.com/hongjiang/10tian.html 推荐查看天气:https://www.40tianqi.com/hongjiang/15tian.html 推荐查看天气:https://www.40tianqi.com/hongjiang/40tian.html 推荐查看天气:https://www.40tianqi.com/loudi/ 推荐查看天气:https://www.40tianqi.com/loudi/zuotian.html 推荐查看天气:https://www.40tianqi.com/loudi/7tian.html 推荐查看天气:https://www.40tianqi.com/loudi/10tian.html 推荐查看天气:https://www.40tianqi.com/loudi/15tian.html 推荐查看天气:https://www.40tianqi.com/loudi/40tian.html 推荐查看天气:https://www.40tianqi.com/louxing/ 推荐查看天气:https://www.40tianqi.com/louxing/zuotian.html 推荐查看天气:https://www.40tianqi.com/louxing/7tian.html

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

用户登录
用户注册