码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 嵌入式软件工程师面试题(九)


    ✅作者简介:大家好我是:嵌入式基地,是一名嵌入式工程师,希望一起努力,一起进步!
    📃个人主页:嵌入式基地
    🔥系列专栏:嵌入式习题专栏
    微信公众号:嵌入式基地

    嵌入式软件工程师面试题(八)

    • 1、STM32 中断是怎么进入到中断服务程序的?
    • 2、malloc和new的区别?
    • 3、为什么局部变量未赋值时,每次初始化的结果是不确定的?
    • 4、简述linux的锁机制?
    • 5、介绍下常用的gdb命令
    • 6、C++ 什么情况下必须用初始化列表
    • 7、linux用户态怎么进入内核态?
    • 8、操作系统条件变量的惊群效应是什么

    1、STM32 中断是怎么进入到中断服务程序的?

    • 点击查看 原题更多的解析与讨论

    在STM32中,为了区分不同的中断,每个设备有自己的中断号。
    系统有0-255一共256个中断。
    系统有一张中断向量表,用于存放256个中断的中断服务程序入口地址。
    每个入口地址对应一段代码,即中断服务程序。

    2、malloc和new的区别?

    • 点击查看 原题更多的解析与讨论

    1、申请的内存所在位置不同。new操作符从自由存储区上为对象动态分配内存空间,malloc函数从堆上动态分配内存。
    2. 返回类型安全性不同。new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。
    3. 内存分配失败时的返回值不同。new内存分配失败时,会抛出bac_alloc异常,它不会返回NULL。malloc分配内存失败时返回NULL。
    4. 是否需要指定内存大小不同。使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。malloc则需要显式地指出所需内存的尺寸。

    3、为什么局部变量未赋值时,每次初始化的结果是不确定的?

    • 点击查看 原题更多的解析与讨论

    定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。
    因为这段内存空间在栈上,而栈内存是反复使用的,上次用完没清零的。
    所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的,是不确定的。

    4、简述linux的锁机制?

    • 点击查看 原题更多的解析与讨论

    (1)互斥锁:mutex,保证在任何时刻,都只有一个线程访问该资源,当获取锁操作失败时,线程进入阻塞,等待锁释放。
    (2)读写锁:rwlock,分为读锁和写锁,处于读操作时,可以运行多个线程同时读。但写时同一时刻只能有一个线程获得写锁。
    (3)自旋锁:spinlock,在任何时刻只能有一个线程访问资源。但获取锁操作失败时,不会进入睡眠,而是原地自旋,直到锁被释放。这样节省了线程从睡眠到被唤醒的时间消耗,提高效率。
    (4)条件锁:就是所谓的条件变量,某一个线程因为某个条件未满足时可以使用条件变量使该程序处于阻塞状态。一旦条件满足了,即可唤醒该线程(常和互斥锁配合使用)
    (5)信号量。

    5、介绍下常用的gdb命令

    • 点击查看 原题更多的解析与讨论

    quit:退出gdb结束调试
    list:查看程序源代码
    reverse-search:字符串用来从当前行向前查找第一个匹配的字符串
    run:程序开始执行
    help list/all:查看帮助信息
    break:设置断点
    break get_sum:以函数名设置断点 break 行号或者函数名
    if 条件:以条件表达式设置断点
    watch 条件表达式:条件表达式发生改变时程序就会停下来
    next:继续执行下一条语句 ,会把函数当作一条语句执行
    step:继续执行下一条语句,会跟踪进入函数,一次一条的执行函数内的代码

    6、C++ 什么情况下必须用初始化列表

    • 点击查看 原题更多的解析与讨论

    1.成员类型是没有默认构造函数的类。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。
    2.const 成员或引用类型的成员。因为 const 对象或引用类型只能初始化,不能对他们赋值。

    7、linux用户态怎么进入内核态?

    • 点击查看 原题更多的解析与讨论

    linux从用户态到内核态的切换通过系统调用接口来实现,而系统调用切换时通过软件中断来完成,该中断是程序人员自己开发出的一种正常的异常,那么在Linux下,这个异常具体就是调用int $0x80的汇编指令,这条汇编指令将产生向量为0x80的编程异常。

    8、操作系统条件变量的惊群效应是什么

    • 点击查看 原题更多的解析与讨论

    惊群效应原本是:当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来。这样,每扔一块食物,都会惊动所有的鸽子,即为惊群。
    在操作系统中,多进程/多线程等待同一资源时,当某一资源可用时,多个进程/线程会惊醒,竞争资源。这就是操作系统中的惊群。

  • 相关阅读:
    chatGPT讲师AIGC讲师叶梓:大模型这么火,我们在使用时应该关注些什么?-5
    【详细学习SpringBoot源码之自定义监听器实战演练-6(自定义监听器、自定义监听事件、指定监听事件)】
    Documents for Imaging [GcImaging] 5.2.x Crack
    jsp基础语法
    Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)
    【每日一题Day330】LC337打家劫舍Ⅲ | 动态规划
    Go 微服务开发框架 DMicro 的设计思路
    【分立元件】贴片电阻过电压故障机理
    线路计算4800
    Vue3 快速入门和模板语法
  • 原文地址:https://blog.csdn.net/m0_51061483/article/details/127331385
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号