6-15笔试总结
第一场笔试是参加某cloud公司的,全是大题。
题目如下:
(1)数字签名的意义以及给出一个实现方案。
发送方使用自己的私有要是进行加密,然后接收方利用对方的公钥,进行解密。
报文的发送方用一个哈希函数从报文文本中生成报文摘要(散列值)。
发送方用自己的私人密钥对这个散列值进行加密。然后,这个加密后的散列值将作为报文的附件和报文一起发送给报文的接收方。
报文的接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密。
如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。
意义:1能确认消息是否是发送方发出的,2确认消息的完整性。
(2)一道求概率分布的问题。
(3)两个线程乱序执行,求输出结果的题目。
(4)最大子序列和问题。
(5)一道考察眼力的问题(没多大意义)
(6)线程和进程之间的区别。
(7)递归版本的qsort 没有使用partition函数。这个题目重点解决一下,是第一次遇到。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std ;
/**//*递归版本的qsort , without partition*/
void qsort(int * arr , int l , int h)
{
int i = l ;
int j = h ;
int key = arr[(i + j) >> 1] ;
while(i < j)
{
for(;(i < j) && (arr[i] < key) ; i++) ;
for(;(i < j) && (arr[j] > key) ; j--) ;
if(i <= j)
{
int temp = arr[i] ;
arr[i] = arr[j] ;
arr[j] = temp ;
i++ ;
j-- ;
}
}
if(j > l) //结束时,i > j
qsort(arr , l , j) ;
if(i < h)
qsort(arr , i , h) ;
}
int main()
{
int a[] = {5 ,2 ,7 ,9 ,3 ,6 ,2 ,6 ,11 ,1} ;
qsort(a , 0 , 9) ;
for(int i = 0 ; i < 10 ; i++)
{
cout<<a[i]<<" " ;
}
getchar() ;
return 0 ;
}
以上注意一点,在for循环中,必须是 arr[i] < key ,arr[j] > key 。
不能出现相等,必须保证l -> j之间均小于等于key,而 i->h 之间的数都大于key
然后进行递归处理。