常见的面试题汇总(持续更新)

Get与Post之间的区别

因为Get和Post都是Http里发送协议的两种方法。它们都是TCP连接,所以它们做的事情都是一样的,如果非要给Get加上requeat body,给Post带上url参数,在技术上都是可行的。
对于Get请求,浏览器会将http header和data一起发送给服务器。
而Post请求是先发送header,得到服务器的相应后,再发送data。
以及传输数据大小、安全性方面的区别。

同步通信与异步通信

异步通信就是发送方任意时刻都可以发送数据,前提是接收方要做好接收数据的准备。因为发送方的不确定性,所以接收方要时时刻刻准备接收数据,同时由于每次发送数据时间间隔的不确定性,所以每次发送的时候都要用明确的界定符来标识数据的开始和结束位置。( 不需要发送端与接收端时钟同步,发送端发送数据后,可以隔任意时间长后再发数据)

同步通信就是在通信之前需要先建立同步,即要使用相同的时钟频率,发送方的发送频率要与接收方的接收频率相同。

它们之间的区别:发送接收方时钟频率、发送数据的表现形式(同步:比特流、异步:字符)、(通信效率、简单性都可以从时钟频率那里看出区别)

为什么TCP一定要三次握手

假设它们现在只进行一次握手,这根本不可能的,A发送消息给B,根本不知道B有没有收到,那A就无法判断有没有连接上B。

假设此时它们只进行二次握手,A发送消息给B,等待B的回应,但是现在因为网络延迟的原因没有及时发送给B,A在一段时间后没有收到B的回应消息,会再次发送同样的消息给B。现在网络不延迟了,B会收到A的两个消息,它会为这两个消息申请资源,然后分别返回SYN给A,但对于A来说,第一个SYN已经是过期了的,它不再理会。而B不知道第一个过期了,B始终维护着那个连接,这就会造成资源浪费。

操作系统执行可执行程序时,内存分配是怎样的

堆区:动态内存分配。如果频繁分配大小不同的内存很容易产生堆内存块。
栈区:由系统自动分配释放,存放函数的参数值、局部变量的值。
全局区(静态存储区):内存在程序编译期间就分配好,这块内存在整个程序运行期间都存在,主要存放全局变量、静态变量等。
文字常量区:他们里面存放的是常量(常量字符串等),不允许修改,程序结束后由系统释放
程序代码区:存放函数体的二进制代码
C和C++内存分配方式记录

堆与栈的对比(从内存分布来看)

1. 管理方式不同:堆由程序员自己进行内存的释放和申请,栈是由编译器控制的。
2. 空间大小不同:堆内存大,几乎没有限制,栈内存较小。
3. 能否产生碎片:堆内存由于是程序员自己动态申请的,频繁的申请和释放不同大小的内存会造成一定数量的内存块。而栈内存是先进后出的,永远都不可能有一个内存块从栈中间弹出,在他弹出之前,在他上面的后进的栈内容已经被弹出,所以之间不可能产生内存碎片。
4. 生长方向:堆空间向着内存地址增加的方向生长,栈空间向着内存地址减少的方向生长。
5. 分配效率:栈是底层的数据结构,底层对栈提供了各种各样的支持以至于栈的分配效率高。而堆是由C++提出的,它的申请内存的过程都会经历一个复杂的算法,去堆里找到适合的内存再返回。

在VS编译器下,为什么成员函数模板不能是虚函数(virtual)

编译器期望在处理类的定义的时候就知道虚函数表的大小,如果允许有类的虚成员模板函数,那么就必须要求编译器提前知道程序中所有对该类的该虚成员模板函数的调用,而这是不可行的。

C++中,重载、重写、重定义的区别

重载在同一作用域内,函数名相同,参数列表不同,返回值可能不同。调用函数名相同的函数,会根据实参的类型和实参顺序以及实参个数选择相应的函数,这就叫做静态联编。

int Add(int a,int b)
{
    return a+b;
}
float Add(float a,float b)
{
    return a+b;
}

重写:重写的前提条件是父类的该函数为虚函数,子类在定义了父类同名虚函数的时候就是称为重写了父类虚函数。
重定义不同作用域内,不构成重写的都为重定义。如果在父类和子类中有相同名字的成员;那么在子类中。会将父类的成员隐藏

乐观锁与悲观锁

乐观锁:当线程进入一个临界区的时候,它会乐观的认为它执行的时候不会有其他线程的影响,所以不需要上锁。
乐观锁的实现:给数据库的表增加一个version字段,每更新一次version+1,。也就是先查询那条记录,获取version字段,当我们需要更新之前,再查询一次,将已经查询的version与刚刚查询的version做比较,如果不相等就不更新,相等就更新再把version+1。

悲观锁:当线程进入一个临界区的时候,它会悲观的认为它执行的时候一定有其他线程的影响,所以需要上锁。
共享锁、排它锁都是悲观锁。

Windows编程中,消息机制如何实现?

  1. 自定义消息
  2. 头文件声明函数
  3. 在消息映射中添加对应关系

两个小数相乘,小数点后位数没有限制,请写出高精度算法
输入 string a, string b; 计算string c=a*b; 返回 c;

  1. 记录a的小数点位置locationA,b的小数点位置locationB,最后c的小数点位置为length(a)+length(b)-locationA-locationB-2
  2. 去掉ab的小数点,变为大整数相乘
  3. 输出c,在刚才记录的c的小数点的位置输出小数点

下面我们看看大整数相乘

void multiply(char* a,char* b,char* c)

{
    int i,j,ca,cb,* s;
    ca=strlen(a);
    cb=strlen(b);
    s=(int*)malloc(sizeof(int)*(ca+cb));
 // strlen(a)的数a * strlen(b)的数b一定少于strlen(a)+strlen(b)的数

// 初始化数组
    for (i=0;i<ca+cb;i++)
{
        s[i]=0;
}
// 各个位上的数分别相乘,并存入相应位的数组成员中(原理类似于小学的两个数相乘的方式)
    for (i=0;i<ca;i++)
        for (j=0;j<cb;j++)
            s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
 //这里为什么不是s[i+j]?而是s[i+j+1]
------为了统一操作,s[0]是用来存放最高位的进位,否则需要分开进行判断

//
 处理有进位的数位
    for (i=ca+cb-1;i>=0;i--)
{
        if (s[i]>=10)
        {
            s[i-1]+=s[i]/10;
            s[i]%=10;
        }
}

// 清除高位的0
    i=0;
    while (s[i]==0)
        i++;
       for (j=0;i<ca+cb;i++,j++)
           c[j]=s[i]+'0';
    c[j]='\0';
    free(s);
}

两个整数集合A和B,求其交集两个整数集合A和B,求其交集。

  • 读取整数集合A中的整数,将读到的整数插入到map中,并将对应的值设为1。
  • 读取整数集合B中的整数,如果该整数在map中并且值为1,则将此数加入到交集当中,并将在map中的对应值改为2。通过更改map中的值,避免了将同样的值输出两次。

UDP协议通信时如何得知接收方有接收到包

发送方在发送包的时候给数据包加上ID信息,在发送数据时要把这个包暂时保存在本地。接收方接收到包的时候将ID发回给发送方,发送方就知道包发送成功。

类的静态成员函数为什么不能调用非静态成员

类的员静态成员函数在类加载的时候就会分配内存员,而类的员非静态成员只有在类实例化员之后才会存在,所以我们在静态成员函数里调用非静态成员就相当于拿一个已经存在的去调用一个未知的东西。

静态链接与动态链接的区别

动态链接是把调用函数的dll模块链接进程序,在程序运行的时候才到dll下找到需要相应的函数代码。该dll不会包含在生成的exe中,可以在exe中动态卸载和引用这个dll文件。
静态链接是把所有的代码和数据都复制到本模块中,也就是生成的exe里存在这些代码,运行就不需要库了。

死锁产生的必要条件

互斥:资源不能被共享,只能同一个进程使用
请求和保存:已经得到资源的进程可以再次申请资源
循环等待:若资源被占用,那该进程就等待在那里,不做其他事
不剥夺:已经分配的资源不能从进程中剥夺

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,101评论 1 32
  • 搬运自牛客网大神总结 extern关键字 extern修饰变量是个声明,此变量/函数是在别处定义的,要在此处引用 ...
    leon4ever阅读 3,658评论 0 9
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,383评论 8 265
  • 图片发自简书App今天,周末,我和小虎都起的很晚。 或许是昨晚,小虎玩的太累了,没有好好吃晚饭,所以,小虎一觉醒来...
    af9e7f7d764d阅读 1,156评论 0 0
  • 路在眼前 又在无尽的那边 雾弥漫夹带着冷冰冰的针 刺破你的我的他的 梦 前面或后面的人带着一个个蓝蓝的幽灵 从我身...
    韶九儿阅读 214评论 0 0