百度C++一面-面经总结

1、你知道网络编程服务端建立连接的流程吗?把用到的api说出来?

server:
1.socket()

int sockfd = socket(AF_INET, SOCK_STREAM, 0);

2.bind()

struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY; // 监听所有本地地址
serv_addr.sin_port = htons(PORT);       // 绑定的端口号
bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

3.listen()

listen(sockfd, backlog);

4.accept()

int newsockfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_len);

5.read()/write()
6.close()

2、服务端需要设置端口号吗?客户端呢?端口号在哪个api中自动绑定的?端口号有什么作用?如果两个程序使用同一个端口号会怎么样?端口号的范围是多少?哪里限制了端口号的范围?

1.服务端需要显式设置端口号:bind
而客户端不需要显式设置端口号,自动分配临时的。

2.在bind()这个api中自动绑定的。

3.端口号主要为了区分主机上运行的不同服务。http用80,https用443,ssh用22。

4.用了同一段口,后一个程序将会“地址已在使用”错误。

5.有效端口号:0-65535
0-1023是知名端口号,非特权程序不能bind

6.端口号的范围是65535,就是16位整数,因为这是tcp/ip协议栈在os中定义的。最大值就是(2^16 - 1)

3、你知道linux用什么命令查找端口号吗?

netstat -tuln//老牌的网络工具
ss -tuln//显示所有正在监听的 TCP 和 UDP 端口。

4、UDP和TCP?TCP头部有哪些内容?TCP怎么保证可靠连接的?

1.连靠刘墉宿营

2.TCP头部有:
源端口号-目的端口号-序列号-确认号-数据偏移-保留位-控制位-窗口大小-校验和-紧急指针

3.保证可靠连接:

1.三次握手(Three-way Handshake):在建立连接时,TCP 使用三次握手确保双方确认彼此的存在,并同步初始序列号,避免早期的旧数据干扰。客户端发送 SYN 包(同步序列号)请求连接。服务器收到 SYN 后返回 SYN-ACK 包确认连接。客户端收到 SYN-ACK 后再发送 ACK 包,完成连接建立。2.确认应答机制(ACK):每个数据包在发送后,接收方会发送一个确认应答(ACK)包,告知发送方已成功接收。发送方只有在收到 ACK 后,才认为数据成功传送。
3.重传机制:如果发送方没有在预期时间内收到 ACK,TCP 会自动重传数据,确保丢失的数据段被重新发送。
4.序列号与重排序:每个数据包都有唯一的序列号,接收方根据序列号来重组数据,确保数据按正确顺序到达。
5.流量控制:通过窗口大小(Window Size)字段,TCP 控制数据传输速度,避免发送方发送过快导致接收方处理不过来。
6.拥塞控制:TCP 使用如慢启动、拥塞避免等算法来检测网络拥塞,并根据网络情况动态调整传输速度,确保不会因过载导致网络崩溃。
7.四次挥手(Four-way Teardown):TCP 连接结束时通过四次挥手过程来保证连接的可靠关闭,确保双方都有机会传输剩余的数据。

5、说一说网络的TCP/IP四层模型的作用?

物联网淑慧适用-七层
四层的:
应用层:HTTP FTP DNS SMTP
传输层:TCP UDP(加了tcp头)
网络层:IP (加了ip头)
网络接口层:链路级别 (加了帧头)

作用:
高内聚低耦合
模块化
标准化协议
互操作性

6、TCP是那一层的,IP呢?说一说DNS的工作流程是怎么样的?

传输层,网络层
DNS:将人类可读的域名解析成计算机可以处理的IP地址

在这里插入图片描述缓存-本地DNS-根-顶级-权威

7、你能介绍一下什么是重载吗?你知道重载和重写的区别吗?

允许在同一个作用域中定义多个同名的函数或方法,但这些函数具有不同的参数列表。编译器通过参数的个数、类型或顺序来区分这些函数调用。这种机制使得函数可以根据不同的参数类型或数量实现不同的功能。函数名相同,但参数类型、数量或顺序不同。

重写:则是继承中出现的子类重定义了方法,虚函数来实现,且需要在父类中声明为virtual。函数名、参数列表和返回类型必须与父类的虚函数一致。

8、你了解虚拟内存吗?进程间的通信方式有哪些你了解吗?

物理内存和磁盘存储的结合,为每一个进程都提供独立连续的地址空间。提高稳定性,利用率。(不够用就内存扩展,隔离为虚拟地址,还可以简化内存管理,不用关心物理内存了 交给os)

虚拟内存主要是通过os的页表将虚拟地址转换为物理地址,如果不在物理内存,就会页面置换,不常用的页面写入磁盘,所需页面从磁盘加载到内存。

管道 消息队列 共享内存 信号量 socket 信号 文件 等等。

9、用户态和内核态的区别是什么,用户态怎么转到内核态,是自动转换的吗?

不同的CPU执行模式

用户态:受限的权限,无法访问内核内存,限制系统资源的访问,出现错误也不会导致系统崩溃

内核态:最高权限,可以访问全部内存

不是自动转换 不是自动转换 不是自动转换
机制:
1.系统调用
2.中断
3.异常
但是内核态回到用户态通常自动的

10、C++与C相比有什么好处?

面向对象
标准模板库
类型安全
函数重载
运算符重载
命名空间

11、C++11有哪些新特性?

1.auto关键字:自动推导
2.范围for:简化遍历
3.智能指针:用于管理动态分配的内存,帮助防止内存泄漏。
4.lambda表达式:函数内部定义匿名函数 提高灵活性
5.nullptr:替代了传统NULL
6.强制类型转换 更安全
7.右值引用和移动语义 提高对临时对象的处理效率。
8.新的容器 unordered_map set
9.原生支持多线程

12、你了解智能指针吗?

std::shared_ptr:引用计数为0就释放
多个指针共享同一块内存:

std::shared_ptr<int> sharedInt = std::make_shared<int>(42);
std::shared_ptr<int> anotherSharedInt = sharedInt; // 共享同一块内存

std::unique_ptr:单一所有权
std::weak_ptr:协助shared_ptr避免循环引用
其中多个shared_ptr互相引用,导致内存泄漏。
std::auto_ptr是个辣鸡 不用了

13、类的缺省函数有哪些?(就是自己不写也会有默认的函数)

  1. 缺省构造函数

    作用:无参数构造函数,用于创建类的实例时不传递参数。
    特征:如果类中没有定义任何构造函数,编译器会自动提供一个缺省构造函数。

  2. 拷贝构造函数

    作用:用于通过另一个同类型对象来初始化一个对象,即复制对象。
    特征:如果类中没有定义拷贝构造函数,编译器会自动提供一个。默认的拷贝构造函数执行逐成员复制。

  3. 移动构造函数

    作用:用于将一个对象的资源“移动”到另一个对象,避免不必要的复制。
    特征:当类中没有定义移动构造函数时,编译器会提供一个默认实现,通常会将资源的所有权转移给新对象。

  4. 赋值运算符

    作用:用于将一个对象的值赋给另一个已存在的同类型对象。
    特征:如果类中没有定义赋值运算符,编译器会提供一个默认实现。默认赋值运算符执行逐成员复制。

  5. 移动赋值运算符

    作用:用于将一个对象的资源“移动”到另一个已存在的对象,避免不必要的复制。
    特征:当类中没有定义移动赋值运算符时,编译器会提供一个默认实现。

  6. 析构函数

    作用:在对象生命周期结束时自动调用,用于清理资源(如动态内存、文件句柄等)。
    特征:如果类中没有定义析构函数,编译器会提供一个默认的析构函数,该函数会自动释放所有成员的资源。

14、构造函数是先执行基类构造还是子类构造?析构函数呢?

先执行基类的构造:保证基类在子类的重写之前被正确初始化。
析构函数是先析构子类的,保证安全清理基类。

15、Windows创建线程的函数是什么,创建进程的呢?pthread_create有哪些参数,分别有哪些作用?父线程的pthread_create返回值是什么,pthread_detach()函数的作用?

就是CreateThread、CreateProcess

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

参数说明:

pthread_t \*thread:用于存储新线程的 ID 的指针。
const pthread_attr_t \*attr:指向线程属性对象的指针,可以为 NULL,表示使用默认属性。这个参数可以用于设置线程的栈大小、调度策略等。
void \*(\*start_routine)(void \*):线程的起始例程,线程运行时将调用这个函数。该函数必须返回 void * 类型的值,并接收一个 void * 类型的参数。
void \*arg:传递给线程起始例程的参数,可以是任意类型的指针,在线程内部可以通过强制转换来访问。

返回值:成功就是0,不成功就是错误代码。

pthread_detach(pthread_t thread) 用于将线程设置为“分离状态”,使得线程在结束时自动释放其资源,而不需要被其他线程调用 pthread_join 来回收。避免资源泄漏,适用于那些不需要等待线程结束结果的情况。

16、如果子线程退出,父线程没有捕捉子线程的信息会有什么影响?那如果父线程先退出呢,子线程会怎么样?

父线程用pthread_join() 获取子线程的返回值
如果没有捕捉到
那么子线程的资源不会被释放,资源泄漏。
子线程僵尸状态,等待join()

如果父线程退出了,如果子线程独立的话,那就不影响。如果依赖的话,那就导致不确定状态,尤其是子线程依赖父线程的某些资源。

talk is cheap show me the code。

给你一个3* 3的正方形,数字1-9,要求每行每列以及每个对角线的和都一样,打印出这个正方形?拓展:给你一个n * n的正方形,数字1-n*n,打印出这个正方形。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149829.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C语言初识(一)

目录 前言 一、什么是C语言&#xff1f; 二、第一个C语言程序 &#xff08;1&#xff09;创建新项目 &#xff08;2&#xff09;编写代码 &#xff08;3&#xff09;main函数 三、数据类型 四、变量、常量 &#xff08;1&#xff09;变量的命名 &#xff08;2&#x…

003_动手实现MLP(详细版)

常见的激活的有&#xff1a;RELU,sigmoid,tanh代码 import torch import numpy as np import sys import d2lzh_pytorch as d2l import torchvision from torchvision import transforms # 1.数据预处理 mnist_train torchvision.datasets.FashionMNIST(root/Users/wPycharmP…

2024年9月24日历史上的今天大事件早读

1550年9月24日 明代戏剧家汤显祖出生 1852年9月24日 法国人吉法尔制造的用蒸汽机推进的飞船试飞成功 1884年9月24日 中国近代化学的先驱徐寿逝世 1905年9月24日 吴樾壮炸五大臣&#xff0c;身殉革命 1909年9月24日 京张铁路通车 1910年9月24日 剧作家曹禺诞生 1930年9月2…

java并发工具包JUC(Java Util Concurrent)

1. 什么是JUC 1.1 JUC简介 JUC&#xff08;Java Util Concurrent&#xff09;是Java中的一个并发工具包&#xff0c;提供了一系列用于多线程编程的类和接口&#xff0c;旨在简化并发编程并提高其效率和可维护性。JUC库包含了许多强大的工具和机制&#xff0c;用于线程管理、同…

【Python报错已解决】NameError: name ‘reload‘ is not defined

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【JVM】JVM执行流程和内存区域划分

是什么 Java 虚拟机 JDK&#xff0c;Java 开发工具包JRE&#xff0c;Java 运行时环境JVM&#xff0c;Java 虚拟机 JVM 就是 Java 虚拟机&#xff0c;解释执行 Java 字节码 JVM 执行流程 编程语言可以分为&#xff1a; 编译型语言&#xff1a;先将高级语言转换成二进制的机器…

飞腾平台perf工具PMU事件集成指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

linux信号| 学习信号三步走 | 学习信号需要打通哪些知识脉络?

前言: 本节内容主要讲解linux下信号的预备知识以及信号的概念&#xff0c; 信号部分我们将会分为几个阶段进行讲解&#xff1a;信号的概念&#xff0c; 信号的产生&#xff0c; 信号的保存。本节主要讲解信号 ps:本节内容适合学习了进程相关概念的友友们进行观看哦 目录 什么是…

大模型算法岗常见面试题100道(值得收藏)

大模型应该是目前当之无愧的最有影响力的AI技术&#xff0c;它正在革新各个行业&#xff0c;包括自然语言处理、机器翻译、内容创作和客户服务等等&#xff0c;正在成为未来商业环境的重要组成部分。 截至目前大模型已经超过200个&#xff0c;在大模型纵横的时代&#xff0c;不…

测试从业者需要了解心理学和经济学

对于测试从业者来说&#xff0c;测试工作是一项技术活&#xff0c;但同时它也涉及到经济学和人类心理学一些重要因素。 在理想情况下&#xff0c;我们会测试程序的所有可能执行情况&#xff0c;而在大多数情况下&#xff0c;这几乎是不可能的。即使一个看起来非常简单的程序&a…

828华为云征文|使用华为云Flexus云服务器X搭建部署茶叶商城小程序uniapp

在当今数字化时代&#xff0c;小程序以其便捷、高效的特点成为了众多商家拓展业务的重要渠道。 本文将详细介绍如何使用新购买的华为云 Flexus 云服务器 X 搭建&#xff0c;一个带商品采集功能、H5积分商城、集合拼团、砍价、秒杀、会员、分销等等功能一个茶叶商城小程序。 后端…

共享wifi公司哪家正规合法?具体流程全公开!

随着共享经济时代的到来&#xff0c;以共享wifi为代表的多个项目逐渐成为众多创业赛道中的一大热门&#xff0c;推出共享wifi及其他项目的公司数量也因此呈现出了快速增长的态势。而这也让共享wifi等市场出现了鱼龙混杂的情况&#xff0c;连带着共享wifi哪家公司正规合法等相关…

写作高质量文案很难,文案自动生成器轻松解决

在当今信息爆炸的网络环境中&#xff0c;拥有一篇高质量的文案对于吸引受众、传达信息和实现目标至关重要。然而&#xff0c;写作高质量文案并非易事&#xff0c;它需要作者具备深厚的语言功底、创新的思维以及对目标受众的精准把握。这一系列的要求常常让许多人陷入写作的困境…

Windows电脑使用VNC远程桌面本地局域网内无公网IP树莓派5

目录 前言 1. 使用 Raspberry Pi Imager 安装 Raspberry Pi OS 2. Windows安装VNC远程树莓派 3. 使用VNC Viewer公网远程访问树莓派 3.1 安装Cpolar步骤 3.2 配置固定的公网地址 3.3 VNC远程连接测试 4. 固定远程连接公网地址 4.1 固定TCP地址测试 作者简介&#xff1…

drools规则引擎

1 单个文件 这个大多搜索导的都是把规则放到一个文件&#xff0c;这个是基础&#xff0c;但是实际应用就不太方便。如果你使用的jdk1.8&#xff0c;那么对应的drools版本为7.x 1.1 pom依赖 <drools.version>7.74.1.Final</drools.version> <dependency>&…

KITTI数据集雷达采样点时间戳属性的思考(Failed to find match for field ‘time‘)

最近在SLAM调研期间&#xff0c;看到了FAST-LIO2以及Point-lio这两个比较新的SLAM建图算法&#xff0c;想着上手编译并且运行一下&#xff0c;选择了自己了解到的比较出名的数据集KITTI&#xff0c;想着在上述两个开源算法上上手跑一下&#xff08;原论文并没有使用KITTI数据集…

大功率400mw蓝光可调激光模组价格多少钱

在现代激光技术的快速发展中&#xff0c;大功率400mw蓝光可调激光模组以其卓越的性能和广泛的应用领域&#xff0c;成为了市场上备受瞩目的产品。那么&#xff0c;这款激光模组的价格究竟是多少呢? 大功率400mw蓝光可调激光模组的价格因品牌、规格、销售渠道及促销活动等因素而…

【Python报错已解决】TypeError: forward() got an unexpected keyword argument ‘labels‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【机器学习】决策树算法

目录 算法引入 基尼系数&#xff1a; 决策树算法概述 决策树的关键概念 决策树的构建 代码实现 1. 定义决策树节点 2. 计算信息增益 3. 选择最佳分割特征 4. 构建决策树 5. 决策树预测 决策树的评估指标&#xff1a; 决策树的优缺点 优点&#xff1a; 缺点&…

Github优质项目推荐-第一期

文章目录 Github优质项目推荐一、【free-for-dev】&#xff0c;88.4k stars二、【linux-command】&#xff0c;31.5k stars三、【system-design-primer】&#xff0c;270k stars四、【GitHub-Chinese-Top-Charts】&#xff0c;99.1k stars五、【Docker-OSX】&#xff0c;46k st…