加载动态...
加载动态...
有请 deepseek 老师给我们讲课
你的设备是 ARM64,但你要运行 x86_64 代码,可以使用 QEMU 来进行仿真。具体方法如下:
Docker 允许使用 binfmt_misc
配合 QEMU 来透明地运行 x86_64 代码:
运行以下命令,确保 Docker 可以自动仿真 x86_64 指令集:
1docker run --rm --privileged tonistiigi/binfmt --install all
然后你可以运行:
1docker run --rm --platform linux/amd64 python:3.12-slim python --version
如果能成功输出 Python 3.12.x
,说明仿真已启用。
这些模型扩展了 CNN 以增强其能力,适用于更复杂的视觉任务。
用于目标检测任务,能够识别图像中的多个对象及其边界框(Bounding Box)。
RNN 主要用于处理 序列数据(如时间序列、语音识别、文本处理)。
Transformer 彻底改变了深度学习在 NLP 和计算机视觉中的应用。
AE 用于无监督学习,主要用于数据降维、异常检测、去噪等任务。
GAN 主要用于图像生成,如人脸生成(DeepFake)、风格迁移等。
适用于 图数据(如社交网络、知识图谱)。
用于决策优化任务,如 AlphaGo、自动驾驶、机器人控制等。
不同的模型适用于不同的任务:
每种模型都有其独特的优势,在选择时需根据具体任务需求决定。
在 Node.js 中,JavaScript 的垃圾回收(Garbage Collection, GC)通常是由 V8 引擎自动管理的,开发者无法直接控制其具体执行时机。然而,在某些特殊情况下,如果你需要“强制”触发垃圾回收,可以通过一些方法来间接实现。
以下是关于 Node.js 中强制 GC 的解答:
--expose-gc
标志Node.js 默认不会暴露手动触发 GC 的接口,但你可以通过启动 Node.js 时添加 --expose-gc
参数来启用 global.gc()
函数。这个函数允许你在代码中手动触发垃圾回收。
1node --expose-gc your_script.js
global.gc()
:
1console.log('开始强制 GC');
2global.gc();
3console.log('GC 已执行');
global.gc()
只有在启用了 --expose-gc
时才有效,否则会抛出 TypeError: gc is not a function
。Node.js 的 V8 引擎使用的是标记-清除(Mark-and-Sweep)和分代回收机制,通常会根据内存使用情况自动触发 GC。但在以下场景中,你可能希望手动干预:
在强制 GC 前后,可以使用 process.memoryUsage()
查看内存状态,帮助分析效果:
1console.log('GC 前:', process.memoryUsage());
2global.gc();
3console.log('GC 后:', process.memoryUsage());
输出示例:
1GC 前: { rss: 50MB, heapTotal: 30MB, heapUsed: 25MB, external: 1MB }
2GC 后: { rss: 50MB, heapTotal: 30MB, heapUsed: 10MB, external: 1MB }
rss
:进程占用的总物理内存。heapTotal
:堆内存总量。heapUsed
:已使用的堆内存。gc()
,V8 可能会根据自己的优化策略决定不立即回收某些对象。与其强制 GC,不如优化代码以减少内存占用:
在 Node.js 中,通过 --expose-gc
和 global.gc()
可以强制触发垃圾回收,主要用于调试或测试。生产环境中,应依赖 V8 的自动 GC,并通过优化代码减少内存压力。如果有具体场景或问题,欢迎进一步讨论!
概述 Windows 远程桌面(也称为 RDP)允许你从一台计算机远程连接到另一台运行 Windows 操作系统的计算机。
开启远程桌面 在“设置”中前往“系统>远程桌面”,将“远程桌面”设置为“开”。
确保Windows正确存储微软账号的密码 绝大多数情况下,我们将使用微软账号及其密码来登录“远程桌面”进行操作。而在安装 Windows 过程中,我们往往会通过 Authenticator 软件授权或其他非密码方式登录微软账号。此时电脑由于未能直接存储对应账号的密码将导致无法通过验证。
为了解决上述问题,我们需要在设备上强行触发一次“使用密码的微软账号登录”,具体命令如下:
runas /u:MicrosoftAccount<你的微软账号> winver 登录成功后,会弹出“系统信息”窗口,关闭即可。
同时该操作办法亦适用于微软账号密码修改后未能及时同步到设备本地的情况。
远程控制软件 Windows Windows 自带“远程桌面连接”软件用于远程控制其他 Windows 设备。可直接在开始菜单中寻找,亦可通过其英文缩写“RDP”搜索打开。
macOS 非国区 AppStore 中提供应用“Microsoft Remote Desktop”(红色 Logo),亦可通过 App Center 下载安装“Microsoft Remote Desktop beta”(蓝色 Logo)。
可参考:macOS 客户端入门 | Microsoft Learn
make
路径如果 make
安装了但 GoLand 仍然找不到,你可以在 GoLand 中手动指定 make
的路径:
打开 File > Settings > Build, Execution, Deployment > Toolchains
找到 Make 相关的选项,手动设置 make
可执行文件的路径,例如:
1C:\msys64\usr\bin\make.exe
保存设置并重启 GoLand
无源码只能逆向 静态就 IDA Pro ,静态反编译最好用 动态就 x64dbg ,或者选一个自己喜欢的也行 那个语言其实是翻译成 C 然后再调用 msvc 编译(好像是 vc6 来着) 逆向入门难度大,除非很有兴趣不然不建议做这个 自己玩玩没人管你,反正他们(来源)也不管这个,用来赚钱容易进去
开源PDF解析工具olmOCR:百万页处理成本直降32倍,精准提取复杂内容
Ai2推出的开源工具olmOCR基于Qwen2-VL-7B-Instruct模型训练,专为PDF解析设计,可高效提取文本、表格、公式等结构化数据,并以Markdown格式输出。通过25万页多样化数据集微调,其“文档锚定”技术精准处理多栏排版、手写内容及数学公式,处理百万页成本仅190美元(为GPT-4o的1/32)。支持在线使用与本地部署(需英伟达显卡),性能评估显示其Elo评分1800+,用户优选比例超竞品(对比MinerU达71.4%)。开源代码与模型权重,适合学术、法律等场景的高效文档处理。
GitHub | 在线Web
📮投稿 ☘️频道 🌸聊天 🗞️𝕏
介绍下字体 /* 仅有一个通用字体族名 */ font-family: serif; font-family: sans-serif; font-family: monospace; font-family: cursive; font-family: fantasy; font-family: system-ui; font-family: ui-serif; font-family: ui-sans-serif; font-family: ui-monospace; font-family: ui-rounded; font-family: emoji; font-family: math; font-family: fangsong;
1import { waitFor } from '@/promise'
2import { concatMap, exhaustMap, from, interval, map, mergeMap, of, switchMap } from 'rxjs'
3import { describe, expect, it, vi } from 'vitest'
4
5/**
6 * 比较 RxJS 中不同的 xxxMap 操作符的行为特点
7 * 主要测试四种映射操作符:
8 * - mergeMap: 并发执行所有内部 Observable
9 * - concatMap: 串行执行内部 Observable
10 * - switchMap: 切换到最新的内部 Observable
11 * - exhaustMap: 忽略新值直到当前内部 Observable 完成
12 */
13describe('xxxMap vs xxxMap', () => {
14 beforeAll(() => {
15 vi.useFakeTimers()
16 })
17
18 afterAll(() => {
19 vi.useRealTimers()
20 })
21
22 /**
23 * mergeMap 的并发性:
24 * 1. mergeMap 允许并发处理多个内部 Observable
25 * 2. 当一个内部 Observable 还在进行时,下一个 interval 发射的值会立即被处理
26 * 3. 最终输出 [1, 0] 的原因:
27 * - index=0 时启动一个延迟100ms的 Observable
28 * - index=1 时立即发出值1
29 * - 100ms后第一个 Observable 完成,输出0
30 */
31 it('mergeMap', async () => {
32 const values: number[] = []
33 const subscription = interval(100).pipe(
34 mergeMap((value, index) => {
35 if (index === 1) {
36 return of(value)
37 }
38 return from(waitFor(100)).pipe(map(() => value))
39 }),
40 ).subscribe({
41 next: (value) => {
42 values.push(value)
43 },
44 })
45
46 await vi.advanceTimersByTimeAsync(300)
47 subscription.unsubscribe()
48 expect(values).toEqual([1, 0])
49 })
50
51 /**
52 * concatMap 的串行性:
53 * 1. concatMap 会等待前一个内部 Observable 完成后,才会处理下一个值
54 * 2. 保证了处理顺序与源 Observable 发出值的顺序一致
55 * 3. 最终输出 [0, 1] 的原因:
56 * - index=0 的 Observable 延迟100ms后输出0
57 * - 然后处理 index=1,立即输出1
58 */
59 it('contactMap', async () => {
60 const values: number[] = []
61 const subscription = interval(100).pipe(
62 concatMap((value, index) => {
63 if (index === 1) {
64 return of(value)
65 }
66 return from(waitFor(100)).pipe(map(() => value))
67 }),
68 ).subscribe({
69 next: (value) => {
70 values.push(value)
71 },
72 })
73
74 await vi.advanceTimersByTimeAsync(300)
75 subscription.unsubscribe()
76 expect(values).toEqual([0, 1])
77 })
78
79 /**
80 * switchMap 的切换性:
81 * 1. switchMap 会在收到新的源值时取消前一个内部 Observable 的订阅
82 * 2. 只保留最新的内部 Observable 的结果
83 * 3. 最终只输出 [1] 的原因:
84 * - index=0 启动延迟100ms的 Observable
85 * - 100ms时收到 index=1,取消前一个 Observable
86 * - index=1 立即输出值1
87 */
88 it('switchMap', async () => {
89 const values: number[] = []
90 const subscription = interval(100).pipe(
91 switchMap((value, index) => {
92 if (index === 1) {
93 return of(value)
94 }
95 return from(waitFor(100)).pipe(map(() => value))
96 }),
97 ).subscribe({
98 next: (value) => {
99 values.push(value)
100 },
101 })
102
103 await vi.advanceTimersByTimeAsync(300)
104 subscription.unsubscribe()
105 expect(values).toEqual([1])
106 })
107
108 /**
109 * exhaustMap 的防抖性:
110 * 1. exhaustMap 会在处理内部 Observable 时忽略源 Observable 发出的新值
111 * 2. 直到当前内部 Observable 完成才会处理新的值
112 * 3. 最终输出 [0, 2] 的原因:
113 * - index=0 启动延迟100ms的 Observable
114 * - 100ms时收到 index=1,但被忽略,因为当前 Observable 还未完成
115 * - 200ms时,index=0 的 Observable 完成并输出 0
116 * - 同时收到 index=2,开始新的延迟100ms的 Observable
117 * - 300ms时,index=2 的 Observable 完成并输出 2
118 */
119 it('exhaustMap', async () => {
120 const values: number[] = []
121 const subscription = interval(100).pipe(
122 exhaustMap((value, index) => {
123 if (index === 1) {
124 return of(value)
125 }
126 return from(waitFor(100)).pipe(map(() => value))
127 }),
128 ).subscribe({
129 next: (value) => {
130 values.push(value)
131 },
132 })
133
134 await vi.advanceTimersByTimeAsync(300)
135 subscription.unsubscribe()
136 expect(values).toEqual([0, 2])
137 })
138})