梁越

字节跳动游戏服务端三面面经

0 人看过

做做别人的面试题

一面

1. 小写char转大写char

大写字母AZ的ascii码的范围是65-90
大小写字母的值相差32,所以小写字母的范围是97
122

void change(char source)
{
    return source-32;
}

2. 比较两个char数组是否相同

直接循环

bool compare(char s[], char t[])
{
    if (sizeof(s) != sizeof(t)) return false;
    for (int i = 0; i < sizeof(s); i++)
    {
        if (s[i] != t[i]) return false;
    }
    return true;
}

3. printf过程

???这想问的啥

大概是printf底层调用了puts,而puts使用的是系统调用

4. c++进程异常退出有哪些可能

  • 程序错误,访问非法内存,比如空指针,空路径,指针释放失败
  • 程序主动结束,kill()等
  • 其他进程发送终止信号

5. 重复delete出错原因

重复delete会抛出异常,指针存的是地址,所以因为第一次delete后,对应地址的内存内容被清空了,此时指针置空,对一个空指针操作会产生异常

6. 静态库和动态库

静态库一般是.lib文件, 动态库一般是dll文件

静态库是在程序编译时加载,而动态库时程序运行时加载,所以使用静态库的工程体积和占用内存较大,而动态库的较小

7. 斐波那契数列,数很大时如何优化

这个题目我理解为斐波那契数列如何优化

我会用空间换时间,定义一个数组,保存该轮计算的结果供下次使用,例如

vector<int> record<n+1, 0>;
record[1]=1;
record[2]=1;

int Feb(int n){
    if(record[n]!=0) 
    {
        record[n];
    }
    record[n]=Feb(n-1)+Feb(n-2);
    return record[n];
}

8. 跳表和B+树和红黑树