C++专业面试真题(1)学习

news2024/11/16 21:36:32

常用Linux命令

ls:列出当前目录内容
ls -l:详细信息列表
ls -a:包括隐藏文件

cd:更改目录

pwd:显示当前目录路径

mkdir:创建新目录

rmdir:删除空目录

rm:删除文件或目录

rm -r:递归删除目录及其内容

cp:复制文件或目录

mv:移动或重命名文件或目录

touch:创建空文件或更新文件的时间戳

cat:查看文件内容

more:分页查看文件内容

less:分页查看文件内容,支持向上滚动

head -n 10 file_name:查看文件前10行

tail -f file_name:实时查看文件追加的内容

ps:查看当前运行的进程

ps aux:查看所有用户的所有进程

top:实时显示系统资源使用情况

kill process_id:终止进程

df:查看文件系统磁盘空间使用情况
df -h: 以人类可读的格式显示

du:显示目录或文件的磁盘使用情况

ping:测试网络连通性

ifconfig:显示或配置网络接口

netstat:显示网络连接、路由表、接口状态等信息

ssh user@hostname:通过ssh连接到远程主机

静态库和动态库如何制作及使用,区别是什么?

在Linux环境中,静态库和动态库都是用于共享代码的库文件。
它们的主要区别在于代码如何链接到可执行文件以及在运行时的行为。

制作静态库

  1. 编译源文件:首先将源文件编译为目标文件 gcc -c file1.c file2.c
  2. 创建静态库:使用ar工具将多个目标文件打包成一个静态库(.a文件)ar rcs libmylib.a file1.o file2.o

链接静态库
gcc main.c -L. -lmylib -o main
-L.指定库文件路径为当前目录
-lmylib:指定库名称

制作动态库

  1. 编译源文件。使用-fPIC选项将源文件编译为位置无关代码的目标文件(.o文件)。gcc -fPIC -c file1.c file2.c

  2. 创建动态库:使用gcc将目标文件打包成一个动态库(.so文件)gcc -shared -o libmylib.so file1.o file2.o

  3. 在编译时将动态库连接到可执行文件中。gcc main.c -L. -lmylib -o main

  4. 运行时设置库路径:确保动态库路径在运行时可见。gcc main.c -L. -lmylib -o main

在这里插入图片描述
命名方式不同:
静态库:libxxx.a
动态库:libxxx.so

链接时间和方式不同:
静态库的链接是将整个库函数的所有数据在编译时都整合进了目标代码。
动态库的链接是程序执行到哪个函数链接哪个函数的库。

静态库优点:
发布程序时无需提供静态库,移植方便,运行速度相对快些
缺点:
静态链接生成的可执行文件体积较大,消耗内存,如果所使用的静态库发生更新改变,程序必须重新编译,更新麻烦。

  1. 动态库优缺点 - 优点:更加节省内存并减少页面交换,动态库改变并不影响使用的程序,动态函数库升级比较方便 - 缺点:发布程序时需要提供动态库

GDB常见的调试命令

GDB(GNU Debugger)是用于调试程序的强大工具。

启动与退出:

  • gdb program:启动GDB并加载程序
  • quit:退出GDB

运行程序:

  • run [args] 启动程序并传递参数
  • start:启动程序并在main函数处停止
  • kill:终止正在运行的程序

设置断点:

  • break function:指定函数处设置断点
  • break line:指定文件的某一行设置断点
  • break address:指定内存地址设置断点
  • delete [breakpoint-number]:删除指定编号的断点。

控制执行:

  • continue:继续执行程序直到遇到下一个断点
  • next:单步执行,跳过函数调用
  • step:单步执行,进入函数调用
  • finish:运行到当前函数的末尾并返回
  • until:运行到当前循环的末尾

检查状态:

  • print expression:打印表达式的值
  • info locals:显示当前堆栈帧的所有局部变量
  • info args:显示当前函数的参数
  • backtrace:显示当前调用堆栈
  • info breakpoints:显示所有断点的信息

进程调度算法

  1. 先来先服务:每次调度都是从(进程)队列中选择一个或多个最先进入该队列的作业(进程),将它们调入内存,为它们分配资源、创建进程,当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。
  2. 短作业优先(SJF)调度算法 短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业(进程),将它们调入内存运行,短进程优先(SPF)调度算法从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或者发生某件事而阻塞时,才释放处理机。
  3. 优先级调度算法 优先级调度算法又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度,该算法中的优先级用于描述作业运行的紧迫程度。在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列;在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
  4. 高响应比优先调度算法 高响应比优先调度算法主要用于作业调度,该算法是对 FCFS 调度算法和 SJF 调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。
  5. 时间片轮转调度算法 时间片轮转调度算法主要适用于分时系统。每次调度时,把 CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几 ms 到几百 ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。
  6. 多级反馈队列调度算法 多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合和发展,通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。

大端、小端

大端和小端指的是字节序,就是大于一个字节类型的数据在内存中的存放顺序。字节序分为大端字节序和小端字节序。

  1. 大端字节序:最高位字节存储在内存的低地址处。
  2. 小端字节序:最高位字节存储在内存的高地址处

什么是孤儿进程,什么是僵尸进程,如何解决僵尸进程

孤儿进程
孤儿进程是其父进程已经终止但它仍然在运行的进程。
当父进程终止时,这些孤儿进程将被系统的systemd收养,由它们负责清理。

系统会自动处理孤儿进程。init进程会接管这些孤儿进程,并调用wait系统调用清理它们的资源。

僵尸进程
僵尸进程是已经终止但其退出状态信息仍然保留在进程表中的进程。
僵尸进程保留在进程表中,直到其父进程读取了它们的退出状态。僵尸进程不会消耗任何CPU或内存资源,但会占用进程表项。

僵尸进程通常是由父进程未能正确调用wait或waitpid系统调用来获取子进程的退出状态而产生的。

父进程在适当的时机调用wait或waitpid来等待子进程终止,并获取其退出状态,从而防止产生僵尸进程。

捕捉SIGCHILD信号
父进程可以捕捉SIGCHILD信号,当子进程终止时,SIGCHILD信号会发给父进程。父进程可以在信号处理函数中调用wait或waitid来清理僵尸进程。

忽略SIGCHILD信号
signal(SIGCHLD, SIG_IN);父进程可以通过设置SIGCHLD信号的处理行为为SIG_IN忽略它。这样子进程终止时系统会自动清理僵尸进程。

孤儿进程:孤儿进程是指一个父进程退出后,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并且由init进程对它们完整状态收集工作,孤儿进程一般不会产生任何危害。

僵尸进程:僵尸进程是指一个进程使用for()函数创建子进程,如果子进程退出,而父进程并没有调用wait()或者waitpid()系统调用取得子进程的终止状态,那么子进程的进程描述符仍然保存在系统中,占用系统资源。

在fork()子进程之后,我们要及时在父进程中使用wait()或waitpid()系统调用,等子进程结束后,父进程回收子进程PCB的资源。同时,当子进程退出的时候,内核会给父进程一个CIGCHLD信号,所以可以建立一个捕获SIGCHLD信号的信号处理函数,在函数体中调用wt()或者wtpid(),就可以清理退出的子进程以达到防止僵尸进程的目的。

进程通信的方式有哪些?

管道
匿名管道

  • 特点:只能在具有亲缘关系的进程之间使用(例如父子进程)。
  • 数据以字节流的形式通过管道传输。

命名管道
可用于无亲缘关系的进程之间,通过文件系统中的文件名进行通信。

消息队列
消息被放入消息队列可以按顺序或优先级读取

共享内存
进程可以直接访问共享的内存区域,是最快的IPC方式之一。
通过共享内存段实现数据的直接共享,通常配合信号量使用来控制对共享内存的访问。

信号量
信号量用于进程间的互斥和同步。

套接字
用于不同主机之间的通信,但也可以用于本地进程间通信(Unix域套接字)。
通过网络接口进行数据传输。

总结

  1. 管道:管道也叫无名管道,本质其实是内核中维护的一块内存缓冲区,Linux系统中通过pipe()函数创建管道,会生成两个文件描述符,分别对应管道的读端和写端。无名管道只能用于具有亲缘关系的进程间的通信。
  2. 命名管道,FIFO文件。有名管道提供了一个路径名与之关联,以FIFO的文件形式存在于文件系统中,并且其打开方式与打开一个普通文件是一样的,这样即使与FIFO的创建进程不存在亲缘管理,只要可以访问该路径,就能够彼此通过FIFO通信。
  3. 信号,是事件发生时对进程的通知机制,有时也称为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。

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

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

相关文章

拒绝胶感,清纯甜美邻家女孩!逼真!逼真!SD1.5 更适合初恋般的国产真人大模型—— CNrealisticMIXV40

老铁说看惯了AI艺术大片,想寻找适合生成邻家女孩青涩照片的模型。老徐今天应邀,针对邻家女孩青涩风格进行下尝试。老徐此前推荐过一款支持各种真实,摄影,写实风格模型的合体模型——赛博Dream | CNrealistic_MIX_V40无损修剪版。 …

Open3D 点云快速全局配准FGR算法(粗配准)

目录 一、概述 1.1原理和步骤 1.2关键技术和优势 1.3应用场景 二、代码实现 2.1 关键代码 2.1.1.函数:execute_fast_global_registration 2.1.2调用registration_fgr_based_on_feature_matching函数 2.2完整代码 三、实现效果 3.1原始点云 3.2粗配准后点…

03 _ 类型基础(2):动态类型与静态类型

静态类型语言与动态类型语言 通俗定义 静态类型语言:在编译 阶段确定所有变量的类型 动态类型语言:在执行阶段确定所有变量的类型 Javascript 与 C 对比 静态类型与动态类型对比 其他定义 强类型语言:不允许程序在发生错误后继续执行 语…

【小贪】项目实战——Zero-shot根据文字提示分割出图片目标掩码

目标描述 给定RGB视频或图片,目标是分割出图像中的指定目标掩码。我们需要复现两个Zero-shot的开源项目,分别为IDEA研究院的GroundingDINO和Facebook的SAM。首先使用目标检测方法GroundingDINO,输入想检测目标的文字提示,可以获得…

primetime中cell和net的OCV

文章目录 前言一、Cell OCV1. POCV coefficient file2. POCV Slew-Load Table in Liberty Variation Format(LVF lib) 二、Net OCV三、如何check OCV是否已加上?总结 前言 在生产中,外界环境的各种变化,比如PVT&#…

grpc学习golang版( 六、服务器流式传输 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件三、拷贝任意文件进项目四、编写serve…

vscode搭建suricata调试环境

一、环境 windows10 wsl2 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal二、编译 2.1 下载源码 wget https://www.openinfosecfoundation.org/download/suri…

为什么越来越多的人选择做债务重组?

说到债务重组,很多人可能一头雾水。但简单来说,就是帮你优化债务结构,减轻还款压力。 为什么现在这么多人会选择做债务重组? 保护工作和名声:有些在好单位上班的人,怕债务问题影响工作,不想让单…

解决Python用xpath爬取不到数据的一个思路

前言 最近在学习Python爬虫的知识,既然眼睛会了难免忍不住要实践一把。 不废话直接上主题 代码不复杂,简单的例子奉上: import requests from lxml import etreecookie 浏览器F12网络请求标头里有 user_agent 浏览器F12网络请求标头里有…

论文翻译 | (DSP)展示-搜索-预测:为知识密集型自然语言处理组合检索和语言模型

摘要 检索增强式上下文学习已经成为一种强大的方法,利用冻结语言模型 (LM) 和检索模型 (RM) 来解决知识密集型任务。现有工作将这些模型结合在简单的“检索-读取”流程中,其中 RM 检索到的段落被插入到 LM 提示中。 为了充分发挥冻结 LM 和 RM 的…

API-本地存储

学习目标: 掌握本地存储 学习内容: 本地存储介绍本地存储分类存储复杂数据类型 本地存储介绍: 以前我们页面写的数据一刷新页面就没有了,是不是? 随着互联网的快速发展,基于网页的应用越来越普遍,同时也…

反向沙箱技术:安全隔离上网

在信息化建设不断深化的今天,业务系统的安全性和稳定性成为各公司和相关部门关注的焦点。面对日益复杂的网络威胁,传统的安全防护手段已难以满足需求。深信达反向沙箱技术,以其独特的设计和强大的功能,成为保障政务系统信息安全的…

MSPG3507——蓝牙接收数据显示在OLED,滴答定时器延时500MS

#include "ti_msp_dl_config.h" #include "OLED.h" #include "stdio.h"volatile unsigned int delay_times 0;//搭配滴答定时器实现的精确ms延时 void delay_ms(unsigned int ms) {delay_times ms;while( delay_times ! 0 ); } int a0; …

MySQL-数据操作类型的角度理解 S锁 X锁

文章目录 1、S锁和S锁互相兼容2、S锁和X锁互斥3、X锁和X锁也互斥4、X锁和S锁也互斥5、select * from account for update;6、select * from account for update nowait;7、select * from account for update skip locked; 1、S锁和S锁互相兼容 2、S锁和X锁互斥 3、X锁和X锁也互…

换天空背景的软件有哪些?摄影师必备,让背景从灰暗到绚烂

在摄影的世界里,背景往往能够为照片增添一种难以言喻的情感色彩。 有时,一个简单的天空背景更换,就能让整张照片焕发出全新的生命力,表达出摄影师想要传达的情感和故事。 如今,随着科技的发展,一些换天空…

开源205W桌面充电器,140W+65W升降压PD3.1快充模块(2C+1A口),IP6557+IP6538

开源一个基于IP6557和IP6538芯片的205W升降压快充模块(140W65W),其中一路C口支持PD3.1协议,最高输出28V5A,另一路是A口C口,最高输出65W(20V3.25A),可搭配一个24V10A的开关…

LLM对程序员的冲击和影响

1LLM 在软件开发过程中的单点提效 我这里罗列一些更多的可能用途: 智能代码提示代码片段智能生成SQL 语句的智能生成与调优更高效更精准的静态代码检查与自动修复(非 rule-based)智能辅助的代码评审与代码重构单元测试和接口测试代码的自动…

ARM功耗管理软件之时钟电源树

安全之安全(security)博客目录导读 思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS? 目录 一、时钟&电源树简介 二、时钟树示例 三、电源树示例 一、时钟&电源树简介 时钟门控与自…

炎黄数智人:国家体育总局冬运中心——AI裁判与教练“观君”赋能冰雪运动新篇章

在科技创新的浪潮下,国家体育总局冬季运动管理中心(以下简称“冬运中心”)揭开了人工智能在体育领域应用的新篇章。隆重宣布推出革命性的AI裁判与教练系统——“观君”,该系统将在冰雪运动项目中大放异彩,为运动员的训…

【Kaggle】Telco Customer Churn 电信用户流失预测案例

⭐️前言:案例学习说明与案例建模流程 我们将围绕Kaggle中的电信用户流失数据集(Telco Customer Churn)进行用户流失预测。在此过程中,将综合应用此前所介绍的各种方法与技巧,并在实践中提炼总结更多实用技巧。 ⭐️对…