嵌入式经验分享:面试薪资直接翻番,我才明白TA的重要性!

一、学习操作系统(Linux内核)的重要性

为什么要学习Linux内核,这个问题我相信很多人都不一定答得上来。只是从技术层上讲,对内核的研究会加深我们的技术的理解,更多的理解源码,是从思想和思考方式上的优化。而在一般的敲代码过程中对于它的实际使用场景并不多。用一句很吊的话说,不懂内核你可以成为一名优秀的码农,但是成不了一名优秀的程序员。

往期回顾:

【全网独家】高薪岗位DPDK高性能虚拟专家学习路线

【备战秋招】C/C++程序员可以安心躺平的音视频流媒体开发

【鹅厂T8认证】2022年LinuxC/C++后台开发最强学习路线图

【备战秋招】互联网大厂秋招,嵌入式从入门到精通(小白零基础速学)

那回到为什么要学的问题上来。

现阶段国内大学的计算机教学情况是不容乐观的,教材过时或者实战性不够成为通病,而且大多是理论的灌输,并没有对计算机的原理和机制进行深入的解析,我们并没有真正理解操作系统的工作原理。而当下企业互联网公司中运用的计算机技能和知识远远要比学校授予学生的知识要专业,前沿,更佳商业化,所以有时候你会感受到,刚毕业的科班程序员很难适应工作中的节奏与内容。
而对操作系统(Linux内核)的学习就会有助于帮助我们深入理解计算机原理,为后续的学习和工作提供学习方法与思路。

二、Linux内核的组成部分

Linux内核主要由进程管理、内存管理、设备驱动、文件系统、网络协议栈外加一个系统调用。
嵌入式经验分享:面试薪资直接翻番,我才明白TA的重要性!_第1张图片

在纯技术层面上,内核是硬件与软件之间的一个中间层。其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
从应用程序的视角来看,内核可以被认为是一台增强的计算机,将计算机抽象到一个高层次上。例如,在内核寻址硬盘时,它必须确定使用哪个路径来从磁盘向内存复制数据,数据的位置,经由哪个路径向磁盘发送哪一条命令,等等。另一方面,应用程序只需发出传输数据的命令。实际的工作如何完成与应用程序是不相干的,因为内核抽象了相关的细节。应用程序与硬件本身没有联系,只与内核有联系,内核是应用程序所知道的层次结构中的最底层,因此内核是一台增强的计算机。

三、Linux内核源码组织结构

嵌入式经验分享:面试薪资直接翻番,我才明白TA的重要性!_第2张图片

四、Linux内核需要重点学习的知识点

关于Linux内核的学习完全可以根据内核的组成部分区块学习。
内存管理
l 内存原理
l 虚拟内存
l 内存系统调用

文件系统
l 虚拟文件系统VFS
l 磁盘文件系统
l 用户空间系统

进程管理
l 进程基础
l 进程调度

网络协议栈
l 网络基础架构
l 网络协议栈
l 系统API调用

设备驱动
l 设备子系统
l Linux设备模型
l 字符设备驱动
l 网卡设备驱动
l 块设备驱动
l 蓝牙子系统
自我感觉搞懂这些基本差不多了。
嵌入式经验分享:面试薪资直接翻番,我才明白TA的重要性!_第3张图片

五、如何开启你的Linux内核学习之路

先谈谈我自己为什么要学习Linux内核吧
第一个是我自己比较喜欢开源的东西,现在已成老油条, 但每当有搞不懂的问题, 通过翻看源代码解决了这个问题, 我都会很庆幸自己的选择。 开源对程序员的影响是巨大的。
第二个是我感觉自己操作系统方面的知识太欠缺了,虽然是科班出身,但大学对于专业学科并没有很重视,只懂C语言, 所以基础的东西必须恶补回来。 所以我选择从一个具体的系统入手,资料和书籍也多, 源码也开放, 是学习的不二选择。现在Linux越来越火, 在服务器和嵌入式等领域风生水起, 也让我坚信学好Linux对自己的职业生涯肯定是有百利而无一害。
第三个是我喜欢它, 想搞清楚他的原理, 而且也愿意花时间去研究。 兴趣是最好的老师。资料

1.电子书推荐:
l 《Linux内核完全注释V3.0书签版》
l 《Linux命令行大全 - 绍茨 (william E.shotts)》
l 《Linux命令速查手册》
l 《Linux就该这么学》
l 《Linux性能优化大师》
l 《Linux环境编程:从应用到内核》
l 《Linux集群和自动化运维 余洪春》
l 《Linux驱动程序开发实例(第2版)》
l 《Linux高级程序设计(第3版)》
l 《构建高可用Linux服务器(第4版)》
l 《深入了解Linux内核》

2. 项目学习
嵌入式经验分享:面试薪资直接翻番,我才明白TA的重要性!_第4张图片

3.面试常考题
1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示?切换目录用什么命令?
2、怎么查看当前进程?怎么执行退出?怎么查看当前路径?
3、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户id?查看指定帮助用什么命令?
4、Ls命令执行什么功能?可以带哪些参数,有什么区别?
5、建立软链接(快捷方式),以及硬链接的命令。
6、目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?
7、使用哪一个命令可以查看自己文件系统的磁盘空间配额呢?
8、查看文件内容有哪些命令可以使用?
9、随意写文件命令?怎么向屏幕输出带空格的字符串,比如"hello world"?
10、终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
11、移动文件用哪个命令?改名用哪个命令?
12、复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?
13、删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?
14、Linux下命令有哪几种可使用的通配符?分别代表什么含义?
15、用什么命令对一个文件的内容进行统计?(行号、单词数、字节数)
16、Grep命令有什么用?如何忽略大小写?如何查找不含该串的行?
17、Linux中进程有哪几种状态?在ps 显示出来的信息中,分别用什么符号表示的?
18、怎么使一个命令在后台运行?
19、利用ps怎么显示所有的进程?怎么利用ps查看指定进程的信息?
20、哪个命令专门用来查看后台任务?
21、把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?
22、终止进程用什么命令?带什么参数?
23、怎么查看系统支持的所有信号?
24、搜索文件用什么命令?格式是怎么样的?
25、查看当前谁在使用该主机用什么命令?查找自己所在的终端信息用什么命令?
26、使用什么命令查看用过的命令列表?
27、使用什么命令查看磁盘使用空间?空闲空间呢?
28、使用什么命令查看网络是否连通?
29、使用什么命令查看ip地址及接口信息?
30、查看各类环境变量用什么命令?
31、通过什么命令指定命令提示符?
32、查找命令的可执行文件是去哪查找的?怎么对其进行设置及添加?
33、通过什么命令查找执行命令?
34、怎么对命令进行取别名?
35、du和df 的定义,以及区别?
36、awk 详解?
37、当你需要给命令绑定一个宏或者按键的时候,应该怎么做呢?
38、如果一个linux新手想要知道当前系统支持的所有命令的列表,他需要怎么做?
39、如果你的助手想要打印出当前的目录栈,你会建议他怎么做?
40、你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
41、bash shell中的hash命令有什么作用?
42、哪一个bash内置命令能够进行数学运算?
43、怎样一页一页地查看一个大文件的内容呢?
44、数据字典属于哪一个用户的?
45、怎样查看一个linux命令的概要与用法?假设你在/bin目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?

你可能感兴趣的:(LInux内核,经验分享,面试,职场和发展)