小米C++开发 面试 准备阶段和部分真题

真题

C++

  • 函数指针和指针函数的区别  o(╥﹏╥)o
  • 堆和栈的区别
  • 函数重载?为什么返回值不可以区分函数重载?o(╥﹏╥)o
  • 封装、继承和多态的定义,自己描述一下这三者的区别和联系。
  • 多态的构成(应该是想听虚函数,当时没有想到  o(╥﹏╥)o)
    • 必须存在继承关系
    • 继承关系中必须存在同名的虚函数,并且子类和基类虚函数之间是遮蔽(覆盖)的关系
    • 存在基类指针,通过这个指针实现虚函数的调用
  • 进程相较于线程 还多包含一个socket通信o(╥﹏╥)o
  • STL

密码学

  • RSA padding模式是啥  大
  • RSA的位数 1024 2048 4096
  • 密码体制  密码的底层原理
  • 椭圆双曲线
  • 对称算法的模式  ofb  cfb
  • 服务器密码机如何对外提供服务?带宽

区块链

  • 数字钱包的标准
  • 检测账户余额的方法 UTXO

 准备阶段

C++

1,fork的底层实现是什么?

fork()函数的底层实现原理_everthing willl be ok-CSDN博客_fork原理

  • fork()系统调用通过复制一个现有进程来创建一个全新的进程。进程被存放在一个叫做任务队列的双向循环链表当中,链表当中的每一项都是类型为task_struct称为进程描述符的结构,也就是我们写过的进程PCB. 
  • Tips:内核通过一个位置的进程标识值或PID来标识每一个进程。//最大值默认为32768,short int短整型的最大值.,他就是系统中允许同时存在的进程最大的数目。
  • 可以到目录 /proc/sys/kernel中查看pid_max:

这里写图片描述

当进程调用fork后,当控制转移到内核中的fork代码后,内核会做4件事情:

  • 1、分配新的内存块和内核数据结构给子进程
  • 2、将父进程部分数据结构内容拷贝至子进程
  • 3、添加子进程到系统进程列表当中
  • 4、fork返回,开始调度器调度

 fork函数在底层到底做了什么呢?

  • Linux平台通过clone()系统调用实现fork()。 fork(),vfork()和clone()库函数都根据各自需要的参数标志去调用clone(),然后由clone()去调用do_fork(), 再然后do_fork()完成了创建中的大部分工作,该函数调用copy_process().做最后的那部分工作。

这里写图片描述

2,智能指针原理、使用和实现

理解智能指针

C++11中智能指针的原理、使用、实现 - wxquare - 博客园

  • 智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针
  • 智能指针的作用是防止忘记调用delete释放内存和程序异常的进入catch块忘记释放内存。另外指针的释放时机也是非常有考究的,多次释放同一个指针会造成程序崩溃,这些都可以通过智能指针来解决

智能指针占据的字节数

  • shared_ptr  16字节
  • unique_ptr  8字节
  • weak_ptr  16字节

3,虚函数

C++虚函数详解_C语言中文网

C++ 虚函数表解析_陈皓专栏 【空谷幽兰,心如皓月】-CSDN博客_虚函数表

C++虚函数详解_Whitesad的博客-CSDN博客_c++虚函数

  • 只有派生类的虚函数遮蔽基类的虚函数(函数原型相同)才能构成多态(通过基类指针访问派生类函数)
  • 虚函数的声明的前提:首先看成员函数所在的类是否会作为基类。然后看成员函数在类的继承后有无可能被更改功能,如果希望更改其功能的,一般应该将它声明为虚函数。如果成员函数在类被继承后功能不需修改,或派生类用不到该函数,则不要把它声明为虚函数
  • 虚函数是运行时决议,与一般的编译时决议存在很大的不同
  • 虚函数指针:虚函数指针式一个指向函数的指针,指向的是子类内部实现的虚函数,当子类调用虚函数的时候,本质上是通过调用这个虚函数指针找到接口
  • 虚函数指针是确实存在的数据类型,在一个被实例化的对象中,它总是被存放在该对象的地址首位,这种做法的目的是为了保证运行的快速性。与对象的成员不同,虚函数指针对外部是完全不可见的,除非通过直接访问地址的做法或者在DEBUG模式中,否则它是不可见的也不能被外界调用

4,C++转型操作符  强制类型转换

  • const_cast 通常用来将对象的常量性转除(cast away the constness)。它是唯一有此能力的C++-style转型操作符
  • dynamic_cast用来执行继承体系中安全的向下转型或跨系转型动作。也就是说你可以利用它将指向基类对象的指针或者引用转型为指向派生类对象的指针或引用,并得知转型是否成功。如果转型失败,会以一个null指针(当转型对象是指针)或一个exception(当转型对象是引用)表现出来。dynamic_cast是唯一无法由旧式语法执行的转型动作,也是唯一可能消耗重大运行成本的转型动作
  • static_cast 基本上拥有与C旧式转型相同的威力与意义,以及相同的限制。例如将一个非 const 的对象转换为 const 对象,或将int 转换为 double等等。它也可以用来执行上述多种转换的反向转换,例如将void*指针转为typed指针,将pointer-to-base转为pointer-to-derived。但是他无法将const转为non-const,这个只有const-cast才能够办到
  • reinterpret_cast意图执行低级转型,实际动作及结果可能取决于编译器,这也就表示它不可移植。例如将一个pointer to int 转型为int。这一类转型在低级代码以外很少见

5,new和malloc的区别

c++ new 与malloc有什么区别 - ywliao - 博客园

  • new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这取决于operator new 的实现细节。自由存储区不仅可以是堆,还可以是静态存储区,这都看operator new在哪里为对象分配内存。
  • new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。
  • new内存分配失败时,会抛出bac_alloc异常,它不会返回NULL;malloc分配内存失败时返回NULL。
  • 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算,而malloc则需要显式地指出所需内存的尺寸。

 5,C++仿照标准字符串类string,设计一个自己的字符串类String

C++仿照标准字符串类string,设计一个自己的字符串类String_之古的博客-CSDN博客_设计一个字符串类string

 主要的任务

  • 1)数据成员是字符指针,可自动适应不同的串长度。
  • 2)串复制,既可使用字符串常量进行复制,也可以使用其他的字符串对象进行复制。
  • 3)串赋值。既可赋值为字符串常量,也可以赋值为使用其他的字符串对象。
  • 4)串连接。重载“+”和“+=”。
  • 5)重载下标运算符[]。
  • 6)串比较。重载“==”和“<”。
  • 7)字符串输入和输出。重载“>>”和“<<”。
#include<iostream>
#include<cstring>
using namespace std;
class String {
private:char * Pstr;
public:String(const char* p = NULL) {if (p == NULL) {Pstr = new char[1];*Pstr = '\0';} else {Pstr = new char[strlen(p) + 1];strcpy(Pstr, p);}}String(const String& s): Pstr(new char[strlen(s.Pstr) + 1]) {strcpy(Pstr, s.Pstr);}~String() {if (Pstr)delete[] Pstr;}String& operator=(const String& s) {if (Pstr == s.Pstr)return *this;else if (NULL == this) {delete Pstr;Pstr = new char[strlen(s.Pstr) + 1];strcpy(Pstr, s.Pstr);} else {strcpy(Pstr, s.Pstr);}return *this;}friend ostream & operator<<(ostream &out, const String &s) {out << s.Pstr;return out;}friend istream & operator >>(istream &in, String &s) {in >> s.Pstr;if(in)return in;}String operator+(const String &s2) {char *p=new char[strlen(Pstr) + strlen(s2.Pstr)+1];p=strcat(Pstr,s2.Pstr);return String(p);}void operator+=(const String &s2) {strcat(Pstr, s2.Pstr);}char& operator[](int n) {return Pstr[n];}int Length() {int n=strlen(Pstr) ;return n;}bool operator==(const String &s2) {return strcmp(Pstr, s2.Pstr) == 0;}bool operator<(const String &s2) {return strcmp(Pstr, s2.Pstr) < 0;}
};

6,文件编译的过程

C 文件编译的过程_sxy19930313的博客-CSDN博客

gcc编译程序的四个阶段(预处理-编译-汇编-链接)_Aikenlan的博客-CSDN博客

预编译 :

  • 处理所有的注释 , 以空格代替
  • 将所有的 #define删除 ,并且展开所有的宏定义
  • 处理条件编译指令#if、#ifdef、#elf、#else、#endif
  • 处理#include,展开被包含的文件
  • 保留编译器需要使用的#pragma指令
  • 预处理指令:gcc    -E  file.c  -o  hello.i     

编译

  • 对预处理的文件进行一系列词法分析、语法分析和语义分析
    • 词法分析主要分析关键字,标识符,立即数等是否合法             
    • 语法分析主要分析表达式是否遵循语法规则                 
    • 语义分析是在语法分析的基础上进一步分析表达式是否合法        
  • 分析结束后进行代码优化生成相应的汇编代码文件            
  • 编译指令:  gcc   -S  file.c  -o hello.s

汇编

  • 汇编器将汇编代码转变为机器可以执行的指令  
  • 汇编阶段生成 二进制代码
  • 每个汇编语句几乎都对应一条机器指令 汇编指令:gcc  -c file.s  -o  hello.o             

链接

  •    链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接
  • 静态链接:在编译期间完成,链接文件是以目标文件为单位的,如果有多个可执行文件调用同一个函数,则该函数的目标文件就会生成多个副本,并与多个可执行文件一一对应。这样就造成来了内存空间得了浪费,同时函数库的更新也很麻烦。优点是程序在运行的时候已经包含了所有的程序,运行速度较快

  •  动态链接:在运行期间完成

 7,并行和并发的区别

面试必考的:并发和并行有什么区别? - 云+社区 - 腾讯云

  • 并发一段时间内  实现两个程序的执行  不可以同时
  • 并行是同一时刻  实现两个程序的执行  可以同时

 8,中断

为什么需要中断?_jwy2014的专栏-CSDN博客_为什么要使用中断

什么是中断,为什么要用中断?_old-li的blog-CSDN博客

9,逻辑地址 和 物理地址的区别

物理地址、虚拟地址和逻辑地址之间的区别_SoaringLee_fighting的技术专栏-CSDN博客

  • 物理地址就是,机器内主存的地址,包括RAM和ROM
  • 逻辑地址就是,程序运行在内存中,使用的地址。
  • 虚拟地址就是,cpu支持的内存空间远远大于机器主存的大小,这些多出来的空间对于程序来说是可以用的,这个时候的所有地址都称为虚拟地址

补充

C++ Primer:常量引用、引用常量、常量指针、指针常量 - 简书

  • 函数指针  指针函数
  • 常量指针  指针常量
  • 数组指针  指针数组
  • 常量引用  引用常量

函数指针 和  指针函数的区别

C++ 函数指针和指针函数-CJavaPy

指针函数

  • 指针函数本质是返回指针的函数,其本质是一个函数,返回的类型是指针。int *myfun(int x,int y);  在函数名前面多了一个*号,而这个函数就是一个指针函数。其返回值是一个 int 类型的指针。
#include <iostream>
using namespace std;
#include<string.h>int *newAdd(int a, int b); // 声明指针函数int main() {int *p1 = NULL;p1 = newAdd(1, 2);printf("p1 = 0x%x \n", p1);printf("*p1 = %d \n", *p1);getchar();return 0;  
}
int *newAdd(int a, int b) {int *p = (int *)malloc(sizeof(int));memset(p, 0, sizeof(int));printf("函数内:p = 0x%x \n", p);*p = a + b;printf("函数内:*p = %d \n", *p);return p;
}
  • 在调用指针函数时,需要一个同类型的指针来接收其函数的返回值。 也可以将其返回值定义为 void*类型,调用时强制转换返回值为想要的类型。

函数指针

  • 函数指针,其本质是一个指针变量,该指针指向这个函数。函数指针就是指向函数的指针。声明格式如下:int (*myfun)(int x,int y);
#include <iostream>
using namespace std;
int add(int x,int y){return x+y;
}
int sub(int x,int y){return x-y;
}
//函数指针
int (*myfun)(int x,int y);
int main(int argc, char *argv[])
{//第一种写法myfun = add;cout << "(*myfun)(1,2) =  " <<  (*myfun)(1,2) << endl;//第二种写法myfun = &sub;cout << "(*myfun)(5,3) = " <<  myfun(5,3) << endl;return 0;
}

区别

1)定义不同

  • 指针函数本质是一个函数,其返回值为指针。
  • 函数指针本质是一个指针,其指向一个函数。

2)写法不同

  • 指针函数int* fun(int x,int y);
  • 函数指针int (*fun)(int x,int y);
  • 函数名带括号的就是函数指针,否则就是指针函数。

3)用法不同

  • 一个是函数,一个是变量

对特定地址进行赋值

如何给地址赋值?(转) - 张凌001 - 博客园

C语言中给指定的内存地址赋值(通过指针)_phenixyf的专栏-CSDN博客

  • 对于i分配的地址具有访问权限 
    int i = 0;std::cout << &i << std::endl;int *ptr = (int *)(&i);*ptr = 55;std::cout << *(int *)(&i)<<std::endl;

 全局变量和静态全局变量 区别

全局变量和静态全局变量_calm_peng-CSDN博客_静态全局变量

静态函数和普通函数的区别

static函数与普通函数的区别:用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。因此定义静态函数有以下好处:<1> 其他文件中可以定义相同名字的函数,不会发生冲突。<2> 静态函数不能被其他文件所用。

计算机网络

OSI七层网络模型,以及每层对于的网络协议

OSI七层模型及对应的网络协议_小麻花-CSDN博客_七层模型对应的协议

这里写图片描述

https的底层实现,原理是什么?

HTTPS底层实现原理_风某人~Wind的博客-CSDN博客_https的底层原理

  • 证书(CRT文件,里面包含了公钥,CA的签名,过期时间,申请人提交的信息)
  • https = http+SSL 12次

TCP  UDP 区别

一文搞懂TCP与UDP的区别 - Fundebug - 博客园

UDPTCP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件传输


 

Linux

Linux 驱动模型 

Linux驱动学习:应先了解驱动模型 - 知乎

[Linux]互斥机制(中断屏蔽、原子操作、自旋锁、信号量)

[Linux]互斥机制(中断屏蔽、原子操作、自旋锁、信号量)_Younix凌乱的草稿本-CSDN博客

Linux进程之间通信方式

进程间8种通信方式详解 - 云+社区 - 腾讯云

进程间通信的方式——信号、管道、消息队列、共享内存 - 0giant - 博客园

用户态和内核态的区分

用户态和内核态的区别 - Gizing - 博客园

查看linux的位数 不能使用sizeof

查看当前linux系统位数 - controlV - 博客园

  • uname -a
  • uname -r
命令1:getconf LONG_BIT
结果:64命令2:uname -a
结果:Linux Test004MUJUP 2.6.32-431.23.3.el6.x86_64 #1 SMP Wed Jul 16 06:12:23 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux命令3:uname -r
结果:2.6.32-431.23.3.el6.x86_64命令4:cat /proc/version
结果:Linux version 2.6.32-431.23.3.el6.x86_64 (mockbuild@x86-027.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Wed Jul 16 06:12:23 EDT 2014

参考资料

  • C++进阶问题-智能指针&继承&sizeof - 杭河苇 - 博客园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑屏保海底世界_水下栖息地:人类能否在海洋中居住?真的有人住在海底吗?...

慧缘开运讲坛&#xff1a;真的有人住在海底吗&#xff1f;对于这个问题&#xff0c;你肯定首先会想到美人鱼&#xff0c;对于未知的事物&#xff0c;我们并没有证据证明它们的存在。人类如何居住海底呢&#xff1f;那首先需要一个密闭的生态环境供进入海底的人生活。我们可以称…

中科大 计算机网络16 P2P应用

P2P架构 每一个节点即是客户端又是服务器&#xff0c;分布式的&#xff0c;可靠性高 钉钉&#xff0c;QQ打电话采用P2P的方式 文件分发&#xff1a;C/S和P2P 上载&#xff1a;客户端向服务器发送文件 下载&#xff1a;客户端从服务器拉取文件 C/S&#xff1a; 所有的客户端…

密码学专题 SSL协议

SSL协议为不同的高层协议(http、FTP)提供安全服务SSL握手协议、SSL修改密文协议和SSL告警协议的目的是为了 管理 和SSL相关的密文交换连接&#xff1a;两台主机之间提供特定类型的数据传输&#xff0c;是点对点的关系&#xff1b;连接是短暂的&#xff0c;每一个连接都会和一个…

1709 ltsb 内存占用_深挖Python的内存管理机制:垃圾回收机制

Python 程序在运行时&#xff0c;需要在内存中开辟出一块空间&#xff0c;用于存放运行时产生的临时变量&#xff0c;计算完成后&#xff0c;再将结果输出到永久性存储器中。但是当数据量过大&#xff0c;或者内存空间管理不善&#xff0c;就很容易出现内存溢出的情况&#xff…

Python学习11 继承

面向对象三大特征 继承 Python多继承&#xff0c;默认从左到右依次继承&#xff0c;使用&#xff0c;隔开 默认继承object类 #继承了object类&#xff0c;可以省略 class m:def eat(self):print(m)class m2(object):def eat(self):print(m)继承的注意事项 class A(object):de…

qq浏览器网页翻译_iOS 14中直接在Safari浏览器中翻译网页的方法!

在 iOS 14 中&#xff0c;苹果推出了「翻译」的应用程序&#xff0c;可以实时翻译数种不同的语言。同时&#xff0c;Safari 浏览器也新增了翻译功能。借助新的网页翻译功能&#xff0c;Safari 会根据设备的首选语言列表自动检测书否需要翻译访问的网页内容&#xff0c;以便继续…

密码学专题 相关概念的解析 对称算法|算法的安全性|非对称算法存在的问题|单向散列函数|数字签名的弊端|密钥交换

对称加密算法 对称加密算法又可以分成流加密算法和块加密 算法。流加密算法又称为序列加密算法或序列密码&#xff0c;它每次只对明文中的单个位或单个字节 进行加密操作。这种算法的优点是能够实时进行数据传输和解密&#xff0c;缺点是抗攻击能力比 较弱。块加密算法又称为分…

java 交换两个数的值(临时变量,加减,异或)

临时变量 开发中一般使用此方式 加减 第二种写法&#xff1a; //3.使用加减d1d1d2;d2d1-d2;d1d1-d2;System.out.println("d1"d1"\td2"d2);异或&#xff08;位运算符&#xff09; 原理 ^异或:相同为0,不同为1 总代码 class ExchangeNumber {public st…

51单片机下载完程序后不亮_程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍...

单片机是一种可编程控制器&#xff0c;搭好硬件电路后&#xff0c;可以利用程序实现很多非常复杂的逻辑功能&#xff0c;与纯硬件电路相比&#xff0c;简化了硬件外围的设计、方便了逻辑的设计、丰富了逻辑的输出。不同厂家的单片机需要不同编程IDE来实现编程。在学习单片机之前…

java 使用三元运算符和if-else获取两个和三个数中的最大值

三元运算符格式 三元运算符:获取两个数中最大值 三元运算符:获取三个数中最大值 三元运算符:总代码 //案例1&#xff1a;获取两个数中最大的数int num178;int num256;int max1(num1>num2)?num1:num2;System.out.println("max1"max1);//max178//案例2&#xff1a;…

密码学专题 鉴别协议|实际应用的混合协议

鉴别是指确定一个人的身份&#xff0c;即确定一个人是否是他所宣称的身份 基于口令的鉴别协议 口令是最常用和最常见的鉴别协议。当登录一台重要的计算机时&#xff0c;它会要求输入用户 名和密码&#xff0c;用户名代表你的身份&#xff0c;口令起鉴别作用&#xff0c;如果你…

如何用texstudio下载ctex_公众号素材库视频如何下载,用这种方法就可以哦

随着微信的不断崛起&#xff0c;它现在不仅仅是一个交流软件还包含着很多功能&#xff0c;其中里面就有各种微信公众号&#xff0c;我们可以在公众号上找到许多有用的视频&#xff0c;今天拓途数据就告诉大家公众号素材库视频如何下载吧。 如何下载微信公众号里的视频文件 复制…

java 进制转换 十进制转二,八,十六进制

十进制转其他进制 因为在java中位运算符是直接对数值的二进制数进行操作的 并且 写的是二进制数在输出和操作时是以十进制数的形式&#xff1b; 所以十进制转二&#xff0c;八&#xff0c;十六进制&#xff1b;就已经实现了二进制&#xff0c;八进制&#xff0c;十进制&#x…

密码学专题 密钥生成|分组加密的模式 ECB|CBC|CFB|OFB

密钥生成 如何安全地生成密钥。即如何生成可信任的密钥&#xff0c;保证用户得到的密钥是安全的&#xff0c; 生成密钥的机器或程序是可信的。如何生成安全的密钥。安全的密钥没有统一准确的定义&#xff0c;但一般来说是指密钥抗 猜测和抗穷举等针对密钥攻击的能力。涉及密钥…

excel高级筛选怎么用_Excel表格中高级筛选的优点以及常用方法介绍

在Excel表格中普通的数据筛选只能满足一些基本的筛选要求&#xff0c;这篇文章为朋友们总结一下高级筛选的优点以及常用方法。一.与普通筛选相比&#xff0c;高级筛选可以使用比较运算符。在下图中要筛选性别为男并且评分大于90的人员。如果使用普通筛选需要一个个的勾选成绩大…

STL源码剖析 第二次温习 细节审核

临时对象的产生 临时对象也叫做 无名对象&#xff0c;(使用pass by value的方式会引发copy的操作&#xff0c;于是产生一个临时的对象)&#xff0c;造成效率的负担&#xff0c;但是可以可以制造一些临时对象在型别的后面 直接加上() 并可以指定初始数值&#xff0c;相当于调用…

java 彩票游戏

题目 Math.random()获取随机数 Math.random()返回的是一个[0.0,1.0)的doule类型的数 所以&#xff0c;获取0-9&#xff1a;(int)Math.random()*10–> [0,10) 获取0-10&#xff1a;(int)Math.random()*101–> [0,11) 获取10-99&#xff1a;(int)Math.random()9010–> […

python异常处理_Python入门 断言与异常处理

一、断言断言&#xff0c;可以理解为判断是否断开的预言。assert 表达式 , 描述表达式为我们的预期结果&#xff0c;当表达式的结果为False时&#xff0c;抛出 AssertionError 异常&#xff0c;如无异常捕获程序遇到异常时直接结束运行。反之&#xff0c;表达式结果为True 程序…

百度关键词排名查询源码_章丘百度霸屏总部,关键词排名腾沃云

上海保沃腾沃云为您详细解读URiIr章丘百度霸屏总部的相关知识与详情&#xff0c;做网站SEO优化文章内容优化效果已经十分明显。内容的量量关于网站的整体量量很重要。通过关键字阐发&#xff0c;陈某们晓得需要环绕关键字编写网页。使您的内容的重要根底是您对网页筹算描述的卖…

密码学专题 数据填充的方式|序列加密的方式

电子密码本模式和加密分组链接模式的分组算法都要求加密输入的分组是固定长度 的&#xff0c;但是大多数输入明文可能都不是分组长度的整数倍&#xff0c;也就是说&#xff0c;最后一个分组一般来 说是不足一个分组长度的。为了使分组加密算法能够正常工作&#xff0c;通常使用…