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

news2024/11/28 3:44:00

介绍

        本文记录的是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.coloradmin.cn/o/1266840.html

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

相关文章

南大通用 GBase 8s数据库级别权限

对于所有有权使用指定数据库的用户都必须赋予其数据库级别的用户权限。在GBase 8s 中&#xff0c;数据库级别的用户权限有三种&#xff0c;按权限从低到高排列依次为&#xff1a;CONNECT、RESOURCE、DBA。 1. CONNECT 这是级别最低的一种数据库级别用户权限。拥有该权限的用户…

H3C堆叠和聚合配置

因ensp做不了堆叠&#xff0c;所以用了华三的模拟器HCL&#xff0c;下载地址&#xff1a;H3C网络设备模拟器官方免费下载-新华三集团-H3C 拓朴如下&#xff1a; 1、堆叠配置步骤如下&#xff1a; 1、S1和S2配置堆叠过程&#xff1a; [S1] irf domain 1 irf member 1 priority …

人工智能驱动的医疗辅助:陪诊系统的技术原理与应用

随着人工智能技术的不断发展&#xff0c;医疗领域也迎来了新的可能性。本文将深入探讨陪诊系统的技术原理及其在医疗领域中的应用。我们将重点关注人工智能的核心概念&#xff0c;如自然语言处理、机器学习和语音识别&#xff0c;以解释陪诊系统是如何在医疗环境中发挥作用的。…

2023年03月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题2分,共30分) 第1题 编写一段程序,从26个英文字母中,随机选出10个加入列表a。空白处应填入的代码是?( ) A: B: C: D:

基础课13——知识库

1.知识库的概念、特点与功能 智能客服中的知识库是一个以知识为基础的系统&#xff0c;可以明确地表达与实际问题相对应的知识&#xff0c;并构成相对独立的程序行为主体&#xff0c;有利于有效、准确地解决实际问题。它储存着机器人对所有信息的认知概念和理解&#xff0c;这…

数据预处理:随机裁剪放缩

随机裁剪放缩是一种数据增强技术&#xff0c;可以在训练神经网络时增加数据的多样性&#xff0c;提高模型的泛化能力。具体来说&#xff0c;随机裁剪放缩可以通过随机裁剪和缩放原始图片来生成多个不同的训练样本&#xff0c;从而增加数据集的大小和多样性。这种技术在图像分类…

Python编程基础:数据类型和运算符解析

想要学习Python编程语言&#xff1f;本文将为您介绍Python中常见的数据类型和运算符&#xff0c;为您打下坚实的编程基础。了解不同的数据类型和运算符&#xff0c;掌握它们之间的配合方式&#xff0c;让您能够更轻松地进行数据处理和计算任务。无论您是初学者还是有一定经验的…

昨日一题 1670. 设计前中后队列(中等,列表)

维护左右两个队列&#xff0c;控制左队列的长度比右队列长&#xff0c;且不超过1pushFront 往左队列的左边添加元素pushMiddle 往左队列的右边或者右队列的左边添加元素其余同理&#xff0c;可以参照代码 class FrontMiddleBackQueue:def __init__(self):self.llist, self.rli…

博客RESTful API 接口开发

目录 1.博客系统规划 2.基础服务搭建 3.登录接口 4.新增文章接口 5.查询文章接口 6.修改文章接口 7.删除文章接口 总结 1.博客系统规划 首先规划一下有哪些接口&#xff0c;从博客文章角度来看&#xff0c;需要如下接口&#xff1a; 新增文章接口&#xff0c;传递…

Windows下搭建Tomcat HTTP服务,发布公网远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器&#xff0c;不仅名字很有趣&#xff0…

第二证券:五日线是什么颜色的线?

从概念解说上来看&#xff0c;五日线是一种短期移动平均线&#xff0c;通常使用股票五日收盘价的平均值进行核算&#xff0c;然后描绘出股票短线的走势趋势。在技能图上&#xff0c;五日线通常以赤色或蓝色表示&#xff0c;不同的平台能够设定不同的色彩。 在实践应用过程中&a…

海康运行管理中心 RCE漏洞复现

0x01 产品简介 海康威视是以视频为核心的智能物联网解决方案和大数据服务提供商。海康运行管理中心是一款功能强大、易于使用的安防管理平台&#xff0c;能满足用户对视频监控、报警管理、设备配置和数据统计等方面的需求&#xff0c;帮助用户建立高效、智能的安防系统。 0x02…

前端算法专栏-数组-75.颜色分类

介绍 Hi 大家好。我是程序员库里&#xff0c;今天新开一个前端算法专栏。 接下来会分类给大家分享常考算法题目。 很多朋友也是看着这套系列算法拿到很多offer&#xff01;所以也是想分享给更多朋友&#xff0c;帮助到有需要的朋友。 分类 数组-三路快排 题目 75. 颜色分…

20-多线程

20.1线程简介 世间有很多工作都是可以同时完成的。例如&#xff0c;人体可以同时进行呼吸、血液循环、思考问题等活用户既可以使用计算机听歌&#xff0c;也可以使用它打印文件。同样&#xff0c;计算机完全可以将多种活动同时进这种思想放在 Java 中被称为并发&#xff0c;而…

JAVA基础进阶(八)

一、Map的体系结构 单列集合的顶层接口是Collection接口,双列集合的顶层接口是Map接口。 双列集合的元素是成对出现的&#xff0c;每一个元素称之为一个键值对。 二、Map系列集合的特点 Map系列集合的特点有以下几点: 键不能重复、值可以重复每一个元素都是一个键值对HashMa…

Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA图像处理方案FPGA图像缩放方案FPGA视频拼接叠加融合方案推荐 3、设计思路详解HLS 图像缩放介绍Video Mixer介绍 4、vivado工程介绍PL 端 FPGA 逻辑设计PS 端 SDK 软件设计 5、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他…

【C++ Primer Plus学习记录】do while循环

do while循环是出口条件循环。这意味着这种循环将首先执行循环体&#xff0c;然后再判定测试表达式&#xff0c;决定是否应继续执行循环。如果条件为false&#xff0c;则循环终止&#xff1b;否则&#xff0c;进入新一轮的执行和测试。这样的循环通常至少执行一次&#xff0c;因…

Element的安装与基本使用

文章目录 一.什么是Element?二.Element的安装(Vscode)三.在Vue项目中引入ElementUI组件库四.编写Element的Vue组件文件五.演示如何使用Element官网中的组件根组件中引入Element组件内容进行网页展示 一.什么是Element? Element是饿了么团队研发的一套为开发者与设计师等准备…

Unity工具脚本-检测资源文件夹是否有预制件是指定层级

效果&#xff1a; 先在菜单栏里面找到Tools/CheckPrefabLayers打开窗口 代码&#xff1a; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public class CheckPrefabLayers : EditorWindow {public in…

典型的SAST支持检测标准

这里我们列举了Coverity、Cobot、代码卫士、Klocwork、QAC、C test几款典型的SAST工具&#xff0c;看看他们都是支持那些C、C标准&#xff08;主要是C、C标准&#xff0c;其它语言较少&#xff09;呢&#xff1f; 这可以作为厂商研发的方向标。 &#xff08;结束&#xff09;