嵌入式软件工程师 面试(二)

Linux总结

shell,什么是shell/p>

linux中的Shell就是linux内核的一个外层保护工具,还要负责完成用户与内核

之间的交互。它是一个命令行解释器,也是一个保护工具。

什么是通配符/p>

说白了就是shell中用于匹配文件名。

星 (*)匹配任意长度的字符串

问 (匹配一个长度的字符串

方括 ([…])匹配其中指定的一个字符

方括 ([-]) 匹配指定的一个字符范围

方括 ([^..])除了其中指定的字符,均可匹配

在linux中,系统启动以后,会打开哪三个流

标准文件 文件描述符 介绍

标准输入 0 从键盘输入

标准输出 1 从屏幕输出

标准错误输出 2 从屏幕输出(错误信息)

什么是挂载

挂载—*:mount

挂载的概念

Linux中,根目录以外的文件想要被访问,就需要将其“关联”到根目录下的某个目录来实现

这种关联的操作就叫“挂载”,这个目录就是“挂载点”,解除本次关联的操作叫做“卸载”

如何查看LIunx的进程/p>

查看linux的进程:ps -aux (静态查看)

查看linux的进程:top (动态查看)每三秒跳动一次

如何杀死进程/p>

杀死进程之前需要先知道进程 :PID

文件压缩和解压的工具和命令/p>

压缩工具 解压工具 文件拓展名

gzip gunzip .gz

bzip2 bunzip2 .bz2

zip unzip .zip

tar -cvjf 123.bz2 1.c 2.c 3.c

命令 选项 压缩后的名字 压缩的文件

tar的命令选项

-v 显示压缩和解压过程

-cf 压缩文件

-j 以bzip2的格式压缩

-z 以gzip的格式压缩

-xf 解压文件

tar -cvjf 以bzip2的格式进行详细压缩

tar -cvzf 以gzip的格式进行详细压缩

tar -xvf 详细的解压过程

链接文件的创建

硬链接(In命令):是利用linux为每个文件分配的inode码建立链接

软链接(In命令加上-s符 链接):利用文件的路径建立链接。

通常建立软连接使用绝对路径,以最大限度增加可移植性

什么是inode码/p>

inode码就相当于文件的真实名字

文件系统会给每一个文件创建一个inode码记录每个文件的详细信息

硬链接:如果修改链接文件,目标文件也会被修改。

如果删除目标文件,链接文件依旧有效,且顶替目标文件

如果删除目标文件,链接文件依旧有效,而后重新创建同名目标文件,链接文件可用,但链接失效

软链接:如果修改链接文件,目标文件也会被修改。

如果删除目标文件,链接文件失效,而后重新创建同名目标文件,链接文件可用,链接也会重新建立

如果移动目标文件,链接文件失效。(相对路径)

如果使用绝对路径进行软链接,移动链接文件,链接文件依旧有效

标准IO和文件IO的区别/p>

系统调用(文件IO的函数接口)

不用缓冲的IO—文件IO

是操作系统的一部分

库函数(标准IO的函数接口)

是c语言或者应用程序的一部分

缓冲IO—标准IO

什么是流/p>

定义:所有的I/O操作仅是数据简单的从文件写入或读取,这种字节流,就称为流。

缓冲文件系统(高级磁盘IO)—标准IO的三种缓冲/p>

全缓冲

行缓冲

不缓冲

什么是库/p>

本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。

静态库和动态库的区别/p>

静态库:1>在程序编译时会被连接到目标代码中,

2>程序运行时将不再需要该静态库

3>因此体积较大。

动态库:1>在程序编译时并不会被连接到目标代码中

2>而是在程序运行时才被载入,因此在程序运行时还需要动态库存在

3>因此代码体积较小。

4>不同的应用程序如果调用相同的库,在内存里面有一个库就行

如何创建静态库/p>

静态库对函数库的链接是放在编译时期(compile time)完成的。

  1. 创建一个库源文件:mylib.c 和.h文件

2>将库源文件编译成.o的目标文件

3>将.o文件制作成静态库文件——///静态库的名字必须如:lib库名.a

ar crs libmylib.a mylib.o

4>编写一个测试代码:test.c

5>编译test.c的同时链接我们制作的静态库

gcc -Wall -o test1 test.c -L. -lmylib

-L:库的路径

-l:库名

如何制作一个动态库

动态库把对一些库函数的链接载入推迟到程序运行的时期(runtime)。

动态库的命令形式为:libxxx.so,后缀为.so

  1. 创建一个库源文件:mylib.c 和.h文件
  2. 将库源文件编译成.o的目标文件

3>将.o文件制作成动态库文件

gcc -shared -fPIC -o libmylib.so mylib.o

4>编写测试文件:test.c

5>编译test.c的同时链接我们制作的动态库

gcc -Wall -o test test.c -L. -lmylib

  1. 将动态库加载进系统当中—如何让系统找到它

方法1:

直接将动态库文件拷贝到/lib或者usr/lib

方法2:

将动态库所在的路径加入到配置文件中

方法3:

将动态库所在路径加入到环境变量中:LD_LIBRARY_PATH

  1. 执行:test

什么是大小端序/p>

大端序:低位数据保存在高位地址上,高位数据保存在低位地址上

小端序:高位地址保存在高位地址上,低位地址保存在低位地址上

OSI架构: 络7层理想模型

应用层

表示层

会话层

传输层

络层

数据链路层

物理层

TCP和UDP的区别/p>

UDP通信:

不需要连接,直接发送数据,不稳定易丢包

UDP通信:

需要连接,连接后发送数据,稳定不易丢包

什么是多路复用/p>

多路复用:监听各个文件描述符,一旦文件描述符发生响动,则解除阻塞做相应的操作

什么是域通信/p>

本地进程间的通信,无法跨越主机通信

什么是数据库/p>

永久保存数据的地方就叫数据库

进程和线程的区别

进程是系统分配资源的最小单位  

线程是cpu调度的最小单位

进程的特征

动态性  —–是程序的执行过程

并发性  —–多个进程可以同时运行

独立性  —–系统给每一个进程会分配独立的虚拟空间

异步性  —– 进程之间各自运行,不会干扰

什么是守护进程/p>

Linux守护进程

守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。

它是一个生存期较长的进程

它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件

守护进程常常在系统引导装入时启动,在系统关闭时终止

文件锁

为了解决不同进程操作同一个公共资源时,产生冲突的问题,

引入文件锁,当进程操作共享资源时,要求每一个进程都先获取文件锁,然后才能操作共享资源

文件锁分为:

共享锁:多个进程可以同时获取

互斥锁:在同一时刻只能有一个进程获取

当多个进程操作公共资源时,谁先拿到互斥锁谁就可以对资源进行操作,其他进程就必须要等待,

释放了互斥锁后,才可以获取,这样就解决了冲突的问题。

Linux中各个目录的作用/p>

1. / 根目录

 整个 Linux 文件系统层次结构的根,在图1中是最上层的 / 。

2.  /bin 目录

需要在单用户模式可用的必要命令(可执行文件),面向所有用户

单用户模式:在最小环境中使用超级用户维护系统环境

3. /boot 目录

该目录包含启动系统所需的文件,

4. /dev 目录

该目录包含许多代表设备的特殊文件

5./etc 目录

该目录包含系统范围内的配置文件

6. /home 目录

该目录包含每个用户的家目录。

7. /root 目录

root 用户的家目录

8. /run 目录

/run 目录是一个相当新的目录,它为应用程序提供了一个标准位置来存储所需的临时文件,例如套接字和进程ID

9. /sbin 目录

该目录包含基本二进制文件,这些二进制文件通常旨在由 root 用户运行以进行系统管理。

10. /tmp 目录

该目录存储临时文件,系统在重启时会自动清理该目录下的文件,所以不要将重要文件放到这个目录下。

11. /usr 目录

该目录包含用户使用的应用程序和文件,而不是系统使用的应用程序和文件。

12. /var 目录

该目录包含系统运行中内容不断变化的文件

13. /lib 目录

/bin 和 /sbin 目录中二进制文件需要的库文件

14. /media 目录

可移除媒体(如CD-ROM)的挂载点

115. /mnt 目录

该目录是临时挂载文件系统的位置

16. /opt 目录

可选应用软件包目录。

17. /proc 目录

18. /srv 目录

该目录为系统提供的服务的数据,一些服务启动后,保存服务所需要的数据。

19. /cdrom 目录

该目录不是 FHS 标准的一部分,但是在 Ubuntu 和其他操作系统上可以看到它。 这是系统中插入CD-ROM 的临时位置。但是,临时媒体的标准位置在 /media 目录中。

20. /lost+found 目录

该目录用于存放系统异常时文件的碎片,以便于进行恢复。如果文件系统崩溃,则将在下次启动时执行文件系统检查。

文件权限修改用什么命令/p>

chmod命令:修改文件(夹)权限

Grep 命令有什么用/span>

我们可以使用grep命令在文本中查找指定的字符串

find 命令有什么用/span>

按照需求查找所需要的文件

管道符的作用/span>

管道符的符 :|

管道符的作用:是用于两个命令或者多个命令相链接,将前边的命令的执行结果传递到后边的命令

终止进程用什么命令带什么参数/p>

kill,带上进程的pid (进程 )

使用什么命令查看用过的命令列表/span>

Linux命令之查看执行过的历史命令history

使用什么命令查看磁盘使用空间/span>

df命令
df 命令是英文单词 disk-free 的缩写,用于查看 Linux 系统中的可用的和已经使用的磁盘空间。

怎么通过程序得出大小段序

#include

int main(void) {

union {

short a;

char b;

}u;

u.a = 0x0102;

if (u.b == 0x02)

printf(“Little-Endiann”);

else

printf(“Big-Endiann”);

return 0;

}

什么是标准IO/span>

  1. 标准IO是c语言标准提供的一系列进行输入输出的函数
  2. 标准IO具有缓冲区标准
  3. IO是在系统调用之上构建的

请写出在缓冲IO中,可以对文件进行读数据的主要操作函数名。

fgets,fgetc,fread,fscanf

strstr函数、strtok函数、strcat函数、strcmp函数

strlen函数用于求字符串长度

strcpy函数是将一个字符串拷贝到另一个字符串空间中,目的空间的内容会被覆盖。

strcat函数将 source 指向的字符串内容追加到 dest 所指向字符串的后面, 返回追加后的字符串

strcmp函数是用于比较两个字符串内容的函数。

strstr 函数在 字符串str1 中查找 子串str2 

strtok字符串拆分

为什么是三次握手/span>

三次握手的目的是建立可靠的通信通道,说到通信,简单来说就是数据的发生与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是否正常

为什么需要四次挥手

1)、由于客户端最后一个ACK可能会丢失,这样B就无法正常进入CLOSED状态。于是B会重传请求释放的 文,而此时A如果已经关闭了,那就收不到B的重传请求,就会导致B不能正常释放。而如果A还在等待时间内,就会收到B的重传,然后进行应答,这样B就可以进入CLOSED状态了。

2)、在这2MSL等待时间里面,本次连接的所有的 文都已经从 络中消失,从而不会出现在下次连接中。

TCP粘包/拆包的产生原因和解决办法

主要的原因是数据发送过快,数据堆积导致缓冲区积压多个数据后打包才一次性发送出去(如果客户端每发送一条数据就睡眠一段时间就不会发生粘包)

发送的数据包(消息)超过一次tcp 文所能传输的最大值时,就会将一个数据包拆成多个最大tcp长度的tcp 文分开传输。

TCP是如何保证可靠性的

三次握手和四次挥手

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24758 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月22日
下一篇 2022年8月22日

相关推荐