字节暑期实习 - 后端开发二面(已拿offer,反馈牛客)

2020/3/11 - 11:00 - 49分钟

1. 自我介绍

2. 学了什么课程

3. C中 const指针 和 指向const指针 的区别

4. 两者的定义怎么写

(我一开始说错。。。

然后,他在屏幕上打出:

const int *p

int *const p

问我分别是什么?

看了后发现不对,我赶紧说自己搞错了,第一个是指向const的指针,第二个是const指针。

5. 说说static

局部变量(这里脑抽了,本来应该说局部符号的。。。),在当前模块中是所有函数都可用,但其它模块不能使用。

那static的生命周期是?

整个程序运行开始到结束

6. 指针与引用的区别

7. 讲讲继承和多态

继承,巴拉巴拉。。。多态的话,有一种体现就是虚函数。

8. 虚函数和纯虚函数

纯虚函数无定义。

9. 讲讲虚基类

虚基类?是抽象类吗?

是。

噢,那就是有纯虚函数的就是虚基类。

10. HTTP是哪一层

11. HTTP是依托哪一个运输层协议

12. HTTP是如何传递消息

讲了一下请求报文格式和响应报文格式。

13. HTTP1.0和HTTP1.1的区别

长连接。

14. 长连接的底层实现知道吗

额,不知道

15. 介绍一下你这个程序运行的项目

16. gdb是怎么实现的

(这个问题一面也问过,还好去查了。。。

系统调用ptrace。

17. 怎么让当前进程成为被调试程序的父进程

将被调试的程序传入ptrace()函数,ptrace会自动帮你运行被调试进程。

那怎么调试正在运行的进程呢?

额,不太知道。

你知道Linux上进程号为1的进程吗?

好像是init进程。

你可以从这考虑,回去自己看一下吧。

18. 怎么实现单步调试

调用ptrace()时,可以通过参数设置为单步执行,子进程执行一步就触发中断,回到父进程。但具体怎么触发中断我不太清楚,我只知道断点是怎么触发中断的。然后,说了一下软中断int3。

19. 讲一下信号

是用于进程间通信的吗?我不太了解这个。。。

20. 讲一下第二个项目

中间提到了Nginx。。

21. 知道怎么用nginx实现负载均衡吗

我记得有一种方法是给每个IP设置一个权重,然后权重越大,被访问的概率越大。(瞎说的。。。

22. nginx路径转发

只知道怎么配置。

23. 写代码

第一题

题目:

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

输入: [7,1,5,3,6,4]

输出: 5

输入: [7,6,4,3,1]

输出: 0

思路:两个指针一个记录“最小值”,一个记录当前位置。遍历过程中,若当前位置小于最小值时,则替换最小值。同时,记录最大差值(当前位置值-最小值)。

代码:

#include 

#include 

using namespace std;

int main() {

    int price[6] = {7,1,5,3,6,0};

    int days = 6;

    int p1 = 0;

    int p2 = 0;

    int max = 0;

    for (int i=1; i < days; ) {

        if (price[i] < price[i-1]) {

            p1 = i;

            p2 = i+1;

            while (p2 = price[p1]) {

                if (price[p2]-price[p1] > max) {

                    max = price[p2]-price[p1];

                }

                p2++;

            }

            i = p2;

        }

    }

    printf("%d\n", max);

}

第一次写完有点问题,然后面试官提醒,才得到正解。

第二题

问题:

从起点开始接下来有 100 个方块,相邻方块间的距离都为 1,每个方块上有增加体力的食用蘑菇或减少体力的毒蘑菇,蘑菇带来的体力改变是已知的。一个人初始体力为 m,每次可以往前跳任意个方块,体力耗尽就会死掉。

每跳一次消耗的体力与跳的距离成正比,比例为 1。问这个人能否跳到终点,如果能,求可能剩余的最大体力。

思路:贪心。到终点过程中,因跳跃而消耗的体力是固定,那么只需要保证吃到最多的增强蘑菇即可。(这道题一开始想到了贪心,但思路是错的。后来面试官提醒:跳跃消耗的体力是固定的,才想到了正解。

代码:

#include 

using namespace std;

int main() {

    int num[6] = {2,-3,4,3,-1,3};

    int len = 6;

    int m = 2;

    int pos = -1;

    for (int i=0; i<len; i++) {

        if (m-(i-pos) > 0 && num[i] > 0) {

            m += num[i];

            m -= (i-pos);

            pos = i;

        }

    }

    printf("%d\n", m);

}
#字节跳动##实习##面经#
全部评论
恭喜楼主
点赞 回复 分享
发布于 2020-04-10 22:37

相关推荐

给🐭🐭个面试机会吧:嘿,mvbatis
点赞 评论 收藏
分享
评论
2
20
分享

创作者周榜

更多
牛客网
牛客企业服务