2021-2022-1 20211325高进涛《信息安全专业导论》第11周学习总结

2021-2022-1 20211325高进涛《信息安全专业导论》第11周学习总结

学习目标

  • 计算机网络
  • 网络拓扑
  • 云计算
  • 网络安全
  • Web
  • HTML,CSS,Javascript
  • XML

学习资源

  • 教材
  • 阅读 「反作弊」:任何时候发现同学们有抄袭作业,抄袭代码的情况,即时课程总成绩清零

学习任务

教材知识总结

  1. 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
  2. 网络拓扑(Network Topology)结构是指用传输介质互连各种设备的物理布局。指构成网络的成员间特定的物理的即真实的、或者逻辑的即虚拟的排列方式。如果两个网络的连接结构相同我们就说它们的网络拓扑相同,尽管它们各自内部的物理接线、节点间距离可能会有不同。
  3. 云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。[1]
  4. 网络安全(Cyber Security)是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。[1]
  5. web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。[1]
  6. HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。[1]

    超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。[1]

  7. 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。[1]

    CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。[2]

  8. JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。[1]

    JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。[2]

    JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES2015。

  9. 可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。[1]

    在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。[2]

问题1:在运行坦克大战游戏中,出现了337个漏洞

解决:通过翻译和不断分行调试终于解决了bug

问题2:不了解ssh、

解决:通过阅读和查询资料和FREESSHD使用说明大概了解SSH可以干什么了

import pygame
import time
import numpy as np
from pygame.locals import *

BOARDWIDTH = 48
BOARDHEIGHT = 28
score = 0


class Food(object):
    def __init__(self):
        self.item = (4, 5)

    def _draw(self, screen, i, j):
        color = 255, 0, 255
        radius = 10
        width = 10
        # i:1---34   j:1---25
        position = 10 + 20 * i, 10 + 20 * j
        pygame.draw.circle(screen, color, position, radius, width)

    def update(self, screen, enlarge, snack):
        if enlarge:
            self.item = np.random.randint(
                1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)
            while self.item in snack.item:
                self.item = np.random.randint(
                    1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)
        self._draw(screen, self.item[0], self.item[1])


class Snack(object):
    def __init__(self):
        # self.item = [(3, 25), (2, 25), (1, 25), (1,24), (1,23),
        # (1,22), (1,21), (1,20), (1,19), (1,18), (1,17), (1,16)]
        # x 水平方向 y 竖直方向
        # 初始方向竖直向上
        self.item = [(3, 25), (2, 25), (1, 25), (1, 24), ]
        self.x = 0
        self.y = -1

    def move(self, enlarge):
        # enlarge 标记贪吃蛇有没有吃到食物
        if not enlarge:
            self.item.pop()
        head = (self.item[0][0] + self.x, self.item[0][1] + self.y)
        self.item.insert(0, head)

    def eat_food(self, food):
        global score
        snack_x, snack_y = self.item[0]
        food_x, food_y = food.item
        if (food_x == snack_x) and (food_y == snack_y):
            score += 100
            return 1
        else:
            return 0

    def toward(self, x, y):
        if self.x * x >= 0 and self.y * y >= 0:
            self.x = x
            self.y = y

    def get_head(self):
        return self.item[0]

    def draw(self, screen):
        radius = 15
        width = 15
        color = 255, 0, 0
        position = 10 + 20 * self.item[0][0], 10 + 20 * self.item[0][1]
        pygame.draw.circle(screen, color, position, radius, width)
        radius = 10
        width = 10
        color = 255, 255, 0
        for i, j in self.item[1:]:
            position = 10 + 20 * i, 10 + 20 * j
            pygame.draw.circle(screen, color, position, radius, width)


def init_board(screen):
    board_width = BOARDWIDTH
    board_height = BOARDHEIGHT
    color = 10, 255, 255
    width = 0
    for i in range(board_width):
        pos = i * 20, 0, 20, 20
        pygame.draw.rect(screen, color, pos, width)
        pos = i * 20, (board_height - 1) * 20, 20, 20
        pygame.draw.rect(screen, color, pos, width)
    for i in range(board_height - 1):
        pos = 0, 20 + i * 20, 20, 20
        pygame.draw.rect(screen, color, pos, width)
        pos = (board_width - 1) * 20, 20 + i * 20, 20, 20
        pygame.draw.rect(screen, color, pos, width)


def game_over(snack):
    broad_x, broad_y = snack.get_head()
    flag = 0
    old = len(snack.item)
    new = len(set(snack.item))
    if new < old:
        flag = 1
    if broad_x == 0 or broad_x == BOARDWIDTH - 1:
        flag = 1
    if broad_y == 0 or broad_y == BOARDHEIGHT - 1:
        flag = 1

    if flag:
        return True
    else:
        return False


def print_text(screen, font, x, y, text, color=(255, 0, 0)):
    imgText = font.render(text, True, color)
    screen.blit(imgText, (x, y))


def press(keys, snack):
    global score
    if keys[K_w] or keys[K_UP]:
        snack.toward(0, -1)
    elif keys[K_s] or keys[K_DOWN]:
        snack.toward(0, 1)
    elif keys[K_a] or keys[K_LEFT]:
        snack.toward(-1, 0)
    elif keys[K_d] or keys[K_RIGHT]:
        snack.toward(1, 0)
    elif keys[K_r]:
        score = 0
        main()
    elif keys[K_ESCAPE]:
        exit()


def game_init():
    pygame.init()
    screen = pygame.display.set_mode((BOARDWIDTH * 20, BOARDHEIGHT * 20))
    pygame.display.set_caption('贪吃蛇游戏')
    # sound = pygame.mixer.Sound(AUDIONAME)
    # channel = pygame.mixer.find_channel(True)
    # channel.play(sound)
    return screen


def game(screen):
    snack = Snack()
    food = Food()
    font = pygame.font.SysFont('SimHei', 20)
    is_fail = 0
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                exit()
        screen.fill((0, 0, 100))
        init_board(screen=screen)
        keys = pygame.key.get_pressed()
        press(keys, snack)
        if is_fail:
            font2 = pygame.font.Font(None, 40)
            print_text(screen, font2, 400, 200, "GAME OVER")
        if not is_fail:
            enlarge = snack.eat_food(food)
            food.update(screen, enlarge, snack)
            snack.move(enlarge)
            is_fail = game_over(snack=snack)
            snack.draw(screen)
        pygame.display.update()
        time.sleep(0.1)


def main():
    screen = game_init()
    game(screen)


if __name__ == '__main__':
    main()

2021-2022-1 20211325高进涛《信息安全专业导论》第11周学习总结

 

  代码行数(新增/积累) 博客量(新增/积累) 学习时间(新增/积累) 重要成长
目标 5000行 30篇 400小时  
第一周 100/150 2/2 20/20  
第二周 250/300 2/4 30/50 对于纯理论性知识的记忆还有待加强
第三周 100/400 1/5

40/90

对于简单的编码和设计程序判断已基本掌握,但对于在atom中在编写python时的图片插入仍存在问题
第四周 200/600 1/6 20/110 换用了VScode编辑器,好像是要方便一点,之后学会了BASE64编码,浮点数,还有阿拉伯数字和罗马数字的互相转化。
第五周 250/850 3/9 20/130

终于不是一脸懵的抄代码了

第六周 200/1050 3/12 20/150 知道了原来代码并没有什么唯一解,只有更方便更简洁的答案
第七周 300/1350 4/16 25/175 对伪代码的理解更深入了,这将便于我更准确的书写代码,以及对算法的深入了解将会方便我选择更合适的算法
第八周 250/1600 2/18 20/195 在项目python数据库编程中的学习中,学会了怎么方便的创建和修改表格,顺便复习了一下字典
第九周 300/1900 4/22 25/220 完善了项目,自己做了几个游戏玩玩,越来越喜欢计算机了
第十周 350/2250 3/25 27/247 自己做了几个小游戏,但是在音频导入时出现了问题
第十一周 300/2550 1/26 30/277 已经可以独自解决出现的BUG了  
上一篇:python飞机大战


下一篇:antd pro2.0 使用记录六:与服务端交互(自建服务)