阿里云面试复盘

Jul 27, 2020


项目有关问题

  • core文件实时压缩工具的实现背景与原理
  • backtrace工具实现的原理
  • 程序打包与发布优化是如何实现的
  • 云桌面虚拟化的业务场景是怎样的
  • 硬件安全、可信加载的实现原理
  • 现在项目中的最大问题是什么,如何优化解决
  • 项目中遇到的最大挑战是什么,哪个项目让你最有成就感
  • 你现在的工作对阿里云的业务有何贡献

价值观

  • 什么是成功
  • 什么是你不可接受的
  • 周边的人是怎么影响你的

知识的深度与广度

  • ELF的段(section)是否有数量限制
  • 形参 是否保存在栈中
  • linux 内核是怎么管理内存的
  • 有了伙伴算法,为什么还需要slab
  • kmalloc与vmalloc的区别
  • rpm yum deb包
  • shell命令如何调试
  • df与du的区别
  • ifconfig与ifup的区别
  • 自旋锁与互斥量的区别
  • free 中的buf与cache区别
  • tcp协议的连接状态,什么时候进入TIME_WAIT状态
  • uboot启动内核过程
  • x86_64的linux服务器panic时如何调试
  • crash命令使用细节
  • x86架构与arm架构的差别
  • 如何设计一个高可用的系统

编程相关

判断大端还是小端

int IsBigEndian(void)
{
    short num = 0x1234;
    char *ptr = #
  
    if (ptr[0] == 0x34)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

memcpy的实现,源地址与目的地址有重叠

void * mymemncpy(void* src, void* dst, int len)
{
    if (NULL == dst || NULL == src)
    {
        return NULL;
    }
  
    char* dstTmp = char*(dst);
    char* srcTmp = char*(src);
    int i;
  
    //重叠部分处理
    if (dstTmp > srcTmp && dstTmp < srcTmp + len)
    {
        for (i = len -1; i != -1; --i)
        {
            dstTmp[i] = srcTmp[i];
        }      
    }
    else
    {
        for (i = 0, i < len; i++)
        {
            dstTmp[i] = srcTmp[i]; 
        }
    }
  
    return dst;
}