西邮liiux兴趣小组2025一面题题解
西邮linux兴趣小组2025一面题题解总结本次一面题考点包含C语言 printf 返回值C语言值传递、指针传递sizeof 、 strlen 、数组退化数组指针二级指针指针加减运算按位与运算三元运算符数组越界、未定义行为union 联合体柔性数组零长数组函数指针前置自增运算符malloc 、 free 堆内存管理C语言冒泡排序双指针原地去重栈内存与堆内存区分结构体传参值/指针静态数组 sizeof 求元素个数0.拼命的企鹅题目理解第一块石头重量aaa后续每块石头是前一块的平方a,a2,a4,a16…a,a^2,a^4,a^{16}\dotsa,a2,a4,a16…挑选若干石头相乘使得总乘积等于aba^bab。等价选出一组指数相加等于b。同底数相乘am×anamna^m × a^n a^{mn}am×anamn,捡石头相乘就是把它们的指数加起来。石头对应的指数依次1,2,4,8,16…1,2,4,8,16…1,2,4,8,16…即2的幂次。运行/解题分析ax1⋅ax2ax1x2a^{x_1} \cdot a^{x_2}a^{x_1x_2}ax1​⋅ax2​ax1​x2​乘积的指数等于所选石头指数相加。问题等价把数字b做二进制分解。即把173写成一堆 1,2,4,8,16,32,64,128……相加173 128 32 8 4 1173二进制10101101对应位为1的位置就是需要捡起的石头。答案b173二进制10101101捡起对应二进制位为1的石头。需要捡的石头对应指数14832128知识点指数运算法则同底数幂相乘指数相加十进制转二进制二进制位选取2的幂次分解整数1. 西邮Linux欢迎你啊原题代码codeint main() { if (printf(Hi guys! ) || printf(Xiyou Linux )) { printf(%d\n, printf(Welcome to Xiyou Linux 2%d, printf())); } return 0; }程序输出Hi guys! Welcome to Xiyou Linux 25运行分析printf(Hi guys! ) 打印字符串返回8非0触发||短路后面printf(Xiyou Linux )完全不执行。​if条件成立进入分支。函数参数从右向左求值​执行 printf( ) 输出空串返回0屏幕无输出​执行 printf(“Welcome to Xiyou Linux 20”) 屏幕打印文本返回25​外层 printf (“%d\n”,25) 打印数字25换行。知识点printf返回值返回成功输出的字符数量。​||逻辑或短路求值左边表达式非0右边不再执行。​函数参数从右向左求值printf格式化只取对应位置参数。2.可以和 \0 组一辈子字符串吗原题代码codeint main() { char p1[] { W, e, l, c, o, m, e, \0 }; char p2[] Join us\0, p4[] xiyou_linux_group; const char* p3 Xiyou Linux Group\0\n2025\0; if (strcmp(p1, p2)) { printf(%s to %s!\n, p1, p2); } if (strlen(p3) sizeof(p3)) { printf(%s, p3); } if (sizeof(p1) sizeof(p2)) { printf(%s, p4); } return 0; }程序输出Welcome to join us Xiyou Linux Group运行分析1.char p1[]使用大括号逐个字符初始化 strcmp 函数依靠\0判断字符串结尾两个字符串不一样strcmp返回非0条件成立printf 执行。​2. p3是字符指针在64位Linux环境sizeof(p3)获取的是指针变量本身*等于8字节。而strlen(p3)统计字符串有效字符数量结果远大于8。条件表达式结果为真进入if分支执行printf打印Xiyou Linux Group。3. sizeof(p1)结果为8字节。p2由字符串字面量初始化字面量末尾会自动带上 \0 数组总字节数为9相等判断条件为假该if内部printf不会执行。知识点C语言字符串以\0作为结束标志大括号字符初始化不会自动添加\0双引号字符串字面量会自动追加\0。​strlen是库函数运行时遍历内存计算字符个数不计入\0sizeof是编译期运算符。​sizeof作用于数组得到数组全部字节sizeof作用于指针得到指针本身占用字节不是字符串长度。​strcmp比较字符串相等返回0不相等返回非0返回值为第一个不一样字符的ASCLL码相差若传入不带\0的字符数组会发生越界产生未定义行为。3. 数学没问题浮点数有鬼原题代码codeint main() { float a1 0.3, b1 6e-1, sum1 0.9; printf(a1 b1 %s sum1\n, (a1 b1 sum1) ? : !); float a2 0x0.3p0, b2 0x6p-4, sum2 0x0.9p0; printf(a2 b2 %s sum2\n, (a2 b2 sum2) ? : !); return 0; }程序输出a1 b1 ! sum1 a2 b2 sum2运行分析十进制小数0.3、0.6、0.9转换成二进制是无限循环小数float只能截断保存近似值。 0.30.6 的近似结果和直接赋值 0.9 的近似结果内存比特不完全相同 判断为不相等。​十六进制浮点数 0x…p… 直接对应二进制存储格式数值可以被float精确表达加法运算无舍入误差等式成立。知识点单精度 float 二进制存储十进制小数不一定能精确二进制表示。​禁止直接用 判断两个浮点是否相等若要判断用两数相减小于一个极小的值判断。​C语言十六进制浮点字面量 0x尾数p指数 可以精确表示。4. 不合群的数字原题代码codevoid findUndercoverIDs(int nums[], int size) { int xorAll 0,id_a 0,id_b 0; for (int i 0; i size; i) { xorAll ^ nums[i]; } int diffBit xorAll -xorAll; for (int i 0; i size; i) { if(nums[i] diffBit){ id_a ^ nums[i]; } else { id_b ^ nums[i]; } } printf(These nums are %d %d\n, id_a, id_b); }程序输出These nums are %d %d实际打印出数组中仅有的两个出现奇数次的数字。运行分析第一个循环把数组全部元素异或存入xorAll。出现偶数次的数字异或后抵消变成0最终xorAll id_a ^ id_b也就是两个目标数字的异或结果。因为两个数不相等xorAll一定不为0。​diffBit xorAll -xorAll取出xorAll最右侧值为1的二进制位。这一位代表id_a和id_b在此位上一个是1、一个是0可以用来区分两个数。​第二个循环遍历整个数组如果当前数字该bit位为1归第一组不断异或到id_a否则归第二组不断异或到id_b。偶数次的数字完整落在同一组会互相抵消两个目标数被分到不同组别。​两组各自异或完毕id_a、id_b就得到那两个出现奇数次的数字最后printf输出。知识点异或运算性质x^x0x^0x满足交换律结合律偶数次出现的数字异或后清零。​x -x可以取出数字最右侧为1的bit位。​数组有两个出现奇数次的数不能直接全体异或出答案需要按bit位分组分开异或求解。​易错只有一个数出现奇数次直接全部异或即可两个数则必须分组。5. 会一直循环吗原题代码codeint main(int argc, char* argv[]) { printf(argc %d\n, argc); while (argc 0) { if(argc 0){ printf(argv[0] %s\n, argv[0]); break; } } printf(argc %d\n, argc); return 0; }程序输出未定义行为。两种现象都有可能 死循环一直跑停不下来大多数编译器实际现象运行分析argc 是有符号int程序启动时值 ≥1。while(argc 0)进入循环每次做 argc 不断向上增加。int有上限32位int最大2147483647。当argc已经等于最大值再执行 argc 发生有符号整数溢出但是argc是后置自增先用旧值作判断再1,下一轮不会进入循环体不触发break。​3. 很多人会主观认为“加到最大就翻成负数退出循环”这不是C语言保证的效果只是部分CPU硬件特性不是确定行为。考试答题不能默认它会自动退出。知识点1.argc 是int记录命令行参数个数。​2. 无符号整数溢出定义明确会回绕有符号int溢出C标准是未定义行为结果不可靠。​3. 易错点不要把硬件回绕特性当成语言确定逻辑本题不能断定循环一定会退出。6. const 与指针谁能动谁不能动原题代码codestruct P { int x; const int y; }; int main() { struct P p1 { 10, 20 }, p2 { 30, 40 }; const struct P p3 { 50, 60 }; struct P* const ptr1 p1; const struct P* ptr2 p2; const struct P* const ptr3 p3; return 0; } ptr1-x 100, ptr2-x 300, ptr3-x 500 ptr1-y 200, ptr1 p2, ptr2-y 400 ptr2 p1, ptr3-y 600, ptr3 p1运行分析struct P* const ptr1 p1指针本身const指针不能改指向指向的内容可以修改​const struct P* ptr2 p2指针本身可改指向指向的结构体被const修饰内容不能修改​const struct P* const ptr3 p3指针本身不能改指向指向内容也不能修改判断语句是否合法原因ptr1-x 100合法ptr1指针本身只读但指向对象的x成员允许赋值ptr2-x 300非法const struct P*指向结构体整体视为常量成员禁止修改ptr3-x 500非法ptr3指向const结构体结构体所有成员禁止赋值ptr1-y 200非法结构体内部y是const int无论何种指针均不能赋值修改ptr1 p2非法ptr1是* const指针本身是常量不能更改指针指向ptr2-y 400非法const struct P*指向对象成员禁止写操作ptr2 p1合法ptr2指针本身变量可变可以更换指向别的对象ptr3-y 600非法ptr3指向const结构体同时y本身为const成员禁止赋值ptr3 p1非法ptr3是* const指针本身常量不允许修改指向知识点T *const p*指针变量本身const不能修改p的指向p内容允许修改 。​const T *p*指针本身可以改指向p的内容被视作const不允许修改 。​const T *const p指针、指向内容两者全部禁止修改。​结构体内部const int y该成员与生俱来只读不管外部指针怎么写都不能对y赋值。​const结构体变量 结构体全部成员统一视为常量所有成员禁止写操作。​易错区分 const 写在 * 左边限制指向的内容 const 写在 * 右边限制指针本身。7. 指针数组!原题代码codeint main() { int a[3] { 2, 4, 8 }; int(*b)[3] a; int* c[3] { a, a 1, a 2 }; int (*f1(int))(int*, int); return 0; } a, *b, *b 1, b, b 1, * (*b 1), c, sizeof(a), sizeof(b), sizeof(a), sizeof(f1)判断表达式含义/结果64位Linuxa数组名退化为a[0]首元素地址*b对数组指针解引用等价数组名a即a[0]*b 1a[1]向后偏移1个intb数组指针存放a整个数组的地址b 1a加上整个数组大小跳过完整int[3]数组*(*b 1)取值a[1]输出4c指针数组数组名退化为c[0]sizeof(a)12数组不退化3*sizeof(int)sizeof(b)8数组指针变量大小sizeof(a)8a是数组指针类型sizeof(f1)8函数指针大小运行分析知识点1.数组名大多数表达式中退化为首元素指针sizeof、运算符下数组名不会退化。​2,.int (*b)[3] 数组指针指向整个数组 b1 跨过完整数组。​3, intc[3] 指针数组数组里面存放的元素是int指针。括号优先级非常关键。​4.区分数组指针一个指针指向数组 vs 指针数组一个数组元素是指针。​5.64位系统所有数据指针、函数指针大小均为8字节。​6.函数声明 int (f1(int))(int,int) f1接收int返回一个函数指针。8. 全局还是局部原题代码codeint g; int func() { static int j 98; j g; return j; } int main() { g 3; char arr[6] {}; arr[1] func(); arr[0] func(); arr[2] arr[3] func() 1; arr[4] func() 1; printf(%s linux\n,arr); return 0; }程序输出hello linux运行分析1.全局变量g文件作用域没有显式初始化自动置0。2.static int j98静态局部变量存储在全局数据区**仅第一次进入func执行初始化后续调用保留上次的值不会重置为。普通局部变量栈上每次调用重新创建static不存栈。3.char arr[6] {};部分初始化未显式赋值成员全部置0arr[5]0刚好是字符串终止符\0。4. 赋值顺序arr[1]func()→ 第一次funcarr[0]func()→ 第二次funcarr[2]arr[3]func()1→第三次funcarr[4]func()1→第四次func5. 字符对应ASCII104 → ‘h’101→’e’108→’l’108→’l’111→’o’arr[5]\06.printf(%s linux\n,arr)%s遇到\0停止打印hello拼接后面字面量linux完整输出hello linux。知识点1.全局变量、static静态变量存放在静态存储区未初始化自动赋值0普通局部栈变量不初始化值随机。2. static局部变量初始化只执行一次函数多次调用变量值持续保留。3.char arr[N]{};C语言部分初始化语法全部元素置0。4.%s格式化输出依赖\0作为字符串结束标记。5. 连续赋值a b expr从右往左计算expr结果同时赋值给b再赋值a。6. ASCII码98‘b’101‘e’104‘h’107‘k’108‘l’110‘n’111‘o’。9. 宏函数指针原题代码code#define CALL_MAIN(main, x) (*(int (*)(int))*main)(x); #define DOUBLE(x) 2 * x int (*registry[1])(int); int main(int argc) { if (argc 2e3) return 0; printf(%d , argc 1); *registry (int(*)(int))main; CALL_MAIN(registry, DOUBLE(argc 1)); return 0; }程序输出2 4 8 16 32 64 128 256 512 1024运行分析1.registry 函数指针数组数组里面存函数指针。* registry main 把main函数地址存入数组第0项。​2.宏 DOUBLE(x) 是简单文本替换没有括号DOUBLE(argc1) 直接展开为 2 * argc 1 不是 2*(argc1)重点坑宏直接文本替换不自动加括号。传入 argc1 2*11 3宏 CALL_MAIN(registry, DOUBLE(argc1))(*(int(*)(int))*registry)( DOUBLE(argc 1) )*registry 取出存的main函数指针强制转换调用递归调用main把计算出来的值作为新的 argc 。流程推演启动时argc1第1轮 argc1printf(%d , argc1) →打印 2DOUBLE(argc1) 展开 2*11 3 递归调用 main(3)​第2轮 argc3printf(%d , 4 ) 打印 4DOUBLE(31) → 2*317 调用 main(7)​第3轮 argc7 打印 8 计算 2*7115 调用 main(15)​每一轮 新argc 2*old_argc 1​不断1→3→7→15→31→63→127→255→511→1023→2047当 argc2047 20472000 return 0 递归终止。知识点宏是纯文本替换不会计算不会自动加括号 #define DOUBLE(x) 2x 会产生优先级bug正确写法 #define DOUBLE(x) (2(x)) 。​int (*registry[1])(int) 函数指针数组区分数组指针 vs 函数指针数组。​函数指针强制类型转换可以把函数地址存进数组再通过指针调用函数。​main本身也是普通函数可以被函数指针调用造成递归。​2e3 浮点数常量等于2000。10. 拼接 排序 去重原题代码codeint main() { int arr1[] { 6, 1, 2, 1, 9, 1, 3, 2, 6, 2 }; int arr2[] { 4, 2, 2, 1, 6, 2 }; int len1 sizeof(arr1) / sizeof(arr1[0]); int len2 sizeof(arr2) / sizeof(arr2[0]); struct result result; your_concat(arr1, len1, arr2, len2, result); print_result(result); your_sort(result); print_result(result); your_dedup(result); print_result(result); free(result.arr); return 0; }程序改编#include stdio.h #include stdlib.h // 自定义result结构体 struct result { int *arr; int len; }; // 拼接把arr1 arr2合并malloc开辟总内存存入result void your_concat(int *arr1, int len1, int *arr2, int len2, struct result *res) { int total len1 len2; res-arr (int *)malloc(total * sizeof(int)); res-len total; int i 0; for(; i len1; i){ res-arr[i] arr1[i]; } for(int j 0; j len2; j,i){ res-arr[i] arr2[j]; } } // 冒泡排序 void your_sort(struct result res) { int n res.len; for(int i 0; i n-1; i){ for(int j 0; j n-1-i; j){ if(res.arr[j] res.arr[j1]){ int t res.arr[j]; res.arr[j] res.arr[j1]; res.arr[j1] t; } } } } // 去重前提数组已经排好序原地覆盖修改len void your_dedup(struct result res) { if(res.len 0) return; int slow 0; for(int fast 1; fast res.len; fast) { if(res.arr[fast] ! res.arr[slow]) { slow; res.arr[slow] res.arr[fast]; } } res.len slow 1; } //打印函数 void print_result(struct result res) { for(int i 0; i res.len; i) { printf(%d , res.arr[i]); } printf(\n); } int main() { int arr1[] { 6, 1, 2, 1, 9, 1, 3, 2 }; int arr2[] { 4, 2, 2, 1, 6, 2 }; int len1 sizeof(arr1) / sizeof(arr1[0]); int len2 sizeof(arr2) / sizeof(arr2[0]); struct result result; your_concat(arr1, len1, arr2, len2, result); print_result(result); your_sort(result); print_result(result); your_dedup(result); print_result(result); free(result.arr); return 0; }分析1. 结构体struct result 存放动态数组指针 arr malloc堆内存和有效长度 len 数组不能使用栈空间。​2. your_concat拼接传入结构体指针计算总长度malloc开辟堆内存拷贝两个数组的数据给长度赋值。必须传指针否则修改仅发生在函数副本外部main无效。3. your_sort排序冒泡升序结构体传值但内部指针依旧指向原堆数组会修改原始数据。排序是去重的前提。​4. your_dedup去重双指针原地去重不新分配内存只适用于有序数组更新有效长度 len 。​5. main流程求数组长度 →拼接→打印→排序→打印→去重→打印 → free 释放malloc内存避免内存泄漏。知识点1.结构体定义结构体传参2.malloc动态堆内存开辟free释放3. 数组拼接逻辑4. 基础排序冒泡排序5.有序数组双指针原地去重6.sizeof求数组长度11. 指针魔法原题代码codevoid magic(int(*pa)[6], int** pp) { **pp (*pa)[2]; *pp (*pa) 5; **pp - (*pa)[0]; *pp (*pa) ((*(*pa 3) 1) ? 3 : 1); *(*pp) *(*pp - 1); *pp (*pa) 2; } int main() { int a[6] { 2, 4, 6, 8, 10, 12 }; int* p a 1,** pp p; magic(a, pp); printf(%d %d\n%d %d %d\n%d %d\n,*p,**pp,a[1],a[2],a[3],a[5],p-a); return 0; }程序输出因第5行越界实际输出不确定。printf打印起点为*p a[2] 6。运行分析1.**pp (*pa)[2];*p 6a[1]由4修改为10。2.*pp (*pa) 5;修改指针pp指向a[5]。3.**pp - (*pa)[0];*p - 2a[5]由12修改为10。4.*pp (*pa) ( ((*(*pa 3)) 1 ) ? 3 : 0 );a[3]88 1 0三元取0p指向a[0]。5.*(*pp) *(*pp - 1);此时p指向a[0]p‑1访问a[-1]数组越界未定义行为结果随机。6.*pp (*pa) 2;修改pp最终指向a[2]。处理后数组a {2, 10, 6, 8, 10, 10}知识点1.数组指针int (*pa)[6]指向一整个数组*pa得到数组首地址。2. 二级指针int** pp-*pp修改指针变量本身改变指向位置。-**pp修改指针指向内存的数据修改数组元素。3. 指针加减以元素为单位不是字节。4. 按位与1用于判断整数奇偶三元运算符条件 ? 真 : 假。5. 数组越界访问属于C语言未定义行为运行结果不可预测。12. 奇怪的循环原题代码codeunion data { void**** p; char arr[20]; }; typedef struct node { int a; union data b; void (*use)(struct node* n); char string[0]; } Node; void func2(Node* node); void func1(Node* node) { node-use func2; printf(%s\n, node-string); } void func2(Node* node) { node-use func1; printf(%d\n, (node-a)); } int main() { const char* s Your journey begins here!; Node* P (Node*)malloc(sizeof(Node) (strlen(s) 1) * sizeof(char)); strcpy(P-string, s); P-use func1; P-a sizeof(Node) * 50 sizeof(union data); while (P-a 2028) { P-use(P); } free(P); return 0; }程序输出Your journey begins here! 1621 Your journey begins here! 1622 Your journey begins here! 1623 …… Your journey begins here! 2028运行分析func1 把函数指针 use 赋值为 func2 打印柔性数组的字符串不会修改成员a。​func2 把函数指针 use 赋值为 func1 前置自增 (node-a) 先a1再打印a的值。​while条件 P-a 2028 。每次while循环执行一次 P-use§ func1、func2交替执行。func1执行完回到while条件成立立刻调用已经切换好的func2​func2执行完a增大回到while判断。临界当a2027while条件成立执行func1打印字符串​while条件依旧成立执行func2 a 得到2028打印2028​返回while 20282028 不成立循环终止。知识点联合体 union多个成员共享同一块内存大小等于最大成员所占字节。​柔性数组 char string[0] 结构体尾部不计入 sizeof(结构体) malloc追加内存存放变长字符串需要配套free。​函数指针存储函数地址可以动态切换调用不同函数。​前置自增 var 先变量自增再使用变量的值。​while循环条件使用结构体成员循环内修改该成员控制循环退出。

相关新闻

P1090 NOIP 2004 提高组 合并果子 题解

P1090 NOIP 2004 提高组 合并果子 题解

P1090 NOIP 2004 提高组 合并果子 题解 题目传送门: <{[()]}> 这题很容易想到一个贪心&#xff1a;每次取重量最小的两堆果子&#xff0c;再取合并后重量最小的两堆果子&#xff0c;直到只有一堆果子为止。 接下来是证明 证明贪心 假设现在只有 3 堆果子&#xff0c…

2026/10/14 19:39:50 阅读更多 →
Java多数据源事务配置:4种落地方案与本地消息表实战

Java多数据源事务配置:4种落地方案与本地消息表实战

1. 项目概述&#xff1a;为什么“Java多数据源事务配置”是每个中高级后端绕不开的硬骨头“Java多数据源的事务配置”——这八个字背后&#xff0c;藏着无数人在分布式系统演进过程中踩过的深坑、改过的凌晨三点的配置、回滚失败后焦灼盯屏的十几分钟&#xff0c;以及生产环境里…

2026/10/14 19:38:49 阅读更多 →
火车票订票系统毕设源码:可运行全流程工程实践

火车票订票系统毕设源码:可运行全流程工程实践

简介&#xff1a;本资源是一套高分通过的计算机专业毕业设计项目——基于Java开发的火车票订票系统&#xff0c;面向正在准备毕设的本科生、Java初学者及课程设计实践者&#xff0c;解决从选题、编码、数据库建模到论文撰写与答辩全流程支撑需求。压缩包共41.04MB&#xff0c;含…

2026/10/14 19:38:49 阅读更多 →

最新新闻

权威测评!2026年最火AI论文工具榜单,免费款也能高效产初稿

权威测评!2026年最火AI论文工具榜单,免费款也能高效产初稿

一、实测方法论&#xff1a;5 大维度量化评估 本次实测覆盖全学科论文场景&#xff0c;重点考察以下维度&#xff0c;结果客观可复现&#xff1a; 表格 评估维度权重测评标准中文适配度25%是否符合 GB/T7714 引用规范&#xff0c;语言逻辑自然度&#xff0c;术语准确性免费功能…

2026/10/14 20:21:39 阅读更多 →
Linux嵌入式SD/MMC驱动调试:信号流向、三层架构与实战排错

Linux嵌入式SD/MMC驱动调试:信号流向、三层架构与实战排错

1. 项目概述&#xff1a;为什么一个SD/MMC驱动分析值得花时间深挖&#xff1f;在嵌入式Linux开发一线干了十多年&#xff0c;我经手过的板子从ARM9、ARM11到Cortex-A7/A53/A72&#xff0c;再到如今的RISC-V SoC&#xff0c;几乎每一块主控芯片的BSP包里&#xff0c;SD/MMC子系统…

2026/10/14 20:21:39 阅读更多 →
最小二乘法全攻略:从线性回归原理到代码实现与避坑实践

最小二乘法全攻略:从线性回归原理到代码实现与避坑实践

我第一次真正用上最小二乘法&#xff0c;是在处理一组传感器校准实验数据的时候。当时手里是一堆带噪声的采样点&#xff0c;教科书里的公式能帮我“找一条最合理的直线”&#xff0c;但工程上真正让人头疼的&#xff0c;其实是后面这些事&#xff1a;数据里混了离群点怎么办&a…

2026/10/14 20:21:39 阅读更多 →
大模型应用落地指南:从模型选型到Agent与RAG实践

大模型应用落地指南:从模型选型到Agent与RAG实践

1. 模型维度&#xff1a;基座能力的格局与选型逻辑距离大模型真正进入大众视野到现在&#xff0c;已经过了好几个年头。站在2026年10月这个时间窗口往回看&#xff0c;最明显的变化是&#xff1a;市面上能叫得出名字的大模型&#xff0c;已经从早期的"百家争鸣"收敛成…

2026/10/14 20:21:39 阅读更多 →
Linux MMC驱动深度解析:SD卡识别流程与SDIO协议栈实战

Linux MMC驱动深度解析:SD卡识别流程与SDIO协议栈实战

1. 项目概述&#xff1a;这不是教科书里的驱动理论&#xff0c;而是现场拆解一张SD卡如何被Linux真正“认出来” 你有没有遇到过这样的情况&#xff1a;插上一张SD卡&#xff0c;系统日志里刷出一串 mmc0: new high speed SDHC card at address 0001 &#xff0c;但紧接着 d…

2026/10/14 20:21:39 阅读更多 →
从Zernike波前到PSF/MTF:光学像质仿真完整指南

从Zernike波前到PSF/MTF:光学像质仿真完整指南

做光学系统设计的人应该都有过这种体验&#xff1a;镜头草图画完、光线追迹也跑通了&#xff0c;但别人问"那成像到底清不清楚、能分辨多小的细节"&#xff0c;你一时却拿不出一个直观的答复。光线追迹给的是光路&#xff0c;不是像质。真正用来回答"成像多锐利…

2026/10/14 20:20:38 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →