您的位置:首页 > 娱乐 > 明星 > 字节跳动一面

字节跳动一面

2024/10/4 23:51:07 来源:https://blog.csdn.net/qq_43914901/article/details/141862228  浏览:    关键词:字节跳动一面

字节跳动一面【C++后端开发】

base : 深圳 岗位:C++后端开发 时间: 2024/8/30

文章目录

    • 基本介绍
    • C++语言
      • 1. 堆栈内存是否连续,为什么?
      • 2. int i=0; i++ ; 两个线程同时执行10000次,i最终的数值是多少?
      • 3. 全局变量,是在堆区 还是栈区?
      • 4. 进程和线程的区别
      • 5. 我们输入网址,打开浏览器这一过程,会发生什么情况? 【偏网络协议】
      • 6. 进程打开网页,和线程打开网页,有什么区别?
      • 7. 什么叫死锁,死锁产生的条件是什么?
    • 场景题
    • 代码题

基本介绍

主要是介绍了本科,硕士的学校,以及项目和 科研经历

C++语言

1. 堆栈内存是否连续,为什么?

堆和栈是两种不同的内存管理方式。堆栈内存是否连续取决于具体的实现和平台,但一般来说:

**栈内存:**通常是连续的,因为栈是为函数调用分配的内存空间,栈帧(Stack Frame)会按照函数调用的顺序逐步压入栈中,并在函数返回时按相反的顺序弹出,因此栈内存通常是线性增长的,空间是连续分配的。

**堆内存:通常不连续。堆内存是为动态内存分配(如使用malloc或new)**而设计的,内存块的分配和释放是非线性的,堆内存管理器会在可用的内存块中寻找合适的块进行分配,因此可能会出现碎片化,导致堆内存分布不连续。

2. int i=0; i++ ; 两个线程同时执行10000次,i最终的数值是多少?

如果没有任何同步机制,如锁(Lock)或原子操作(Atomic Operation),最终的值是不确定的。这是因为i++不是一个原子操作,它实际上由三部分组成:读取i的值、将i的值加1、将结果写回i。在两个线程同时操作时,可能会出现竞争条件(Race Condition),导致其中一个线程的更新被覆盖。因此,i的最终值可能小于20000。

3. 全局变量,是在堆区 还是栈区?

全局变量通常存储在静态存储区,也称为数据段(Data Segment),而不是堆区或栈区。数据段在程序加载时分配,并在程序的整个生命周期内保持不变。它与栈区、堆区分开管理

4. 进程和线程的区别

进程是操作系统分配资源的基本单位,每个进程有独立的地址空间、文件描述符、堆栈等资源。进程之间的通信需要使用进程间通信(IPC)机制,如管道、信号、共享内存等。

线程是进程内的一个执行单元,多个线程共享进程的资源,如代码段、数据段、文件描述符等。线程之间的通信更加快捷,因为它们共享同一进程的内存空间。

主要区别:进程是独立的,彼此隔离,切换进程开销较大;线程是共享资源的,切换线程的开销较小。

5. 我们输入网址,打开浏览器这一过程,会发生什么情况? 【偏网络协议】

当你在浏览器中输入网址并按下回车时,以下步骤会发生:

  • DNS解析:

浏览器先检查本地缓存是否有该域名的IP地址。如果没有,会向DNS服务器发送查询请求,将域名解析为IP地址。

  • 建立TCP连接

使用获取的IP地址,浏览器会通过三次握手(TCP三次握手)建立与目标服务器的TCP连接。

  • 发送HTTP请求:

连接建立后,浏览器向服务器发送一个HTTP请求,请求目标网页。

  • 服务器响应:

服务器处理请求并返回相应的HTTP响应,通常包括HTML文档、CSS、JavaScript文件和图像等。

  • 浏览器渲染:

浏览器接收响应数据,解析HTML文档,加载和执行CSS和JavaScript,最终渲染网页内容到屏幕上。

  • 关闭连接:

在页面加载完成后,浏览器和服务器会通过四次挥手(TCP四次挥手)关闭连接。

6. 进程打开网页,和线程打开网页,有什么区别?

进程打开网页:如果一个进程负责打开网页,它将独立管理所有的资源,包括内存、文件句柄等。如果进程崩溃,所有资源都将被释放。比如,现代浏览器通常会为每个标签页创建一个独立的进程,以提高稳定性和安全性。

线程打开网页:如果一个线程负责打开网页,它将共享进程的资源。多个线程可以同时处理网页内容,例如渲染、加载资源等。线程之间的切换开销较小,但如果一个线程发生崩溃,可能会影响同一进程中的其他线程。

7. 什么叫死锁,死锁产生的条件是什么?

  1. 读写锁,了解过吗?
  2. DNS 网络解析,以及域名这些了解吗?【我个人觉得是,我当时第5个问题,没有回答好,才问的这个知识点】

场景题

  1. 这两个变量的区别?
int a =1 int main(){int b=1;
}

内存分为拿几个区?那这变量 a 和 b 分别是在哪两个区? 【追问】

  1. 内联函数 和 宏定义的区别 ?
  2. 常见的数据结构有哪些?

代码题

第1题: 在32位机器中,这些变量占的内存是多少字节的?

struct a{int a ;double b;char c;
};struct b{int a;char b;double c;char d;
}struct b{int a;char b;double c;
}

第2题:

二叉树最大路径和 【深度遍历啊】

root = {1,2,3}

最大路径是: 2-1-3,最大路径和是6

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com