20241307《计算机基础与程序设计》课程总结
目录
-第0周作业
-第1周作业
-第2周作业
-第3周作业
-第4周作业
-第5周作业
-第6周作业
-第7周作业
-第8周作业
-第9周作业
-第10周作业
-第11周作业
-第12周作业
-第13周作业
-第14周作业
-整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点
-回答一下第1周作业中自己提出的问题
-课程收获与不足
-给开学初的你和学弟学妹们的学习建议
-问卷调查
-总结
每周作业链接汇总
第0周作业
自我介绍
第1周作业
第2周作业
第3周作业
第4周作业
第5周作业
第6周作业
第7周作业
第8周作业
第9周作业
第10周作业
第11周作业
第12周作业
第13周作业
第14周作业
整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点
并没有抓住重点,提出的许多问题和课程学习无关,并且没有实际意义,当时简单询问AI,浏览计算机科学概论这本书的目录,提出自己想到的问题,大多天马行空,不切实际,但是也有些问题在学习课程后得到了解决,具有实际意义,带着问题更高效的解决了疑惑,获得了成长。
回答一下第1周作业中自己提出的问题
- 计算机系统的分层缘由
- 抽象与简化:计算机系统非常复杂,包含硬件、软件等多个部分。分层可以将复杂的系统分解为多个相对简单的层次,每个层次向上一层提供特定的服务,同时隐藏本层的实现细节。例如,操作系统层为应用程序提供了文件管理、内存管理等服务,应用程序开发者不需要了解硬件细节,如磁盘的物理结构、内存的芯片级操作等,就可以开发软件,这大大简化了开发过程。
- 便于维护和修改:分层结构使得系统的各个部分相对独立。当硬件技术发展需要更新硬件设备时,只要保证硬件层与相邻的软件层(如操作系统的设备驱动层)之间的接口不变,上层软件通常不需要大规模修改。同理,软件层的更新也不会对硬件层造成直接影响,除非接口标准发生变化。
- 促进标准化和兼容性:分层有利于制定统一的标准。例如,网络协议分层(如TCP/IP协议栈)使得不同厂商生产的网络设备只要遵循相同的协议标准,就可以在网络中相互通信。在计算机系统中,不同层次的接口标准可以促进硬件和软件的兼容性,提高系统的通用性。
- 将其他基数的数字转换成十进制数
- 按位权展开法:对于一个非十进制数,如$N = a_{n - 1}a_{n - 2}\cdots a_1a_0$($a_i$是数位上的数字),基数为$r$,那么转换为十进制数的公式为$N_{10}=\sum_{i = 0}^{n - 1}a_i\times r^i$。例如,将二进制数1011转换为十进制,$r = 2$,$n = 4$,$a_3 = 1$,$a_2 = 0$,$a_1 = 1$,$a_0 = 1$,则$N_{10}=1\times2^3 + 0\times22+1\times21 + 1\times2^0 = 8 + 0+2 + 1 = 11$。对于其他基数(如八进制、十六进制等)的数字,转换方法类似,只需将基数$r$替换为相应的数字即可。
- 无损数据压缩尽量保持信息的方法
- 统计编码:利用数据中符号出现的统计概率来进行编码。例如,哈夫曼编码(Huffman Coding)根据字符出现的频率构建一棵二叉树,频率高的字符编码较短,频率低的字符编码较长。在压缩过程中,对数据中的字符按照哈夫曼编码规则进行重新编码,解压时可以根据编码表恢复原始数据,由于编码规则是基于原始数据的统计特性构建的,只要编码表完整保存,就可以无损地恢复数据。
- 字典编码:通过创建一个字典来记录数据中出现的重复模式。例如,Lempel - Ziv - Welch(LZW)编码,它在编码过程中,当遇到一个新的字符串模式时,将其添加到字典中,并为其分配一个代码。在解压时,根据字典中的代码和相应的字符串模式进行恢复。这种方法可以有效地压缩具有重复模式的数据,并且只要字典信息完整,就能无损地恢复数据。
- 一个门可以接收多少信号
- 逻辑门的输入信号数量因门的类型而异。基本的逻辑门如非门(NOT gate)只有一个输入信号,它对输入信号取反。与门(AND gate)和或门(OR gate)通常有两个输入信号,与门只有当两个输入信号都为高电平(在正逻辑中表示为“真”)时,输出才为高电平;或门只要有一个输入信号为高电平,输出就为高电平。还有一些特殊的逻辑门可以有多个输入信号,如与非门(NAND gate)和或非门(NOR gate)等,它们的逻辑功能是在与门和或门的基础上取反,输入信号数量可以是两个或更多,具体取决于应用场景和逻辑电路的设计要求。
- 触摸屏是怎样接收信息的
- 电阻式触摸屏:由多层导电薄膜组成。当手指或触摸笔按压屏幕时,会使上下两层导电薄膜接触,从而改变接触点的电阻值。通过检测电流或电压的变化,利用特定的电路将这些变化转换为坐标信号。通常在屏幕的四个角或边缘设置电极,通过测量不同电极之间的电阻变化来确定触摸点的位置。
- 电容式触摸屏:利用人体作为电容的一个极板。当手指靠近屏幕时,会改变屏幕表面的电场分布,导致电容值发生变化。触摸屏内部的电路可以检测到这些电容变化,并通过复杂的算法将其转换为触摸点的坐标。这种触摸屏可以支持多点触摸,通过检测多个触摸点产生的电容变化组合来确定多个触摸位置和手势操作。
- 机器语言和汇编语言的区别
- 机器语言:是计算机能够直接识别和执行的二进制代码,它是由0和1组成的指令序列。机器语言的指令格式和操作码与计算机的硬件结构紧密相关,不同的计算机架构(如x86、ARM等)有不同的机器语言。例如,一条简单的机器语言指令可能是“10001001”,代表着某种特定的运算或操作,这种指令对于人类来说非常难理解和编写。
- 汇编语言:是一种符号化的机器语言,它使用助记符来代替机器语言中的二进制指令。例如,用“MOV”表示数据传送指令,“ADD”表示加法指令等。汇编语言编写的程序需要通过汇编器将其转换为机器语言才能在计算机上执行。汇编语言比机器语言更易于人类理解和编写,但仍然与硬件紧密相关,它的编程效率相对较低,主要用于对系统性能要求极高、需要直接控制硬件资源的场景,如操作系统内核开发、嵌入式系统开发等。
- C、Java、Python在语法和应用场景上的主要区别
- 语法方面:
- C语言:是一种面向过程的编程语言,语法较为简洁。它具有丰富的运算符和数据类型,例如可以直接操作内存地址。C语言的函数定义和调用比较直接,例如
int add(int a, int b) { return a + b; }
。它的语法规则相对严格,变量需要先声明后使用。 - Java语言:是一种面向对象的编程语言,语法相对复杂。它有类(class)和对象(object)的概念,一切皆对象。Java的语法注重代码的封装性和安全性。例如,定义一个简单的类
class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } }
。Java还具有自动内存管理机制(垃圾回收),变量的声明和使用相对更灵活。 - Python语言:语法简洁、灵活,具有很高的可读性。它使用缩进来表示代码块,而不是像C和Java那样使用大括号。例如,定义一个函数
def add(a, b): return a + b
。Python的数据类型使用很方便,具有动态类型系统,变量在赋值时确定类型,不需要像C语言那样提前声明。
- C语言:是一种面向过程的编程语言,语法较为简洁。它具有丰富的运算符和数据类型,例如可以直接操作内存地址。C语言的函数定义和调用比较直接,例如
- 应用场景方面:
- C语言:广泛应用于系统软件开发,如操作系统、编译器、数据库管理系统等。也用于对性能要求极高的嵌入式系统开发,如汽车电子系统、工业控制设备等。因为C语言可以直接操作硬件资源,能够高效地利用计算机资源。
- Java语言:主要用于企业级应用开发,如大型网站后台开发、企业信息管理系统等。也用于安卓应用开发。Java的跨平台性(通过Java虚拟机)使得它在不同操作系统上可以很方便地运行,并且它的面向对象特性和丰富的类库适合构建复杂的大型软件系统。
- Python语言:在数据科学、人工智能、机器学习领域应用广泛。例如,用于数据挖掘、数据分析(使用Pandas、NumPy等库)、深度学习(使用TensorFlow、PyTorch等库)。也用于脚本编写、自动化测试、网络爬虫等场景,因为它的语法简洁,开发效率高。
- 语法方面:
- 容器结构与数据结构间的联系与区别
- 联系:容器结构可以看作是一种特殊的数据结构。容器是用于存储和组织其他对象的结构,它基于底层的数据结构实现。例如,列表(List)容器在很多编程语言中是基于数组(Array)或链表(Linked List)数据结构实现的。容器结构的操作(如添加、删除、查找元素等)依赖于其内部的数据结构的特性。
- 区别:数据结构侧重于描述数据元素之间的逻辑关系和存储方式,如数组是一种连续存储的数据结构,链表是通过节点之间的指针连接的数据结构。而容器结构更强调对数据的管理和操作,从用户角度提供了更高级的抽象。例如,栈(Stack)和队列(Queue)容器是基于特定的数据结构(如数组或链表),但它们提供了特定的操作规则(栈是后进先出,队列是先进先出),方便用户在特定的应用场景中使用。
- 如何选择合适的算法来解决特定的问题
- 分析问题的性质:首先要明确问题的类型,如排序问题、搜索问题、图论问题等。对于排序问题,例如要对一组数字进行排序,如果数据量较小且对稳定性有要求(相同元素的相对顺序不变),可能选择插入排序;如果数据量较大,快速排序或归并排序可能更合适。
- 考虑数据规模和特性:数据规模会影响算法的性能。例如,对于小规模数据,简单的算法(如冒泡排序)可能就足够了,因为其代码简单,实现容易。对于大规模数据,需要考虑时间复杂度和空间复杂度较低的算法。如果数据具有特殊的性质,如已经基本有序的数据,插入排序可能会比其他排序算法更快。
- 评估算法的性能指标:主要包括时间复杂度和空间复杂度。时间复杂度衡量算法执行时间随数据规模增长的趋势,如$O(n)$、$O(nlogn)$、$O(n^2)$等。空间复杂度衡量算法在执行过程中所需的额外存储空间。例如,在处理大规模数据时,空间复杂度较低的算法(如原地排序算法)可能更有优势。同时,还要考虑算法的稳定性、可读性等其他因素。
- 操作系统进行内存管理的方式
- 分区存储管理:将内存划分为若干个固定大小或可变大小的分区。在固定分区管理中,每个分区大小固定,作业装入与之大小匹配的分区。可变分区管理则根据作业的大小动态分配内存分区。这种方式的优点是简单,缺点是可能会产生内存碎片,即内存中存在一些小的空闲分区,无法满足大作业的需求。
- 页式存储管理:将内存和作业空间都划分为大小相等的页(Page)。作业的页可以离散地存放在内存的不同页框(Page Frame)中。通过页表(Page Table)来记录页与页框的映射关系。当访问内存时,根据页表将逻辑地址转换为物理地址。这种方式可以有效利用内存空间,减少内存碎片,但页表会占用一定的内存空间,并且地址转换会增加一定的时间开销。
- 段式存储管理:按照作业的逻辑段(如代码段、数据段、堆栈段等)来分配内存。每个段有自己的段名和段长,通过段表(Segment Table)来记录段的起始地址和长度等信息。这种方式可以更好地满足程序的逻辑结构需求,但也会产生段间碎片,并且段表管理相对复杂。
- 文本文件和二进制文件在存储和处理上的不同
- 存储方面:
- 文本文件:存储的是以字符编码(如ASCII、UTF - 8等)表示的字符序列。每个字符占用一个或多个字节,文本文件内容可以直接通过文本编辑器查看和编辑。例如,一个包含“Hello, World!”的文本文件,在存储时是按照字符对应的编码值依次存储的。
- 二进制文件:存储的是二进制数据,数据的格式和意义由具体的应用程序或文件格式定义。例如,一幅图像文件(如JPEG格式)存储的是图像的像素信息、颜色信息等二进制数据,这些数据的排列和含义只有通过专门的图像软件才能正确解读。二进制文件不能像文本文件那样直接用文本编辑器查看全部内容,否则可能会看到乱码。
- 处理方面:
- 文本文件:在处理时,通常是逐行或逐个字符地读取和处理。例如,使用编程语言读取文本文件时,可以很方便地按行读取内容,进行字符串操作,如查找、替换等。
- 二进制文件:处理时需要根据其特定的文件格式进行操作。例如,对于音频文件(如MP3格式),需要使用专门的音频处理库来解析文件头信息、音频数据等,才能进行播放、编辑等操作。
- 网络中的数据如何进行可靠传输
- 传输控制协议(TCP):TCP是一种面向连接的、可靠的传输层协议。它通过三次握手建立连接,在传输数据前,发送方和接收方会进行三次通信,确保双方都能正确接收和发送数据。在传输过程中,TCP采用序列号和确认号来保证数据的顺序和完整性。发送方发送的数据段带有序列号,接收方收到数据后会发送确认号,表示已经正确接收了哪些数据。如果发送方在一定时间内没有收到确认号,会重新发送数据。此外,TCP还通过滑动窗口机制来控制数据的流量和拥塞,根据网络的拥塞情况动态调整发送窗口的大小。
- 差错控制和校验:在数据链路层和网络层等也会采用一些差错控制方法。例如,在数据链路层使用循环冗余校验(CRC)来检测数据传输过程中的错误。发送方在发送数据时,会根据数据内容计算CRC码,并将其附加在数据后面一起发送。接收方收到数据后,同样计算CRC码,并与发送方发送的CRC码进行比较,如果不一致,则说明数据在传输过程中出现错误,需要进行重发或其他处理。
- 图灵测试的内容与其意义
- 内容:图灵测试是由艾伦·图灵提出的一种用于判断机器是否具有智能的测试方法。测试场景是让一个人和一台机器分别与一个询问者进行对话,询问者通过提问来判断与之对话的是机器还是人。如果在一定时间内,询问者无法准确区分出机器和人,那么这台机器就被认为通过了图灵测试,具有某种程度的智能。
- 意义:图灵测试在人工智能领域具有深远的意义。它为判断机器是否具有智能提供了一个可操作的标准,推动了人工智能研究的发展。它引发了人们对智能本质的思考,促进了计算机科学、心理学、哲学等多个学科对智能的研究。同时,图灵测试也存在一定的局限性,它主要关注语言交互能力,不能完全代表机器的智能水平,因为智能还包括学习、推理、感知等多个方面。
- 3D图像是怎样被计算机绘制出来的
- 建模阶段:首先需要建立3D模型,可以使用专业的3D建模软件(如3ds Max、Maya等)。建模方法有多种,如多边形建模,通过创建和编辑多边形网格来构建物体的形状;还有NURBS(非均匀有理B样条)建模,适用于创建光滑的曲面模型。在建模过程中,需要确定物体的几何形状、拓扑结构等。
- 纹理映射阶段:在模型表面添加纹理,使模型更加真实。纹理可以是真实拍摄的图片,也可以是通过程序生成的图案。通过纹理映射技术,将纹理坐标与模型的表面坐标相对应,将纹理“贴”在模型表面。例如,对于一个模拟的木质盒子模型,可以将一张真实的木纹图片作为纹理映射到盒子的表面。
- 光照计算阶段:考虑光照效果,计算机需要计算不同类型的光照(如环境光、点光源、平行光等)对模型表面的影响。光照模型(如Phong光照模型、Blinn - Phong光照模型)用于计算表面的反射光强度。例如,根据光源的位置、强度和物体表面的材质属性(如反射率、粗糙度等),计算出每个像素点的颜色,以模拟真实的光照效果。
- 渲染阶段:将经过上述处理的3D模型转换为2D图像。渲染算法有多种,如光线追踪(Ray Tracing)和光栅化(Rasterization)。光线追踪是一种基于物理的渲染方法,它通过跟踪光线在场景中的传播路径来计算像素的颜色,能够产生非常真实的图像效果,但计算成本较高。光栅化则是将3D模型的几何形状转换为屏幕上的像素,是一种更高效的渲染方法,常用于实时渲染场景,如游戏中的3D场景渲染。
- 如何保障计算机系统的网络安全
- 防火墙技术:防火墙是位于内部网络和外部网络之间的安全防护系统。它可以根据预设的规则(如允许或禁止某些IP地址、端口号等)来过滤网络流量。例如,企业内部网络可以通过防火墙禁止外部网络的非法访问,只允许特定的服务(如HTTP、SMTP等)的合法访问。防火墙可以是硬件设备,也可以是软件程序。
- 加密技术:通过加密算法对数据进行加密,使数据在传输过程中即使被截获,也无法被非法获取者解读。例如,使用对称加密算法(如AES),通信双方使用相同的密钥进行加密和解密;或者使用非对称加密算法(如RSA),有公钥和私钥,公钥用于加密,私钥用于解密。在数据传输(如网上银行转账)和存储(如加密硬盘分区)过程中广泛应用加密技术。
- 身份认证和访问控制:身份认证用于确认用户的身份,
课程收获与不足
收获:对计算机的发展历史,整体的结构和运行原理有了进一步的了解,了解计算机的组成部分从电路到计算机整体以及操作系统层面,并且初步掌握了使用C语言编程的能力。
不足:对于较为深奥或复杂的问题理解的不够充分,应该花时间去提升知识掌握的全面性以及进一步提升代码编程能力,能够解决的实际问题
给开学初的你和学弟学妹们的学习建议
要学会使用问AI辅助学习,AI的知识全面,可以帮我们改正错误与问题,要学会合理地使用AI工具,极大的提升自己的学习效率。学习提前要预习,学习后要及时复习。刚开始学习时要整体把握并且不要有畏难情绪,大胆去做去实践,有问题多问老师、问AI,在实践的过程中自然而然就可以理解并掌握知识。
问卷调查
你平均每周投入到本课程多长时间?10h
每周的学习效率有提高吗?掌握了科学的方法,逐渐缓慢的提高
学习效果自己满意吗?比较满意
课程结束后会继续一周至少一篇博客吗?尽量去做
你觉得这门课老师应该继续做哪一件事情?让同学们写博客园总结自己的学习成果,教同学们学会使用AI工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)