20241420 《计算机基础与程序设计》课程总结
每周作业链接汇总
第0周作业:自我介绍与展望
https://www.cnblogs.com/vincent2077/p/18432491
第一周作业:安装Linux系统并根据每章内容提出先导提问
https://www.cnblogs.com/vincent2077/p/18438668
第二周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18449561
第三周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18461530
第四周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18487448
第五周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18504283
第六周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18522094
第七周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18538688
第八周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18549904
第九周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18559914
第十周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18580510
第十一周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18593390
第十二周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18607918
第十三周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18620636
第十四周作业:《计算机科学概论》、《C语言程序与设计》学习
https://www.cnblogs.com/vincent2077/p/18637876
实验
实验一 Linux基础命令命令实践https://kdocs.cn/l/cmzYXnLgjcup
实验三 函数与数组的使用https://kdocs.cn/l/cl5inUfF00Fi
实验六 文件与结构体编程练习https://kdocs.cn/l/cd8YM18hgaxd
实验七 缓冲区溢出实验https://kdocs.cn/l/cmynte71gegT
实验八 Web部署实验https://kdocs.cn/l/cjWucUx85U42
整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点?
有些抓住了重点,有些则是基本不搭边
回答第1周作业中自己提出的问题
计算机的构成设想是如何得来的?
早期计算机的构成设想源于人们对高效计算的需求。从简单的计算工具如算盘,到机械计算装置,随着电子技术发展,科学家们设想利用电子元件来模拟和加速计算过程。像图灵提出的图灵机概念,为现代计算机的逻辑架构奠定基础,人们逐步构思出用存储、运算、控制、输入输出等部件组合,以实现复杂的计算任务,满足科学研究、商业数据处理等多领域的需求。
十六进制如何转化为其他进制?即十及以上的除法位如何处理?
十六进制转十进制,用位权展开法。例如十六进制数 ABC,A 对应的十进制是 10,它的位权是 16²,B 是 11,位权 16¹,C 是 12,位权 16⁰,将各位数字乘以对应位权后相加,即 10×16² + 11×16¹ + 12×16⁰ 得到十进制数。转二进制时,将十六进制每位数转换为 4 位二进制数,因为 2⁴ = 16,如 A(10)就是 1010,再依次拼接。十及以上除法位按常规除法规则,只是逢十六进一(十六进制)。
负数类似于 ffffb 的形成原理是什么?
在计算机中,常以补码形式表示负数。对于 16 位二进制,最高位为符号位,0 表示正,1 表示负。求补码时,正数原码与补码相同,负数先求原码,再将除符号位外各位取反加 1。ffffb 若是负数补码,减 1 后各位取反可得原码,通过原码能知道对应的十进制负数数值,这种表示方便计算机进行加减法运算,统一了运算规则。
计算机迅速计算的根本是什么?逻辑并行和快速运算分别对应质和量,是如何通过电流和集成做到的?
根本在于基于半导体的电子电路特性。电流可快速传输电信号,晶体管等半导体元件能快速切换状态(导通、截止)代表 0 和 1,实现高速的逻辑运算。集成技术将大量晶体管集成在微小芯片上,极大缩短信号传输延迟,使得复杂逻辑电路能紧密协作。并行计算利用多核、多处理器架构,让不同计算任务同时进行,从质上优化算法执行流程,量上凭借高集成度提供海量晶体管并行处理数据,大幅提升速度。
如今的计算机相比于冯诺依曼体系结构有何进步?
存储方面,从单纯的内存、外存,发展出多级缓存,加快数据存取。并行处理上,突破冯诺依曼单指令流顺序执行,多核、众核架构实现多指令流并行。在 I/O 上,高速接口如 USB、PCIe 等大幅提升数据传输速率,还出现了非冯诺依曼架构探索,如神经网络芯片针对特定计算,数据驱动计算,减少数据搬运,提升能效与计算效率。
伪代码与高级语言、汇编语言是否有共同之处?能否通过办法进一步消除人与计算机语言上的隔阂?
伪代码与高级语言都以接近人类自然语言的方式描述算法逻辑,便于理解程序流程,不过伪代码更抽象、无严格语法。汇编语言是机器指令助记符,与硬件紧密相关。三者都用于表达计算过程。消除隔阂可通过可视化编程,用图形模块搭建程序;智能编程辅助工具,自动补全、纠错;还有自然语言编程研究,让用户直接用日常语言编写简单程序,但复杂逻辑仍需专业语言精准描述。
递归算法是否即是数学归纳法的终极?能否通过计算机设计解决数学归纳法常用问题?
递归算法类似数学归纳法思想,有基础情况与递推步骤,但不是终极。数学归纳法侧重数学证明,递归用于算法实现。计算机可利用递归解决归纳法相关问题,如斐波那契数列,用递归定义数列计算。但递归可能有栈溢出风险,优化时结合迭代、记忆化等策略,平衡简洁性与效率,解决复杂数学归纳法场景下的高效计算。
树结构与链式结构在各自兼容的计算速率下哪一个更为有效?
树结构适合表示层次关系,如文件系统,查找、插入、删除操作平均时间复杂度低(如二叉搜索树 O (log n)),但操作实现相对复杂。链式结构如链表,简单灵活,插入删除在特定位置快,但查找慢(O (n))。在不同场景下各有优势,若频繁随机访问选树结构,侧重动态增减节点且顺序访问多,链式结构可能更有效,依数据操作频率、类型决定适用性。
为什么面向对象服务的四大步骤中要求和框架比程序和调试更为重要?
需求明确是方向,决定系统功能范围与目标,错误需求导致开发偏差大。框架选定构建系统骨架,整合技术、规范开发模式,提高复用性与扩展性。若前期需求模糊、框架不合理,后期程序编写易混乱、调试艰难,反复修改成本高,而清晰需求与适配框架能让程序编写高效,调试问题聚焦,保障项目顺利推进。
操作系统设计的基本原理?
核心是资源管理与任务调度。对硬件资源(CPU、内存、I/O 设备)抽象、分配、保护,让多进程 / 线程安全共享。进程管理创建、撤销、切换进程,调度算法(如先来先服务、时间片轮转)分配 CPU 时间;内存管理分配、回收内存,虚拟内存技术扩展可用内存;设备管理驱动、控制 I/O 设备,以文件系统形式提供统一访问接口,保障系统稳定高效运行。
everything 和系统自带的查找文件究竟区别在于何处?
系统自带查找常基于文件系统索引,遍历目录慢,实时性强但范围广时效率低。Everything 利用 NTFS 文件系统 USN 日志(变更记录)提前构建索引,搜索时直接查询索引,速度极快,可秒搜,但对非 NTFS 分区支持有限,且依赖初始索引构建,新文件或更改若索引未及时更新有延迟,不过整体高效性受用户青睐。
大数据能无限更新储存吗?不能的话数据去哪儿了?
不能无限。物理存储介质有容量限制,虽不断扩容但终有限。数据处理有生命周期,过期、冗余、低价值数据会清理,如按时间删除日志,通过数据归档移至冷存储。还有分布式存储中,副本策略平衡冗余与空间,故障时数据可恢复,但空间占用大,需依业务权衡,保障活跃、重要数据留存与高效利用。
图灵测试的尽头是什么?
图灵测试旨在判断机器智能,尽头模糊。一方面,随着 AI 发展,机器行为与人难辨,引发伦理、意识思考,若机器全通过,是否等同人类智能。另一方面,测试标准受语言、文化、认知局限,新交互形式涌现,促使重新定义智能边界,它推动 AI 追求类人思维、情感交互,却难界定最终 “智能达标线”。
游戏的基本运行代码和显示图像操控代码的异同和操作性?
相同点是都基于编程语言,协调硬件资源。运行代码侧重游戏逻辑,如角色属性、任务流程、碰撞检测,保障玩法规则。显示图像操控代码聚焦图形渲染,利用 GPU 加速,将游戏场景、角色模型转换为屏幕像素,涉及纹理、光照处理。操作性上,运行代码逻辑调试需理解算法,修改参数影响玩法;图像代码要懂图形学,调优渲染效果,两者协同,稍有不慎易引发画面与玩法不同步等问题。
网络的本质是一种限制吗?联网是否相当于一个公共大型数据库?
网络本质不是限制,是连接与共享手段。虽带宽、协议有约束,但突破时空限制实现信息交互。联网类似公共大型数据库,可远程获取知识、资源,如网页数据、云存储,但又有区别,网络含动态交互、实时通信,数据分布多源,不像传统数据库集中管理,权限、安全更复杂,是开放灵活知识生态。
cookie 存在的意义是什么?万维网为何逐渐隐匿了?
Cookie 用于记录用户会话信息,如登录状态、浏览偏好,下次访问同网站时,服务器依 Cookie 提供个性化服务,提升用户体验。万维网未隐匿,只是交互形式变化,从单纯网页浏览,到移动 App、小程序,它们基于万维网技术,后台仍有网页服务,只是前端呈现更贴合移动端,优化交互便捷性,拓展应用场景。
如果一个程序没有入口,是否就不会被恶意代码攻击?
不是。程序即使无显式入口,运行环境、依赖库可能有漏洞。恶意代码可通过缓冲区溢出攻击内存,利用软件漏洞篡改执行流,或感染共享库,待合法程序调用时触发,无入口不代表无攻击面,软件安全需全方位漏洞检测、防御机制,涵盖代码逻辑、内存管理、网络通信等多环节。
软件是否能通过不断的精华压缩与硬件支持无限升级?
不能无限。软件复杂度增长有边际,过度压缩可能损功能、稳定性,如删减关键优化代码致性能问题。硬件提升虽助力,但新硬件需软件适配,且受物理极限约束,像芯片制程逼近原子尺度,散热、能耗瓶颈凸显,两者协同进化,在实际需求、技术可行性下找平衡,而非无限制升级。
项目加分与经验
优秀作业:
https://www.cnblogs.com/vincent2077/p/18559914
https://www.cnblogs.com/zzz12138/p/18580400
经验:认真全面有自我思考地反思,才能更深刻地进步
课程收获与不足
一、收获
知识体系构建
通过《计算机科学概论》,我对计算机的整体架构、发展历程以及各个领域的应用有了宏观的认识。了解到从硬件底层的芯片、电路原理,到操作系统的调度管理,再到上层丰富多彩的应用软件,明白了计算机是如何协同运作来解决各类实际问题的。
在《C 语言基础程序与设计》学习中,掌握了 C 语言的基本语法,包括数据类型(如整型、浮点型、字符型等)、运算符、表达式,能熟练运用控制结构(顺序、选择、循环)编写程序逻辑,还学会了函数的定义与调用,知道如何将复杂的任务分解为一个个可复用的函数模块,构建出具有一定功能的小型程序。
编程技能提升
在不断编写 C 语言代码实践过程中,我的代码调试能力得到极大锻炼。学会使用编译器的报错信息、单步调试工具来定位程序中的逻辑错误、语法错误,从最初面对满屏错误无从下手,到现在能迅速找到问题症结并修复,编写代码的效率大幅提高。
培养了算法思维,懂得针对具体问题设计合理的算法解决方案。例如,利用循环结构实现数值计算中的迭代算法,通过排序算法(冒泡排序、选择排序等)对数据进行有序排列,这种思维方式让我在解决编程问题时更加有条理、有策略。
问题解决能力
无论是理论学习中的知识难点,还是编程实践里的程序 bug,都促使我学会自主探索、查阅资料来解决问题。面对复杂的概念理解不清时,主动搜索专业书籍、学术论文深入学习;遇到代码运行结果与预期不符,在网上技术论坛查找相似案例,参考他人经验,不断尝试不同方法直至问题解决,这让我的自主学习和独立解决问题能力得到质的飞跃。
二、不足
知识深度理解
在《计算机科学概论》部分复杂知识点上,理解仅停留在表面。像计算机网络中的 TCP/IP 协议栈,虽知晓有不同层次及其基本功能,但对于各层协议内部的详细交互机制、数据包封装与解析过程,未能深入探究,导致在面对涉及网络底层原理的综合分析题时,难以准确作答。
对于 C 语言中的一些高级特性,如指针与数组的复杂关系、函数指针的运用,掌握不够扎实。编写代码时,常常因对这些特性理解模糊而出现内存访问错误、函数调用异常等问题,影响程序的稳定性与正确性。
编程实践复杂度
所编写的 C 语言程序大多为小型示例或课堂作业,缺乏大型项目开发经验。在程序架构设计、模块划分与整合方面能力欠缺,不知道如何构建一个易于维护、扩展性强的代码结构,当代码量增多时,容易陷入混乱,后续修改与优化困难重重。
对 C 语言标准库函数的运用不够熟练,只熟悉常用的输入输出、字符串处理函数,对于涉及文件操作、图形界面绘制等更丰富的库函数,了解甚少,限制了程序功能的拓展,难以开发出功能更强大、界面更友好的应用程序。
时间管理与学习规划
课程学习过程中,有时未能合理安排时间,临近考试或作业截止日期才匆忙复习、赶工。尤其在 C 语言编程实践时,前期拖延,后期发现问题堆积,来不及充分调试优化,导致提交的作业质量不高,知识掌握也不够牢固,没有形成良好的持续学习节奏,影响了学习效果的长期积累。
在未来的学习中,我会针对这些不足,制定详细的学习计划,加深知识理解,强化编程实践,提升时间管理能力,争取在计算机领域取得更大的进步。
给开学初的你和学弟学妹们的学习建议?如果重新学习这门课,怎么做才可以学的更好?
学会合理使用AI;懂得举一反三而不是墨守成规;多去向有经验的人寻求帮助,到达相同的高处才有可能看见更多的可能;勤加练习,学有余力就预习,打好基础为以后做好准备。
问卷调查
你平均每周投入到本课程多长时间?
十五个小时。
每周的学习效率有提高吗?
有,方法和技巧都逐渐熟练提高了。
学习效果自己满意吗?
满意,但自己深知可以做得更好。
课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
不会,但很好奇有谁坚持下来了。
你觉得这门课老师应该继续做哪一件事情?
更新云班课的大幅拓展内容。
你觉得这门课老师应该停止做哪一件事情?
上课问同学们对刚学的课程有没有问题,因为懂的没有问题,不懂的也不敢问,甚至根本不知道从何问起。
你觉得这门课老师应该开始做什么新的事情?
精简提交的文件内容,但同时更细致地查看并赋分。云班课的拓展题也可以截止后提供答案,方便积极完成的同学进一步理解。
总结的链接和二维码:
https://www.cnblogs.com/vincent2077/p/18654026