课
对于这一方面,先把课都过一遍吧,尽量快的摸清楚底
软件工程 没有复杂的逻辑推理,概念性和理论很强,所以靠记
------
数据:是使程序能够适当处理信息的数据结构
程序:是能够完成预定功能和性能的可执行指令序列
文档:是开发、使用和维护过程程序所需要的图文资料
软件工程 三个要素:方法、工具和过程
方法:完成软件开发各项任务的技术方法,回答“怎么做”
工具:为运用方法提供的自动或半自动软件工程支撑环境
过程:是为了获得高质量软件所需要完成的一系列任务框架,回答“何时做
选择填空考察,具体记住有哪些阶段,即可
第三章 软件设计
第四章 软件开发与测试
黑盒测试白盒测试
第五章 面向对象
用例图
都是对功能分析,然后画图
第六章 软件维护与项目管理
选择填空
估算规模与甘特图
Linux
虚拟机会额外装两个以太网
Linux的字符界面,Window则是交互界面
虚拟机操作系统安装完成后的配置网络连接
虚拟机与其它机器(物理机或虚拟机)进行组网。
虚拟机连接 Internet,从外网获取资源。
虚拟机的组网方式主要有两种:
(1)桥接:在桥接模式下,VMware 虚拟出来的操作系统就像是局域网中的一台独立 的主机,它可以访问网内任何一台机器。缺点:需要和宿主机器处于同一网段,如果宿主 机的网段发生变化,所有虚拟机的 IP 重新修改。
(2)NAT:使用 NAT 模式,就是让虚拟系统借助 NAT(网络地址转换)功能,通过宿主 机器所在的网络来访问公网。虚拟机和宿主机不需要在同一网段,虚拟机单独组成一个局 域网。如果宿主机的网段发生变化,与虚拟机组成的网段无关
nat 的网络模型
------------------
考,,,Linux里面 localhost Login
输入密码的时候不会显示,,离谱
----这样跟着pdf做还是没什么收获,,算了
Linux王者CentOS7极简入门:7小时让你从凡人进阶筑基强者!_哔哩哔哩_bilibili
整理一下现在的课程了
web开发基础
python程序设计
数据存储综合实训(目前涉及Linux和Maven,Java做项目)
计算机网络
软件工程
计算机组成原理
(还挺头大的,感觉里面这些没多少以后会用,直接收益不如做一些个人探索)
也不管了,,都看吧,,一视同仁,也别整什么游戏开发为主线了,能多了解新东西就够了-----
麻了嗝淡呐,谁还管你啊,考,都没发现这么多要紧的事去做,,,上课是给各位脸了
Unity
自动创建以这个对象为名的Controller文件
//有限状态机(Finite-state machine,FSM)
//又称有限状态自动机,简称状态机
//是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型
老动画系统Animation 组件,制作出的动画格式 和新的动画格式是有区别的
老的创建动画文件也不会创建Controller,直接就是一个动画文件直接用
//目前我们为对象 在Animation窗口创建的动画 都会被 新动画系统支配
有特殊需求或者针对一些简易动画,才会使用老动画系统
回退的时间周期cycle offset
没有属性变化,就不能添加关键帧
1.0是代表一秒结束的意思,也是为了好在这上面区分
同一个状态机Controller下,可以有多个Animation
/保存动画文件时(create),Unity会帮助我们完成以下操作
//1.创建一个AnimatorController(动画控制器或称之为动画状态机)资源(新动画系统)
//2.将新创建的动画文件添加到Animator Controller中
//3.为动画对象添加Animator组件
//4.为Animator组件关联创建的AnimatorController文件
animation窗口,
预览-录制--回到第一个关键帧--回到上个关键帧-播放--下一个关键帧--最后一个关键帧
//动画中的帧:
//假设某个动画的帧率为60帧每秒,意味着该动画1秒钟最多会有60次改变机会
//每一帧的间隔时间是1s/60=16.67毫秒
//也就是说我们最快可以每16.67毫秒改变一次对象状态
//动画时间轴:
//每一个动画文件都有自己的一个生命周期,从动画开始到结束
//我们可以在动画时间轴上编辑每一个动画生命周期中变化
//原理:
//制作动画时:记录在固定时间点对象挂载的脚本的变量变化
//播放动画时:将制作动画时记录的数据在固定时间点进行改变,产生动画效果
---------
大小端(Endianness)指的是多字节数据在内存中存储的字节顺序。具体而言,它描述了数据的高位字节和低位字节在内存地址中的排列方式。
大端序(Big-Endian):
- 高位字节存储在内存的低地址处,低位字节存储在高地址处。
- 这种方式符合人类从左到右阅读数字的习惯。
小端序(Little-Endian):
- 低位字节存储在内存的低地址处,高位字节存储在高地址处。
- 这种方式在某些计算操作中更为高效。
网络传输通常采用大端序(也称为网络字节序),因此在发送和接收数据时,需要进行相应的字节序转换,以确保数据的正确解析。
Well-Known Types 转换成的 C# 类型
当你在 proto 文件中引用了 Google 提供的预定义消息类型(Well-Known Types),生成的 C# 代码会引用相应的命名空间下的类。例如:
-
google.protobuf.Timestamp
在 C# 中会生成或引用到:Google.Protobuf.WellKnownTypes.Timestamp
这个类型封装了秒和纳秒,并且提供了与
DateTime
相互转换的方法。 -
google.protobuf.Duration
在 C# 中对应:Google.Protobuf.WellKnownTypes.Duration
-
google.protobuf.Any
在 C# 中对应:Google.Protobuf.WellKnownTypes.Any
允许你封装任意 Protobuf 消息,并带有类型信息。
-
google.protobuf.Struct
在 C# 中对应:Google.Protobuf.WellKnownTypes.Struct
用于表示类似 JSON 的动态结构。
-
google.protobuf.FieldMask
在 C# 中对应:Google.Protobuf.WellKnownTypes.FieldMask
这些类型都是由 Protobuf 官方提供、跨语言支持的标准类库,在生成的代码中直接使用,无需你手动实现数据转换。
proto 文件中,可以定义的各种数据类型
-
标量类型(Scalar Types)
这些是内置的基本数据类型,包括:- 浮点数类型:
double
、float
- 整数类型:
- 有符号整数:
int32
、int64
、sint32
、sint64
- 无符号整数:
uint32
、uint64
- 固定宽度整数:
fixed32
、fixed64
、sfixed32
、sfixed64
- 有符号整数:
- 布尔类型:
bool
- 字符串:
string
- 字节串:
bytes
- 浮点数类型:
数组和List
字典map
oneof 字段
用于定义一组互斥的字段,也就是一次只会有一个字段被赋值。
在 C# 里,oneof 字段 的特点就是 只能赋值其中的一个变量,并且访问时 只能使用当前被赋值的字段,其他字段会被自动清除。
假设有以下 proto
文件:
syntax = "proto3";message SearchResult {oneof result {string text = 1;int32 number = 2;}
}
对应生成的C#代码(protobuf自动生成)
public sealed partial class SearchResult : pb::IMessage<SearchResult> {private object result_;public ResultOneofCase ResultCase { get; private set; }public enum ResultOneofCase {None = 0,Text = 1,Number = 2}public string Text {get { return ResultCase == ResultOneofCase.Text ? (string) result_ : null; }set {result_ = value;ResultCase = value == null ? ResultOneofCase.None : ResultOneofCase.Text;}}public int Number {get { return ResultCase == ResultOneofCase.Number ? (int) result_ : 0; }set {result_ = value;ResultCase = ResultOneofCase.Number;}}public void ClearResult() {result_ = null;ResultCase = ResultOneofCase.None;}
}
public sealed partial class SearchResult : pb::IMessage<SearchResult> {private object result_;public ResultOneofCase ResultCase { get; private set; }public enum ResultOneofCase {None = 0,Text = 1,Number = 2}public string Text {get { return ResultCase == ResultOneofCase.Text ? (string) result_ : null; }set {result_ = value;ResultCase = value == null ? ResultOneofCase.None : ResultOneofCase.Text;}}public int Number {get { return ResultCase == ResultOneofCase.Number ? (int) result_ : 0; }set {result_ = value;ResultCase = ResultOneofCase.Number;}}public void ClearResult() {result_ = null;ResultCase = ResultOneofCase.None;}
}
在c#里实际使用这个自动生成的类(oneof互斥规则)
- 节省存储空间(同一时间只存一个字段的数据)。
- 避免无意义的字段同时存在(例如搜索结果不可能同时是字符串和整数)。
proto文件里 为什么必须有字段编号?
-
紧凑的二进制编码
- Protobuf 在序列化时会将每个字段编码为
[tag][value]
的形式,其中tag
就是字段编号。 - 没有数字标识符,二进制数据就无法正确地表示每个字段。
- Protobuf 在序列化时会将每个字段编码为
-
兼容性
- 当你在未来对消息进行升级,比如新增或删除字段,只要保留已有字段的编号不变,就可以确保旧版数据依然能够被正确解析。
- 如果没有明确的编号,版本之间的兼容性将无法保证。
-
解析效率
- 使用数字标识符,解析器可以更快速地识别每个字段,提高解析速度。