【回眸】Linux软件开发面试题合集

Linux软件开发工程师面试题目大全

1、Linux 系统内如何隐藏文件

用. 开头 就可以把文件隐藏了

2、怎么过滤出文件里有ERROR 的行,显示出它们的文件名

cat file_name |grep "ERROR"

3、Linux和Win的区别

1、Linux开源,Windows需要授权2、Linux更安全,Windows需要打补丁,Linux不需要3、Linux更适合嵌入式开发,有很好的兼容性

4、为什么用虚拟机不用双系统

1、虚拟机灵活方便,而且不会担心系统坏了,使用快照备份极其方便2、双系统存在兼容性问题,比如和硬件不兼容的情况会在mac电脑上出现,但虚拟机则不需要硬件支持,一些资源的调整也很方便

5、交叉编译是什么

交叉编译是在一个平台上生成另一个平台上的可执行代码。

6、HTTPS握手

HTTPS七次握手包括三次TCP握手和四次TLS握手

详细流程如下:
1. 客户端发起HTTPS请求

2. 服务端的配置

采用HTTPS协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。

3. 传送证书

这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等。

4. 客户端解析证书

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值,然后用证书对该随机值进行加密。

5. 传送加密信息

这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6. 服务段解密信息

服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该值进行对称加密。

7. 传输加密后的信息

这部分信息是服务端用随机值对称加密后的信息,可以在客户端被还原。

8. 客户端解密信息

客户端用之前生成的随机值解密服务端传过来的信息,于是获取了解密后的内容。、客户端向服务端发送连接请求,并发送支持的 SSL 版本,支持的加密算法,一个随机数;
2、服务端收到请求,验证 SSL 版本及加密算法是否支持。
3、然后也发一个随机数,并且将含有公钥和私钥的证书发给客户端认证;
4、客户端收到证书,验证其有效性:是否是受信任的机构,证书是否过期,是否被吊销等。
5、然后也生成一个随机数,并用公钥对这个随机数进行加密,发给服务端;
6、服务端使用自己的私钥对加密的随机数进行解密,然后使用加密算法将以上三个随机数进行加密,生成对话密钥,用来加密后面的对话过程;
7、客户端收到服务端的加密会话,后面客户端与服务的通信都使用密文传输。

7、不同的Linux发行版有什么区别

各Linux发行版本之间的区别:不同的发行版本有着不同的Linux内核版本、库及程序软件。此外,包管理器也不同(redhat和slackware系列使用的是rpm包管理系统,以.rpm为扩展名;Debian系列使用的是dpkg包管理系统,以.deb为扩展名)

8、Cookie可以设置的几个字段 内容分别是什么

name字段:名称value字段:cookie的值domain字段:为可以访问此cookie的域名,顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则cookie无法生成。path字段:为可以访问此cookie的页面路径。Size字段:设置cookie的大小http字段:cookie的httponly属性expires/Max-Age字段:设置cookie的过期时间secure字段:设置是否只能通过https来传递此条cookie

9、static的作用

1、具有隐藏的作用2、保持变量内容的持久3、默认初始化为0(static变量)

10、const的作用

1、 修饰变量C语言中采用const修饰变量,功能是对变量声明为只读特性,并保护变量值以防被修改。2、 修饰数组C语言中const还可以修饰数组,与变量类似,具有只读属性,不能被更改;一旦更改,如程序将会报错。3、 修饰指针C语言中const修饰指针要特别注意,共有两种形式,一种是用来限定指向空间的值不能修改;另一种是限定指针不可更改。

11、TCP粘包拆包问题

长度编码:发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。

特殊字符分隔符协议:可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。

定长协议:发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。

12、socket编程流程

1.创建套接字

2.为套接字添加信息(IP地址和端口号)

3.监听网络连接

4.监听到有客户端接入,接受一个连接

5.数据交互

6.关闭套接字,断开连接

13、TCP四次挥手的CLOSE_WAIT状态是在什么时候,出现大量CLOSE_WAIT怎么解决

如果出现了CLOSE_WAIT过多的状态

1.在对方关闭连接后,自身程序里没有检测 -(被动方的角度)

2.本身忘了需要关闭连接,于是整个资源就一直被程序占用着。-(主动方的角度)如何解决CLOSE_WAIT问题

1、关闭正在运行的程序2、尽快修改程序bug,然后测试提交到线上服务器

14、DNS解决的问题和查询方式

第一步:从本地域名解析服务器获取到个根域名服务器对应的主机名。第二步:从个根域名服务器中的其中一个获取到顶级的服务器(未显示)和名称。第三步:向域的一台服务器请求解析,它返回了域的服务器(未显示)和名称,四台顶级域的服务器。第四步:向百度的顶级域服务器请求,它发现这个有个别名,而不是一台主机,别名是http://www.a.shifen.com。

DNS查询方式:递归查询、迭代查询

15、TCP 和 UDP 的区别,属于哪一层

1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。

两者属于传输层

16、并发和并行有什么区别?

并发是指一个处理器同时处理多个任务。并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。

17、虚拟内存有什么作用

虚拟内存的作用:把外存当作内存来使用,便于缓解物理内存压力的不足。

18、Extern C的作用

extern “C”的作用是告诉C++编译器用C规则编译指定的代码(除函数重载外,extern “C”不影响C++其他特性)。

19、进程和线程的区别

进程是操作系统资源分配的最小单元。线程是操作系统能够进行运算调度的最小单元。

20、为什么要字节对齐

需要字节对齐的根本原因在于CPU访问数据的效率问题

21、如何编译多个.c文件

$ gcc test1.c test2.c -o main.out
$ ./main.out

22、列出4个C语言常用关键字

intforcaseifextern等等

23、C99新增的关键字

_Bool _Complex _Imaginary inline restrict

24、C11 新增关键字

_Alignas_Alignof _Atomic _Generic _Noreturn_Static_assert _Thread_local

25、用什么运算符可以得到对象或类型的存储字节大小

sizeof()

26、如果需要在一个源文件中引用另外一个源文件中定义的变量应该怎么做

需在引用的文件中将变量加上 extern 关键字的声明即可。

拓展:
在C++中,导入C函数的关键字是extern,表达形式为extern “C”,
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。
加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。

27、为什么说多用inline、const关键字少用宏定义

尽量用编译器,少用预处理器。避免报错时找不到原因

28、C语言中a++ 和++a的区别

a++是先赋值后运算++a是先运算后赋值

29、三元运算符计算出输入的数字是奇数还是偶数

#include<stdio.h>

int main()
{
    int num;

    printf("输入一个数字 : ");
    scanf("%d",&num);

    (num%2==0)?printf("偶数"):printf("奇数");
}

30、写出两种死循环的写法

while (1)
{
}

或者
for(;;)

31、用C语言枚举的方式表示周一到周日七天

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

32、简述C语言中从代码到可执行二进制文件的过程

1、预编译2、编译3、汇编4、链接

33、什么是内存泄露

申请了一块内存空间,使用完毕后没有释放掉。(1)new和malloc申请资源使用后,没有用delete和free释放;(2)子类继承父类时,父类析构函数不是虚函数。(3)Windows句柄资源使用后没有释放。

34、简述内存模型(内存布局)【这个以前有一篇文章详细介绍过】

数据段:存放程序中已初始化的全局变量和静态变量的一块内存区域。

代码段:存放程序执行代码的一块内存区域。只读,代码段的头部还会包含一些只读的常数变量。

BSS 段:存放程序中未初始化的全局变量和静态变量的一块内存区域。

可执行程序在运行时又会多出两个区域:堆区和栈区。

堆区:动态申请内存用。堆从低地址向高地址增长。

栈区:存储局部变量、函数参数值。栈从高地址向低地址增长。是一块连续的空间。

最后还有一个共享区,位于堆和栈之间。

堆 heap :由new分配的内存块,其释放由程序员控制(一个new对应一个delete)

栈 stack :是那些编译器在需要时分配,在不需要时自动清除的存储区。存放局部变量、函数参数。

常量存储区 :存放常量,不允许修改。

后记碎碎念

最近抽空刷刷面试题,提升一下素养。下面这些一般题目和答案是分开查找的,所以是转载自多处,如有侵权请联系我删除!在空闲的时候会复习基础知识,然后不由自主地想到第一次接触C语言的那个冬天,我在回忆,当时我在上课的时候,我在想什么呢?那是2020年的年初,那时的我们居家上课,我会在离上课还有10分钟的时候起床,在短短的午休时间里飞快吃完早饭兼中饭,又忙忙碌碌地去参加下一节网课。那时候我和我的同学,怎么也没想到这样的网课生活会在一年以后继续重来。当时迷迷糊糊在全班同学面前敲下第一行代码,printf "hello world!\n"时,我的心情很奇妙,有些紧张不安,也有些激动,教我C语言的老师不走寻常路,不像其他老师那样一步一个脚印,他会间歇性照书读,做个无情的copy机器,时常性抽人回答问题。在很多同学眼里,他可能不是一个能够激起学习欲的好老师,但巧合的是我在大一时心血来潮去选举了学习委员,而这个老师最喜欢抽问的是学习委员,而我,碰巧也是最喜欢回答老师提问的同学,如果一个老师频繁提问我,那么我会花更多的时间去学习那门课程。但凡事如果只靠热情,必定是四处碰壁的。当时我很快遇到了困难,由于许多知识盲区,我一度怀疑自己是否适合编程,一路受挫却还是不甘心就此放弃。在如今有诸多经历的当下,回首那个写下第一行C语言代码的瞬间,我终于理解了什么叫厚积薄发,什么叫一步一个脚印,什么叫合抱之木,生于毫末,九层之塔,起于垒土,原来每一次发自内心的选择,都通向着对应的未来。祝愿我们都有坚不可摧的地基,与终身成长的信仰。

看到这里的读者朋友们可以点击专栏查看同系列的其他文章,希望能帮到屏幕前的每一位应届生往届生,该博文最初发表在CSDN上。

#你听到的“最没用”的秋招建议##2025秋招体验点评##秋招暂停,我将对以下公司做出处罚__##从mentor身上学到了__##第一次找实习,我建议__#
应届生必学实用物联网技术 文章被收录于专栏

本专栏助应届生从物联网小白成长为企业争抢的技术人才,聚焦三大核心技术:传感器应用(环境监测)、嵌入式开发(STM32/Arduino)、通信协议(LoRa/NB-IoT/MQTT),配合10+实战项目(如智能温湿度监控系统)积累项目经验。覆盖智能硬件、工业物联网、智能家居领域岗位需求,解析企业招聘技术重点与面试题,帮电子、计算机、自动化等专业学生构建知识体系,提前锁定名企Offer!

全部评论

相关推荐

孙艹肘:校招不给三方直接让实习我都去了,,主打一个在学校呆着也是闲着,不如出来实习一下
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务