当前位置: 首页 > news >正文

百度暑期实习 C++ 一面

1.数组 链表

数组是一种线性数据结构,其中相同类型的元素连续存储在一段内存中,并且可以通过索引来访问每个元素。数组的优点是随机访问元素非常快速,但缺点是插入或删除元素可能需要移动其他元素。

链表也是一种线性数据结构,但不同于数组,它使用节点来存储数据,并将这些节点连接在一起。每个节点包含一个数据元素和指向下一个节点的指针。链表的优点是可以快速插入和删除节点,但缺点是访问任意节点需要遍历整个链表,因此访问时间比数组慢。

在选择数组和链表之间时,需要根据实际需求考虑它们各自的优点和缺点。如果需要快速访问元素并且元素的数量不会经常变化,则数组可能更适合。如果需要频繁插入和删除元素,则链表可能更合适。

2.归并排序 是否是稳定的?

归并排序是一种稳定的排序算法,它的稳定性来源于它的合并操作。

在归并排序中,将数组分成两个部分进行递归排序,并将这两个部分合并到一起。在合并的过程中,如果两个元素的值相等,我们会优先将左边部分的元素放入结果数组中,这就保证了相同元素的前后顺序不会被改变。因此,归并排序是一种稳定的排序算法。

3. C++内存分配

C++中有两种内存分配方式:静态内存分配和动态内存分配。

静态内存分配
静态内存分配是指在编译时就确定了内存的大小和位置,由编译器负责分配和释放。通常用于定义全局变量、局部静态变量和数组等。

动态内存分配
动态内存分配是在程序运行时根据需要动态地分配和释放内存。C++提供了两个操作符来实现动态内存分配:new和delete。

  • new操作符用于在堆上分配一段指定大小的内存,并返回该内存的地址。
  • delete操作符用于释放通过new操作符分配的内存。

4. 面相对象特点

  • 抽象(Abstraction):把对象的共性特征提取出来,形成类(Class),并定义出类的属性和方法。抽象能够处理复杂的问题,使得系统更易于理解和修改。
  • 封装(Encapsulation):将类的属性和方法组合在一起,并限制对象对这些属性和方法的访问权限。封装保证了数据的安全性和完整性,同时也隐藏了细节,降低了系统的耦合度。
  • 继承(Inheritance):通过继承机制,子类可以继承父类的属性和方法,从而避免了代码的重复和冗余。继承提高了代码的可重用性和可扩展性。
  • 多态(Polymorphism):多态指同一个操作作用于不同的对象上面,可以产生不同的结果。例如,一个基类有两个派生类,它们都具有相同的函数名,在程序中使用时,系统根据上下文自动选择正确的函数调用。多态提高了程序的灵活性和可维护性。

5. 进程间通信方式

常见的进程间通信方式包括:

  • 管道(Pipe):管道是一种半双工的通信方式,它可以在具有亲缘关系的两个进程之间传递数据。管道主要通过系统调用pipe()或popen()来创建。

  • 命名管道(Named Pipe):命名管道也是一种半双工的通信方式,但是它可以在没有亲缘关系的两个进程之间进行通信。命名管道可以在文件系统中创建,并且可以被多个进程同时访问。

  • 信号(Signal):信号是一种异步的通信方式,它可以在不同的进程之间传递信息。当一个进程向另外一个进程发送信号时,操作系统会中断接收进程正在执行的任务,并调用该进程注册的信号处理函数来处理信号。

  • 共享内存(Shared Memory):共享内存是一种高效的进程间通信方式,它允许多个进程之间共享同一块物理内存区域。共享内存通过系统调用shmget()、shmat()和shmdt()来实现。

  • 消息队列(Message Queue):消息队列是一种带有消息缓冲区的通信方式,它可以在不同的进程之间传递数据。消息队列可以通过系统调用msgget()、msgsnd()和msgrcv()来实现。

  • 套接字(Socket):套接字是一种全双工通信方式,它可以在不同的主机或进程之间进行通信。套接字通常用于网络编程和分布式系统中。

6. 死锁四条件,解除死锁方法

形成死锁必须同时满足以下四个条件:

  • 互斥条件:每个资源都只能被一个进程使用,如果有其他进程请求该资源,则必须等待。

  • 请求与保持条件:进程在请求资源时,保持已经占有的资源不放。

  • 不剥夺条件:进程已经得到的资源,在未使用完之前不能被其它进程强行取走。

  • 循环等待条件:进程之间形成一种头尾相接的循环等待资源的关系。

解除死锁的方法主要包括以下几种:

  • 预防死锁:通过破坏死锁的四个必要条件来预防死锁的发生。例如,避免互斥、请求和保持、不剥夺和循环等待等。

  • 避免死锁:在运行时动态地分配资源,并根据资源的当前使用情况来避免死锁的发生。

  • 检测死锁:通过检测系统中的资源分配情况来判断是否有死锁的发生。如果检测到了死锁,则可以采取相应的措施来解除死锁。

  • 解除死锁:当检测到死锁时,可以通过剥夺某些进程占用的资源来解除死锁。一般情况下,系统会选择牺牲优先级较低的进程来解除死锁。

7. 什么是并发,并行,异步

  • 并发(Concurrency):指在同一时间段内执行多个任务,但不一定同时执行。在并发的情况下,系统通过交替执行各个任务来实现看似同时执行的效果。

  • 并行(Parallelism):指在同一时刻执行多个任务,通常需要多个处理器或者多个核心才能实现。在并行的情况下,系统可以同时执行多个任务,提高了系统的处理能力和性能。

  • 异步(Asynchrony):指一个操作不会立即得到结果,而是在将来某个时候才会得到结果。异步操作可以让程序在等待结果的同时继续执行其他任务,从而提高系统资源的利用率。

8. OSI七层模型 传输层 应用层

OSI七层模型是一种标准化的网络通信架构,它将计算机网络协议分为七个不同的层次。这些层次从下到上依次是:

物理层(Physical Layer)
数据链路层(Data Link Layer)
网络层(Network Layer)
传输层(Transport Layer)
会话层(Session Layer)
表示层(Presentation Layer)
应用层(Application Layer)

传输层(Transport Layer)是OSI模型中的第四层,其主要功能是在网络的两个节点之间提供可靠的数据传输服务,并确保数据按照正确的顺序和速度传输。

传输层的协议有两种:TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP是面向连接的协议,可靠性较高,但是传输效率较低。UDP是面向无连接的协议,传输效率更高,但是可靠性较差。

应用层(Application Layer)是OSI模型中的最高层,其主要功能是为用户提供各种网络应用程序,例如Web浏览器、电子邮件、文件传输等。应用层使用各种协议来定义数据的格式和传输方式,例如HTTP、SMTP、FTP等。

9. http网络状态码 400以上的 500 502 什么时候出现?

以下是常见的400以上的HTTP状态码及其含义:

  • 400 Bad Request:客户端请求有语法错误,服务器无法理解;
  • 401 Unauthorized:客户端未经授权,请求需要身份验证;
  • 403 Forbidden:客户端没有访问权限;
  • 404 Not Found:请求的资源不存在;
  • 405 Method Not Allowed:请求方法不允许使用;
  • 408 Request Timeout:请求超时;
  • 429 Too Many Requests:请求过多,服务器拒绝服务。

以下是常见的500系列的HTTP状态码及其含义:

  • 500 Internal Server Error:服务器内部错误;
  • 501 Not Implemented:服务器不支持请求的功能;
  • 502 Bad Gateway:网关代理服务器收到了无效响应;
  • 503 Service Unavailable:服务器暂时无法提供服务;
  • 504 Gateway Timeout:网关代理服务器请求超时;
  • 505 HTTP Version Not Supported:服务器不支持请求的HTTP版本。

400以上的状态码通常是客户端出现了错误或异常情况,例如请求参数错误、访问权限受限等。而500系列的状态码通常是服务器内部出现了错误或异常情况,例如数据库连接失败、程序bug等。

10. 三次握手

三次握手(Three-Way Handshake)是TCP协议建立可靠连接的过程,其流程如下:

客户端向服务器发送SYN报文,请求建立连接。该报文包含一个随机生成的序列号。

服务器收到SYN报文后,如果同意建立连接,则向客户端发送SYN-ACK报文。该报文中包含确认号(即客户端的序列号加1),以及另一个随机生成的序列号。

客户端收到服务器的SYN-ACK报文后,还需要向服务器发送ACK报文进行确认。该报文中包含确认号(即服务器的序列号加1)。一旦服务器收到了客户端的ACK报文,连接就建立完成了。

这个过程是三次握手的原因:在建立连接时,需要客户端和服务器相互确认对方的身份及数据传输能力。其中,第一次握手是客户端向服务器发送SYN报文,第二次握手是服务器收到SYN报文后向客户端发送SYN-ACK报文,第三次握手是客户端收到SYN-ACK报文后向服务器发送ACK报文进行确认。通过这三次握手,客户端和服务器可以确保彼此之间的通信有效和可靠。

11. linux命令知道哪些?sed awk会不会

linux命令:

  • 文件和目录操作:ls, cd, mkdir, rm, cp, mv, tar等。

  • 用户和权限管理:useradd, userdel, passwd, chmod, chown等。

  • 网络和系统配置:ifconfig, ping, route, netstat, ps, top, service等。

  • 文本处理和搜索:cat, head, tail, grep, awk, sed等。

  • 软件包管理:yum, apt-get等。

  • 编辑器:vi, vim等。

至于sed和awk,它们都是文本处理工具,在Linux系统中使用较为广泛。其中,sed是一种流编辑器,可以在文件中进行查找、替换和删除等操作。而awk则是一种强大的文本处理工具,具有高级的文本分析和处理能力。

12. 文件内按照某一列值排序 sort?

是的,sort命令可以按照文件中某一列的值进行排序。sort命令默认以空格作为分隔符,可以通过选项-t指定其他分隔符。

假设我们有一个名为file.txt的文件,它包含如下内容:

John 25
Alice 30
Bob 22
Tom 28

如果我们想按照第二列的数值进行排序,可以使用如下命令:

sort -k2n file.txt

其中,-k2表示按照第二列进行排序,-n表示按照数值排序(默认为字典序),输出结果如下:

Bob 22
John 25
Tom 28
Alice 30

如果我们想按照第二列的数值进行逆序排序,则可以使用如下命令:

sort -k2nr file.txt

其中,-r表示逆序排序,输出结果如下:

Alice 30
Tom 28
John 25
Bob 22

相关文章:

百度暑期实习 C++ 一面

1.数组 链表 数组是一种线性数据结构,其中相同类型的元素连续存储在一段内存中,并且可以通过索引来访问每个元素。数组的优点是随机访问元素非常快速,但缺点是插入或删除元素可能需要移动其他元素。 链表也是一种线性数据结构,但…...

计算机网络第一章(概述)【湖科大教书匠】

1. 各种网络 网络(Network)由若干**结点(Node)和连接这些结点的链路(Link)**组成多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(互连网)。因此,互联网是"网络的网络(Network of Networks)"**因特…...

【JS】vis.js使用之vis-timeline使用攻略,vis-timeline在vue3中实现时间轴、甘特图

vis.js使用之vis-timeline使用攻略,vis-timeline实现时间轴、甘特图1、vis-timeline简介2、安装插件及依赖3、简单示例4、疑难问题集合1. 中文zh-cn本地化2. 关于自定义class样式无法被渲染3. 关于双向数据绑定vis.js是一个基于浏览器的可视化库,它提供了…...

机器学习——数据处理

机器学习简介 机器学习是人工智能的一个实现途径深度学习是机器学习的一个方法发展而来 机器学习:从数据中自动分析获得模型,并利用模型对未知数据进行预测。 数据集的格式: 特征值目标值 比如上图中房子的各种属性是特征值,然…...

多种文字翻译软件-翻译常用软件

整篇文档翻译软件 整篇文档翻译软件是一种实现全文翻译的自动翻译工具,它能够快速、准确地将整篇文档的内容翻译成目标语言。与单词、句子翻译不同,整篇文档翻译软件不仅需要具备准确的语言识别和翻译技术,还需要考虑上下文语境和文档格式等多…...

Baumer工业相机堡盟工业相机如何通过BGAPI SDK将相机图像数据用二进制的方式保存到本地(C++)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK将相机图像数据用二进制的方式保存到本地(C)Baumer工业相机Baumer工业相机将图像保存为二进制图像的技术背景代码分析第一步:先转换Byte*图像为二进制图像第二步:在回调函数里进行Buf…...

JavaScript模块的导出和导入之export和module.exports的区别

export和module.exports (需要前面的export没有“s”,后面的module.exports 有“s”) 使用两者根本区别是 **exports **返回的是模块函数 **module.exports **返回的是模块对象本身,返回的是一个类 使用上的区别是exports的方法可以直接调用module.exports需要new…...

基于朴素贝叶斯分类器的钞票真伪识别模型

基于朴素贝叶斯分类器的钞票真伪识别模型 内容 本实验通过实现钞票真伪判别案例来展开学习朴素贝叶斯分类器的原理及应用。 本实验的主要技能点: 1、 朴素贝叶斯分类器模型的构建 2、 模型的评估与预测 3、 分类概率的输出 源码下载 环境 操作系统&#xf…...

【Python】【进阶篇】二十二、Python爬虫的BS4解析库

目录二十二、Python爬虫的BS4解析库22.1 BS4下载安装22.2 BS4解析对象22.3 BS4常用语法1) Tag节点22.4 遍历节点22.5 find_all()与find()1) find_all()2) find()22.6 CSS选择器二十二、Python爬虫的BS4解析库 Beautiful Soup 简称 BS4(其中 4 表示版本号&#xff0…...

UDS统一诊断服务【五】诊断仪在线0X3E服务

文章目录前言一、诊断仪在线服务介绍二、数据格式2.1,请求报文2.2,子功能2.3,响应报文前言 本文介绍UDS统一诊断服务的0X3E服务,希望能对你有所帮助 一、诊断仪在线服务介绍 诊断仪在线服务比较简单,其功能就是告诉服…...

我的创作纪念日:Unity CEO表示生成式AI将是Unity近期发展重点,发布神秘影片预告

PICK 未来的AI技术将会让人类迎来下一个生产力变革,这其中也包括生成型AI的突破性革新。各大公司也正在竞相推出AIGC工具,其中微软的Copilot、Adobe的Firefly、Github的chatGPT等引起了人们的关注。然而,游戏开发领域似乎还没有一款真正针对性…...

秩亏自由网平差的直接解法

目录 一、原理概述二、案例分析三、代码实现四、结果展示一、原理概述 N = B T P B N=B^TPB N=<...

大数据开发必备面试题Spark篇合集

1、Hadoop 和 Spark 的相同点和不同点&#xff1f; Hadoop 底层使用 MapReduce 计算架构&#xff0c;只有 map 和 reduce 两种操作&#xff0c;表达能力比较欠缺&#xff0c;而且在 MR 过程中会重复的读写 hdfs&#xff0c;造成大量的磁盘 io 读写操作&#xff0c;所以适合高时…...

C ++匿名函数:揭开C++ Lambda表达式的神秘面纱

潜意识编程&#xff1a;揭秘C Lambda表达式的神秘面纱 Subconscious Programming: Unveiling the Mystery of C Lambda Expressions 引言&#xff1a;Lambda表达式的魅力 (The Charm of C Lambda Expressions)Lambda表达式简介与基本概念 (Introduction and Basic Concepts of …...

AOP使用场景记录总结(缓慢补充更新中)

测试项目结构: 目前是测试两个日志记录和 代码的性能测试 后面如果有其他的应用场景了在添加.其实一中就包括了二,但是没事,多练一遍 1. 日志记录 比如说对service层中的所有增加,删除,修改方法添加日志, 记录内容包括操作的时间 操作的方法, 方法的参数, 方法所在的类, 方法…...

FPGA基于XDMA实现PCIE X4的HDMI视频采集 提供工程源码和QT上位机程序和技术支持

目录1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利&#xff1a;工程代码的获取1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xff0c;比起 PCI …...

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析

查看原文>>>ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析 目录 专题一、空间数据获取与制图 专题二、ArcGIS专题地图制作 专题三、空间数据采集与处理 专题四、遥感数据处理与应用 专题五、DEM数据…...

怎么找回回收站里已经删除的文件

作为忙忙碌碌的打工人&#xff0c;电脑办公是在所难免的&#xff0c;而将使电脑存储着大量的数据文件&#xff0c;不少小伙伴都养成了定期清理电脑的习惯。而清理简单快捷的方法&#xff0c;无疑是直接把文件拖进回收站里。再一键清空&#xff0c;清理工作就完成了。但如果发现…...

Spring Boot、Cloud、Alibaba 版本说明

Spring Boot、Cloud、Alibaba 版本说明 一、毕业版本依赖关系(推荐使用) 由于 Spring Boot 3.0&#xff0c;Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大&#xff0c;目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot 2.4 以下&#xff0c;为了同时满足存…...

软件测试入门第一步:编写测试报告

什么是测试报告&#xff1f; 1、说明&#xff1a;是指把测试的过程和结果写成文档&#xff0c;对发现的问题和缺陷进行分析&#xff0c;为纠正软件的存在的质量问题提供依据&#xff0c;同时为软件验收和交付打下基础。 ps. 【测试过程和测试结果的分析报告&#xff0c;以及上线…...

【Vue】vue中的路由导航守卫(路由的生命周期)

文章目录全局前置守卫可选的第三个参数 next全局解析守卫router.beforeResolve全局后置钩子路由独享的守卫组件内的守卫可用的配置 API使用组合 API完整的导航解析流程正如其名&#xff0c;vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入…...

NumPy 基础知识 :6~10

原文&#xff1a;Numpy Essentials 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 六、NumPy 中的傅立叶分析 除其他事项外&#xff0c;傅立叶分析通常用于数字信号处理。 这要归功于它在将输入信号&#xff08;时域&#xff09;分离为以离散频率&#xff08;频域&am…...

实现vue的条件渲染

我的需求是根据设备不同的状态 渲染不同的标签。设备状态用device_State表示。 在线上面是一个vue的标签&#xff0c;我有一个数据state &#xff0c;如何让这个标签根据数据的取值 &#xff0c;修改内容&#xff0c;如state1时&#xff0c;标签修改为离线 要根据数据的取值动态…...

第四章 word2vec 的高速化

目录4.1 word2vec 的改进①4.1.1 Embedding 层4.1.2 Embedding 层的实现4.2 word2vec 的改进②4.2.1 中间层之后的计算问题4.2.2 从多分类到二分类4.2.3 sigmoid 函数和交叉熵误差4.2.4 多分类到二分类的实现4.2.5 负采样4.2.6 负采样的采样方法4.2.7 负采样的实现4.3 改进版 w…...

【四】3D Object Model之创建Creation——clear_object_model_3d()/copy_object_model_3d()算子

&#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; Halcon算子太多&#xff0c;学习查找都没有系统的学习查找路径&#xff0c;本专栏主要分享Halcon各类算子含义及用法&#xff0c;有…...

第三十一章 配置镜像 - 删除镜像成员时删除镜像数据库属性

文章目录第三十一章 配置镜像 - 删除镜像成员时删除镜像数据库属性删除镜像成员时删除镜像数据库属性编辑或删除异步成员第三十一章 配置镜像 - 删除镜像成员时删除镜像数据库属性 删除镜像成员时删除镜像数据库属性 当从镜像中删除成员时&#xff0c;始终可以选择从属于该镜…...

自动写作ai-自动写作神器

自动生成文章 自动生成文章是指使用自然语言处理和人工智能技术&#xff0c;通过算法来自动生成文章的过程。一些自动生成文章的工具可以使用大量数据&#xff0c;学习数据背后的语言规范和知识结构&#xff0c;从而生成高质量和有用的文章。这种技术能够减少写作时间和人力成…...

P1368 【模板】最小表示法(SAM 求最小循环移位)

【模板】最小表示法 题目描述 小敏和小燕是一对好朋友。 他们正在玩一种神奇的游戏&#xff0c;叫 Minecraft。 他们现在要做一个由方块构成的长条工艺品。但是方块现在是乱的&#xff0c;而且由于机器的要求&#xff0c;他们只能做到把这个工艺品最左边的方块放到最右边。…...

投票感知器参数学习算法

投票感知器参数学习算法 以下为投票感知器参数学习算法的伪代码&#xff1a; 输入&#xff1a;训练集 (x1,y1),(x2,y2),...,(xn,yn)(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)(x1​,y1​),(x2​,y2​),...,(xn​,yn​)&#xff0c;学习率 η\etaη&#xff0c;最大迭代次数 TTT…...

Hyper-v下安装CentOS-Stream-9

1、我不想要动态扩展的硬盘&#xff0c;固定大小硬盘性能更高&#xff0c;所以这里我先创建一个固定硬盘&#xff08;如果你想用动态扩展的硬盘&#xff0c;那么可以省略前面几步&#xff0c;直接从第7步开始&#xff0c;并在第12步选择创建可动态扩展的虚拟硬盘&#xff09;&a…...