- 博客(98)
- 收藏
- 关注
原创 这是bing蠢还是百科坏?
当你在bing中搜索【Contributing to Eclipse】,发现百科的链接居然显示为豆瓣:==========
2024-12-16 15:51:13
145
原创 pytorch错误: 找不到指定的模块 Error loading “torch_python.dll“ or one of its dependencies
为了防止和作者环境不一致,遇到一堆奇怪的问题,需要安装pytorch的2.4.0版本,但作者坑就坑在这里,没说自己用的哪个python版本,只是推荐3.11和3.12。我的想法是,既然作者都这样说了,应该不存在版本不匹配的问题。而且网上所说不匹配的版本,都是比较老的python和pytorch版本,估计不太可能是不匹配。)内发现一张图,是python 和 pytorch的版本对应关系图,但只到2.3版本,缺少2.4版本的。也不知道他的图是哪里获取的。然后再试试 import torch,竟然就成功了!
2024-11-28 17:22:30
2592
原创 选择使用whisper.cpp进行语音转文字
当你添加本地文件后,不管文件多大,数量有几个,它会马上启动文件上传,让你误以为它能够无限制的免费帮你进行转换,最差情况,估计也就是让你这种白嫖党多等一会儿。需要将一些wav格式的语音文件转成文字(ASR,STT),接到这个任务后,首先上网搜索有没有现成免费的工具或服务可以使用。它是openAI的whisper开源项目的cpp实现,按照其主页说明,在win10下的WSL Ubuntu ,只要几个步骤就能跑起来,也不要求有gpu。不过实际情况是,当所有这些文件上传完成,点击提交后,它就告诉你需要收费啦。
2024-11-25 12:09:41
1700
原创 DDIA(数据密集型应用系统设计)第二版出了【part 2】
[1] Mike Cvet. How We Learned to Stop Worrying and Love Fan-In at Twitter. At QCon San Francisco, December 2016.[2] Raffi Krikorian. Timelines at Scale. At QCon San Francisco, November 2012. Archived at perma.cc/V9G5-KLYK[3] Twitter. Twitter’s Recommendati
2024-08-29 12:01:30
1385
原创 DDIA(数据密集型应用系统设计)第二版出了【part 1】
深受喜爱的DDIA终于出第二版了!不过目前还属于 Early Release 版本阶段,只发布了前三章。
2024-08-29 11:58:38
2312
原创 OCP Java17 SE Developers 复习题15(完)
======================= 答案 ================================================ 答案 ================================================ 答案 ================================================ 答案 ========================
2024-04-24 10:29:29
1172
1
原创 OCP Java17 SE Developers 复习题14
====================== 答案 ============================================== 答案 ============================================== 答案 ============================================== 答案 ============================================== 答案 =======================
2024-04-19 15:00:00
835
原创 OCP Java17 SE Developers 复习题13
======================= 答案 ================================================== 答案 ================================================== 答案 ================================================== 答案 ==========================
2024-04-18 16:17:16
856
原创 OCP Java17 SE Developers 复习题12
=========================== 答案 ========================================================== 答案 ========================================================== 答案 ==============================
2024-04-15 09:40:10
1038
原创 OCP Java17 SE Developers 复习题11
=========================== 答案 ========================================================== 答案 ========================================================== 答案 ==============================
2024-04-03 10:22:28
1207
原创 OCP Java17 SE Developers 复习题10
======================= 答案 ===================================================== 答案 ===================================================== 答案 ===================================================== 答案 =============================
2024-04-01 10:46:04
929
原创 OCP Java17 SE Developers 复习题09
======================= 答案 ===================================================== 答案 ===================================================== 答案 ===================================================== 答案 =============================
2024-03-05 10:57:21
1108
原创 C语言K&R圣经笔记 8.7样例 - 内存分配器 [全书完]
8.7 样例 - 内存分配器在第五章中,我们给出了一个非常受限的面向栈的内存分配器。这次我们要写一个不受限制的版本。使用者能够以任意顺序调用 malloc 和 free;malloc 按需向操作系统申请更多的内存。这些例程说明了以相对不依赖于机器的方式来写依赖于机器的代码时的一些注意事项,并展示了一个使用结构体、联合体和 typedef 的现实的应用程序。malloc 会在需要时向操作系统申请内存,而不是从编译好的固定大小的数组中申请。由于程序中的其他活动(代码)也可能不通过这个内存分配器来申请内存
2024-02-28 11:42:49
766
原创 C语言K&R圣经笔记 8.6 样例 - 列出目录内容
遗憾的是,目录的格式和确切内容并非在所有版本的 UNIX 系统中都相同。外层定义一个称为 Dirent 的结构和三个例程 opendir,readdir 和 closedir ,它们提供对目录条目中的文件名和 inode 的访问,不依赖具体的系统。对这样的程序,非常重要的一点是,只让这些信息的展示出现在标准头文件中,然后程序包含这些头文件,而不是把这些声明内嵌在程序内部。第二个观察到的点是,如果足够用心,就能够为依赖系统的对象创建一个相对不那么依赖系统的接口。这个文件也可能是子目录,因此这个过程是递归的。
2024-02-27 11:42:42
905
原创 C语言K&R圣经笔记 8.5样例 - fopen和getc的实现
然而,如果数量变为负,则 getc 调用 _fillbuf 来重新填充缓存,重新初始化结构体的内容,并返回一个字符。特别指出,这个版本的 fopen 不认识表示二进制模式的 “b”,因为在 UNIX系统上没有意义,也不认识表示同时允许读和写的 “+” 号。尽管并不准备讨论任何细节,我们还是把 putc 的定义包含进来,以说明它和 getc 的工作方式大致相同,在缓存满时调用 _flushbuf 函数。一旦缓存建立起来,_fillbuf 会调用 read 来填充缓存,设置数量和指针,并返回缓存头部的字符。
2024-02-26 11:18:33
807
原创 C语言K&R圣经笔记 8.3 open,creat,close,unlink 8.4随机访问-lseek
在 UNIX 系统中,有 9 个比特位的权限信息与文件关联,分别控制文件属主,属主所在的用户组,以及其他用户的读,写和执行。我们这个版本的 cp 只能拷贝一个文件,也不允许第二个参数为目录,还写死了文件权限,没有从原文件拷贝过来。open 非常像第七章讨论的 fopen,区别在于 open 不返回文件指针,而是返回文件描述符,后者仅仅是个 int。使用后面 8.6 节所述的 stat 系统调用,我们可以确定已存在文件的权限,并将同样的权限赋给要拷贝的文件。试图 open 一个不存在的文件是错误的。
2024-02-23 10:28:48
1133
原创 C语言K&R圣经笔记 8.1文件描述符 8.2低级IO
UNIX 操作系统通过一系列“”来对外提供服务,实际上,系统调用是操作系统内可以被用户程序调用的函数。本章描述怎样在 C 程序中使用一些最重要的系统调用。如果你使用 UNIX,本章应当会有直接的帮助,因为有时需要使用系统调用以得到最大化的效率,或访问库中没有的一些功能。然而,即使你在其他操作系统上使用 C 语言,通过研究这些样例,你也能够对 C 语言编程有更深入的理解;尽管细节不同,但类似的代码在任何系统上都能找到。由于在很多情况下 ANSI C 库是以 UNIX 功能为原型的,这些代码也能帮助你理解库。
2024-02-20 10:34:25
794
原创 C语言K&R圣经笔记 7.7行输入和输出 7.8其他函数
空间的释放顺序是随意的,但释放并非由调用 calloc 或 malloc 得到的内存是非常可怕的错误。令人困惑的是,gets 删除结尾的 '\n',而 puts 在结尾添加 '\n'。system 从被执行的命令中返回一个依赖于系统的整数。在 UNIX 系统中,返回的状态是 exit 返回的值。返回一个指针,指向能容纳 n 个指定大小为 size 的对象的数组空间,若无法满足要求则返回 NULL。malloc 和 calloc 返回的指针为所需的对象提供了正确的对齐,但必须要转换成恰当的类型,例如。
2024-02-19 15:06:50
981
原创 C语言K&R圣经笔记 7.5文件访问 7.6错误处理-stderr和exit
试图读不存在的文件是错误的,另外还可能存在其他错误,例如试图读你无权访问的文件。,指向一个包含文件信息的结构体,例如:缓存的位置,缓存中当前字符的位置,文件是被还是写,是否遇到了错误或者文件结束,等等。如果输出到屏幕,这也许可以接受,但如果输出到文件,或者通过管道输出到另一个程序,就无法接受了。一旦文件被打开,下一件需要的事是读或写文件的方式。fopen 获取一个如 x.c 或 y.c 这样的外部名称,做一些杂活,并和操作系统协商(细节我们不关心),然后返回一个后续可以用来对文件进行读或写操作的指针。
2024-02-19 11:33:19
1045
原创 C语言K&R圣经笔记 7.3变长参数列表 7.4标准输入-scanf
不仅如此,它在寻找输入值的时候,会跳过空白字符(空格,制表符,换行等)。转换字符d,i,o,u 和 x 前面,可以加上 h 来表明参数列表中出现的指针是指向 short 而不是 int ,或者加上字母 l 来表明参数列表中指针指向的是 long。由于我们主要对参数处理感兴趣,故 minprintf 只做格式化字符串和参数的处理,而格式转换调用真正的 printf 来处理。这个头文件的实现在不同的机器上是不同的,但它给出的接口是统一的。对应的参数必须是指针,这是由 C 语言的“值传递”语义要求的。
2024-02-06 10:07:52
1125
原创 C语言K&R圣经笔记 7.1标准输入和输出 7.2格式化输出-printf
输入和输出功能并不是 C 语言本身的一部分,故到目前为止,本书都没有对其着重说明。然而,程序与其环境之间交互的方式,比书中之前所展示的更为复杂。本章我们会详描述标准库,即一系列为 C 程序提供输入输出、字符串处理、内存管理、数学例程及其他各种服务的函数。ANSI 标准精确定义了这些库函数,因此在任何有 C 语言的系统中也都有这些标准库函数,并且是互相兼容的。如果一个程序只使用了标准库提供的功能来与系统进行交互,那么这个程序不用修改就可以从一个系统移植到另一个系统。
2024-02-04 16:37:25
1216
原创 C语言K&R圣经笔记 6.8联合体 6.9位域
某个特定常量的值必须储存在正确类型的变量中,然而,如果不管该常量的值是什么类型,它都占有相同大小的内存而且保存在同一个位置,那么对表管理而言是最方便的。实际上,联合体就是一个结构体,其所有成员都是从其内存起始地址的偏移量零开始,而且结构体足够大以容纳“最宽”的成员,另外对齐方式也适用于联合体中所有成员。这些类型中不管哪一种都能被赋给 u ,然后用在表达式里,但注意使用方式必须是一致的:即取出的类型必须是最近存入的类型。访问结构体中联合体的成员(或联合体中的结构体成员)的表示法,与访问嵌套结构体是一样的。
2024-01-31 11:00:02
756
原创 C语言K&R圣经笔记 6.6 表查询 6.7 typedef
否则,创建一个新的项。lookup 和 install 都要使用的 hash 函数,会把字符串中每个字符值都加到对之前字符打散组合得到的值上,并返回对数组大小取模后得到的余数。练习6-6、基于本节的例程,写出一个适用于 C 程序的简单版本(即不带参数的)的 #define 预处理器。使用 typedef 的第二个目的是为程序提供更好的说明——名为 Treeptr 的类型,会比仅声明为指向复杂结构体类型的指针更好理解。链表中的块(元素)是一个结构体,包含了:名称的指针,替换文本的指针,链表中下一个块的指针。
2024-01-30 20:16:00
1140
原创 C语言K&R圣经笔记 6.4结构体指针 6.5自引用结构体
如果匹配,则答案是肯定的。新节点的存储空间通过 talloc 例程获取,它返回一个指针,指向一段适合保存树节点的可用内存空间,而新单词通过 strdup 被拷贝到一个隐藏的内存空间。在每个节点上,它打印左子树(所有比当前节点单词小的),然后是当前节点上的单词,然后是右子树(所有比当前节点单词大的)。如果 p 是指向结构体的指针,对 p 的指针运算会将结构体的大小考虑在内,因此 p++ 能正确地对 p 递增,使其指向结构体数组的下一个元素,而 for 循环中的判断条件能在正确的时候停止循环。
2024-01-30 11:21:54
2194
原创 C语言K&R圣经笔记 6.3结构体数组
函数的值是单词的首字母,或者是代表文件结束的EOF,或者是字符本身,如果该字符不是字母的话。)对象可以是变量或数组或结构体,类型名可以是基本类型如 int 或 double的名字,也可以是派生类型如结构体或指针的名字。每个单词都会在 keytab 中搜索,用的是我们在第三章写的二分搜索函数的字符串版本。但当初始化表达式是简单变量或字符串,而且都存在的情况下,内部的括号是不需要的。在我们的例子中,关键字的数量是数组的大小除以一个元素的大小。数组的大小是每个元素的大小乘以元素的个数,因此元素的个数就是。
2024-01-29 11:30:27
447
原创 C语言K&R圣经笔记 6.1结构体基础 6.2结构体和函数
结构体是一个或多个(可能是不同类型)的变量的集合,这些变量组合在单个名字下面,以便于处理。(结构体在其他语言中被称为“记录”,典型的有Pascal。)结构体有助于组织数据,特别是在大型的程序中,因为它们允许把一组相关的变量当作一个单元,而不是当作各自独立的几个实体来分别处理。结构体的一个传统例子是工资记录:雇员通过一组属性,如姓名、地址、社会安全号码和工资等来描述。其中的某些属性可能也是结构体:名字有多个组成部分,地址也是,甚至连工资也是。
2024-01-29 10:38:05
1007
原创 C语言K&R圣经笔记 5.12 复杂声明
尽管真正复杂的声明在实际工作中很少出现,但明白如何理解复杂声明,以及在有需要时知道如何创建复杂声明,都是很重要的。由于这个 dcl 程序的目的是用来做讲解用,而不是要做成稳定可靠的解析器,因此它有着极大的限制。或是 direct-dcl 后面跟着一对方括号,其中的大小是可选的。在简单的情况下它的效果不错,但在更复杂的情况下会让人困惑,因为声明不能从左往右读,而且括号被过度使用了。dcl 程序的核心是一对根据这个语法来解析声明的函数,dcl 和 dirdcl。undcl 也使用了 dcl 使用的外部变量。
2024-01-28 17:07:37
880
原创 C语言K&R圣经笔记 5.11函数指针
正如 qsort 的函数原型所指示的,它期望接收一个指针数组、两个整数,以及一个有两个指针参数的函数。排序通常包含三部分:用于确定两个对象顺序的比较操作,用于交换两个对象顺序的交换操作,以及进行比较和交换直到所有对象都有序的排序算法。练习5-17、增加域处理能力,根据行中的域(列)进行排序,每个域的排序选项是独立的。用来交换两个指针的 swap 函数,除了把声明改为 void * 之外,其他部分和我们本章之前给出的是一样的。与声明是一致的:comp 是函数的指针,而 *comp 是函数,而。
2024-01-19 15:19:00
431
原创 C语言K&R圣经笔记 5.10命令行参数
在循环结束时,如果没有错误,则 argc 告诉我们还剩多少参数未处理,而 argv 指向这些剩余参数中的第一个。第一个是程序被调用时带的命令行参数个数(按惯例称为 argc,即参数个数 argument count 的缩写),第二个是指向包含所有参数的字符串数组的指针(argv,参数向量 argument vector 的缩写),数组里每个字符串对应一个参数。第一个可能存在的参数是 argv[1],最后一个是 argv[argc -1],另外,C 标准要求 argv[argc] 必须是空指针。
2024-01-19 12:14:23
1034
原创 C语言K&R圣经笔记 5.7多维数组 5.8指针数组初始化 5.9指针vs多维数组
name 是一个字符串指针的数组,它的声明与前面文本行排序例子中 lineptr 的声明一样。行数是无关紧要的,因为依旧传递的是一个指向行的指针,而每行是一个数组。我们把它的类型定义为 char, 是为了说明,用 char 来保存非字符的小整数,是一种正当的用法。虽然我们上面是拿整数来讨论,但目前为止最常用的指针数组是用来保存不同长度的字符串,例如函数 month_name 中保存各月份名称的 name 数组。元素是按行来存的,因此最右边的下标,或者说列,在以存储顺序访问数组元素时,变化最快。
2024-01-05 11:06:31
977
原创 C语言K&R圣经笔记 5.6指针数组;指针的指针
在第三章中,我们介绍了对一个整数数组进行排序的 Shell 排序函数,而在第四章中,我们用快速排序对其进行改进。同样的算法在这里也还能用,差异之处在于,现在我们要处理的是文本行,每行有不同的长度,而且文本行不像整数,没法用单个操作来比较或者移动。当两个错序的行需要交换时,交换的是指针数组里面的指针,而不是文本行本身。也就是说,lineptr[i] 是一个字符指针,而 *lineptr[i] 是它指向的字符,即所保存的第 i 个文本行的首字符。输入例程必须收集和保存每行的字符,并创建一个指向每行的指针数组。
2024-01-04 11:58:22
477
原创 C语言K&R圣经笔记 5.5字符串指针与函数
t++ 的值是 t 在递增之前指向的字符;我们要审视的第二个例程是 strcmp(s, t),它比较两个字符串 s 和 t,当 s 的字典顺序小于、等于或大于 t 的时候,分别返回负数、0 和 正数。返回值的获取,是将 s 和 t 第一个不相同的字符进行相减得到的。在这里,它们都是已经初始化好的指针,每次都分别在各自的数组上前进一个字符,直到 t 结尾的 '\0' 拷贝到 s 后才停止。练习5-4、写个函数 strend(s, t),如果字符串 t 出现在字符串 s 的末尾,则返回 1,否则返回 0。
2024-01-03 11:54:45
886
原创 C语言K&R圣经笔记 5.3指针和数组 5.4地址运算
合法的指针操作有:将指针赋给相同类型,一个指针与一个整数的加减,指向相同数组的两个指针的减法或比较,以及与零的赋值和比较。其他所有指针运算都是非法的。对两个指针相加是非法的,非法的还有相乘或相除,移位或者掩码,以及将指针与 float 或 double 相加,甚至,在没有强制类型转换的情况下,将一个类型的指针赋给另一个类型的指针。如果 pa 指向数组的某个特定元素,则根据定义,pa + 1 会指向下一个元素,pa + i 指向 pa 之后的第 i 个元素, pa - i 指向 pa 之前的第 i 个元素。
2024-01-03 10:24:12
1018
原创 C语言K&R圣经笔记 5.1指针和地址 5.2指针和函数参数
指针是包含变量地址的变量。在 C 语言中,指针被大量使用,部分原因是有时只能用指针来表达某种计算,而部分原因是相比其他方式,指针通常能带来更紧凑和高效的代码。指针和数组是紧密关联的;本章也讲探讨它们的关系,并演示如何利用这个关系。指针曾经和 goto 语句一起,被归结为用于创建“让人不可能理解”的程序的绝妙方式。如果粗心大意地使用指针,这个说法当然是对的,而且很容易创建指向不可预料位置的指针。然而,通过训练和规范约束,指针可以用来得到清晰性和简洁性。这正是我们在本书中尽量展示的方面。
2023-12-27 18:44:39
1041
原创 C语言K&R圣经笔记 4.10递归 4.11 C预处理
C 语言的某些机制是以预处理的方式提供的,预处理从概念上来说,是在编译过程中单独的第一步。两个最常用的预处理特性分别是 #include,用于在编译期间包含一个文件的内容,以及 #define,用来将一个标识符替换成为任意的字符序列。如果替换文本中的参数与 ## 相连,则参数会被替换成实参,## 及其两边的空格会被删除,得到的结果会被再次扫描。在双引号字符串内的形参是不会被替换的。然而,如果在替换文本中,形参以 # 开头,则这个组合(即 # 和形参)会被扩展成一个双引号字符串,其中的参数被替换为实参。
2023-12-27 13:29:51
1087
原创 C语言K&R圣经笔记 4.7寄存器变量 4.8块结构 4.9初始化
当数组为外部,静态或是自动的时候,如果数组的初始化表达式数量比指定的数组长度要少,则没有对应初始化表达式的元素会为0。在块中声明和初始化的自动变量,在每次进入块的时候被初始化。以这种方式声明的变量,可以隐藏外部块中任何相同名字的变量,而且它一直会存在,直到遇到匹配的右大括号。对于自动和寄存器变量,初始化表达式不限于是常量:可以是包含之前定义过的值的任意表达式,甚至是函数调用。在没有显式初始化的情况下,外部和静态变量会保证初始化为0,自动和寄存器变量有未定义(即垃圾)的初始值。字符数组是初始化的特例;
2023-12-18 15:46:36
1022
原创 OCP Java17 SE Developers 复习题08
======================= 答案 ================================================ 答案 ================================================ 答案 ================================================ 答案 ========================
2023-12-05 20:23:12
1361
原创 C语言K&R圣经笔记 4.3 外部变量
此后,每当程序多读了一个字符,它就能将该字符推回给输入,因此对后面的代码来说,就像该字符没被读过一样【即后面的代码再次能读到这个字符,而不会丢失】。比如,在上面的例子中,首先推入栈的是 1 和 2,然后栈上内容被替换为它们的差 -1。然而,正如第一章中所指出的,这个做法要谨慎使用,因为它对程序结构有害,并且会导致我们写出函数间存在过多数据关联(耦合)的程序。入栈和出栈操作是简单的,但当加入错误检测和恢复之后,这些代码就会变得很长,所以最好是把每个操作都放在单独的函数中,而不是在程序里到处重复相同的代码。
2023-12-05 11:40:17
2074
原创 C语言K&R圣经笔记 4.2返回非整数的函数
因此,当出现在这个 return 里面时,atof 的值 ,一个 double,会自动被转换成 int,因为 atoi 函数返回一个 int。但如果(更有可能)atof 是分开编译的,无法检测到两者不匹配,atof 返回 double 而 main 将它当作 int,就会得到无意义的结果。如果一个没有被事先声明的名称出现在表达式中,而且名字后面还跟着左括号,则它被根据上下文声明为一个函数名称,该函数被假定返回int,且对其参数不做任何假定。首先,因为不返回int,故atof 必须声明它的返回值。
2023-12-02 17:59:03
456
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人