计算机科学导论

课程链接 https://www.bilibili.com/video/BV1Hr421F7VC/

0-Scratch

事件通常是指在计算机程序中发生的图形化或交互式的操作

好快乐的课

1-C

creepy 毛骨悚然的

“终端窗口实际上就是你访问云端服务器的命令行界面。专业术语叫做”容器“,你们每个人在云端都有自己的容器,就像你们自己的电脑一样,运行在互联网上的某个地方,你有你自己的用户名和密码,可以访问你自己的“硬盘”(也就是你的主文件夹),里面存放着你上课的所有文件。除非你开启实时共享,否则只有你能访问。”

ls 命令是 list 的缩写。

mv 代表 move,可以用来重命名。

cd, change into?

2-Arrays

clang -o hello hello.c

clang -o hello hello.c -lcs50

C 语言中,以 # 开头的部分称为预处理指令(pre processor directive)

spooky /ˈspuːki/,诡异的,阴森的,瘆人的

preprocessing

compiling

assembling

linking

整个过程被叫做 compiling

debugging

debugger 调试器

使用 VScode 的调试器可能需要创建配置文件?

被打了断点的那一行不会执行

🍮 一个变量仅存在于你最近打开的大括号内(作用域)

rubber duck 橡皮鸭

和一只橡皮鸭交流你的思路,也许你就会发现问题所在

当有一个浮点数存在,整个式子的结果就是浮点数

魔法数字,魔法字符串:写死在程序里的数字和字符串。(那个相同的数字神奇地出现在两个地方)

原来 main() 的参数是这么用的

image-20251108013248882

退出状态

每当你的主函数退出时,它都会返回一个秘密的整数,你可以作为程序员或高级用户来确定它是什么。

这些退出代码通常用于指示错误。

在运行程序后,输入 echo $? 可以查看这个隐藏的返回值

cryptography /krɪpˈtɒɡrəfi/ 密码学

Algorithms

Ω 表示算法时间的下限,即最佳情况

如果碰巧某个算法上界和下界相同,可以用 Θ 表示

数据结构

创建你自己的数据类型,并为其命名

image-20251108235601143

CSV 文件,逗号分隔值文件

写递归前先找到基本情况,base case

image-20251109013536362

Memory

& 运算符允许我们获取内存中一段数据的地址

* 被称为解引用运算符,可以去到指定的地址

指针

int *p = &n

等号左侧的星号只是一个提示,表示 p 将是一个指针。

ampersand /ˈæmpəsænd/ “和号” “&”

<stdlib.h>

malloc:用于内存分配,你可以使用它向操作系统请求任意数量的字节。它将返回它为你找到的第一个字节的地址。

free:当你使用完某个内存块时,可以通过传入相同的地址来释放它,将其交还给操作系统。

realloc:帮你重新申请内存,并可以帮你自动完成复制,然后自动释放之前的内存

image-20251115154636258

NUL, \0 是一个字符

NULL,是一个指针,指向 0 地址

valgrind,“一个相当高级的程序”,比如可以在你的代码执行时检查内存错误,并尝试帮助你理解这些错误在哪

valgrind ./myprogram

内存中有一个区域叫做”堆“,heap,它就像一堆内存一样,你可以根据需要使用它,malloc 就是从堆中获取内存的。

另一个区域叫做栈,是函数临时储存变量和参数的地方

image-20251111014235637

Data Structures

抽象数据类型 abstract data types

链表,栈,队列,树,字典,

trie(retrieval,检索)一系列数组依次“保存”各个字母

Python

python 的 print 可以打印多个参数,自动加空格

1
print("hello,",answer)

但更常见的是

1
print(f"hello, {answer}")

f 表示后面是格式字符串

🍭 python 不需要管理内存

新的数据类型

range list tuple dict set …

字典:

image-20251121212233705

“python 和发明它的人非常聪明,他们的代码会尽力让你以常数时间搜索字典”

字符串一旦存在,自身就不能再被改变

常用的操作字符串的函数

s.rstrip()

默认情况下,rstrip() 会删除 右边的空白字符,包括:

  • 空格 ' '
  • 制表符 \t
  • 换行符 \n
  • 回车 \r
方法 功能
lstrip() 删除左侧字符
rstrip() 删除右侧字符
strip() 删除两侧字符

python 没有作用域限制,允许你在赋值后的任何时候使用变量

python 代码规范

函数之间空两行

image-20251121202713153 image-20251121202731537

python 的 print 会自动换行,实际上你可以设置每行的结尾方式,默认是 \n

image-20251121203150828

python 中使用命令行参数:

image-20251121210130906

tts 和 展示QR码

image-20251121222445027 image-20251121222634810

SQL

1
$ python favorites.py | more

|(管道符),管道的意思是:
把左边命令的输出,作为右边命令的输入。

more 是一个分页查看工具,用来把长输出分屏显示,避免一次性刷满终端。

image-20251129131346912

sorted 函数可以接受一个函数

image-20251129133035268 image-20251129135626351

race condition 竞态条件

多个进程/线程”竞争”资源导致的状态不确定性;

数据库事务中的竞争条件可能导致数据不一致;

HTML CSS JavaScript

互联网服务提供商,ISP,Internet Service Provider

传输控制协议,TCP,Transmission Control Protocol

IP协议/网际协议,Internet Protocol

IP

让网络“连接”在一起。

TCP

传输控制协议,解决其他的一些问题。其中一个问题是如何区分不同类型的服务

几十年前,人们在开始发明各种互联网服务时,他们决定为互联网上可以使用的不同服务分配唯一的编号。

80 代表 HTTP

443 代表 HTTPS,S 代表 secure,表示加密过或者加扰过

另一个作用是把信息切片,编号

DNS

域名系统,Domain Name System

将字符串转换为底层的 IP 地址

超文本传输协议

HyperText Transfer Protocol,HTTP

访问 URL 时,默认情况下,尤其是在 .com 后面什么都不输入时,技术上会隐式添加一个斜线 /

单个斜线表示服务器的根目录,是服务器中的默认页面或文件夹。

完全限定域名(Fully Qualified Domain Name,FQDN)
指的是在 DNS(域名系统)中能够唯一标识一台设备或服务的完整域名。它从最具体的主机名写到最顶层的域(TLD),中间所有层级都必须写全。

www 主机名

HTTP

重定向,状态码,请求类型,响应

学完 HTTP 协议之后,可以开始使用 HTML,HyperText Markup Language,超文本标记语言

CSS,Cascading Style Sheets,层叠样式表 和 JavaScript 来使用互联网了

HTML

HyperText Markup Language,超文本标记语言

用来编写网页本身的语言

“服务器本质上是软件,只是倾向于运行在大型设备上”,服务器只是一个程序,作用是响应请求

访问网站时,浏览器会在计算机内存中构建以下这种“树”数据结构(DOM,Document Object Model,文档对象模型),以便知道你指示它们做什么。

image-20251130163705960

🍤 foo bar baz,没有含义的占位符,类似中文里的 甲 乙 丙,作为函数或者变量名

CSS

Cascading Style Sheets,层叠样式表

HTML 对样式的支持很有限,所以人们一般都会用 CSS

父元素的属性会沿着家族树传给子元素

JavaScript

条件语句

1
2
3
4
5
6
7
8
9
10
11
12
if (x < y)
{

}
else if (x > y)
{

}
else
{

}

变量

1
2
3
4
let counter = 0;
counter = counter + 1;
counter += 1;
counter++;

循环

1
2
3
4
5
6
7
8
for (let i = 0; i < 3; i++)
{

}
while (true)
{

}

JavaScript 在客户端执行而不是服务器端。

JavaScript 可以监听各种各样的事件,表单字段发生变化,用户点击或拖动,用户按下或抬起按键,鼠标在某个元素上按下、悬停、或抬起,以及表单提交,这些都是事件。

image-20251130211820918

可以把任务都交给 JavaScript,避免修改 HTML 的元素

image-20251130212751222

Flask

Jinja

不是编程语言,是一种现实世界中常见的范例,不同的语言、不同的库、不同的框架经常互相借鉴,或者使用别人写好的技术,这样就不用重复造轮子了。

Jinja 是 Python 生态中广泛使用的模板语言,只是一种语法,“幸运的是它用的是我们熟悉的 curly braces”,常用于:

  • Web 开发(Flask 默认使用 Jinja2)
  • 生成 HTML 页面
  • 根据变量自动生成文本、配置文件、脚本等

☕ Flask 就是这样的一个框架,Django 是另一个 Python 领域流行的框架或库

🍫 Bootstrap 是一个库,可以让你的 CSS 和 JavaScript 更美观,更具交互性

image-20251203163220991
1
@app.route("\")

@,python 中称为装饰器

示例

image-20251203165728143 image-20251203170137287 image-20251203170352166

🍨 在实现 Web 应用程序时,不再有文件夹的概念,它们更通用的叫法是路由。

你可以将静态内容,包括图像、视频文件、CSS 文件。放在名为 static 的文件夹中,其中还可以有子文件夹,这会影响到将要使用的图像源属性、视频源标签或任何类似资源的属性和标签。

隐私

当需要传输含有敏感内容或体积大的数据时,比如密码、信用卡号、或者视频,不要使用 get,数据会出现在 URL 中。

image-20251203183302274

image-20251203183349194

当你第一次使用用户名和密码成功登录网站时,你的计算机上会被植入一个 Cookie。

就像给你手上盖了一个印章,你再进入同一个网站的各个链接时,浏览器会自动出示印章,从而不需要再次登录。

Falsk 提供了 Cookie 的实现(一个叫做 session 的变量),自动处理所有 Cookie 相关的事情。

image-20251203212857279

API

应用程序编程接口,Application programming interface

所有的函数都是 API

AJAX: 异步 JavaScript 和 XML,已经过时,人们不再使用 XML 了。

但 AJAX 是一种技术,有了它就不需要提交表单就能从服务器获取数据。

JSON(JavaScript Object Notation),JavaScript对象表示法

Emoji

学习 Git An Introduction to Git and GitHub by Brian Yu

托管网站

https://pages.github.com/

https://www.netlify.com/

image-20251203230326345

https://www.reddit.com/r/learnprogramming
https://www.reddit.com/r/programming
https://stackoverflow.com/
https://serverfault.com/
https://techcrunch.com/
https://news.ycombinator.com/