CVTE总结
1、关于项目 一:MD5加密和DES加密的区别 咱们先来说说MD5加密好了:白话讲,就是一种算法,这个算法,把一个字符串、文件或者压缩包,进行MD5后,生成一个长度为128bits的串,而这个串可以认为是唯一的 如果有人修改过这个文件、或者压缩包,就会生成新的串,与原来的对比,你就知道被修改过了。 加密过的消息是完整的,是可逆向出来原数据的;但是加密过的摘要不是完整的,是不可逆向的。 MD5 之后的长度问题,肯定是128bits的0和1的串;但是可读性不行,所以改成十六进制,4位二进制表示1位十六进制,所以最后就是32位的十六进制数据。 对于为什么网上有16位的,,,是通过32位进行整理的(比如去除前8位后8位) MD5(message-digest)是生成一段不可逆的字符串或者数值,以此来判断文件是否被修改,来保证文件的安全性和完整性。 总结下MD5的作用:一致性;数字签名;安全访问认证 最后:MD5没有逆向算法;在数据库中不能作为主键的,因为一个MD5加密后的串(值)可以对应多个原始数据 ? DES加密速度快,适合大量数据,但是DES容易破解,一般用3重DES。 实际操作过程中,数据量小,就用非对称加密算法;所以我们一般需要用非对称加密算法来加密对称加密算法的秘钥;然后再用对称加密算法加密大量的数据。 如果在选定了加密算法后,那采用多少位的密钥呢? 一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择。 一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128位即可。 ? 二:移动端进行远程监控如何实现数据传输 ? 三:用excel不用数据库的原因 (1)当时excel比较大众一些,(2)而且我们的数据量也不是很大,(3)当时还有数据处理用excel的公式更容易上手一些,(4)还有,数据库需要SQL等语言方便第三方调用。后边思考了一下,excel的局限性其实也蛮大的,最大的就是数据量的问题,一旦数据量有几十万,excel处理数据就捉襟见肘了。 2、关于基础 数据结构 一:容器的底层实现 简单的得知道吧 vector经常使用,是用数组来实现的,支持快速随机访问。 list也接触过,是用双向链表实现的,支持快速增删。 deque不常见,但是它是由一个中央控制器和多个缓冲区实现的。看起来是像list和vector组成。因为它支持头尾(中间不支持)快速增删,和快速随机访问。 set和map都是红黑树实现的(目前不清楚) 操作系统 一:进程线程的区别 直接总结吧(相应知识后边再继续介绍了解): 地址空间:同一进程的众多线程共享本进程的地址空间;而进程间具有相互独立的地址空间。 资源拥有:同一进程内资源为这个进程内所有线程公有,比如:cpu、io;但进程间的资源独立。 健壮性:一个进程崩溃,在保护模式下,其他进程基本不受影响;但是一个线程崩溃,整个进程都会死掉,所以,多进程要比多线程健壮。 ? ? ? ? ? ? ? ? ?进程切换消耗资源大,所以涉及到频繁的切换时,用线程比用进程好;同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程 执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 线程是处理器调度的基本单位,但是进程不是,是分配和管理资源的基本单位。 ? 何时使用多进程,何时使用多线程? 对资源的管理和保护要求高,不限制开销和效率时,使用多进程。 要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。 (小白白可以观望下,大牛直接略过) 理解进程和线程概念:假如服务器同一时间内只能服务于一个客户端,其他客户端都再那里等待的话,可见其性能的低下,这估计会被客户骂死,因此并发编程应运而生。 并发是网络编程中必须考虑的问题。 实现并发的方式有多种:比如多进程、多线程、IO多路复用。 多进程: 进程是资源分配的基本单位,他是程序运行时的一个实例。 程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。 Linux系统函数 fork函数会返回两次结果,因为操作系统会把当前进程的数据复制一遍,然后程序就分两个进程继续运行后面的代码,fork分别在父进程和子进程中返回,在子进程返回的值pid永远是0,在父进程返回的是子进程的进程id。 例子: pid = os.fork() ==》两个进程,,,首先是子进程返回pid=0,,然后是父进程返回值pid=子进程号 if pid == 0: ? ?print(‘子进程:%s,父进程是:%s‘ % (os.getpid(),os.getppid())) else: ? ?print(‘进程:%s 创建了子进程:%s‘ % (os.getpid(),pid )) 输出结果:
多线程: 线程是cpu调度和分派的基本单位。一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。 计算机网络 一:TCP安全传输的保证机制 (1)确认和重传:接收方接受到报文后会确认;发送方得不到确认会重新发送。 (2)数据校验 (3)数据合理分片和排序:TCP会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。 (4)流量控制 (5)拥塞控制:当网络拥塞时,会减少数据的发送。 来说下实现:滑动窗口 为啥用滑动窗口? 当发送方发送0号报文,还没接受到确认,那么还想发送1-3号报文。想想后边可能还要重传,所以建立缓冲区维护已经发送的报文。 C++ 一:什么时候析构函数使用虚函数 先说析构函数总写成虚函数是没问题的,(推荐) 基类指针指向子类对象,删除这个指针的时候需要析构两个对象,一个是基类的析构,一个是子类的析构。 所以必须把子类和父类的析构函数前(或者只在父类的析构前)加上virtual,,完成继承和多态。 ? 二:设计一个空类,编译器自动生成的函数有哪些(6个) 声明时一个成员函数都不会生成,只会生成一个字节的占位符;需要的时候生成这6个成员:缺省构造函数,析构函数,拷贝构造函数,赋值操作符,取址操作符,this指针 定义时生成6个成员函数:缺省的构造函数,拷贝构造函数,赋值操作符,2个取址运算符,析构函数 数据库服务器这类的没有问。 3、编程 判断一个字符串是对称的。 #include <iostream> #include<windef.h> #include <string.h> using namespace std; bool CheckStr(char* str) { int l=0; int r=strlen(str)-1; while(l<r) { if(str[l]==str[r]) { l++; r--; } else break; } if(l==r || l==r+1) return true; else return false; } int main() { char a[]="abfdcba"; bool flag=CheckStr(a); //BOOL int cout<<flag<<endl; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |