深信服2021秋招笔试题

深信服的笔试跟大厂不太一样,除了编程题,还有选择题、填空题,额外考察离散数学、C语言、数据结构、算法等知识点。编程题比较简单(虽然调了很久...
 

选择题

  • 双向链表删除节点操作
  • lowbit()代码补全:x&(-x)
    用来判断2次幂的整数:x&(-x) == x
  • 复杂度分析
for (int i=0;i<n;i++) {
      int j=1;
      while (j<i) {
            int k = j+3;
            j += k;
      }
}
  • 命题逻辑,A、B、C三个人的话只有一个是真话,简单推导一下
  • 小学奥数称球问题

填空题

  • 根据二叉树先序、中序序列,求后序
  • C语言union、struct字节对齐 (答错了,回头再看看)
union DATE{
    long l;
    char c[10];
    int i;
};

struct st {
    int i;
    union DATE date;
    double d;
};

// 求 sizeof(struct st) + sizeof(union DATE)
  • 考察C语言传值与传指针
    写出代码运行结果
  • 考察C语言数组、数组指针
    array表示数组的首地址,与&array指向同样内存地址
    前者加一移动元素地址大小,后者则是移动整个数组内存大小,有点类似多维指针
    例如:
    char ch[3][16]; char (*p)[16] =ch; p++; //p++后,p指向ch[1][0];

p++跳转的单位是其指向的数据类型,如果指针指向一般数据类型,则++跳转到下一地址;如果指针指向多维数组的一行,++则跳转到下一行

int array[5] = {1, 2, 3, 4, 5};
int *p = (int *)(array + 1);
int *q = (int *)(array + 1);
int *r = (int *)(&array + 1);
printf("%d %d %d
", *p, *(q+1), *(r-1));

// 输出:2 3 5
  • 剩下忘了

编程题

  • 对数组元素操作,该元素不变,其他元素+1,问最少进行多少次操作后,所有元素相同
    思路:相当于对操作的元素减1,全部都减到跟最小元素相同即可
  • 替换数字序列中的数字,题目没说明是(0~9)
    原始序列s (1<=len(s)<=1000000)
    n次操作a b,把数字a替换为b (1<=n<=1000000)
    思路:弄清楚0~9分别最后被替换成哪些数字即可

编程题都A了,问题应该不大 _

原文地址:https://www.cnblogs.com/izcat/p/13562709.html