编译源码
编译源码的过程通常可以分为多个阶段,这些阶段的主要任务是逐步将高级语言编写的源代码转换为计算机可以直接执行的机器代码。以下是编译源码过程中的主要阶段及其处理内容:
预处理:
头文件包含:根据#include指令,将需要包含的头文件插入到当前文件中,实现代码的复用和结构的组织。
宏替换:根据#define指令,将代码中定义的宏进行替换,实现代码重用和简化。
条件编译:根据#ifdef、#ifndef、#if、#elif、#else、#endif等指令,根据条件决定是否编译代码。
去注释:将代码中的注释去掉,减小代码文件的大小并提高代码文件的可读性。
行连接:将分行的代码行连接成一整行代码,以便编译器进行解析和编译。
词法分析:
编译器读取源代码,将源代码分解成若干个单词(token),并将每个单词转换成词法单元(lexeme),例如关键字、标识符、操作符等。
语法分析:
编译器对词法分析得到的词法单元进行解析和分析,生成语法树(parse-tree)。
检查源程序在语法上是否正确。
语义分析:
编译器对语法树进行语义分析,检查代码是否符合语言的语法规范。
包括数据类 ...
DMA
DMA(Direct Memory Access,直接内存访问)是一种允许某些硬件设备在没有CPU介入的情况下,直接访问主存(内存)进行数据读写操作的技术。DMA技术显著提高了数据传输的效率,因为它减少了CPU在处理数据传输任务时的负担,使得CPU可以专注于执行其他任务。
DMA的工作原理
初始化:当CPU需要启动一个DMA传输时,它首先会配置DMA控制器,包括指定源地址(数据要读取或写入的内存地址)、目标地址(通常是另一个内存地址或外设的地址)、传输的数据量以及传输的方向(读或写)。
数据传输:一旦DMA控制器被配置好,它就会接管数据传输的任务。DMA控制器会利用内部的总线控制器来访问内存,并根据配置的信息将数据从一个地址传输到另一个地址。这个过程完全由DMA控制器自行管理,不需要CPU的干预。
中断或轮询:当DMA传输完成时,DMA控制器通常会向CPU发送一个中断信号,通知CPU传输已经完成。或者,CPU也可以通过轮询DMA控制器的状态寄存器来检查传输是否完成。
后续处理:CPU在接收到DMA传输完成的中断或确认传输完成后,可以继续执行其他任务,或者对传输的数据进行进一步的处 ...
CPU
CPU(Central Processing Unit,中央处理器)是计算机系统的核心部件,负责执行程序中的指令,处理数据,并控制计算机系统的运行。以下是关于CPU的一些关键知识点:
CPU的基本结构
运算器(Arithmetic Logic Unit, ALU):
算术逻辑单元(ALU):这是CPU中执行算术运算(如加、减、乘、除)和逻辑运算(如与、或、非、异或)的主要部分。ALU通过接收来自控制器的指令和数据,执行相应的运算操作,并将结果输出到寄存器或其他部件。
累加器:在ALU中,累加器通常用于存储运算的中间结果或最终结果。它还可以作为操作数之一参与运算。
寄存器阵列:虽然寄存器在基本结构中已被提及,但在这里我们更详细地讨论。寄存器阵列包含了多个寄存器,每个寄存器都可以存储数据或指令。这些寄存器包括通用寄存器(用于存储临时数据)、指令寄存器(用于存储当前正在执行的指令)、程序计数器(用于跟踪下一条要执行的指令的地址)等。
控制器(Control Unit, CU):
指令寄存器(Instruction Register, IR):用于存储从内存中读取的当前指令。
程序计数 ...
加密算法
一、加密算法的基本概念加密算法是一种将明文信息转换为密文信息的方法,以防止未经授权的用户获取原始数据。加密算法在信息安全领域具有重要地位,是保障数据安全与隐私的关键技术。
二、常见的加密算法
对称加密算法
特点:加密和解密过程使用相同的密钥。
优点:加密速度快、加密强度高,适用于大量数据的加密。
缺点:密钥管理困难,需要确保密钥的安全传输和存储。
典型算法:DES(数据加密标准)、AES(高级加密标准)等。其中,AES算法以其更高的安全性和灵活性,已成为目前应用最广泛的对称加密算法之一。
非对称加密算法
特点:加密和解密过程使用不同的密钥,分别为公钥和私钥。
优点:解决了对称加密中密钥管理的问题,具有更高的安全性。
缺点:加密和解密速度相对较慢。
典型算法:RSA(公开密钥密码体制)、ECC(椭圆曲线加密算法)等。RSA算法作为非对称加密的代表,在数字签名、密钥交换等场景中具有广泛应用。
混合加密算法
特点:结合了对称加密算法和非对称加密算法的优点,以实现更高的安全性和效率。
实现方式:通常使用非对称加密算法来加密对称加密算法的密钥,而使用对称加密算法来加密实际的数据。
...
网络协议
TCP/IP(传输控制协议/互联网协议):
TCP:确保数据包的可靠传输,通过确认机制、重传机制和流量控制等机制来保证数据传输的完整性。
IP:负责数据包的路由和寻址,使数据包能够在不同网络之间传输。
HTTP(超文本传输协议):
用于在Web浏览器和服务器之间传输超文本(如HTML文档)。
通常运行在TCP之上,默认端口为80(HTTP)和443(HTTPS)。
HTTPS(安全超文本传输协议):
HTTP的安全版本,通过SSL/TLS加密来确保数据传输的安全性。
常用于敏感信息的传输,如在线支付和登录。
FTP(文件传输协议):
用于在网络上的计算机之间传输文件。
通常运行在TCP端口20(数据)和21(控制)上。
SFTP(安全文件传输协议):
基于SSH的文件传输协议,提供了安全的文件传输功能。
SMTP(简单邮件传输协议):
用于发送电子邮件。
通常运行在TCP端口25上。
POP3(邮局协议第3版):
用于从邮件服务器下载电子邮件到本地计算机。
通常运行在TCP端口110上。
IMAP(互联网邮件访问 ...
排序算法分析
类别
排序方法
时间复杂度(平均情况)
时间复杂度(最坏情况)
空间复杂度(储存空间)
稳定性
插入排序
直接插入排序
O(n^2)
O(n^2)
O(1)
是
Shell排序
O(nlogn)至O(n^2)
O(n^s) 其中s是常数
O(1)
否
选择排序
直接选择排序
O(n^2)
O(n^2)
O(1)
否
堆排序
O(nlogn)
O(nlogn)
O(1) (不包括堆的存储)
否
交换排序
冒泡排序
O(n^2)
O(n^2)
O(1)
是
快速排序
O(nlogn)
O(n^2) (未优化时)
O(logn)至O(n) (递归栈)
否
归并排序
归并排序
O(nlogn)
O(nlogn)
O(n)
是
基数排序
基数排序(LSD)
O(nk) 其中k是数字位数
O(nk) 其中k是数字位数
O(n+k)
是
直接插入排序(Straight Insertion Sort)直接插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通 ...
设计模式
设计模式的分类总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
创建模式(5种)工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
工厂模式简单工厂模式定义:定义了一个创建对象的类,由这个类来封装实例化对象的行为。
举例:(我们举一个pizza工厂的例子)
pizza工厂一共生产三种类型的pizza:chesse,pepper,greak。通过工厂类(SimplePizzaFactory)实例化这三种类型的对象。类图如下:
工厂类的代码:
12345678910111213public class SimplePizzaFactory { public Pizza CreatePizza(String ordertype) { ...
The sentence may resonate you
人类最宝贵的东西是什么? 我认为是爱和勇气。我喜欢阅读,喜欢思考,从中我总能发现那些最让我珍视的那些心灵力量。
科幻与爱的一篇小说相比于人类的勇气,机器人的爱实在太微不足道,但相比勇气或许我们更缺少爱,
机器人不哭如果你答应我一个请求,我愿意跟着您走你想要什么,山米?我……我想哭我吩咐维修机器,载入医学数据库中有关眼泪、泪腺的内容,然后关掉山米,开始拆卸改造。两个小时之后,山米有了排泪管,还给他提供了溶液,每只眼睛里可以流出六百滴眼泪。这种事你听说过吗,机器人想哭?三十年时间,徒劳地试图成为一个普通人。或者五百年时间徒劳的想哭出来————我不知道哪种情形更凄惨,我不由得心里冒火:一般情况下我甚至不会替人难过,更别说机器了。但和人类无比宏大的野心相比,他的要求是多么简单、多么渺小啊。我们想跨过大海,于是跨过了。我们想飞,于是飞起来了。我们想奔向群星,于是我们来到了星际。可山米相应的一切,只是为他死去的艾米丽小姐痛苦一场。他等待了五百年,同意再一次出售自己,为的只是几滴泪水。这个交易真是太不值了改造好了?好了,哭吧,山米…尽管把你的眼珠子哭出来好了。我…我……我哭不出来。我感受到痛苦,但我 ...
数据结构基础
引言在数据结构的学习中,我们需要一定的基础和思维,在这里做一定的总结,并分享一下自己的经验
数组数组的操作在数据结构中最为常见,也最需要理解和记忆
构建一个数组1234# 一维数组a = [0]*n # 二维数组b = [[0]*n for _ in range(n)]
12345678910111213a = [1,2,3]n = len(a)ans = []# 正序for i in range(n): for j in range(1,n-i+1): ans.append(a[i:i+j])# 倒序for i in range (n,0,-1): for j in range (n-i+1): ans.append(a[i-1:i+j])return ans
全排列1234567891011121314151617def permute(nums): def backtrack(first=0): # 所有数都填完了 if first == n: output. ...
数据
Table 5. Single-modal experimental results(3D@0.5 0.25 0.25)
Baseline
Data
Car
Pedestrain
Cyclist
3D@0.5
3D@0.25
3D@0.25
Easy
Mod.
Hard
Easy
Mod.
Hard
Easy
Mod.
Hard
RDIou
LiDAR
63.43
40.80
32.92
33.71
29.35
28.96
38.26
35.62
35.02
...