码迷,mamicode.com
首页 > 其他好文 > 详细

3. 23 模拟面试

时间:2020-03-24 23:14:54      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:主机   程序崩溃   pre   多少   网络层   垃圾回收   32位   内存区域   位置   

C++ 父类析构函数为什么必需是虚函数

答:首先要知道的一个知识就是,调用子类构造函数会调用父类构造,调用子类析构会调用父类析构,然后在多态的场景如果一个父类指针指向一个子类造成上行转换,这个时候delete掉这个父类指针,只会调用父类析构而无法析构掉子类的部分,而如果是虚函数的话,那么调用的实际上子类的析构函数,然后会在里面调用父类的析构,就可以实现内存空间全部释放

 

 

用过ping吗, 是什么协议

答:ICMP协议,处于网络层

ICMP是一种配合IP的一种协议,报文经常在传输的时候会遇到各种问题,ICMP协议的话就可以告诉自己是什么错误

ICMP分为差错报告报文和ICMP询问报文

差错报告报文分为  :终点不可达   时间超过    参数问题    改变路由 

询问报文 :回送请求或回答,时间戳请求或回答

 

 

知道syn泛洪攻击吗?有什么处理方案吗?

答:SYN flood:也就是DDos攻击里的一种,利用的是TCP/IP协议栈进行攻击,也就是利用大量SYN请求去申请连接,这个时候服务器如果回答ACK包的话,然后攻击方不再给予回复,然后让服务器一直处于这种半连接状态消耗服务器资源,虽然TCP的处理策略是等待一段时间如果没有回复就放弃这个连接,但是如果大量请求来的时候还是足以在这段时间把服务器资源给耗死

  应对策略:

    SYN cookie :利用发送方给的序列号端口之类的东西产生出一个cookie号给发送方,如果回复cookie+1,那么就连接,否则不连接,但是计算这个cookie也要消耗大量资源,所以不太给力

    SYN  proxy:就是利用防火墙,防火墙去代替服务器去承受这些连接,防火墙发送一个错误的序列号,如果回复RST异常位,那就标记可以进行连接,然后可以和服务器进行连接, 否则不行,但是这个其实也就是用防火墙的高性能代替承受,如果达到防火墙的峰值还是会出现一样的问题,好像还有个华为的   “首包丢弃+源地址识别”    第二个就和这个处理一样,首包丢弃也就是把第一个包扔了,等待发送端再发一次过来,没细看,不知道得不得行  

 

 

.https的连接过程,这个说的非常详细、非对称加密、对称加密、hash、证书、握手信息

答:

 技术图片

 

 

 

c++的拷贝方式 深浅拷贝

答:浅拷贝:也就是单纯的值传递,把自己的值赋给它,但是在类里面有指针的时候就会出现问题,会造成两个指针指向同一个内存区域,然后造成错误

  深拷贝:不再是单纯的值传递,首先自己先建一块儿内存,然后再把它的值给弄过来

 

 

C++、java的区别

1,内存:C++能够使用指针直接去操作内存,自己申请的内存都必须自己释放,java有垃圾回收机制

2,平台无关性: 首先所有文件代码最后都是编译转换成二进制文件的,计算机只能识别二进制,然后不同的二进制的命令是不一样的,所以在一个操作系统上编写的代码转换成二进制后,代码含义指令就可能和自己想象中的不一样,C++就是这样的,java的话它把编译分成了两部分,前端编译和后端编译,前端编译把文件变成.class文件,然后由不同的jvm来复杂把class文件转换成二进制文件,这样就能做到一个操作系统上编写的代码在多个操作系统上都能运行,java语法上也是,不同的操作系统类型字节数都一样的,C++就不一样,16位2  32位4..

 

 

 

进程间通信有哪几种方式

答:

1,管道:无名和有名管道

2,消息队列

3,信号量

4,信号

5,共享内存

6,socket

 

 

 

手写算法题,删除链表倒数第k个节点

答:

思路:先让第一个指针走到第k个节点,然后开头再来个指针,两个指针同时移动,然后等后一个指针到达末尾,前一个指针就是倒数第k个

 

struct node end_k (struct node h,int k){
      struct node *p=h,*q=h;
      for(int i=0;i<k;i++){
            q=q->next;    
      } 
     while(q){
          q=q->next;
          p=p->next;
    } 
    return p;
}    

 

 

 

 

 

 

两个特别特别大的文件,里面存都是数字,找到在两个文件中都存在的数字。如何解决,给出尽量优的算法

答:

如果数字范围不大:可以使用位图(bit_map),用一个二进制位来代表这个整数是否出现过,如C++中的bitset,复杂度O(n)

如果数字范围很大低容错:可以采用布隆过滤器,是位图的进化版,解决了位图受数字大小的限制,先hash到一个桶里,桶里面每个位置也是一个二进制位。O(n)

如果数字范围大不容错:可以采用hash分治,分为对每个文件hash分割成多个小文件,然后再对两个相同的hash的小文件进行查找判断,可以对两个文件都排序一下,然后再O(n)处理,或者可以用map记录

总的复杂度 O(m*nlogn)   m是文件数,n是每个文件里面的数字量,取得合适也就比O(n)差点

 

 

 

new和malloc有什么区别?

答:如果调用失败的话会首先访问用户实现的 set_new_handle函数,一般该函数是去释放些无用的内存,然后再去尝试申请,然后反复调用该函数直到申请成功,主要还是看用户实现的函数怎么样

然后退出的话会抛出bad_alloc异常,异常会直接让程序崩溃,可以选择在 new (nothrow) 这样就不会抛出异常了,或者使用 try catch捕获异常

 

 

假设有一个技能是扇形攻击,如何找到所有攻击内的敌人?

 答:不知道,先给篇博客,明天再学习整一下

https://www.cnblogs.com/miloyip/archive/2013/04/19/3029852.html

 

 

 100个硬币,又一个假币,用两次判断假币重还是真币重 然后就结束了

答:因为我只有两次,我第一次分大概只能知道假币在一边,另一边是作为参照,我先分成两堆50,然后对轻的那堆分成两堆25,如果两堆一样重,说明假币肯定在另一堆50的里面也就是假币重,如果两堆不一样重也就是说假币在这堆,假币轻

 

 

 

有两个栈实现队列

答:将一个栈实现出一个实现进,然后如果出的那个队列当前为空的话,那么将进队列的所有数都放入出队列中,然后进行操作,复杂度O(n)

 

 

TCP流量控制、滑动窗口;

答:流量控制是针对于两端主机的情况而调整的发送量,首先三次握手的时候会交流滑动窗口的大小是多少,然后会有几个指针,分为发送端接收端分别有,待发送包窗口,已发送待确认,待接收等,有快重传等机制,滑动窗口是在移动,然后窗口内的包是可以发送的

 

 

 

快速排序是稳定的吗?为什么不稳定?

答:不稳定-

比如一个例子 2 3(1) 3(2) 3(3) 1(1) 1(2) 1(3)(感谢cch友情赞助的例子

第一轮后就变成了   1(3) 1(2) 1(1) 2 3(3) 3(2) 3(1)

 

 

 

 

 

 

 
 
 

技术图片

 

3. 23 模拟面试

标签:主机   程序崩溃   pre   多少   网络层   垃圾回收   32位   内存区域   位置   

原文地址:https://www.cnblogs.com/Lis-/p/12555770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!