字节跳动客户端一面面经(附答案)

本文深入探讨了C++中的数组、指针、STL容器vector与list的区别,以及进程内存管理和释放。同时,详细阐述了TCP的三次握手和四次挥手过程,介绍了浏览器加载网页的步骤。此外,还讨论了如何在不借助临时变量的情况下交换两个变量的值。内容涵盖编程基础知识与网络通信原理,是理解计算机系统运作的宝贵资料。
摘要由CSDN通过智能技术生成

福利来啦:本文底部可获取本文PDF版,直接下载带回家!

主题一:C++

t1. int a[10]; 这个数组的数组变量和数组内容都是存在哪里的?

若是全局数组,则会被创建在静态存储区;其他情况会被分配在栈上。

t2.指针数组和数组指针的区别?

指针数组本质上是数组,每个数组元素指向一个int型变量的地址,数组占多少个字节由数组本身决定。

数组指针本质上是指针,是一个指向一个数组的指针变量,32位系统下永远占4个字节。

t3. STL中vector和list的区别?

vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。其能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。

list由双向链表实现的,因此内存空间是不连续的,且开销较大因为需要额外的指针信息。由于只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n);但由于链表的特点,其能O(1)地进行插入和删除。


主题二:操作系统

t1. 介绍一下一个进程的内存管理
  1. 在操作系统中,系统会给每个进程分配虚拟地址,虚拟地址的大小与处理器的位数有关,如32位处理器进程可分配4GB的虚拟内存供程序正常运行。这4GB的虚拟内存,存储单元从地址0开始进行排序,此地址为虚拟地址。

  2. 该虚拟地址可分为五个部分:

    (1)栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。线程也有自己维护的栈。

    (2)堆区:程序动态申请的空间,由程序释放或其他方式释放,若没有释放,可能导致内存泄露。

    (3)全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放 。

    (4)文字常量区:常量字符串就是放在这里的,程序结束后由系统释放。

    (5)程序代码区:存放函数体的二进制代码。

t2. 介绍下程序的内存释放
  1. 当一个程序运行完毕之后,它所使用的数据就不再需要。由于内存是有限的,所以它原来占据的内存空间也应该释放给别的程序使用。对于普通变量和数组,在程序结束运行以后,系统会自动将它们的空间回收。然而对于我们自己分配的堆内存空间,大多数系统都不会将它们回收。如果我们不人为地对它们进行回收,只借不还,那么系统资源就会枯竭,电脑的运行速度就会越来越慢,直至整个系统崩溃。我们把这种只申请空间不释放空间的情况称为内存泄露。
  2. 在C++中,确认申请的堆内存空间不再使用后,我们用delete操作符来释放堆内存空间。如果申请的是一个堆内存变量,则delete后的[]可以省略;如果申请的是一个堆内存数组,则该[]不能省略,否则还是会出现内存泄露。另外,我们也不难发现,delete后的指针就是通过new获得的指针,如果该指针的数据被修改或丢失,也可能造成内存泄露。
t3. Linux下的常用命令
  1. 列出目录:ls
  2. 切换目录:cd
  3. 显示当前目录:pwd
  4. 创建一个新目录:mkdir
  5. 删除一个空的目录:rmdir
  6. 复制文件或目录:cp
  7. 移除文件或目录:rm
  8. 移动文件与目录,或修改文件与目录的名称:mv
  9. 查找文件或目录:find
  10. 新增、修改文本文件:vim
  11. 显示进程情况:ps
  12. 终结进程:kill
  13. 改变文件权限:chmod
  14. 打包:tar
t4. 谈一谈同步和异步
  1. 同步和异步关注的是消息通信机制。同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反。调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用。
  2. 同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。(当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去)
  3. 异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。(当程序1调用程序2时,程序1径自继续自己的下一个动作,不受程序2的的影响)
  4. 同步异步不能和阻塞非阻塞混为一谈。阻塞和非阻塞强调的是程序在等待调用结果时的状态,同步和异步
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值