【面试心经】——上海广升智能科技有限公司

介绍

        本文记录的是2018.5月份应聘上海广升linux 开发岗位的经历。

福利待遇:

  • BOSS 岗位薪资:15K ~25K。
  • 每月一天带薪病假或事假。
  • 国家规定外有额外4天年假。
  • 每年两次旅游,上半年国外,下半年国内。
  • 每年两次调薪机会,年终奖3~5个月。

        总结:本次岗位应聘总共经历了3轮面试,总共用时大约3小时,整体而言面试难度处于中等左右。最终的面试结果应该是通过了,不过此时,我已经入职海康,就婉拒了。整体感觉公司氛围很不错,挺有前景的,有机会的朋友可以考虑一下。

        希望本文能够帮助有需要的朋友,还请关注、点赞、收藏三连~~~

内容

1.mmu 内存管理的原理

        mmu称为内存管理单元,它位于计算机系统的中央处理器(CPU)和内存之间。负责处理程序发出的内存访问请求,并将逻辑地址转换为物理地址,实现对内存的管理保护。

mmu的主要功能有四点:

  • 地址转换

MMU的主要功能之一是进行地址转换。在计算机系统中,程序使用的地址是逻辑地址,而物理内存的地址是实际的硬件地址。MMU通过使用页表等数据结构,将逻辑地址转换为物理地址,使程序能够正常访问内存中的数据。

  • 虚拟内存管理

虚拟内存是一种将物理内存和辅助存储器(如硬盘)结合起来使用的技术。MMU通过使用页表和页面置换算法,实现了虚拟内存的管理。它可以将部分程序或数据存储在硬盘上,只在需要时才将其调入内存,从而有效地扩展了可用内存的大小。

  • 内存保护

MMU还负责实现内存的保护机制。通过使用页表中的权限位或段表中的段描述符,MMU可以对内存进行细粒度的保护。例如,它可以阻止用户程序访问操作系统的关键数据结构,从而提高系统的安全性。比如我们程序中的代码段,可读数据段,就可以通过mmu设置只读权限。

  • 高速缓存管理

现代计算机系统通常配备了多级高速缓存,用于提高内存访问的速度。MMU负责管理高速缓存中的数据,包括缓存的写入与读取,以及缓存命中与失效的处理。通过优化高速缓存的使用,MMU可以显著提高计算机系统的性能。

mmu工作原理:

  1. 程序发出内存访问请求,包括读取或写入操作以及逻辑地址。
  2. MMU根据页表等数据结构,将逻辑地址转换为物理地址。
  3. MMU将物理地址发送给内存控制器,进行实际的内存读写操作。
  4. 内存控制器将数据返回给MMU,MMU再将数据返回给程序。

2.main是否是必须的,为什么?main函数之前做了哪些事情?

        main函数不是必须的。在我们学习C语言之处,老师们就会给我们灌输这样的思想:main函数是一个函数的入口函数,一个进程只能有一个main函数

        其实这个是不正确的,若了解过编译原理,main和其它函数并无特殊的地方,在最终的可执行文件中,都是一个符号而已。只不过GCC 编译工具,默认main 为入口函数。我们可以通过GCC 提供的参数修改入口函数。如下:

#include<stdio.h>
#include<stdlib.h>
int my_main()
{
        printf("hello world\n");
        exit(0);
}

        其中-e my_main,告诉gcc 以 my_main作为程序入口。-nostartfiles要求链接器不使用标准系统的启动文件,因为标准的启动文件中会依赖main。

        其中exit(0),是默认不做资源回收让操作系统去清理。否则会出现crash

在进入函数之前,链接器已经很多的事情:

  1. 一些全局变量、静态变量会在main函数之前分配空间以及初始化。其中C++的构造函数,也是在main 之前执行的。
  2. 进程启动后,要执行一些初始化代码(如设置环境变量等)库的加载之类的,然后跳转到main执行。

更进一步了解,可以查看我的这篇博客【案例】由coredump引起的思考:程序的加载流程-CSDN博客

3.系统调用的原理?有哪些?

        首先我们要明白系统调用的就是我们常用的api,比如fork,read,write等等。它所存在原因是由于,程序的状态分为用户态和内核态。我们用户一般只能访问用户态的功能,不可以直接访问内核态。如果你想访问内核态的某些核心功能,就只能使用这些系统调用。

        可参考该博客:系统调用的概念及原理-CSDN博

4.对linux的理解?

如果说对linux的理解,应该和windows进行比较:

  1. 免费。linux由于是开源并且免费的,所以是很多公司的首选。
  2. 体积小。适合用于嵌入式产品。
  3. 开源。适合开发。

5.ipc有哪些?原理是什么?

        linux中的ipc就是进程间通信方式。有管道,信号,消息队列,信号灯,共享内存,socket等。详细的区别,可参考我的另一篇博文:【面试心经】——蔚来汽车Linux 岗位开发01-CSDN博客

6. 进程是资源分配的最小单元,线程是调度的最小单元,这句话你怎么理解?

        首先这两个对应的是两个方面,进程对应的是存储资源,线程对应的计算资源。

  • 一个进程中可以有多个线程,并且线程共享进程的资源(堆,栈,上下文,全局变量)
  • 但是一个线程只能属于一个进程。进程结束所有的线程都结束,并且会释放资源。但是线程结束,对其他的线程不会产生影响,也不会释放该线程的申请的资源。

7.进程和线程之间的区别,什么时候使用多线程,什么时候使用多进程?

        进程是操作系统资源分配的最小单元,线程是cpu调度和执行的最小单元。

它们的区别主要有以下:

  • 资源的开销:每个进程都有自己的独立的程序上下文,程序之间的切换消耗较大;同一个进程,线程之间的是共享代码段和数据空间,但是每一个线程都有自己独立的运行栈和程序计数器。线程之间的切换消耗较小。
  • 包含关系:一个进程中可以有多个线程。
  • 内存分配:线程共享本进程中的地址空间和资源,进程之间的地址空间和资源都是相互独立的。
  • 影响关系:一个进程崩溃之后,在保护模式下,不会对其它进程产生影响。但是线程一旦崩溃整个进程都会崩溃。

从上面的区别我们可知,在不同的情况下采取适当的方式:

  • 需要频繁进行创建和销毁的优先使用线程(常见的就是web服务器,来一个连接就新建一个线程,创建和销毁的代价较少)
  • 需要大量计算的优先使用线程(图像处理,算法处理)
  • 强相关的处理使用线程,弱相关的处理使用进程
  • 可能要扩展到多机分布的用进程,多核分布的用线程

8. 如何将一个进程所有的输出重定向一个文件中

        我们知道程序中的文件描述符,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中.

9.如何主动结束一个线程

Linux线程的几种结束方式:

  • 调用pthread_exit(exit_code),exit_code为线程退出的状态代码。同一进程下的其他线程可以通过pthread_join(exit_code)来使用。
  • 线程被取消pthread_cancel()。
  • 同一进程中的其他线程调用了exit(),,或者主线程从main函数返回。

10. 数据库如何防止断电数据丢失

该文章写的比较好:https://www.cnblogs.com/huacheng/p/11817014.html

11.如何保证malloc申请的内存,在使用的时候保证字节对齐呢?

 对malloc函数进行包装

char * my_malloc(int len)
{
    char * p = malloc(len+4);
    char num = p % 4 ;/*记录需要偏移的个数*/
    * (p+4-num) = 4-num;
    return p+4-num;
}

int my_free(char * p)
{
    char* num = p-1;
    return free(p-*num);
}

12.函数调用的过程,栈的变化?

  1. 首先调用者的栈帧先将实参进行压栈,再将返回地址压栈
  2. 调用函数将自己的局部变量保存到栈帧中

详情可参考我的专栏:《程序员的自我修养》或文章Linux 调试进阶(多场景覆盖)_谢艺华的博客-CSDN博客

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

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

相关文章

Ultipa参加国际科学会议KGSWC2023

近日&#xff0c;领先的国际科学会议 KGSWC 2023&#xff0c;在西班牙萨拉戈萨大学召开&#xff0c;Ultipa Graph参加。 KGSWC2023是第五届伊比利亚-美洲会议和第四届印度-美洲知识图谱与语义网大会的联合论坛。自2019年成立以来&#xff0c;KGSWC一直是一个重要的学术活动&am…

测试工程师核心软技能「情绪管理」

大家好呀&#xff0c;我是楼仔。 我之前经常提到一句话&#xff1a;大多数时候所谓的“技术之玻璃天花板”&#xff0c;其实只是缺乏软技能而已。 所以粉丝朋友们&#xff0c;我们除了需要关注技术&#xff0c;更需要注重软技能的提高。 关于软技能相关的文章&#xff0c;之…

婚恋小程序APP一站式开发搭建丨幸福全方位婚恋一线牵丨相亲交友婚恋小程序使用手册丨实名认证丨语音交友丨源码交付,支持二开丨同城交友

1: 如何在相亲交友婚恋小程序寻找属于自己的幸福 打开相亲交友婚恋小程序&#xff0c; 在首页遇到自己喜欢的人&#xff0c; 点击详情&#xff0c; 然后点击喜欢&#xff0c; 如果对方也喜欢你&#xff0c; 互相喜欢成功&#xff0c; 可以在缘分页看到对方的微信&#xff0c; 添…

基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

Android Studio Giraffe-2022.3.1-Patch-3安装注意事项

准备工作&#xff1a; android studio下载地址&#xff1a;https://developer.android.google.cn/studio/releases?hlzh-cn gradle下载地址&#xff1a;https://services.gradle.org/distributions/ 比较稳定的网络环境&#xff08;比较android studio相关的依赖需要从谷歌那边…

Redis集群模式

Redis集群主要有三种模式 主从复制模式&#xff08;Master-Slave&#xff09;、哨兵模式&#xff08;Sentinel&#xff09;和Cluster模式 主从复制模式&#xff1a;适用于数据备份和读写分离场景&#xff0c;配置简单&#xff0c;但在主节点故障时需要手动切换。哨兵模式&…

Google分析中的基础概念

当提到Google分析时&#xff0c;我们通常指的是一种用于跟踪和分析网站和应用程序数据的工具。在使用Google分析之前&#xff0c;了解其基础概念对于正确配置和有效使用该工具非常重要。 1、帐户&#xff08;Account&#xff09;&#xff1a;帐户是Google分析中的最高层级。一…

【网络安全】-安全常见术语介绍

文章目录 介绍1. 防火墙&#xff08;Firewall&#xff09;定义通俗解释 2. 恶意软件&#xff08;Malware&#xff09;定义通俗解释 3. 加密&#xff08;Encryption&#xff09;定义通俗解释 4. 多因素认证&#xff08;Multi-Factor Authentication&#xff0c;MFA&#xff09;定…

WordPress 外链跳转插件

WordPress 外链跳转插件是本站开发的一款WordPress插件&#xff0c;能对文中外链添加一层过滤&#xff0c;有效防止追踪&#xff0c;以及提醒用户。 类似于知乎、CSDN打开其他链接的提示。 后台可以设置白名单 学习资料源代码&#xff1a;百度网盘 密码&#xff1a;123

【飞桨星河社区五周年线下工坊-杭州站】

? 欢迎大家参加杭州极客工坊&#xff0c;深入了解大模型前沿技术和创新应用&#xff0c;一站式体验AI原生应用开发? 精彩议程敬请期待&#xff5e; ? 时间&#xff1a;2023年12月3日 14:00-17:30 ? 地点&#xff1a;杭州西湖区花蒋路3号西溪润泽园度假酒店 ? 主题&#xf…

2021年1月12日 Go生态洞察:探索Go中泛型的提议

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

拼多多刷新Q3财报纪录,大涨18%股价直逼阿里

当多数人只关心拼多多速度的时候&#xff0c;拼多多却把步伐走的逐渐扎实。 11月28日&#xff0c;拼多多发布截至9月30日的2023年第三季度业绩报告。根据财报&#xff0c;拼多多第三季度收入达到了688.4亿元人民币&#xff0c;同比增长了93.9%。实现美国通用会计准则口径净利润…

全国高校走进深算院:共话国产数据库产教融合生态建设

近日&#xff0c;由教育部高等学校计算机类专业教学指导委员会、全国高等学校计算机教育研究会主办&#xff0c;清华大学出版社、深圳市信息技术应用创新联盟承办的“2023全国高校走进信创企业研学活动”顺利举办。来自全国各地30余家高校的近80位院校领导、教师代表走进了深圳…

【leetcode】64. 最小路径和

题目 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输出&…

通过测试驱动开发(TDD)的方式开发Web项目

最近在看一本书《Test-Driven Development with Python》&#xff0c;里面非常详细的介绍了如何一步一步通过测试驱动开发(TDD)的方式开发Web项目。刚好这本书中使用了我之前所了解的一些技术&#xff0c;Django、selenium、unittest等。所以&#xff0c;读下来受益匪浅。 我相…

C#图像处理OpenCV开发指南(CVStar,03)——基于.NET 6的图像处理桌面程序开发实践第一步

1 Visual Studio 2022 开发基于.NET 6的OpenCV桌面程序 1.1 为什么选择.NET 6开发桌面应用&#xff1f; 选择 .NET 6&#xff08;最早称为 .NET Core&#xff09;而非 Frameworks.NET 的理由是&#xff1a;&#xff08;1&#xff09;跨平台&#xff1b;已经支持Windows,Linux…

Jenkins部署python接口自动化测试

一、点击新建Item 二、指定源码和分支 私钥位置&#xff1a;C:\Users\Administrator\.ssh 文件下 三、构建脚本编写 四、构建后操作 指定输出的allure 结果目录 总结&#xff1a; 感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 作为一位过来人也是希望…

Python开发——工具篇 Pycharm的相关配置,Python相关操作 持续更新

前言 本篇博客是python开发的工具篇相关&#xff0c;介绍pycharm的使用和相关配置&#xff0c;收录python的相关操作&#xff0c;比如如何启动jupyter。 目录 前言引出Pycharmpycharm如何不同等级日志显示不同颜色设置不同pycharm的python环境 Python操作如何启动Jupyter 总结…

【linux】信号——信号产生

信号产生 1.预备知识2.信号产生2.1通过键盘发送信号2.2系统调用接口向进程发送信号2.3硬件异常产生信号2.4软件条件2.5总结 自我名言&#xff1a;只有努力&#xff0c;才能追逐梦想&#xff0c;只有努力&#xff0c;才不会欺骗自己。 喜欢的点赞&#xff0c;收藏&#xff0c;关…

unity程序中的根目录

在unity程序中如果要解析或保存文件时&#xff0c;其根目录为工程名的下一级目录&#xff0c;也就是Assets同级的目标