深信服 网络工程师面试题(二)

news2024/11/24 11:53:49

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

指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针
首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
函数指针是指向函数的指针变量,即本质是一个指针变量

内存分布

在这里插入图片描述
进程运行时的典型内存分布
进程运行时的典型内存布局

内存越界、堆区、栈区的概念

  1. 栈 - 由编译器自动分配释放
  2. 堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
  3. 全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放
  4. 另外还有一个专门放常量的地方。- 程序结束释放
    在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。

用户态、内核态的概念

用户态(User Mode)和内核态(Kernel Mode)是计算机系统中的两种不同的执行模式,用于区分运行在不同特权级别下的程序或操作系统的代码。

用户态(User Mode):

用户态是指程序在较低特权级别下执行的状态。在用户态下执行的程序受到限制,不能直接访问和操作系统的底层资源和硬件设备。
在用户态下运行的应用程序只能访问自己的内存空间和被授权的资源,不能直接进行系统级的操作,如访问硬件设备、修改内核数据结构等。
用户态下的程序通常是由用户编写的应用程序,如文本编辑器、浏览器等。它们依赖于操作系统提供的系统调用接口来访问内核功能和资源。

内核态(Kernel Mode):

内核态是操作系统内核执行的特权级别,具有最高的特权级别。在内核态下执行的代码可以直接访问和操作系统的底层资源和硬件设备。
内核态下的代码可以执行敏感的操作,如修改内核数据结构、管理系统资源、处理中断等。它们能够执行特权指令和访问受保护的内存区域。
内核态下的代码通常是操作系统的内核代码,负责管理和控制计算机系统的各个方面,如进程调度、内存管理、设备驱动程序等。
在操作系统中,用户态和内核态之间的切换是通过特权级别的转换来实现的。当应用程序需要访问操作系统的功能或资源时,它会发起系统调用,将控制权转移到内核态,让内核执行相应的操作。完成操作后,内核将结果返回给用户态,并将控制权重新交还给用户态程序。

用户态和内核态的划分有助于保护操作系统的稳定性和安全性。通过限制用户态程序的访问权限,可以防止恶意程序对系统的滥用和破坏。同时,内核态的特权级别可以确保操作系统能够有效地管理和控制系统资源,提供稳定和安全的计算环境。

以下是一个简单的示例代码,演示了用户态程序通过系统调用接口向操作系统请求服务的过程:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main() {
    int fd;
    char buffer[100];

    // 打开文件
    fd = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        perror("open");
        return 1;
    }

    // 写入数据
    write(fd, "Hello, World!", 13);

    // 关闭文件
    close(fd);

    printf("File saved successfully.\n");

    return 0;
}

野指针

野指针:访问一个已销毁或者访问受限的内存区域的指针,野指针不能判断是否为NULL来避免
野指针产生的原因:

  1. 指针定义时未被初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会随机指向一个区域,因为任意指针变量(除了static修饰的指针)它的默认值都是随机的
  2. 指针被释放时没有置空:我们在用malloc()开辟空间的时候,要检查返回值是否为空,如果为空,则开辟失败;如果不为空,则指针指向的是开辟的内存空间的首地址。指针指向的内存空间在用free()和delete释放后,如果程序员没有对其进行置空或者其他赋值操作的话,就会成为一个野指针
  3. 指针操作超越变量作用域:不要返回指向栈内存的指针或者引用,因为栈内存在函数结束的时候会被释放。

大小端

大端模式:是指数据的高字节保存在内存的地址中,而数据的低字节保存在内存的地址中。
小端模式:是指数据的高字节保存在内存的地址中,而数据的低字节保存在内存的地址中。
下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value
在这里插入图片描述

进程间通信的理解

常见的通信方式
管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

排查问题的思路

在这里插入图片描述

memcpy,malloc

void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。

void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。
该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。

标准的linux行为

  1. 文件系统层次结构:Linux遵循文件系统层次结构标准(Filesystem Hierarchy Standard,FHS),定义了文件和目录在系统中的组织结构。例如,系统文件通常位于/bin、/sbin、/etc等目录下,用户的主目录位于/home目录下。

  2. Shell和命令行界面:Linux使用Bash(Bourne Again Shell)作为默认的命令行解释器,并提供了一套标准的命令行工具和选项。这些工具和选项在不同的Linux发行版之间具有一致的行为和语法。

  3. 系统调用接口:Linux提供了一组标准的系统调用接口,允许用户程序与操作系统进行交互。这些系统调用包括文件操作、进程管理、网络通信等功能,通过它们可以实现各种应用程序。

  4. POSIX兼容性:Linux遵循POSIX(Portable Operating System Interface for Unix)标准,这是一套定义了Unix-like操作系统接口的规范。POSIX兼容性确保了在符合标准的系统上,应用程序可以以一致的方式运行。

  5. 网络协议支持:Linux支持各种网络协议,如TCP/IP、UDP、IPv4、IPv6等。它提供了一套标准的网络编程接口,使开发人员能够编写网络应用程序。

  6. 用户和权限管理:Linux使用用户和组的概念进行权限管理。每个用户都有唯一的用户ID(UID)和所属组ID(GID)。文件和目录具有所有者、所属组和其他用户的权限控制。

  7. 进程管理:Linux使用进程作为执行程序的基本单位。它提供了进程创建、终止、调度和通信的机制,允许多个进程并发执行。

  8. 设备驱动:Linux使用统一的设备驱动模型,通过设备文件(如/dev目录下的文件)来访问硬件设备。设备驱动程序提供了一套标准的接口,允许应用程序通过文件操作来访问设备。

常用的perf、strace、valgrind等查问题工具

perf top分析出来CPU时间主要花费在哪里

strace有两种运行模式。
一种是通过它启动要跟踪的进程。用法很简单,在原本的命令前加上strace即可。比如我们要跟踪 “ls -lh /var/log/messages” 这个

命令的执行,可以这样:
strace ls -lh /var/log/messages

另外一种运行模式,是跟踪已经在运行的进程,在不中断进程执行的情况下,理解它在干嘛。 这种情况,给strace传递个-p pid 选项即可。

比如,有个在运行的some_server服务,第一步,查看pid:

pidof some_server                      
17553

得到其pid 17553然后就可以用strace跟踪其执行:

strace -p 17553

完成跟踪时,按ctrl + C 结束strace即可。

交换机方向:

MAC地址

MAC 地址(Media Access Control address)是一个用于识别网络设备的唯一标识符。它是由网络适配器(如网卡)或其他网络接口设备硬件上的固定地址。

MAC 地址通常是一个由六组十六进制数字(0-9,A-F)组成的字符串,每组表示两个数字。例如,一个典型的 MAC 地址可能是类似于 “00:1A:2B:3C:4D:5E” 的形式。

MAC 地址的长度是固定的,通常是 48 位或 64 位,其中一部分用于标识设备的制造商(OUI,Organizationally Unique Identifier),另一部分用于设备的唯一编号。

MAC 地址在局域网(LAN)中起着重要的作用。它用于识别和定位网络中的设备,以便在数据通信过程中正确地发送和接收数据包。例如,当您从计算机发送数据包到网络上的另一个设备时,数据包会包含目标设备的 MAC 地址,以确保数据包被正确地传递到目标设备。

每个网络设备都应该具有唯一的 MAC 地址,这样可以确保网络中的设备能够正确地进行通信。MAC 地址一般由设备制造商在生产过程中分配,并且很少会发生冲突。

需要注意的是,MAC 地址是一个物理地址,与设备的 IP 地址(逻辑地址)是不同的概念。MAC 地址工作在数据链路层,而 IP 地址工作在网络层。

mtu的概念

MTU(Maximum Transmission Unit)是指在网络通信中,数据链路层协议(如以太网)一次能够传输的最大数据包的大小。它表示在不分片的情况下,网络中可以传输的最大数据量。

MTU 的大小通常以字节为单位,常见的 MTU 值为 1500 字节。这是以太网中最常见的 MTU 大小,但在某些网络环境中,也可能使用不同的 MTU 值。

MTU 大小对网络性能和通信效率具有重要影响。较大的 MTU 值可以减少数据包的数量,从而减少了网络开销和传输延迟。然而,较大的 MTU 值也会增加数据包的传输时间,因为较大的数据包需要更长的时间来传输。此外,如果网络中的某个设备或链路的 MTU 大小小于发送端的 MTU 大小,数据包可能会被分片,导致额外的开销和性能下降。

在实际网络配置中,可以根据网络环境和需求来调整 MTU 大小。例如,在某些广域网(WAN)连接中,由于链路质量或网络设备的限制,可能需要降低 MTU 大小以避免分片和传输问题。另外,一些特殊应用或网络协议可能需要使用较大的 MTU 大小来提高性能。

要查看和配置系统中的 MTU 大小,可以使用操作系统提供的网络配置工具或命令。例如,在 Linux 中,可以使用 ifconfig 或 ip 命令来查看和修改网络接口的 MTU 大小。在 Windows 中,可以使用 netsh 命令或网络适配器设置界面来配置 MTU 大小。

tcp在哪层

TCP 在传输层(运输层);
IP 在网络层(互联网层)。

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

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

相关文章

牛客HJ99 - 自守数【暴力 + 换位取模】

原题传送门 原题描述 首先我们来看一下原题是怎么描述的&#xff0c;题面很简单&#xff0c;输入n&#xff0c;然后让我们去统计从1 ~ n之间的自守数有几个&#xff0c;那什么是【自守数】呢&#xff0c;上面也说到了&#xff0c;即一个数在平方之后该数的尾数等于该数自身的自…

榜单!高精定位模块/系统「争夺战」,份额Top5供应商都有谁

以当前国内车企落地高速NOA采用的主流方案为例&#xff0c;普遍采用了「高精定位高精地图车端传感器」的多源融合定位策略。其中&#xff0c;在高精定位部分&#xff0c;大部分采用GNSSIMURTK的方案。 从目前的智驾系统演进来看&#xff0c;主流的仍是在L2基础上&#xff0c;通…

k8s 基础命令和常用命令等

通过kubectl命令可以操作和管理K8S资源&#xff0c;对于初学者可以在掌握K8S基础命令的基础上再去学习K8s的原理和架构&#xff0c;那么K8S常用的命令有哪些呢&#xff1f; 01 K8S命令概述 在学习K8s基础命令前&#xff0c;了解和学习docker命令是很有必要的&#xff0c;kub…

c语言--unsigned修饰符

在C语言中&#xff0c;unsigned是一种无符号整数修饰符。它可以与多个整数类型&#xff08;如int、short、long等&#xff09;结合使用&#xff0c;表示该整数类型只包含非负数值。unsigned修饰的整数类型不保存正负号位&#xff0c;因此可以用来表示更大的正整数范围。 例如&…

干货分享|SOLIDWORKS Composer如何解决缺失的actor?

​SOLIDWORKS Composer导入SOLIDWORKS模型&#xff0c;以便用户可以创建图形内容并与更广泛的受众共享项目。但是&#xff0c;有时模型导入时缺少Actor或组件&#xff0c;通常是由于在SOLIDWORKS中以轻量模式加载组件或Composer中的导入设置排除了曲面实体。 轻量模式 轻量模式…

基于DEF生成LIB的方法

基于DEF生成LIB的方法 [生成64位lib] lib /def:libcurl-x64.def /MACHINE:x64 /OUT:libcurl-x64.lib[生成32位lib] lib /def:libcurl-x64.def /OUT:libcurl-x64.lib

flutter开发实战-生日等日期选择器DatePicker

flutter开发实战-生日等日期选择器DatePicker 在开发遇到设置生日等信息需要选择日期&#xff0c;这里用到的是CupertinoDatePicker iOS效果的日期、时间选择器 一、效果图 运行后效果图如下 二、代码实现 我们需要调用底部弹窗显示 //显示底部弹窗static void bottomShe…

07_flash全擦除实验

07_flash全擦除实验 1. SPI 协议1.1 SPI 协议1.2 SPI 物理层1.3 SPI 协议层1.3.1 SPI 通讯模式时序图1.3.2 CPHA0 时的 SPI 通讯模式1.3.3 CPHA1 时的 SPI 通讯模式 2. 实验目标3. SPI-Flash 芯片3.1 硬件资源3.2 板载 Flash 原理图3.3 操作时序3.3.1 全擦除时序3.3.2 写使能时…

天眼的使用指南,ngsoc告警分析

分以下几类讲&#xff0c;天眼的功能&#xff0c;日志分析字段&#xff0c;常见的烂分析&#xff0c;告警分析。两个实例&#xff1b;ngsoc的简单实用和告警分析。 #天眼功能 分为&#xff0c;分析平台&#xff0c;流量传感器&#xff0c;文件威胁鉴定器 #部署架构 高级危险…

大模型时代,腾讯云“复制”腾讯|WAIC2023

点击关注 文&#xff5c;郝鑫 编&#xff5c;刘雨琦 刚过去的WAIC&#xff08;世界人工智能大会&#xff09;俨然成为了大模型厂商的成果汇报大会。 百度文心大模型升级到3.5版本&#xff0c;训练速度提升2倍&#xff0c;推理速度提升30倍&#xff1b;华为云发布盘古大模型3…

MySQL~索引的优缺点是什么?有哪些优化索引的方法?

1.索引的优缺点 优点&#xff1a;提高查询记录的速度。 缺点&#xff1a; 需要占用空间&#xff0c;索引是一种用空间换时间的做法创建索引和维护索引都需要消耗时间&#xff0c;会降低表的增删查改效率&#xff0c;因为每次进行增删查改&#xff0c;都需要对索引进行维护&a…

Nacos技术

说明&#xff1a;Nacos是微服务框架中的注册中心技术&#xff0c;可用于管理、协调微服务之间的请求&#xff0c;可配合Feign技术&#xff0c;搭建一个完整的微服务框架。 一、安装&启动 可在官网&#xff08;https://nacos.io/zh-cn/&#xff09;提供的下载链接&#xf…

【uni-app】自定义导航栏

【uni-app】自定义导航栏 新手刚玩uniapp进行微信小程序&#xff0c;甚至多端的开发。原生uniapp的导航栏&#xff0c;并不能满足ui的需求&#xff0c;所以各种查阅资料&#xff0c;导航栏自定义内容 整理如下&#xff1a; 需要修改的文件如下&#xff1a; 1、pages.json 修…

前端渲染模式CSR,SSR,SSG,ISR,DPR

目录 一、客户端渲染——CSR&#xff08;Client Side Rendering&#xff09; 二、服务器端渲染——SSR&#xff08;Server Side Rendering&#xff09; 三、静态站点生成——SSG&#xff08;Static Site Generation&#xff09; 四、增量静态生成——ISR&#xff08;Increm…

ASEMI快恢复二极管MUR2080CT参数, MUR2080CT规格

编辑-Z MUR2080CT参数描述&#xff1a; 型号&#xff1a;MUR2080CT 最大峰值反向电压(VRRM)&#xff1a;800V 最大RMS电压(VRMS)&#xff1a;430V 最大直流阻断电压VR(DC)&#xff1a;800V 平均整流正向电流(IF)&#xff1a;20A 非重复峰值浪涌电流(IFSM)&#xff1a;15…

科技赋能企业,实现数字化转型

科技是第一生产力&#xff0c;数字技术即科技&#xff0c;可以改变传统的商业模式&#xff0c;为各行各业注入新的活力。 推动企业数字化转型&#xff0c;可是实现行业的效率提升&#xff0c;实现跨界重组&#xff0c;重构产业模式&#xff0c;为产业格局重新赋能&#xff0c;最…

批发小程序怎么做

批发订货小程序功能介绍 我们的批发订货小程序是一个集订货浏览权限、一客一价、业务员端口、代客下单、订单汇总和订单打印等功能于一体的专业平台。以下是对这些功能的详细描述&#xff1a; 1. 订货浏览权限&#xff1a;我们的小程序可以为不同用户分配不同的订货浏览权限。…

山寨版 Threads登苹果下载榜第一,黑客借此分发恶意软件

最近&#xff0c;苹果在欧洲下架了一款假冒的Threads应用程序&#xff0c;有意思的是该APP吸引了大量的用户下载&#xff0c;最高峰时曾登录苹果下载榜第一名。 在发现该虚假APP后&#xff0c;苹果已经暂停了其开发者账户&#xff0c;随后更是将SocialKit LTD所有的应用程序全…

做PPT一定要知道这5个素材模板网站。

做PPT绝对不能错过的5个网站、PPT素材、PPT模板、PPT课件、PPT教程等全部都能免费下载&#xff0c;建议收藏&#xff01; 菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYwNDUx 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材…

DBeaver数据库管理工具安装连接PostgreSQL和DM

文章目录 1. 安装2. 连接PostgreSQL3. 连接DM83.1 下载驱动3.2 添加驱动3.3 连接3.4 创建表空间和用户3.5 执行sql 1. 安装 下载地址 https://dbeaver.io/download/ 2. 连接PostgreSQL 配置显示所有数据库 第二个勾选会显示模板数据库 点击测试连接&#xff0c;然后下载驱动…