为什么面试要问底层原理自我看法

2023-05-16

       每次面试时别人都会问一些底层问题。但如果面试上后,去公司写的还是业务代码。为什么要这样呢,我面试过很多公司,但是很少有面试官知道为什么要去问底层。只是他们知道别人都在问,那我也要问,无论我要什么级别的人,我都要这样问这些问题,如果你不懂,面试就不通过,我不能拉低了我们公司的门槛。

       前一段时间在复习操作系统课程准备考试,然后在老师的一节课中,我突然悟到了这点。这节课讲的是死锁。

       在我对死锁一知半解的时候,只知道两个有两个方法,里面的逻辑是,第一个方法先执行A任务得到一个结果带入到B任务,第二个方法是先执行B任务得到一个结果带入到A任务。如果两个线程同时开始执行这两个方法,那么就会造成死锁。怎样解决这个问题呢。我当时回答是不要写类似上述方法就好了。

       后来学了死锁后,就能清楚的讲清楚里面的原理,首先还是基于上面的场景,怎样描述清楚呢。这就是产生死锁的四个必要条件:

 

首先操作系统定义了一个资源在同一时间内只能被一个线程使用。

1。互斥,第一个线程使用A接着要使用B,但是B被第二个线程占用着。造成互斥

2。不可抢占,接着上面,这时候第一个线程不能强行kill第二个线程。

3。请求保持,接着上面,第一个线程在没有使用B的时候,A就一直在使用着,不能被别的线程使用

4。循环等待,第一个线程占用着A,要使用B,在等待第二个线程释放B。但是第二个线程在使用B,要使用A,在等待第一个线程释放A。但是第一个线程占用着A,要使用B,在等待第二个线程释放B。但是第二个线程在使用B,要使用A,在等待第一个线程释放A。。。。。。。。。。

了解这些后,就来解决死锁的问题,破坏其中任意一个条件就能解开死锁。首先不可抢占和请求保持是计算机硬件,操作系统定义的。如果你想破坏这两个条件,那么你可以自己写一个新的操作系统出来。不过如果你破坏了这两个条件,还不知道会出现什么新的漏洞。

所以A使用B,B使用A这种行为是业务逻辑上的行为,我们可以针对这方面入手。破坏互斥,既然一个资源只能被一个进程使用。那么我在使用A之前,先拿到B的资源。都拿到了我才去执行这个线程的任务,否则我就释放A资源。这样就破坏了互斥。

然后破坏一下循环等待,既然在等待,那么我就设置让你超时自动释放,重新再来争夺资源,这样就破坏了循环等待。

 

所以说当我了解死锁原理和一知半解的时候就有很明显的两个不同之处。 第一讲解死锁清晰和不清晰,第二处理死锁正确方法和错误方法。程序的两个重点特性正确性和可用性。正确性就是代码的业务逻辑走的流程是否正确,这点基本上大多数程序员都能做到。可用性,程序成功运行的情况,如果程序奔溃了,不懂底层的人就没有分析bug原因的能力,可能处理的就特别慢。懂底层的人就会快速通过分析底层原理的方法推测bug在哪。

所以我认为之所以要去了解底层原理是因为。底层原理都是被设计出来的。只要是设计出来的,肯定会有漏洞。你只有了解了底层原理,才能写出一些避免这些漏洞的代码,也就是不会写出bug。 当你了解怎样避免漏洞时,你才能更快的从生产的bug中定位到问题所在。

比如说我现在对内存溢出这点了解的不是很多。如果我被问到,就会说程序所有资源占用的内存超过了虚拟机的最大内存,解决方案增加虚拟机的内存或者重启释放内存。如果懂内存写入和释放的算法原理,就会基于算法的优缺点去针对性的去调整,不仅能解决内存泄露这个问题,还能提高性能效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么面试要问底层原理自我看法 的相关文章

  • java实现采集(爬)网页中的信息

    大家好 xff0c 我是雄雄 xff0c 欢迎关注微信公众号 xff1a 雄雄的小课堂 前言 爬虫 xff0c 大家都听过 xff0c 可能好多人的第一印象 xff0c 就是使用python进行操作 xff0c 但是除了python之外 x
  • springboot中如何解决redis空闲连接时自动休眠的问题

    大家好 xff0c 我是雄雄 xff0c 欢迎关注微信公众号 xff1a 雄雄的小课堂 前言 今天发现了个神奇的问题 xff0c redis在长时间不使用的时候 xff0c 再次使用的时候 xff0c 会报错500 xff0c 看了下日志
  • 计算机各个岗的内容以及职责(简单整理)

    大家好 xff0c 我是雄雄 xff0c 欢迎关注微信公众号 xff1a 雄雄的小课堂 美工UI 主流技术 xff1a 平面设计软件 如Photoshop Illustrator Sketch等 用于界面设计和资源切图矢量图绘制软件 如Il
  • java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示

    注意 xff1a 看完之后如有不懂 xff0c 请看 xff1a 关于人脸和指纹识别共同交流方案 xff0c 也可以关注微信公众号 xff1a 雄雄的小课堂 xff0c 回复 xff1a 人脸识别群获取群号 xff0c 群内有直接可以运行的
  • 人脸识别活体检测之眨眨眼和张张嘴

    这段时间有点忙 xff0c 终于截止今天2018 06 22完成了人脸识别的最后一道程序 活体检测之眨眨眼和张张嘴 关于人脸识别的内容我之前也写过好几篇博文 xff0c 其中有 xff1a java实现人脸识别源码 C winforms实现
  • ps中扩展画布的时候,不能选择扩展画布部分的颜色解决方法

    在PS中 xff0c 我们有时候会遇到扩展画布的场景 xff0c 但是扩展完画布之后我们发现不能改变颜色 xff0c 这可怎么办 首先来看一下是什么样的问题 xff1a 这个背景是不能选择的 问题分析 xff1a 这是因为你创建的画布的时候
  • eclipse下载与安装步骤详解,包含解决错误(最全最详细)

    以前一直用的是myeclipse 今天有幸接触eclipse 那我们就先来安装的配置一下 xff0c 下载地址 xff1a 点击下载密码 xff1a h0kg xff0c 下载完成以后就可以安装了 xff0c 首先我们来先安装jdk1 7
  • 如何在vm虚拟机里面安装win10操作系统

    首先打开虚拟机 xff0c 点击创建虚拟机 然后选择典型即可 xff01 选择稍后安装操作系统 然后选择win10 64位 然后在找个路径 xff1a 默认60GB即可 xff0c 也可以更改大小 xff1a 最后点击完成 xff1a 接下
  • 前端工程化 - 剖析npm的包管理机制

    导读 现如今 xff0c 前端开发的同学已经离不开 npm 这个包管理工具 xff0c 其优秀的包版本管理机制承载了整个繁荣发展的NodeJS社区 xff0c 理解其内部机制非常有利于加深我们对模块开发的理解 各项前端工程化的配置以加快我们
  • 学习笔记 | 核心网KPI异常检测

    核心网KPI异常检测 业务目标 核心网在运营商网络中位置高 xff0c 很少发生故障 但一旦发生故障 xff0c 对全网稳定性和服务质量影响很大 xff0c 另外 xff0c 有时候网络问题只影响小部分用户 xff0c 此时没有显性告警 x
  • imx8mp usb转四串口不能使用问题

    使用usb 4串口 xff0c 不能识别 xff0c 注册为 acm类 在 acm 类驱动 probe函数中 将通过usb idVen dor 过滤 drivers usb class cdc acm c printk 34 s x x n
  • k8s部署微服务

    一 安装nfs服务 由于资源有限 xff0c 以master节点所在虚拟机作为nfs服务器 1 确认是否安装nfs rpm qa nfs utils rpcbind 如果未安装 xff0c 则安装 nfs服务器上安装2个模块 xff1a y
  • windows下QtCreator配置clang环境

    1 下载clang版本 下载地址 xff1a https github com llvm llvm project releases tag llvmorg 12 0 0 我选择的是LLVM 12 0 0 win64 exe 下载后安装 x
  • Ubuntu20.04 tcp调试工具mNetAssist安装

    1 下载 tcp调试工具 mNetAssist deb下载地址 xff1a https cloud 189 cn t ra2M7juimAFb 访问码 k9kv 2 安装 用命令行安装软件如下 xff1a span class token
  • 为什么中断子程序中不能使用延时和过长的程序?

    A回答 xff1a 通常在中断子程序中是不调用延时子程序的 xff0c 这样会增加中断处理时间 xff0c 如果有其它低级中断了 xff0c 就会延误响应中断了 所以 xff0c 中断子程序中不要写调用延时子程序 xff0c 中断子程序也不
  • APP管理平台--后端篇,项目配置(一)

    作为一个Spring Boot Maven项目肯定会有各种配置 xff0c 配置Spring的 xff0c 配置Maven的 xff0c 还有数据库的 xff0c 甚至其他的 xff0c 也有不要Maven转向Gradle配置方式的 随心所
  • vscode C/C++ 调试配置

    本文目录 前言一 已有VSCODE环境可正常运行 c cpp文件二 以test cpp为例进行调试配置1 按F5 xff08 启动调试 xff09 利用vscode自动生成tasks json launch json2 对tasks jso
  • pixhawk飞控接口含义

    官方文档 xff1a https docs px4 io v1 9 0 en flight controller pixhawk html 1 spektrum DSM receiver2 xff0c 3 远程通信口 xff0c 接数传4
  • 非线性优化库学习资料:Ceres Gtsam G2o

    其中 Ceres 资料最完善也相对稳定 xff0c 是谷歌的非线性优化库 xff0c Google Cartographer 就是调用了该库 http www ceres solver org tutorial html 既可以作为 Cer

随机推荐

  • 解决ros抛出escalating to SIGTERM问题

    运行ros节点执行ctrl 43 c后进程会转而执行rosspin 后面的程序 xff0c 但是如果在一定时间内程序没有执行完毕 xff0c 进程会强制退出 xff0c 并抛出 escalating to SIGTERM 错误 xff0c
  • Ubuntu18.04 ros-melodic opencv版本冲突问题解决

    原链接 xff1a https blog csdn net Shushan1 article details 116588614 问题描述 ros自带的opencv版本和自己安装的opencv版本冲突导致如下报错 解决办法 修改cv bri
  • ubuntu中,出现Failed to fetch http://…..时,需要换源

    欢迎关注 xff1a 天际使徒的个人博客 问题描述 xff1a 出现Failed to fetch http 问题原因 xff1a 一般是由于直接使用国外的源无法连接的原因导致的解决方案 xff1a 直接替换成国内的源即可 xff08 1
  • yocto 使用技巧

    相当详细的文章就是转运一下 xff0c 方便大家阅读 xff0c 原版文章可以看原链接 对于大家使用Yocto中的一些疑问 xff0c 使用寥寥数语进行解答 xff0c 让大家快速高效地使用Yocto 1 Yocto 编译后文件放在了哪里
  • 基于蚁群算法的10个城市TSP问题的最短路径研究(附源码及讲解步骤)

    基于蚁群算法的10个城市TSP问题的最短路径研究 欢迎关注 xff1a 天际使徒的个人博客 1 蚁群算法 1 1 蚁群算法的流程步骤 这里以TSP问题为例 xff0c 算法设计的流程如下 xff1a 步骤1 xff1a 对相关参数进行初始化
  • (pycharm,typora,chrome补充中……)使用中,小tips

    欢迎关注 xff1a 天际使徒的个人博客 文章目录 pycharmpython解释器界面小说明 xff08 转载 https www cnblogs com xiashuai future p 11192346 html xff09 连按两
  • pycharm安装matplotlib失败(2020最新)

    欢迎关注 xff1a 天际使徒的个人博客 请修复网络 使用国内镜像速度会快很多 xff1a 临时使用 xff1a pip install i https pypi tuna tsinghua edu cn simple some packa
  • qq群文件无法打开显示内容?

    欢迎关注 xff1a 天际使徒的个人博客 解决方法 xff1a 打开ie浏览器 右上角齿轮 gt Internet选项 gt 连接 gt 局域网设置 只勾选 自动检测设置 把代理关了 就能正常显示
  • Windows10下开机任务栏透明TranslucentTB(其他需要自启动软件感觉可以通用)

    转载 xff1a https blog csdn net weixin 43977619 article details 109602040 下载运行 1 下载解压后可以直接运行TranslucentTB应用程序 TPS xff1a 链接已
  • 私藏搜索思路,怎么搜索信息更快更准?

    欢迎关注 xff1a 天际使徒的个人博客 当我们需要查点东西的时候 xff0c 自然而然会想到百度一下 xff0c 但是 xff0c 百度上的质量参差不齐 xff0c 需要筛选 下面我提供一种搜索信息的思路 百度一下 xff08 常识 xf
  • 连续区间多类型KPI异常检测

    文章目录 TitleSummaryResearch ObjectiveProblem StatementMethod s EvaluationConclusion Title ALSR An Adaptive Label Screening
  • KPI自动化异常检测系统——Opprentice

    论文 xff1a Opprentice Towards Practical and Automatic Anomaly Detection Through Machine Learning 文章目录 问题设计思想算法细节 问题 KPI类型很
  • 特征提取和深度学习的KPI异常检测方法—组合模型

    文章目录 简介挑战总体设计数据预处理特征提取数据均衡模型训练模型综合 方案来自于首届AIops挑战赛亚军团队 简介 问题场景就是运维中kpi异常检测 xff0c 希望可以提高检测的准确率 该团队的思路是提取特征然后用集成学习的方法将异常检测
  • docker 安装、升级

    docker 安装 升级 服务器版本 Centos 7 9 1 有外网情况下 docker 升级 镜像下载地址 xff1a https download docker com linux centos 7 x86 64 stable Pac
  • stty 命令说明及使用讲解

    UNIX系统的命令很多 xff0c 但是巧妙使用命令的方法更多 随着经验的积累和观察学习其他用户的实践 xff0c 我们也可学会解决特殊问题的方法 这里谈谈自己使用UNIX系统中stty命令的一些体会 xff0c 希望能与你共享 1 xff
  • Opencv3.4.1+contrib3.4.1+vs2017配置(主要解决了编译的时候找不到.lib文件的问题)

    一般出现找不到 lib库文件都是环境变量配置没弄好或者是依赖项或包含库没设置好 xff0c 下面是我的步骤 xff0c 大家可以参考以下 xff08 大家一定要注意环境变量哪里的bin别弄成lib xff0c 2天不断重装的血泪教训 xff
  • PX4概念

    本文针对多选翼飞行器 MANUAL ACRO 飞行器的输入作用于roll pitch和yaw的速率 油门直接作用于输出 RATTITUDE 如果飞行器的输入大于该模式下的阈值 xff0c 那么飞行器的输入将作用于roll pitch和yaw
  • 一道js编程题:用js实现栈的出栈,入栈等操作

    这是4月份某公司前端实习笔试的一道编程题 xff0c 要求是实现 xff1a 入栈 xff1a NumberStack push num 出栈 xff1a NumberStack pop 找出栈中第n大的数 xff1a NumberStac
  • MPU6050误差分析

    MPU6050模块 xff0c 如图 1所示 该模块集成了一片MPU6050芯片和一片STM8S003F3P6单片机 xff0c 具有串口和I2C接口 MPU6050中的DMP xff08 数字运动处理器 xff09 对姿态进行融合 xff
  • 为什么面试要问底层原理自我看法

    每次面试时别人都会问一些底层问题 但如果面试上后 xff0c 去公司写的还是业务代码 为什么要这样呢 xff0c 我面试过很多公司 xff0c 但是很少有面试官知道为什么要去问底层 只是他们知道别人都在问 xff0c 那我也要问 xff0c