CSAPP-深入理解计算机系统-动机
daf9e1003c8b639b6138b233a83323399265b9316d23681127e4761c53525bdc4f8d29c53564a5a3b510b502c4e4a97c185f6093423764ab5cdcbdf62b2596926920f051462f6c6d9bde162128d59188ba1ba71744c425bc1f481c5079129a6f6ceddecb1fe28263eaec69d197737faa68634c07e0827e7e7ca1cd1ab22615ba2944f7404402c2d3bfb87f64a81924b230797a4f3f3ef9c23a2482929ef70ea2cabad9a6b24e643c791b61c349e9d239d22094f65b87b0f76e95b65975cf33e050d83e9b671659b601227e5f706a14bc22aeaab27b48fe8e884df2335fa0dfd585596678da1a0609a4a0b557dfbef4b2a7db9549bcd0c5601 ...
南京大学-计算机基础03-Git介绍与NEMU框架
本课程主要围绕框架代码的编译与运行进行了详细讲解,特别是如何使用Git和GitHub进行代码管理。许多在使用框架代码时遇到挑战,特别是在命令行中看到错误信息时不知所措。本次课程分为两部分:第一部分介绍了Git的基本概念及其在实验中的应用,第二部分深入探讨了如何阅读和理解NEMU框架代码。通过实例,学习了如何构建项目、管理代码版本,并利用开源社区的资源提升编程能力。
框架代码与命令行的困惑
在进行计算机系统实验时,通常会遇到对框架代码和命令行命令的理解困难,尤其在面对错误信息时容易产生挫败感。本课程旨在帮助更好地理解这些问题,并指导他们如何有效地编译和运行代码。
课程重点:
Git 和 GitHub 的使用:Git与GitHub在实验中的应用存在不同,需了解其独特的使用方式。这将帮助他们更高效地管理代码仓库,并提高实验效率。
项目构建流程:通过命令行使用make工具生成二进制文件是项目构建的关键步骤。理解这些步骤有助于减少在实验中的挫败感。
开源社区的重要性:可以利用开源社区的资源提升编程技能,学习团队合作,并通过参与开源项目获得实践经验。
Git 和 GitHub 的应用
开源社区 ...
南京大学-计算机基础02-可读性、维护性与模块化设计
在本节课中, 深入讨论了如何编写大型C语言项目,强调了代码的可读性和可维护性的重要性。通过实例讲解,展示了如何使用结构体、宏定义和指针优化代码,使其更加简洁易懂且易于维护。此外,还探讨了数字逻辑电路模拟器和简易计算机系统模拟器的实现,特别强调了模块化设计和合理的编程模式,以降低复杂度和维护成本。
1. 编写大型C语言项目的原则
在编写大型C语言项目时,代码的可读性和可维护性至关重要。遵循以下原则可以提高代码质量:
模块化设计:将项目分为多个模块,每个模块执行单一功能。使用函数和结构体,使代码具有较高的内聚性,避免冗余代码。
清晰的命名规范:变量、函数、结构体命名应能清楚反映其含义,使用标准命名约定。
注释:合理使用注释解释代码的逻辑和目的,避免过度依赖注释解释代码本身。
例如,以下是模块化设计的示例代码:
12345678910111213141516171819202122232425#include <stdio.h>// 结构体定义typedef struct { int id; char name[50]; float salary; ...
南京大学-计算机基础01-C语言的编译与链接
主要讲解了计算机基础中的编译过程,特别是 C语言的编译与链接。通过学习如何将源代码转换为可执行文件, 将深入了解编译器的工作机制、命令行工具的使用,以及如何在实际开发中优化代码。下面详细介绍视频中的关键内容,并对一些重要概念进行补充和详细说明。
编译过程概述
编译过程是将高层次的源代码转换为机器可以执行的二进制代码的过程。这个过程包括多个步骤,分别是:预处理、编译、汇编、链接。
预处理(Preprocessing):
预处理器负责处理源代码中的指令,如#include和#define。通过引入头文件和宏定义,预处理器生成纯粹的C语言代码。
预处理是编译过程的第一步。执行命令:1gcc -E program.c -o program.i
可以得到预处理后的代码。
编译(Compilation):
编译器将预处理过的代码转化为汇编代码。这一步不会生成可执行文件,而是生成对应平台的汇编代码。执行命令:1gcc -S program.i -o program.s
得到的文件中包含了汇编指令。
汇编(Assembly):
汇编器将汇编代码翻译成目标代码(也称为机器代码), ...
MIT-Missing Semester02-Shell 工具与脚本编写
本节课主要讨论了如何使用Shell工具进行脚本编写,重点是Bash脚本语言。 将学习变量的定义、字符串处理、命令替换、进程替换,以及如何使用特殊的Shell工具来提高工作效率。
1. 变量定义与使用
在Bash中,定义变量不需要使用关键字,只需要使用赋值符号=。需要注意的是,变量赋值时等号两边不能有空格,否则会导致语法错误。例如:
12NAME="Alice"AGE=30
字符串处理与引号
当变量包含空格时,必须使用引号将其包裹,以确保变量的值被正确处理。单引号 ' 和双引号 " 的区别在于:单引号会将所有内容视为普通字符,而双引号允许变量替换。示例:
12GREETING='Hello, $NAME' # 输出 Hello, $NAMEGREETING="Hello, $NAME" # 输出 Hello, Alice
2. 控制流与函数
条件判断
Bash支持条件判断语句,例如if语句来执行不同的分支。格式如下:
12345if [ 条件 ]; then # 如果条件为真,执行此处的代码else # ...
MIT-Missing Semester03-文本编辑器(Vim)
本次讲座重点介绍了文本编辑器 Vim 的基本使用。Vim 是一个强大的模态编辑器,专为编程任务的高效编辑与快速导航设计。对于程序员而言,掌握Vim可以显著提高工作效率,节省大量时间。 介绍了 Vim 的基本操作模式,包括常规命令的使用,如何快速编辑文件,并鼓励通过实践来提升技巧。
文本编辑器的重要性
亮点:
文本编辑器是程序员日常工作中的重要工具。通过熟练掌握文本编辑器,尤其是 Vim,程序员能够更快速地编写、阅读和修改代码,进而提升生产力。
Vim 的学习是一个渐进的过程,尽管初期可能不太习惯,但随着不断练习,用户会发现效率逐步提高。Vim 的模态设计允许用户根据不同的编辑任务在不同模式间切换,极大地提升了工作流的效率。
Vim 的基本模式
Vim 的核心优势在于它的模态结构。主要模式包括:
正常模式(Normal Mode):
用于文本导航和小的修改操作。
可以通过快捷键快速移动光标、删除文本、复制文本等。
常见操作:
光标移动:h、j、k、l 分别用于左、下、上、右移动。
单词跳转:w 向前跳到下一个单词开头,b 向后跳到上一个单词开头。
删除:d 删除光标位置的字符 ...
MIT-Missing Semester01-课程概述 + Shell
这节课来自MIT的The Missing Semester of Your CS Education (2020),旨在教会学生如何更有效地使用计算机工具,以改善开发工作流程。
课程亮点
本课程将涵盖广泛的工具和技术,帮助学生更高效地工作。重点不仅仅是软件开发,还包括如何将计算机作为学习和研究的工具。关键点包括:
Shell 和终端基础:课程将介绍如何使用Shell和终端与计算机交互,逐步掌握更高级的工具和技术。
命令行的重要性:命令行工具和基于文本的界面能够提供极大的灵活性和效率,课程对此进行了重点强调。
Shell 概述
Shell提供了一个基于文本的接口,用户可以通过输入命令来执行程序。以下是一些简单的命令示例:
1234# 输出文本echo "Hello, World!"# 显示日期date
命令参数与参数传递
命令可以接受参数和选项来改变其行为,例如:
1echo "这是一个测试"
对于包含空格的参数,可以使用引号确保参数作为一个整体被传递:
1echo "This is a string with spaces" ...
算法导论-吃灰中
属于早就买了但是没有看下去的欲望,记录下,留个flag
计算几何-算法与应用-阅读总结?
邓俊辉老师的计算几何课程的教材,也是他自己翻译的,翻了下没有看下去的欲望,也比较老了,有缘再看。
清华大学-计算几何-总结
邓老师在他的数据结构课堂就安利了他的这门计算几何课程,这个课程是数据结构课程的延申,可以说是数形结合版的数据结构和算法课。
趁着疫情在家,写毕业论文的同时也听了邓老师的这门课。收获颇多:
计算几何自上世纪七十年代由Shamos和Hoey发表的一篇计算平面点集Voronoi图的论文开始,现在已经发展为了独立的学科。
计算几何研究中最主要的目的就是开发出高效的算法以及数据结构来解决一些关于基本几何基元(geometric primitives):点,线段,多边形,多面体等的问题。其中一些问题看起来是如此的简单,以至于它们直到计算机出现后才被认为是个问题。例如二维中典型的相交问题:给定平面上n条直线段,确定所有的相交点。如果暴力的逐个计算所有$n(n一1)/2$对线段对它们两两之间的相交,其计算复杂度是$O(n^2)$。幸运的是,计算几何中的经典算法可以将复杂度降到$O(nlogn)$。需要注意的是,计算复杂度是计算几何中的核心问题。尤其是在现实中,假如一个数据集中有上百万条线段,计算复杂度为$O(n^2)$和$O(nlogn)$的算法对比,他们的求解时间是几周和几秒之间的区别。典型的计算几 ...