agora面经

指针和引用的应用场景

linux除了malloc还有那些分配内存的方式

calloc, realloc, alloca

kmalloc, vmalloc

malloc和free的区别

tcp和udp的区别

1)连接方面区别
TCP面向连接(如打电话要先拨号建立连接)。
UDP是无连接的,即发送数据之前不需要建立连接。
2)安全方面的区别
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。
UDP尽最大努力交付,即不保证可靠交付。
3)传输效率的区别
TCP传输效率相对较低。
UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。
4)连接对象数量的区别
TCP连接只能是点到点、一对一的。
UDP支持一对一,一对多,多对一和多对多的交互通信。

udp如何知道丢包没有,如何保证数据都收到了

函数覆盖(重载)和虚函数的区别

虚函数可以在程序运行的时候实现多态(调用虚函数时通过调用虚表来确定最终调用哪个实际函数)可以说是“动态”的多态;而函数重载(即你说的函数覆盖)是在源代码编译的时候,编译器就可以明确调用哪个函数的,实际上是属于“静态”的多态。

举个例子

class fruit
{
public:
    void func()
    {
        printf("fruit\n");
    }
    virtual void vfunc()
    {
        printf("v fruit\n");
    }
};

class apple:public fruit
{
public:
    void func()
    {
        printf("apple\n");
    }
    void vfunc()
    {
        printf("v apple\n");
    }
};

int main(int argc, char* argv[])
{
    fruit* f = new apple(); //注意 f是父类指针

    f->func();
    f->vfunc();
return 0;
}

结果是:
fruit
v apple

例子中func采用了函数覆盖
vfunc采用了虚函数
当fruit类的指针指向一个apple类的对象时,func调用了父类的函数,vfunc调用了子类的函数。

如过是函数覆盖,调用成员函数时,直接调用对象指针所属类的成员函数,例子中为fruit
虚函数的情况下,调用成员函数时,调用的是指向对象的所属类的成员函数,例子中为apple
 

两个字符串,判断字符是否有重复

如果字符不是一个byte而是Unicode这种4 byte怎么办,map(black red tree), hashmap, trie tree, B+ tree,

很多整数找出其中最大的100个,最小堆

找出一堆整数中的中位数,维护一个最大堆和一个最小堆

 

两个字符串表示版本号,写一个函数比较哪个版本更新(无首位零)

//1, 1.0, 1.0.0, 1.0.0.0, 1.0.0.1, 1.1, 1.12345678901234567890

#include
#include

using namespace std;


//1, 1.0, 1.1, 1.2.3   


int cmp(string s1, string s2){
    int m=0,n=0;
    int i=0,j=0;
    
    while(s1[i]!='\0' && s2[j]!='\0'){

        while(s1[i]!='.' && s1[i]!='\0')i++;
        while(s2[j]!='.' && s2[j]!='\0')j++;
    
        
        if((i-m)<(j-n)){
            return 2;
        }
        else if((i-m)>(j-n)){
            return 1;
        }
        else{
            for(int k=0;ks2[n+k]) return 1;
            }
        }
        
        m=++i;
        n=++j;
    }
    
    if(s1[i]=='\0' && s2[j]=='\0')return 0;
    
    else if(s1[i]=='\0'){
        while(s2[j]!='\0'){
            if(s2[j]=='.');
            else if(s2[j]!='0')return 2;
            j++;
        }
        return 0;
    }
    else if(s2[j]=='\0'){
        while(s1[i]!='\0'){
            if(s2[i]=='.');
            else if(s2[i]!='0')return 1;
            i++;
        }
        return 0;
    }
    
}


int main(){

    return 0;
    
}

linux多线程函数用过么

RTOS是如何实现实时性的呢

工作中有没有学到学校里学不到的东西

内核态和用户态是什么

C++11了解多少

右值引用了解么

左值和右值

实时操作系统RTOS和OS有什么区别

采用什么方法保证版本避免revision(回退)

什么变量放在栈上,什么放在堆上

你可能感兴趣的:(agora面经)