面试知识点总结篇二

一、makefile链接库参数

LIBS = -L/path/to/lib -lmylib//,-lmylib会链接名为libmylib.so或libmylib.a的库。all: myprogrammyprogram: myprogram.ogcc -o myprogram myprogram.o $(LIBS)//此处使用myprogram.o: myprogram.cgcc -c myprogram.c

二、shell指令

  1. Shell指令通常指的是在Linux及Unix系统的命令行界面中使用的命令。
  2. 常用指令
ls:列出当前目录中的文件和文件夹。
cd:更改当前工作目录。
pwd:显示当前工作目录的完整路径。
mkdir:创建新目录。
rmdir:删除空目录。
rm:删除文件或目录(rm -r可递归删除)。
cp:复制文件或目录。
mv:移动或重命名文件或目录。cat:显示文件内容。
more:分页显示文件内容。
less:比more更强大的分页查看工具。
head:显示文件的前几行。
tail:显示文件的最后几行。top:实时显示系统进程和资源使用情况。
ps:显示当前运行的进程。
df:显示文件系统的磁盘空间使用情况。
du:显示目录或文件的磁盘使用情况。

三、gcc优化等级

  1. 默认不优化,基础三个优化,拓展2个
  2. 范例
gcc -O0 example.c -o example_O0//无优化
gcc -O1 example.c -o example_O1//基本优化
gcc -O2 example.c -o example_O2//增强优化
gcc -O3 example.c -o example_O3//最大化优化
gcc -Os example.c -o example_Os//减少代码大小
gcc -Ofast example.c -o example_Ofast//超快优化 

四、守护进程怎么开启

  1. 在Linux中,守护进程(daemon)是一种在后台运行的进程,通常用于提供系统服务。
  2. 开启守护进程
sudo systemctl start 服务名
sudo systemctl start ssh//例如,启动ssh守护进程
  1. 自己创建守护进程
    在这里插入图片描述

五、孤儿进程

  1. 没有父进程的进程。父进程退出,子进程不退出,此时子进程就是孤儿进程
  2. 孤儿进程会被init进程(1号进程)收养。
  3. 孤儿进程运行在后端,脱离终端控制
  4. 孤儿进程是活着的进程,没有危害
    在这里插入图片描述

六、如何判断一个链表有环

  1. 快慢指针法
    - 定义两个指针:一个慢指针slow每次移动一步,一个快指针fast每次移动两步。
    - 遍历链表:
    如果fast和fast->next都不为NULL,则继续移动指针。
    如果slow和fast相遇,说明链表有环。
    如果fast指针到达NULL,说明链表没有环。

七、二叉树和二叉搜索树的区别

  1. 二叉搜索树(BST),是一种特定类型的二叉树,满足以下性质:
  • 对于每个节点,左子树中所有节点的值都小于该节点的值。
  • 右子树中所有节点的值都大于该节点的值。
  • 这种特性使得搜索、插入和删除操作的时间复杂度为O(log n)

八、堆和栈的区别

  1. 内存分配方式
栈(Stack):内存由系统自动管理,采用后进先出(LIFO)的方式。
主要用于存储局部变量和函数调用信息。
分配和释放速度快,生命周期由作用域决定。
堆(Heap):内存由程序员手动管理,需要使用动态内存分配(如malloc、free等)。
适用于需要动态分配大小的对象,如数组、链表等。
分配和释放速度较慢,生命周期由程序员控制。
  1. 存储方式
栈:通常在内存的高地址区域,随着函数调用的嵌套而向下增长。
栈的大小通常有限,过多的递归调用可能导致栈溢出。堆:通常在内存的低地址区域,分散分配,随着程序运行而动态变化。
堆的大小受限于可用内存,通常比栈大。
  1. 生命周期
栈:
变量在其作用域结束时自动释放,无法手动控制。
堆:
变量必须手动释放,忘记释放可能导致内存泄漏。
  1. 适用场景
栈:
适合于临时变量和函数调用,自动管理内存。堆:
适合于需要动态存储的对象,如大型数据结构、对象等。

九、函数指针和指针函数的区别

  • 函数指针是指向函数的指针,用于调用函数。
  • 指针函数是返回指针的函数,用于返回指向某种类型的数据的指针。

十、文件IO 0 1 2分别表示什么

  1. 文件描述符(file descriptor)是指向打开文件的整数标识符。
  2. 0 - 标准输入(stdin)
  3. 1 - 标准输出(stdout)
  4. 2 - 标准错误(stderr)
  5. 可以通过重定向和管道使用这些文件描述符。

十一、多进程多线程的区别

  1. 资源分配,稳定性,应用场景
  2. 应用场景
多进程:
适合 CPU 密集型任务(如大数据处理),以及需要隔离的任务(如运行不同的应用程序)。多线程:
适合 I/O 密集型任务(如网络请求、文件操作),需要频繁通信的场景。

十二、什么是临界区

  • 临界区是指在并发编程中,多个线程或进程访问共享资源时,可能导致数据不一致的代码区域。由于这些资源(如变量、数据结构或设备)只能被一个线程或进程在同一时间安全地访问,因此临界区需要通过同步机制来控制访问。

十三、怎么保护临界区的

  1. 互斥锁
  2. 信号量
  3. 读写锁
  4. 原子操作
  5. 禁用中断

十四、IO多路复用

  1. select是最早的I/O多路复用机制,允许程序监视多个文件描述符,检查哪些文件描述符准备就绪进行读、写或异常处理。支持的文件描述符数量有限
  2. poll是对select的改进,支持更多的文件描述符,不再有数量限制。仍然需要每次调用传递文件描述符集合,效率较低。
  3. epoll在处理大量连接时比select和poll更高效,特别是在高并发场景下,避免了遍历所有描述符的开销。

十五、在大工程中一个makefile如何包含其他的makefile

  1. 使用 include 指令
    在主makefile中,可以使用include指令来包含其他的makefile。语法如下:
include other_makefile.mk

十六、shell中如何检测一条指令正常执行

  1. 可以通过检查上一个命令的返回值来检测一条指令是否正常执行。每个命令在执行后都会返回一个状态码,通常称为退出状态(exit status)
    • 0:表示命令成功执行
    • 非0:表示命令执行失败。
command
if [ $? -eq 0 ]; then//$? 是一个特殊变量,包含最近执行命令的退出状态。echo "命令成功执行"
elseecho "命令执行失败"
fi

十七、 用Shell判断一个文件是否存在

if [ -e filename ]; thenecho "文件存在"
elseecho "文件不存在"
fi

十八、GDB是什么

  1. GDB(GNU Debugger)是GNU项目提供的一个调试工具,用于调试C、C++等语言编写的程序。它允许开发者在程序运行时查看和控制程序的执行,帮助定位和修复错误。
  2. 主要功能
设置断点:可以在特定行或函数设置断点,程序运行到该位置时会暂停。
查看变量:可以查看和修改程序中的变量值。
步进执行:可以逐行执行代码,观察程序的运行状态。
堆栈跟踪:可以打印调用堆栈,帮助理解程序的执行流程。
多线程支持:可以调试多线程程序,查看各线程的状态。

十九、u-boot的启动流程

  1. 上电复位
  2. 初始化硬件
  3. 加载U-Boot
  4. 运行U-Boot
  5. 启动操作系统
  6. 传递控制权

二十、IIC有几根线

  • I2C(Inter-Integrated Circuit)通常使用两根线:
    SDA(数据线):用于传输数据。
    SCL(时钟线):用于提供时钟信号。

二十一、 有33层楼3部电梯,怎么利用率最大

  1. 分区调度:将每部电梯分配到特定的楼层范围。例如:
    电梯A服务1-11层
    电梯B服务12-22层
    电梯C服务23-33层
  2. 优先级设置

二十二、5个海盗分100金币,一半同意就可以执行海盗的分配策略,否则该海盗被杀死,第二个海盗继续分配,依次内推

A:90金币//最后一个分得最多,倒数第二个分得最少
B:1金币
C:4金币
D:2金币
E:3金币

二十三、MMU是什么

  1. MMU(Memory Management Unit,内存管理单元)是计算机系统中的一个硬件组件,负责管理内存的分配和访问。
  2. 它在操作系统与硬件之间起到桥梁的作用,提供内存保护地址转换虚拟内存等功能。

二十四、中断的详细过程

1. 中断产生
2. 中断识别
3. 保存上下文
4. 中断向量
5. 切换到对应的中断服务程序
6. 处理中断
7. 恢复上下文
8. 返回主程序

二十五、动静库如何创建

  1. 创建静态库
gcc -c example.c -o example.o//-c:表示只编译源文件,而不进行链接。这个选项生成一个目标文件(.o 文件)。
//这段命令将 example.c 编译为目标文件 example.o,此时该文件包含机器代码,但尚未链接为可执行文件。ar rcs libexample.a example.o//example.o:要添加到库中的目标文件。
//libexample.a:要创建的静态库文件名,按照约定,静态库以 lib 开头,以 .a 结尾。
  1. 创建动态库
gcc -fPIC -shared example.c -o libexample.so
编译 example.c 文件,生成一个位置无关的共享库 libexample.so。这个库可以在运行时被其他程序动态加载和使用。

二十六、编译的可执行文件以什么结尾

  1. Linux和Unix
  • 可执行文件通常没有特定的扩展名,可以直接使用文件名,例如 my_program。
  • 也可以用 .out 结尾,例如 my_program.out,但这不是强制要求。
  1. Windows
  • 可执行文件以 .exe 结尾,例如 my_program.exe。
  1. macOS
  • 在macOS中,可执行文件同样没有特定的扩展名,但通常也可以用 .app 目录来表示应用程序。

二十七、程序冗余的解决办法

  1. 函数抽象:将重复的代码块提取到函数中,避免重复代码。
  2. 使用库或框架:利用已有的库或框架,减少手动编写的代码。
  3. 代码重构:定期检查和重构代码,消除冗余。
  4. 遵循设计模式:使用适当的设计模式可以有效减少冗余。

二十八、 TCP 粘包

  1. TCP 粘包是指在使用 TCP 协议传输数据时,发送方的多个数据包被接收方合并为一个数据包,导致接收方无法分辨数据包的边界。
  2. 解决办法:定长消息、头部字段、分隔符等。

二十九、互斥锁实现原理

  1. 互斥锁用于控制对共享资源的访问,避免数据竞争。其实现原理通常包括
    • 锁的状态:记录锁的状态(如空闲或被占用)
    • 原子操作:使用原子操作来改变锁状态,确保不会出现竞态条件
    • 线程调度:当锁被占用时,其他线程会被阻塞,直到锁释放

三十、STM32 的 GPIO 几种模式

  1. 输入模式:用于接收外部信号。
  2. 输出模式:用于输出信号。
  3. 复用功能模式:用于将 GPIO 引脚配置为特定外设的功能(如 UART、I2C)。
  4. 模拟模式:用于模拟信号处理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能分布式搜索引擎Elasticsearch详解

♥️作者:小宋1021 🤵‍♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

在线相亲交友系统:寻找另一半的新方式

在这个快节奏的时代里,越来越多的单身男女发现,传统意义上的相亲方式已经难以满足他们的需求。与此同时,互联网技术的迅猛发展为人们提供了新的社交渠道——在线相亲交友系统作者h17711347205。本文将探讨在线相亲交友系统如何成为一种寻找另…

MYSQL基础语法

1-什么是数据库 数据库就是保留数据的仓库,体现在电脑当中,是一个软件或者是文件系统。然后把这些数据都保存在特殊的文件中,然后使用固定的语言(SQL语句)去操作文件中的数据。 2-数据库的优点 数据库是按照特定的格…

Spring MVC 基本配置步骤 总结

1.简介 本文记录Spring MVC基本项目拉起配置步骤。 2.步骤 在pom.xml中导入依赖&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.0.6</version><scope>…

Activiti7《第九式:破气式》——流畅驱动工作流进程。面试题大全

冲冲冲&#xff01;开干 这篇文章将分为九个篇章&#xff0c;带你逐步掌握工作流的核心知识。“破气式”&#xff0c;代表着工作流中的 无形之力&#xff0c;它是贯穿整个流程的 关键驱动 不知不觉已经到了独孤九剑最后一式了&#xff0c;我相信到这里之后各位都已经出神入化…

成功使用DDNS动态域名访问我的群晖NAS(TP-link路由器)

当NAS设备部署在动态IP环境中&#xff08;如家庭或小型办公室宽带&#xff09;&#xff0c;远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题&#xff0c;结合神卓互联NAS公网助手提供的DDNS&#xff08;动态域名服务&#xff09;功能&#xff0c;我们可以轻松实现通过…

EasyGBD国标GB28181设备端,支持GB28181-2016、GB28181-2022

功能概要&#xff1a; 功能概述&#xff1a;EasyGBD是GB/T28181 Device的简称&#xff0c;指国标GB28181协议的设备端。EasyGBD功能组件支持Windows、Linux、Android、iOS、ARM等所有平台&#xff0c;可兼容国标GB28181-2011、GB28181-2016的全部功能。 操作系统&#xff1a;任…

医院监护病房智慧ICU远程探视双向对讲为医院带来什么?

随着信息技术的进步和社会对医疗服务要求的不断提高&#xff0c;医院在努力提升服务质量的同时&#xff0c;也在积极寻求更科学有效的管理手段。全视通智慧医院解决方案下有十几个业务系统&#xff0c;主要专注于医院信息化系统&#xff0c;针对于智慧门诊、智慧病房、智慧手术…

玩转腾讯混元大模型——带您解读各个功能

自从2022年的OpenAI公司推出chatGPT人工智能聊天机器人&#xff0c;从此人工智能大模型便在各国可所谓风靡一时&#xff0c;不断涌现出各种各样的大模型&#xff0c;深得用户喜爱。然而在此领域中&#xff0c;腾讯也研发出了自己的大语言模型&#xff0c;下面我们一起来了解一下…

C#基础(11)函数重载

前言 前面我们已经完成了ref和out补充知识点的学习&#xff0c;以及函数参数相关的学习&#xff0c;今天便再次为函数补充一个知识点&#xff1a;函数重载。 函数重载是指在同一个作用域中&#xff0c;可以有多个同名函数&#xff0c;但参数列表不同。它的发展可以追溯到早期…

一.python入门

gyp的读研日记&#xff0c;哈哈哈哈&#xff0c;&#x1f642;&#xff0c;从复习python开始&#xff0c; 目录 1.python入门 1.1 Python说明书 1.2 Python具备的功能 1.3 学习前提 1.4 何为Python 1.5 编程语言 2.Python环境搭建 2.1 开发环境概述 2.2 Python的安装与…

【开发心得】筑梦上海:项目风云录(5)

写这个长篇的目的&#xff0c;前文已经说过。就这个目的而言&#xff0c;这里会更多的讲项目中存在的风险和应对&#xff0c;假如你正在做项目或者打算从事软件项目管理&#xff0c;可以一起交流讨论一下。 目录 小娇的离去 管人的大忌 理解甲方的立场 时刻表的诞生 未完…

dotnet4.0编译问题

因为最近在写cobaltstrike的execute-assembly内存加载的c#项目 用visual studio2022编译&#xff0c;最低net只能用6.0版本的&#xff0c;并且execute-assembly不支持 我想使用4.x版本进行编译&#xff0c;因为visual studio不支持&#xff0c;那么使用命令行进行编译 因为要用…

np.pad实现零填充

np.pad 是 NumPy 中用于对数组进行填充的函数&#xff0c;它可以在数组的不同维度上添加指定数量的值。 X&#xff1a;输入的 NumPy 数组。通常是一个 4 维数组&#xff0c;可能表示图像数据&#xff0c;形状为 (batch_size, height, width, channels)&#xff0c;例如 (样本数…

Java语法-类和对象(上)

1. 面向对象的初步认识 1.1 什么是面向对象 概念: Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。 1.2 面向对象VS面向过程 如:洗衣服 面向过程: 注重的是洗衣服的过程,少了一个环节也不…

nginx基础篇(一)

文章目录 学习链接概图一、Nginx简介1.1 背景介绍名词解释 1.2 常见服务器对比IISTomcatApacheLighttpd其他的服务器 1.3 Nginx的优点(1)速度更快、并发更高(2)配置简单&#xff0c;扩展性强(3)高可靠性(4)热部署(5)成本低、BSD许可证 1.4 Nginx的功能特性及常用功能基本HTTP服…

工厂模式,策略模式,代理模式,单例模式在项目中的应用

项目背景&#xff1a; 首先这篇文章是总结了OJ项目和AI答题平台项目&#xff08;和一点点的聚合搜索项目&#xff09;中设计模式的文章 在项目中也用了很多次的设计模式&#xff0c;我感觉起来&#xff0c;这些设计模式的作用就是提高项目的扩展性和降低耦合性 工厂模式&…

vite分目录打包以及去掉默认的.gz 文件

1.vite打包情况介绍&#xff1a; 1.1vite在不进行任何配置的情况下&#xff0c;会将除开public的所有引用到资源打包编译添加哈希值至assets文件夹中&#xff08;非引用文件以及行内样式图片未被打包编译资源会被treeSharp直接忽略不打包&#xff09;&#xff0c;     1.2w…

七层负载均衡和四层负载均衡的区别

文章目录 什么是七层负载均衡&#xff1f;一、定义与工作原理二、优点与缺点三、应用场景四、常见七层负载均衡器五、负载均衡算法 什么是四层负载均衡&#xff1f;一、定义与原理定义&#xff1a;原理&#xff1a; 二、特点与应用场景特点&#xff1a;应用场景&#xff1a; 三…

Python中的数据可视化:从基础图表到高级可视化

数据可视化是数据分析和科学计算中不可或缺的一部分。它通过图形化的方式呈现数据&#xff0c;使复杂的统计信息变得直观易懂。Python提供了多种强大的库来支持数据可视化&#xff0c;如Matplotlib、Seaborn、Plotly等。本文将从基础图表入手&#xff0c;逐步介绍如何使用这些库…