加入收藏 | 设为首页 | 会员中心 | 我要投稿 百科站长网 (https://www.baikewang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

C++ 2022常见知识点3

发布时间:2022-11-11 11:19:29 所属栏目:安全 来源:
导读:  就是用户在浏览器(客户端)里输入一个HTTPS网址,然后连接到服务器的443端口。

  服务端配置

  采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别是自己颁发的证书
  就是用户在浏览器(客户端)里输入一个HTTPS网址,然后连接到服务器的443端口。
 
  服务端配置
 
  采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(StartSSL就是一个不错的选择,有1年的免费服务)。
 
  传输证书
 
  这个证书其实是公钥,只是包含很多信息,如证书的颁发机构,过期时间等。
 
  客户端解析证书
 
  这部分工作是客户端的TLS完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,则会生成一个随机值,然后用证书对该随机值进行加密,把随机值当作锁头锁起来,这样除非有钥匙,不然是看不到所背后的内容的。
 
  传输加密信息
 
  这部分传输的信息是用证书进行加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密。
 
  服务端解密信息
 
  服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
 
  客户端解密信息
 
  客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
 
  将14拆成几个自然数的和,再求出这些数的乘积,可以求出的最大乘积是多少?
 
  乘积最大是3*3*3*3*2=162,当分成的数尽可能接近e时,其乘积最大。
 
  两个圆,半径分别为1cm、3cm,小圆在大圆外,绕大圆圆周滚动一周,请问小圆一共旋转了几圈?
 
  路程上虽说小圆的周长是大圆三分之一,但是小圆绕大圆圆周滚动一周这一圈也要算进去,所以3+1=4。
 
  一个单核多道批处理系统中仅有 P1 和 P2 两个作业, P2 比 P1 晚10ms到达,它们的计算和 I/O 操作顺序如下:
 
  若不考虑调度和切换时间,则完成两个作业需要的时间最少是?
 
  注意:这道题中,P1和P2是不能同时进行 IO 的,正确的流程为:
 
  P1 计算40ms;P1 进行 120ms IO(同时P2进行30ms计算);P2进行 60ms IO(同时 P1进行20ms计算);P2 进行 40ms 计算。总计:40+120+60+40=260ms。 已知公式:DONALD + GERALD = ROBERT
 
  以上共有10个字母,每一个字母都代表阿拉伯数字中 0-9 中的一个,已知D = 5服务器内容加密,请计算出 N字母代表的数字。
 
  二分查找要求查找的数组必须已排序 已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项u的运算是?
 
  TIPS:广义表除了头之外其它全为尾,只能取头(head)或除头以外的所有元素(tail)。
 
  给定n个权值,其对应哈夫曼树的结点总数为?
 
  哈夫曼树没有度为1的结点,且权值所在结点都是叶子结点。二叉树中度为2的结点数比叶结点少1,即由权值总数为n,知道叶子结点数为n,又度为2的结点为n-1个,故共有n+n-1=2n-1个。
 
  n 个顶点,m 条边的全连通图,至少去掉几条边才能构成一棵树?
 
  n个顶点的树一定有n-1条边,所以需要发去掉m - (n - 1) = m - n + 1条边。
 
  先序遍历序列为a,b,c,d的不同二叉树的个数为?
 
  可参考:
 
  卡特兰数:C(2n,n)/(n+1) = 70 / 5 = 14
 
  给定一个m行n列的整数矩阵(如图),每行从左到右和每列从上到下都是有序的。判断一个整数k是否在矩阵中出现的最优算法,在最坏情况下的时间复杂度是?
 
  效果图
 
  杨氏矩阵查找算法。
 
  bool stepWise(int mat[][N_MAX], int N, int target,   
                int &row, int &col)
  {   
    if (target < mat[0][0] || target > mat[N-1][N-1])
   return false;   
    row = 0;   
    col = N-1;   
    while (row <= N-1 && col >= 0)
    {   
      if (mat[row][col] < target)   
        row++;   
      else if (mat[row][col] > target)   
        col--;   
      else   
        return true;   
    }   
    return false;   
  }        
  有一个小白程序员,写了一个只能对5个数字进行排序的函数。现在有25个不重复的数字,请问小白同学最少需要调几次该函数,才可以找出其中最大的三个数? 直线上的点
 
  参考链接:
 
  题目一:给定N个二维坐标点(包含整形x,y),找到位于同一条直线上点的最大个数。
 
   int Gcd(int a, int b)
   {
   if (0 == b)
   {
   return a;
   }
   else
   {
   return Gcd(b, a % b);
   }
   }
   int max(int a, int b) { return a > b ? a : b; }
   int maxPoints(vector<Point>& points)
   {
   int ans     = 0;
   int cnt     = 0;
   int overLap = 0;
   int dx      = 0;
   int dy = 0;
   int g = 0;
   for (int i = 0; i < points.size(); i++)
   {
   cnt = 0;
   overLap = 0;
   map<pair<int, int>, int> line;
   for (int j = i + 1; j < points.size(); j++)
   {
   dx = points[i].x - points[j].x;
   dy = points[i].y - points[j].y;
   if (0 == dy && 0 == dx)
   {
   overLap++;
   continue;
   }
   g = Gcd(dx, dy);
   dx /= g;
   dy /= g;
   cnt = max(cnt, ++line[make_pair(dx, dy)]);
   }
   ans = max(ans, cnt + overLap + 1);
   }
   return ans;
   }
  题目二:给定N个三维坐标点(包含整形x,y,z),找到位于同一条直线上点的最大个数
 
  3D的情况是类似的,唯一不同是多个维度,所以斜率(准确得说是方向向量)用(dx,dy,dz)表示。
 
   struct Point
   {
   int x;
   int y;
   int z;
   Point() : x(0), y(0), z(0) {}
   Point(int a, int b, int c) : x(a), y(b), z(c) {}
   };
   int gcd(int a, int b)        { return b == 0 ? a : gcd(b, a % b); }
   int gcd(int a, int b, int c) { return gcd(gcd(a, b), c); }
   int max(int a, int b)        { return a > b ? a : b; }
   int maxPoints(vector<Point>& points)
   {
   int ans = 0;
   for (int i = 0; i < points.size(); i++)
   {
   int cnt = 0, overLap = 0;
   map<pair<pair<int, int>, int>, int> line;
   for (int j = i + 1; j < points.size(); j++)
   {
   int dx = points[i].x - points[j].x;
   int dy = points[i].y - points[j].y;
   int dz = points[i].z - points[j].z;
   //判断两点是否重合
   if (dx == 0 && dy == 0 && dz == 0)
   {
   ++overLap;
   continue;
   }
   //计算最简方向向量并存入map容器中,同时更新cnt
   int g = gcd(dx, dy, dz);
   dx /= g;
   dy /= g;
   dz /= g;
   cnt = max(cnt, ++line[pair<pair<int, int>, int>(pair<int, int>(dx, dy), dz)]);
   }
   //统计该基准点下的最大共线点数量
   //cnt+重合点+基准点自身
   ans = max(ans, cnt + overLap + 1);
   }
   return ans;
   }
 

(编辑:百科站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!