面试过啦 (C++信安)
今天去深圳面试C++实习生, wc过啦!
如之前所言的, 今天去深圳面试, 还下了大雨...
今天早上想看看怎么速通地铁, 然后惊奇的发现, 有可能会迟到10分钟!!!
然后我果断买了更加前的高铁票qwq... (后来发现, 可以改签啊..., 不过改签和退票同样都要手续费...差不多)
然后我是提前了1个小时到公司的地铁站了, 外面下着雨, 我也不想这么早... 就在地铁站等了半个小时在去了=-=
公司太挺近的, 出地铁站, 拐个弯就到了 =-=
然后就是面试了~
首先是自我介绍, 真的不怎么紧张, 有点意外吧, 我以为我会很紧张的. 可能是面试官很有亲和力吧?
我面试的时候表现的几乎都很自然 (后面说我最大的缺点是什么, 我说我比较内向一点, 面试官还说没有呀~ 我觉得你讲得挺好的)
面试问的几乎没有什么技术, 只有一些学校成绩、日常话题(家庭(有没有吃过苦?), 人生目前遇到过压力最大的时候是什么(我答是高三...))
感觉就是相互了解的寒暄吧? 然后就是笔试了, 不是上机, 是真的笔试, 就一张A4两面有题
大概考了 Linux命令 (填空):
- 怎么查看当前Linux发行版 (我不会)
- 怎么查找一个名字叫 xxx 的进程信息 (需要过滤), 我是
top | find "xxx"
这样 - vim怎么不保存退出,
:q!
- vim怎么模糊查找一个东西?
:%s "*"
(这个我应该是写错了) - Linux怎么手动启动图形界面? (命令不会... 而且这么多图形界面, 也没有告诉我名称啊qwq)
好像就这些...
然后问了八股, 进程间通信有什么方法? 管道, 共享内存, 消息队列, 信号量, 套接字, 文件
然后是 gcc 怎么编译 c1.c、 c2.c 为静态库和动态库, 我依旧忘记指令了
直接蒙的 -o -l (静态库), -o -s (动态库), 肯定不对, 思想对了吧qwq
然后是看汇编... 没有看懂 =-=
mov XA, 0;
mov XB, 1;
mov XC, 100;
:A add XA XB;
ine XB;
loop A;
hex;
问上面 XB 输出, 我写是 1
... (上面汇编也是不对, 我按照印象写的)
然后考 gdb 调试, 问如果想进入 OpenJSON::Get_xxx_USB()
函数名字忘了.. 要用什么命令? 我不会, 写的 l OpenJSON::Get_xxx_USB()
还有 makefile 怎么列出所有依赖, 谁会写 makefile 啊? 哥们都是 cv CMake的... 所以也不会...
好像就这些了, 然后C语言题目
#define ADD(x) x + x
printf("%d", ADD(3) * 5);
问输出什么? 这个实际上是常见的坑, 宏是文本替换, 所以是 ADD(3) * 5 == 3 + 3 * 5 == 18
看一眼就知道是考什么了...
然后是
int a = 511;
char* p = (char *)&a + 1;
printf("%d", *p);
题目大概意思是这样吧... 忘记题目了qwq...
考的实际上是对指针理解, 和内存的理解吧, 理解对 指针 + 1
实际上是类型的偏移...
int a = 511 = 0x00 00 01 FF
, 这里可能需要考虑大小端的问题, 但是题目没有说, 我就直接假设了, 因为 1
毕竟好看, 就算是正解了...
因为 (char *)&a
对应是 FF
, 那么 + 1, 是 01
部分. 所以是 1 (其他都不合理, 因为题目没有说=-=)
然后真的直接给我开眼了! 《谭浩强C语言》出现啦!
int i = 0, a[] = {1, 2, 3, 4};
a[++i] = i++;
printf("%d %d %d\n", a[0], a[1], i);
这tm, a[++i] = i++;
是未定义行为啊!, 你让我怎么输出嘛?!
我直接写了未定义行为, 然后还罗列了三种可能的情况
++i
先计算, 并且影响了i++
然后i++
后计算 (这个是这个题的正解, 至少我写这样, 面试官说运行出来就是对的, 不是未定义行为啊, 因为运行出来就是这样...)i++
先计算, 再计算++i
- i++ 和 ++i 同时计算, 这样会抵消一个 ++ (相当于都是对0加加了, 类似于竞争态, 所以只写回了1) 显然不可能, 谭浩强也不会这么傻吧? 排除了, 然后 就写了
1.
的答案...
最后还是指针
void func(int* b, int n) {
int k;
for (k = 0; k < n; k++)
*(b + 1) = *(b + k) + 5;
}
int main() {
int i, a = {2, 4, 6, 8, 10};
func(a, 5);
for (i = 0; i <= 4; i++)
printf("%d, ", a[i]);
}
核心就是 知道指针嘛, 按照语法糖[]规则, 替换一下就是 b[1] = b[k] + 5
, 取最后一个生效, 写出输出就对了...
完全没有C++嘛, 我还准备了手撕多态(静态CRTP、运行时虚表等)的原理, U/S智能指针手撕(S智能指针包含类型擦除的析构!), C++20协程, 计网、多线程、内存、QT 的知识呢qwq... 没有挑战啊qwq
最后一题是写你认为最好的 Linux C/C++ 书籍、网址、代码, 我写是 Linux源码、《C++ 模版》、《C++20编程》(罗能)、小彭大典、PureCpp (虽然拼错了qwq)
最后就是反客为主环节, 我有什么想问的?
如果我来了, 具体是负责什么内容呢? 是否需要培训?
回答是培训1星期, 不用钱, 但是也没有工资, 但是也不考勤, 但是有考核.
负责什么? 没有明确说, 只是举例了: 挖河(2米深)和挖井的例子, 同样是一百米, 挖河简单, 但是苦力; 挖井难, 但是脑力
并且挖井可能是一开始简单(前2米和挖河没有区别), 后面可能会有挑战, 比如井里很黑; 但是通过慢慢潮湿到最后出水了,
这种希望和成就感, 是不一样的~ 然后说我们做的实际上就是挖井的活(信安) (zf机关 + 国产Linux上的)
还告诉我一个大道理:
假如我没有遇到他们公司, 我的未来3年是怎么规划的?
我回答是, 继续保证暑假找个实习, 寒假找个实习, 然后秋招...
他告诉我, 如果是普通人的话, 基本上都是这样想, 这样也没有错.
但是有一个误区, 然后就举例了一个例子 跑步大神 突然 改为游泳大师 (但是从零学起了), 后面又改去种树...
总之就是说, 人应该专精于一个领域!, (不过我认为, 我多积累实习, 实际上也算一个领域吧qwq...)
不过我不需要怎么早定方向 (和不是有钱就马上买股票一样, 有时机的!)
找到一个自己感兴趣, 热爱的! 干下去吧!
后面我又问了, 我来之前, 我可以自己先学什么呢? 面试官说, 操作系统 看半个月, 到 熟悉 或者说了解的2倍那样!
(说实话, 到现在, 我还是不知道具体的信安和c++可以怎么混qwq...)
最后我就问的差不多了, 然后他说我还没有问工资呢~
我表示钱有就行, 他表示赞同; 并且告诉我, 刚刚出来工作那几年, 是我积累人脉、事情脉的时间段!
等过了出来的这几年, 你也亦然成为了某个领域的Top, 不说前3, 前3万吧, 那也我的本身啦! 也可以自己创业什么的, 通过自己的认知!
个人认为是收获很多很多的!
最后交换了wx, 然后如果我可以来了, 就联系他这样, (备注的时候, 怎么称呼? 他说叫老师
吧~)
确实! 受教了! 感谢!