学期(2021-2022-1) 学号(20211412) 《信息安全专业导论》第九周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>([2020-2021-1信息安全专业导论]https://edu.cnblogs.com/campus/besti/2021-2022-1fois |
---|---|
这个作业要求在哪里 | <作业要求的链接>(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09) |
这个作业的目标 | <学习目标:操作系统责任,内存与进程管理,分时系统,CPU调度,文件、文件系统,文件保护,磁盘调度,学习资源。教材:阅读 「反作弊」:任何时候发现同学们有抄袭作业,抄袭代码的情况,即时课程,总成绩清零。学习任务:加入云班课,参考本周学习资源。自学教材:计算机科学概论第10,11章 并完成云班课测试,《看漫画学Python》第12,16章并完成云班课测试> |
作业正文 | ... 本博客链接 |
教材学习内容总结
《看漫画学python》第十二章:
打开文件:采用open函数,其中又有四个常用参数:file参数,若表示文件名,既可以是相对路径,也可以是绝对路径。
mode参数,用于设置文件打开模式
encoding参数,用来指定打开文件时的文件编码
errors用来指定遇到编码错误时如何处理
关闭文件:finally代码
教材学习中的问题和解决过程
q;如何理解“轮询算法”?
A:事件轮询(Event Loop)是一个很重要的概念,指的是计算机系统的一种运行机制。
JavaScript语言就是采用的这种机制,来解决单线程运行带来的一些问题。想要理解EventLoop,就要从程序的运行模式讲起。运行以后的程序叫做"进程"(process),一般情况下,一个进程一次只能执行一个任务。如果有很多任务需要执行,不外乎三种解决方法。
(1)排队。因为一个进程一次只能执行一个任务,只好等前面的任务执行完了,再执行后面的任务。
(2)新建进程。使用fork命令,为每个任务新建一个进程。
(3)新建线程。因为进程太耗费资源,所以如今的程序往往允许一个进程包含多个线程,由线程去完成任务。
以JavaScript语言为例,它是一种单线程语言,所有任务都在一个线程下完成,即采用上面的第一种方法,一旦遇到大量任务或者遇到一个耗时的任务,网页就会出现假死的状态,因为JavaScript停不下来,也就无法响应用户的行为。你也许会问,JavaScript为什么是单线程,难道不能实现为多线程吗?这跟历史有关系。JavaScript从诞生起就是单线程。原因大概是不想让浏览器变得太复杂,因为多线程需要共享资源、且有可能修改彼此的运行结果,对于一种网页脚本语言来说,这就太复杂了。后来就约定俗成,JavaScript为一种单线程语言。(Worker API可以实现多线程,但是JavaScript本身始终是单线程的。)如果某个任务很耗时,比如涉及很多I/O(输入/输出)操作,那么线程的运行大概是下面的样子。上图的绿色部分是程序的运行时间,红色部分是等待时间。可以看到,由于I/O操作很慢,所以这个线程的大部分运行时间都在空等I/O操作的返回结果。这种运行方式称为"同步模式"(synchronous I/O)或"堵塞模式"(blockingI/O)。
如果采用多线程,同时运行多个任务,那很可能就是下面这样。上图表明,多线程不仅占用多倍的系统资源,也闲置多倍的资源,这显然不合理。Event Loop就是为了解决这个问题而提出的。Wikipedia这样定义:"EventLoop是一个程序结构,用于等待和发送消息和事件。(aprogramming construct that waits for and dispatches events or messages in aprogram.)"简单说,就是在程序中设置两个线程:一个负责程序本身的运行,称为"主线程";另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为"EventLoop线程"(可以译为"消息线程")。
上图主线程的绿色部分,还是表示运行时间,而橙色部分表示空闲时间。每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在红色的等待时间。等到I/O程序完成操作,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。可以看到,由于多出了橙色的空闲时间,所以主线程得以运行更多的任务,这就提高了效率。这种运行方式称为"异步模式"(asynchronous I/O)或"非堵塞模式"(non-blocking mode)。这正是JavaScript语言的运行方式。单线程模型虽然对JavaScript构成了很大的限制,但也因此使它具备了其他语言不具备的优势。如果部署得好,JavaScript程序是不会出现堵塞的,这就是为什么node.js平台可以用很少的资源,应付大流量访问的原因。
代码调试中的问题和解决过程
- 问题1:按我的理解修改了课本上的代码,第一次运行时报错。
之后我将报错时的英文进行了翻译,虽然还是很难理解,但“非法多字节”好像指出了问题的根源
我之前在被储存文档里存放的是一首唐诗《春江花月夜》,随后我将其改成了一串数字,再次运行显示复制成功
但课本上也有汉字啊,排除了代码错误的原因,我再次检查了一遍,发现真正原因是两个文档都采用了utf-8
将代码中的gbk修改为utf-8,就可以成功运行了。
- ...
代码托管
这行代码需要你找到储存位置的绝对路径,光照抄课本是绝对会报错的
上周考试错题总结
Parameters are the identifiers listed in parentheses beside a subprogram name.
正确答案: 正确
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 10/10 | |
第二周 | 200/400 | 2/4 | 12/22 | |
第三周 | 400/800 | 3/5 | 12/34 | |
第四周 | 400/1200 | 2/6 | 14/48 | |
第五周 | 400/1600 | 4/10 | 12/60 | |
第六周 | 400/2000 | 3/13 | 12/72 | |
第七周 | 400/2400 | 4/17 | 12/84 | |
第八周 | 400/2800 | 2/19 | 12/96 | |
第九周 | 400/3200 | 3/22 | 14/110 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
- 《计算机科学概论》
- ...