本文记录的是2018.5月份应聘上海广升linux 开发岗位的经历。
福利待遇:
总结:本次岗位应聘总共经历了3轮面试,总共用时大约3小时,整体而言面试难度处于中等左右。最终的面试结果应该是通过了,不过此时,我已经入职海康,就婉拒了。整体感觉公司氛围很不错,挺有前景的,有机会的朋友可以考虑一下。
希望本文能够帮助有需要的朋友,还请关注、点赞、收藏三连~~~
mmu称为内存管理单元,它位于计算机系统的中央处理器(CPU)和内存之间。负责处理程序发出的内存访问请求,并将逻辑地址转换为物理地址,实现对内存的管理和保护。
mmu的主要功能有四点:
MMU的主要功能之一是进行地址转换。在计算机系统中,程序使用的地址是逻辑地址,而物理内存的地址是实际的硬件地址。MMU通过使用页表等数据结构,将逻辑地址转换为物理地址,使程序能够正常访问内存中的数据。
虚拟内存是一种将物理内存和辅助存储器(如硬盘)结合起来使用的技术。MMU通过使用页表和页面置换算法,实现了虚拟内存的管理。它可以将部分程序或数据存储在硬盘上,只在需要时才将其调入内存,从而有效地扩展了可用内存的大小。
MMU还负责实现内存的保护机制。通过使用页表中的权限位或段表中的段描述符,MMU可以对内存进行细粒度的保护。例如,它可以阻止用户程序访问操作系统的关键数据结构,从而提高系统的安全性。比如我们程序中的代码段,可读数据段,就可以通过mmu设置只读权限。
现代计算机系统通常配备了多级高速缓存,用于提高内存访问的速度。MMU负责管理高速缓存中的数据,包括缓存的写入与读取,以及缓存命中与失效的处理。通过优化高速缓存的使用,MMU可以显著提高计算机系统的性能。
mmu工作原理:
main函数不是必须的。在我们学习C语言之处,老师们就会给我们灌输这样的思想:main函数是一个函数的入口函数,一个进程只能有一个main函数。
其实这个是不正确的,若了解过编译原理,main和其它函数并无特殊的地方,在最终的可执行文件中,都是一个符号而已。只不过GCC 编译工具,默认main 为入口函数。我们可以通过GCC 提供的参数修改入口函数。如下:
#include |
其中-e my_main,告诉gcc 以 my_main作为程序入口。-nostartfiles要求链接器不使用标准系统的启动文件,因为标准的启动文件中会依赖main。
其中exit(0),是默认不做资源回收让操作系统去清理。否则会出现crash。
在进入函数之前,链接器已经很多的事情:
更进一步了解,可以查看我的这篇博客【案例】由coredump引起的思考:程序的加载流程-CSDN博客
首先我们要明白系统调用的就是我们常用的api,比如fork,read,write等等。它所存在原因是由于,程序的状态分为用户态和内核态。我们用户一般只能访问用户态的功能,不可以直接访问内核态。如果你想访问内核态的某些核心功能,就只能使用这些系统调用。
可参考该博客:系统调用的概念及原理-CSDN博
如果说对linux的理解,应该和windows进行比较:
linux中的ipc就是进程间通信方式。有管道,信号,消息队列,信号灯,共享内存,socket等。详细的区别,可参考我的另一篇博文:【面试心经】——蔚来汽车Linux 岗位开发01-CSDN博客
首先这两个对应的是两个方面,进程对应的是存储资源,线程对应的计算资源。
进程是操作系统资源分配的最小单元,线程是cpu调度和执行的最小单元。
它们的区别主要有以下:
从上面的区别我们可知,在不同的情况下采取适当的方式:
我们知道程序中的文件描述符,0,1,2分别表示标准输入和标准输出以及错误输出。shell默认将这三个文件描述符指向了终端。故正常情况下,我们都是从终端获取输入,以及将标准输出和错误输出输入到终端。
fd1>&fd2,表示将fd1指向的文件表项改为fd2指向的文件表项。command > logfile,表示将command的标准输出指向logfile文件,即将command程序的文件描述符1指向了logfile文件表项,不再是指向终端
command 2>&1 > logfile |
解析:shell解释是从左往右的,command默认的标准输入,标准输出,错误输出是终端。
2>&1 ,表示将错误输出指向标准输出指向的文件表项,此时标准输出指向的是终端,故错误输出指向的还是终端。
> logfile,表示将标准输出指向logfile。
故:该命令的现象是 错误输出显示在终端,标准输出保存在logfile
command > logfile 2>&1 |
解析:按照上例分析,
> logfile,command的标准输出指向了logfile的文件表项。
2>&1 ,表示错误输出指向标准输出指向的文件表项。此时command的标准输出指向的文件表项是logfile,故错误输出也是指向logfile
故:该命令的现象是 错误输出和标准输出都是保存在logfile中.
Linux线程的几种结束方式:
10. 数据库如何防止断电数据丢失
该文章写的比较好:https://www.cnblogs.com/huacheng/p/11817014.html
对malloc函数进行包装
char * my_malloc(int len) |
详情可参考我的专栏:《程序员的自我修养》或文章Linux 调试进阶(多场景覆盖)_谢艺华的博客-CSDN博客