基础算法归纳

基础算法归纳 #cs #c #算法 输出最大值 #include <stdio.h> int main(void) { int i[3], max; scanf("%d %d %d", &i[0], &i[1], &i[2]);//通过数组来代替不同变量 max = i[0]; for (int j = 1; j < n; j++) { if (max < i[j]) { max = i[j]; } } printf("%d", max); } 冒泡排序 void BubbleSort(int arr[], int n)//arr[] 在c中要用第一个数组值 { int flag, tmp; for (int i = 0; i < n - 1; i++) { flag = 0; for (int j = 0; j < n - i -1; j++) { if (arr[j] > arr[j + 1]) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; flag = 1; } } if (!flag) return; } } 筛选素数 暴力搜索 ...

June 10, 2026

学习计划

#学习计划 #cs 课程学习 编程入门 CS50 已完成 数据结构与算法 106X : 50-70小时 一些工具的使用与知识点 MIT-Missing-Semester: 10小时 组成原理 体系结构 操作系统( 106x前10集后) CMU CS15213: CSAPP: 难度很大,150小时 算法导论( 106x学完后) -mit 6.006 课外学习 工作岗位的了解,相关技术词汇的了解 积累项目经验, 对于本科生来说,积累项目实践经验的方式通常有三种,其一是加入到老师的课题组当中,这种方式更适合于重点大学的本科生,普通大学的本科生加入项目组的机会通常比较少;其二是参加一些专业比赛,通过参加专业比赛往往能够积累更多的实践经验,而且会获得专业老师的指导;其三是参加一些开源项目,这种方式对于学生的技术要求相对高一些,通常需要从阅读开源系统的源代码开始。

June 10, 2026

学习计划

年计划 英语四级 考了 日语n1 没考 数据结构与算法 完成了30% 106X (26节课) 组成原理 体系结构 操作系统( 106x前10集后) 未开始 CMU CS15213: CSAPP 算法导论( 106x学完后) 未开始 -mit 6.006 (21节课) 网络 编译原理

June 10, 2026

学习计划

#学习计划 #cs 大一上: 106X 106L 算法导论 大一下: CSAPP 网络 编译原理 大二上: 15-445 15-418 大二下: CS162 6.046 大三: 准备校招或者考研

June 10, 2026

学习计划总结

总结 计划的很理想,现实却有很多问题,过于相信课堂上的学习效率,上课时容易被老师打断,效率极低 高数与线代学习的不踏实,需要注意,英语有进步 注意平时积累,不要到最后抱佛脚 高数 微积分很重要, 是进入现代科学的基础. 但是对于cs来说重要性却没那么高, 所以重要性没那么强了. 鉴于这学期老师比较严格, 上课主要还是自学加写作业为主。ps:平时缺乏练习,导致花了很长时间复习。 线性代数 很重要的一门数学课, 在cs领域相当重要. 但是教科书与老师的教学都太落后, 所以选择用自己的教材自学, 上课也是写作业加自学为主 ps:自己选的教材翻译太烂,放弃了。之后老师上课声音太大,完全没法自学。最后通过网上的突击视频,花了三天考过了。 物理 虽然喜欢物理, 但是对于cs来说用处不大, 而且这门课内容多, 学习起来相当耗费时间. 而且老师也比较随和(ps:相当不行), 所以主要通过作业来学习, 上课时间写之前的作业, 之后可以学习其他的东西PS:上课学习其他的东西,效率低,也没有写作业,老师基本不布置作业。 电子技术 偏硬件的课, 但是却浅尝辄止, 学一些皮毛, 要学习内容也是浩如烟海, 相当多. 所以也是通过作业来学习, 上课时间写之前的作业, 之后可以学习其他的东西 PS:上课学习其他的东西,效率低,也没有写作业,老师基本不布置作业。最后再老师划重点下,考过了。 英语 视听说, 老师不错, 上课可以听. 毕竟环境不适合学其他的 读写译, 老师不错, 比较认真, 上课只能听. 心理 水课 形式与政策 水课

June 10, 2026

文件控制函数

文件控制函数 file control 功能描述 fcntl函数可以用来对已打开的文件描述符进行各种控制操作, 以改变已打开文件的的各种属性 头文件 #include <unistd.h> #include <fcntl.h> 函数原型 int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); c int fcntl(int fd, int cmd, struct flock *lock); 描述 fcntl()针对(文件)描述符提供控制.参数fd是被参数cmd操作(如下面的描述)的描述符. 针对cmd的值,fcntl能够接受第三个参数(arg) fcntl函数有5种功能c 复制一个现有的描述符(cmd=F_DUPFD). 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD). 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL). 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN). 获得/设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW). cmd 选项 F_DUPFD 返回一个如下描述的(文件)描述符: (1)最小的大于或等于arg的一个可用的描述符 (2)与原始操作符一样的某对象的引用 (3)如果对象是文件(file)的话,返回一个新的描述符,这个描述符与arg共享相同的偏移量(offset) (4)相同的访问模式(读,写或读/写) (5)相同的文件状态标志(如:两个文件描述符共享相同的状态标志) (6)与新的文件描述符结合在一起的close-on-exec标志被设置成交叉式访问execve(2)的系统调用 F_GETFD 取得与文件描述符fd联合close-on-exec标志,类似FD_CLOEXEC. 如果返回值和FD_CLOEXEC进行与运算结果是0的话,文件保持交叉式访问exec(),否则如果通过exec运行的话,文件将被关闭(arg被忽略) F_SETFD 设置close-on-exec旗标。该旗标以参数arg的FD_CLOEXEC位决定。 F_GETFL 取得fd的文件状态标志,如同下面的描述一样(arg被忽略) F_SETFL 设置给arg描述符状态标志,可以更改的几个标志是:O_APPEND, O_NONBLOCK,O_SYNC和O_ASYNC。 F_GETOWN 取得当前正在接收SIGIO或者SIGURG信号的进程id或进程组id,进程组id返回成负值(arg被忽略) F_SETOWN 设置将接收SIGIO和SIGURG信号的进程id或进程组id,进程组id通过提供负值的arg来说明,否则,arg将被认为是进程id 命令字(cmd)F_GETFL和F_SETFL的标志如下面的描述: O_NONBLOCK 非阻塞I/O ; 如果read(2)调用没有可读取的数据,或者如果write(2)操作将阻塞,read或write调用返回-1和EAGAIN错误 O_APPEND 强制每次写(write)操作都添加在文件大的末尾,相当于open(2)的O_APPEND标志 O_DIRECT 最小化或去掉reading和writing的缓存影响.系统将企图避免缓存你的读或写的数据. 如果不能够避免缓存,那么它将最小化已经被缓存了的数 据造成的影响.如果这个标志用的不够好,将大大的降低性能 O_ASYNC 当I/O可用的时候,允许SIGIO信号发送到进程组,例如:当有数据可以读的时候 **注意:**在修改文件描述符标志或文件状态标志时必须谨慎,先要取得现在的标志值,然后按照希望修改它,最后设置新标志值。不能只是执行F_SETFD或F_SETFL命令,这样会关闭以前设置的标志位。 ...

June 10, 2026

杭州建人高复(杭师大)

杭州建人高复(杭师大) 2023** ~~自作清高的大树,不但无法为人挡风遮雨,还可能给人带来灾难。~~树按照自己的本性生长,不需要顾及也无法顾及其他。大树只是自然地生长,枯萎,死亡。 不公平是客观存在的,即使建立新的制度也依旧存在不公平。但只要不触及个人的底线或者根本利益,可以放平自己心态。如果损害他人来使自己获利,这是不能接受的。 对手机已经是感情上的依赖了,所以一旦拿到手机,即使无事可做也会有安心感,尤其在安全区之外。这因该也是一种把内心寄托于外物的表现。寄情于物或者寄情于人都应当谨慎些。 任何道理,不论多么了解,多么熟悉,都不如亲自尝试一遍,知与行的差距非常大,更何况还会遗忘。 学习完全不会的东西与使用已经会的东西,做这些事所消耗的精力要远小于在意识模糊地带中寻找知识。因此减少在模糊地带的徘徊。2024年1月注 由此可见,,想要通过碎片化的知识来潜移默化的学习是效率底下的。沾花惹草式的学习,以后可能要花费更多的精力。 学习需要大量的实践,当略有所思时,更应该不断的实践,而不是停下来苦思。因为很有可能是错的。 自身精力的管理是一种非常重要的能力。即使是重复的日常生活,如果不去管理精力,也很难过得好。无意义的情绪波动,会让人心力憔悴,难以专心做事。因此专心只做一件事,放下多余的想法和各种执念,只做好自己。 在眼前绽放的鲜活的生命力,令我震撼不已。我充满不可思议的崇拜的心情,注视着。那种生命力是如何形成的,我很好奇。我已经被这种生命力折服,看到这个场景,又给了我一些对这个世界的美好向往。 正视自身,正视内心是一切进步的前提。只有正视了自己,才能了解自己的不足与极限,从而有所改变。正视自己的内心,才能明确自己想要的,从而有了目标。但是正视自己,并不是彻底的表达自我,正视自己可以说谎,可以违心,但这只是表象,自己不能被自己的谎话所蒙蔽,自己要明白自己。 人生有两大目标,提高对世界的认知和提高自己的能力。两个相辅相成,若只有能力但认知浅显,最终只能成为一个好用的工具;而认知大于自身的能力是不可能, 认知来源于实践,而实践需要相应的能力那就只能无可奈何,徒增烦恼。提升认知可以通过读书,实践,思考来提高。而思考是最重要的一环,没有它,学的再多也是复述他人观点。 大脑会下意识的逃避困难,寻求快乐。如何节约这个问题,是改变拖延症的关键。一个方法就是决定好目标后,就去做,不要想太多。

June 10, 2026

汲取知识并化为己用

汲取知识并化为己用 自我规划的能力 搜索知识 归纳总结知识 利用好时间和工具资料 化为己用 形成系统,由薄读厚,由厚读薄 方式 讲给别人听 落实到具体的项目实现 有限时间内 面对困难,压力,迷茫时,积极应对的勇气 这是正常现象,要接纳自己 不要与他人比较 兵来将挡水来土掩; 理解他人,包容他人,博爱之心 学会原谅自己,爱自己 人不是完美的,但这知识一个阶段,不代表一辈子

June 10, 2026

网络协议栈(Network)

现代操作系统的内核(如 Linux 内核)中有一个专门的模块叫做: 网络协议栈(Network Stack) 主要职责详解 职责 类比说明 技术术语 1. 接收和发送数据包 公司前台接收快递 & 发送包裹 数据链路层、IP 层、传输层 2. IP 地址管理 给每个员工分配邮箱地址 IPv4 / IPv6 地址配置 3. 路由选择 快递要走哪条路线最短最快 路由表(Routing Table) 4. 封装与解封装 包裹加标签 / 拆标签 数据封装(Encapsulation)与解封装(Decapsulation) 5. 传输控制(TCP) 控制文件是否完整送达 TCP 流量控制、拥塞控制 6. 端口号管理 不同部门接收不同类型的快递 端口绑定、监听、转发 7. 安全防护(防火墙) 保安检查包裹内容 Netfilter / iptables / nftables 8. NAT 转换 公司统一出口代理 Network Address Translation 9. 域名解析支持 内部电话簿查询联系方式 DNS 解析缓存、本地 hosts 10. 支持多种协议 公司支持各种沟通方式(电话、邮件、视频会议) 支持 TCP、UDP、ICMP、HTTP、HTTPS、FTP 等 类比图:操作系统网络部门的组织架构 小组 类比角色 职责 套接字接口组(Socket Layer) 客户接待员 接收进程请求(如浏览器访问网页) 传输组(TCP / UDP) 快递打包组 控制可靠传输或快速发送 网络组(IP 层) 邮政分拣中心 决定发往哪个城市(IP 地址) 链路组(MAC 层) 快递站 决定发给哪个局域网内的目标主机 路由组(Routing) 导航调度中心 选择最优路径(下一跳) 设备驱动组(NIC Driver) 快递员 实际把包裹送出去(通过网卡) 安全组(Netfilter / Firewall) 保安检查岗 检查是否允许通行 NAT 组 公司代理出口 统一管理内部员工对外通信 DNS 缓存组 内部电话簿管理员 记录域名与 IP 的对应关系 Linux 的网络部分是一个庞大的子系统,主要包括以下几个关键模块: ...

June 10, 2026

集合 列表 数组

集合 集合一般被定义为:由一个或多个确定的元素所构成的整体。 集合有什么特性呢? 首先,集合里的元素类型不一定相同。 你可以将商品看作一个集合,也可以将整个商店看作一个集合,这个商店中有人或者其他物品也没有关系。 其次,集合里的元素没有顺序。 我们不会这样讲:我想要集合中的第三个元素,因为集合是没有顺序的。 事实上,这样的集合并不直接存在于编程语言中。然而,实际编程语言中的很多数据结构,就是在集合的基础上添加了一些规则形成的。 列表 列表(又称线性列表)的定义为:是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。 列表的概念是在集合的特征上形成的,它具有顺序,且长度是可变的。你可以把它看作一张购物清单: 购物清单中的条目代表的类型可能不同,但是按照一定顺序进行了排列; 购物清单的长度是可变的,你可以向购物清单中增加、删除条目。 在编程语言中,列表最常见的表现形式有数组和链表,而我们熟悉的栈和队列则是两种特殊类型的列表。除此之外,向列表中添加、删除元素的具体实现方式会根据编程语言的不同而有所区分。 数组 数组是列表的实现方式之一,也是面试中经常涉及到的数据结构。 正如前面提到的,数组是列表的实现方式,它具有列表的特征,同时也具有自己的一些特征。然而,在具体的编程语言中,数组这个数据结构的实现方式具有一定差别。比如 C++ 和 Java 中,数组中的元素类型必须保持一致,而 Python 中则可以不同。Python 中的数组叫做 list,具有更多的高级功能。 那么如何从宏观上区分列表和数组呢?这里有一个重要的概念:索引。 首先,数组会用一些名为 索引 的数字来标识每项数据在数组中的位置,且在大多数编程语言中,索引是从 0 算起的。我们可以根据数组中的索引,快速访问数组中的元素。 而列表中没有索引,这是数组与列表最大的不同点。 其次,数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存。 相反,列表中的元素在内存中可能彼此相邻,也可能不相邻。比如列表的另一种实现方式——链表,它的元素在内存中则不一定是连续的。

June 10, 2026