自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(676)
  • 收藏
  • 关注

原创 嵌入式面试总结

当进程对文件进行操作时,将进行权限检查,如果文件的set-user-ID位权限被设置,内核会将进程的有效ID设置为该文件的用户ID(文件所有者ID),意味着该进程直接获取了文件所有者的权限,以文件所有者的身份操作该文件。inode数据结构中记录了文件的硬链接数,当为文件每创建一个硬链接,inode节点上的链接数就会加1,每删除一个硬链接,inode节点上的链接数就会减1,直到为0,inode节点和对应的数据块才会被文件系统回收。

2024-07-22 09:10:32 741

原创 嵌入式面试总结

对于或运算,如果第一个表达式为真,不需要执行第二个表达式。对于与运算,如果第一个表达式为假,不用执行后面语句。

2024-07-20 10:12:29 551

原创 嵌入式面试总结

在计算机系统中,通常存储空间分为两种:内部存储空间和外部存储空间。内部存储空间通常访问速度比较快,能按照变量地址随机访问。也就是我们所说的RAM(随机存储器)。外部存储空间保存的内容相对固定,即使掉电后数据也不会丢失。变量,中间数据一般存放在RAM中,只有实际使用时才将它们从RAM调入到CPU中进行运算。一些数据需要的内存大小在程序运行过程中根据实际情况确定,这就要求具备动态管理内存的能力。

2024-07-19 07:36:54 601

原创 嵌入式面试

嵌入式实时多线程操作系统,基本属性之一是支持多任务。一个处理器核心在某一时刻只能运行一个任务。在RTT中,任务通过线程实现。RTT主要采用C语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。相较于Linux操作系统,RTT体积小,成本低,功耗低,启动速度快,实时性高,占用资源小,非常适用于资源受限的场合。物联网操作系统是指以操作系统内核为基础,包括文件系统、图形库等较为完整的中间件组件,具备低功耗、安全的软件平台。

2024-07-16 18:14:51 794

原创 嵌入式面试总结

new 、delete是C++中的操作符,而malloc、free是标准库函数。new、delete是类型安全的,new知道要分配对象的类型并调用构造函数,malloc只知道字节大小,不调用构造函数。new调用构造函数,delete调用析构函数。malloc、free不调用析构函数。new返回指定类型的指针,malloc返回void*,需要强制类型转换。new可以初始化对象,malloc不会初始化分配的内存。new在分配失败时抛出异常,malloc在分配失败时返回NULL。

2024-07-15 14:08:39 723

原创 嵌入式面试准备

malloc()从堆里面获得空间,也就是说函数返回的指针是指向堆里面的一块内存,操作系统中有一个记录空闲内存地址的链表,当操作系统收到程序的申请时,就会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该结点的空间分配给程序。依次从小到大取每个序列中的元素比较,较小的一个放进新序列,取完一个有序序列中的所有元素后,再把剩下一个序列中的元素放进新序列的后面的即可。最坏情况下,每次选择的基准总是数组中的最小或最大元素时,快速排序退化为链表,高度为n,每层需要进行n次比较。

2024-07-13 10:46:45 581

原创 操作系统——内存管理(面试准备)

我们来看这样一个例子。每个进程都有4GB的虚拟地址空间,而对于大多数程序来说,其使用到的空间远未达到4GB,因为会存在部分对应的页表项都是空的,根本没有分配,对于已分配的页表项,如果存在最近一定时间未访问的页表,在物理内存紧张情况下,操作系统会将页面换出到硬盘,也就是说不会占用物理内存。我们利用这一特性,把最常访问的几个页表项存储到访问速度更快的硬件,于是计算机科学家们,就在CPU芯片中,加入了一个专门存放程序最常访问的页表项的Cache,这个Cache就是TLB,通常称为页表缓存,转址旁路缓存、快表等。

2024-07-11 09:53:26 1170

原创 面试经典题

public:i--;i--;return res;使用分段存储管理方式,当进程在主存中没有找到需要访问的页面并且内存中没有空闲物理块,需要进行页面置换。产生缺页中断后,首先去内存寻找空闲物理块,若内存没有空闲物理块,使用相应的页面置换算法决定淘汰页面,然后调出淘汰页面,最后调入该进程需要访问的页面。volatile关键字并不能保证线程安全。HTTP协议的响应码由三个十进制数字组成,第一个数字为1~5表示5种状态。

2024-07-10 19:28:40 1294

原创 C++笔试真题

根据题意,当我们在矩阵上填写字符时,会向下填写r个字符,然后向右上填写r-2个字符,最后回到第一行,因此Z字形变换周期t = r + r - 2 = 2r - 2。设n为字符串s的长度,r = numRows,对于r=1(只有一行),或者r >= n(只有一列的情况),答案与s相同,可以直接返回。一个有序数组nums,原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。给一个整数数组nums,除某个元素仅出现一次外,其余每个元素都出现三次,找到并返回只出现了一次的元素。

2024-07-10 09:40:14 709

原创 面试经典150题

当遇到两个点时,只要栈不为空,就切换到上一级(弹出栈顶目录),当遇到目录名时,就放入栈。因此,如果展开表达式中所有的括号,则得到的新表达式中,数字本身不会发生变化,只是每个数字前面的符号会变化。如果将所有大写字符转换为小写字符,并移除所有非字母数字后,正着读和反着读一样,就认为短语是一个回文串。每次贪心匹配,匹配成功则i和j同时右移,匹配s的下一个位置,匹配失败则j右移,i不变。设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。给定字符串s和t,判断s是否为t的子序列。

2024-07-09 11:23:29 1150 1

原创 面试经典150题

如果我们能计算出所有dp[i][j]的值,那么其中的最大值即为矩阵中只包含1的正方形的边长的最大值,其平方就是最大正方形的面积。此外,还需要考虑边界条件,如果i和j中至少有一个为0,则以此位置为右下角的最大正方形的边长只能是1,因此dp[i][j] = 1。如果要移除的元素在数组的开头,例如序列[1,2,3,4,5],当val为1时,我们需要把每一个元素都左移一位。对于一个节点u,如果它的所有相邻节点都已经搜索完成,那么回溯到u的时候,u本身也会变成一个已经搜索完成的节点。那么称该排列是图G的拓扑排序。

2024-07-08 21:35:17 790

原创 面试准备算法

二叉搜索树的。

2024-07-05 09:44:59 367

原创 C++专业面试真题(1)学习

数组元素基本有序的情况下,快速排序是最慢的,因为会退化成冒泡排序,选择排序时间复杂度都是O(N2),堆排序都是O(nlogn),但是基本有序对插入排序是最好的,因为这样只需要比较大小,不需要移动,时间复杂度趋近于O(n)。例如,每个用户都有自己的目录,这样即使不同用户使用相同的文件名,也不会冲突。完全二叉树是一种特殊的二叉树,其中所有层都是完全填满的,除了最后一层,其节点都是从左到右排列的。快速排序是选中一个元素,将比其小的元素放在其左边,比其大的元素放在右边,然后递归处理。

2024-07-04 15:02:53 894

原创 C++专业面试真题(1)学习

面向过程思想完成一个需求的步骤:首先搞清楚做什么,然后分析怎么做,最后在通过代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,从而完成需求。在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。面向过程编程,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能函数相互调用,完成需求。面向对象思想面向对象的思想是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界。

2024-07-03 21:14:21 779

原创 面试准备算法

由于链表不支持随机访问,因此常见的找出链表中节点的方式是使用快慢指针,fast每次遍历两个元素,慢指针slow每次遍历一个元素,这样在快指针遍历完链表时,慢指针就恰好在链表的中间位置。给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。可以把n个城市和它们之间的相连关系看成图,城市是图中的节点,相连关系是图中的边,省份即为图中的连通分量。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正向右移动,负向左移动)。

2024-07-02 10:53:19 1024

原创 C++专业面试真题(1)学习

用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。I/O多路复用能够在单个线程中,通过监视多个I/O流的状态来同时管理多个I/O流,一旦检测到某个文件描述符上我们关心的事件发生,能够通知程序进行相应的读写操作。死锁是指在两个或多个进程之间,每个进程都在等待其它进程释放资源,从而导致这些进程都无法继续执行的现象。银行家算法:一种动态资源分配算法,在每次资源请求时,模拟资源分配情况,判断是否会进入不安全状态,只有在不会进入不安全状态时,才分配资源。

2024-07-01 17:52:51 1151

原创 C++专业面试真题(1)学习

孤儿进程孤儿进程是其父进程已经终止但它仍然在运行的进程。当父进程终止时,这些孤儿进程将被系统的systemd收养,由它们负责清理。系统会自动处理孤儿进程。init进程会接管这些孤儿进程,并调用wait系统调用清理它们的资源。僵尸进程僵尸进程是已经终止但其退出状态信息仍然保留在进程表中的进程。僵尸进程保留在进程表中,直到其父进程读取了它们的退出状态。僵尸进程不会消耗任何CPU或内存资源,但会占用进程表项。

2024-07-01 15:49:15 936

原创 面试准备算法

答案肯定是字符串的某个前缀,然后简单直观的想法是枚举所有前缀来判断,设前缀长度lenz,前缀串的长度必然要是两个字符串长度的约数才能满足条件。可以枚举长度,再去判断这个前缀串拼接若干次以后是否等于str1和str2。

2024-06-28 09:37:53 355

原创 嵌入式Linux应用层开发 I/O操作

每个进程都有一个文件描述符表:文件描述符表在底层通过数组来实现的。文件描述符实际上是这个数组的偏移量。执行代码int fd = open(“test.txt”, O_RDONLY);//描述符表会增加一项当我们执行open()等系统调用时,内核会创建一个新的struct file,这个数据结构记录了文件的元数据(文件类型、权限等)、文件路径、支持的操作等,然后分配文件描述符,将struct file维护在文件描述符中,最后将文件描述符返回给应用程序。

2024-06-20 07:42:32 768

原创 C++面试题

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。在多态中,通常父类中虚函数的实现都是毫无意义的,主要都是调用子类重写的内容。当子类重写父类的虚函数时,子类中的虚函数表内部会替换成子类的虚函数地址。多重继承:一个子类继承多个父类,这些父类可能继承同一个父类。在继承之前,加上关键字virtual,变为虚继承。解决方法:将父类中的析构函数改为虚析构或纯虚析构。当父类指针或引用指向子类对象的时候,发生多态。两个类有共同的父类,又有共同的子类。纯虚函数写法:将{}改为= 0;

2024-06-19 18:52:06 479

原创 面试经典150题

每一轮迭代,将nums[end]加到sum,如果sum≥s,则更新子数组的最小长度(此时子数组的长度是end-start+1)我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积相乘得到答案。dp[i][0]:表示第i天交易完后手里没有股票的最大利润,dp[i][1]表示第i天交易完后手里持有一只的最大利润。找出该数组中满足其总和大于等于target的长度最小的子数组,并返回长度。找出总和大于等于target的最小子数组的长度,如果没有,返回0。

2024-06-18 11:07:54 418

原创 Leetcode面试经典150题

机器人每次只能向下或者向右移动一步,所以从坐标(0,0)到坐标(i,j)路径总数的值只取决于从坐标(0,0)到坐标(i-1,j)的路径总和和从坐标(0,0)到坐标(i,j-1)的路径总数。用f(i,j)来表示从坐标(0, 0)到坐标(i, j)的路径总数,u(i,j)表示坐标(i,j)是否可行,如果坐标(i,j)有障碍物,u(i,j)=0,否则u(i,j)=1。采用自下而上的方式进行思考,仍定义F(i)为组成金额i所需最少的硬币数量,假设在计算F(i)之前,已经计算出F(0)到F(i-1)的答案。

2024-06-17 11:21:40 487

原创 leetcode热题100

每分钟腐烂的橘子会使上下左右相邻的新鲜橘子腐烂,这其实是一个模拟广度优先搜索的过程。所谓广度优先搜索,就是从起点触发,每次都尝试访问同一层的节点,如果同一层都访问完了,再访问下一层,最后广度优先搜索找到的路径就是从起点开始的最短合法路径。

2024-06-15 07:34:13 318

原创 Leetcode热题100

如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。给一个长度为n的链表,每个结点包含一个额外增加的随机数指针random,该指针可以指向链表中的任何节点或空节点。对于当前节点,我们首先要进行拷贝,然后进行当前节点的前节点和后节点拷贝,拷贝完成后将创建的新节点的指针返回。用head表示原始链表的头节点,新的链表的第二个节点,newHead为新的链表的头节点。如果是普通链表,可以直接按照遍历的顺序创建链表节点。

2024-06-13 08:03:43 300

原创 C++面试准备

声明可以有多次,但是定义只能有一次。

2024-06-12 14:58:51 965

原创 Leetcode热题100

由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。如果我们位于位置(x,y),那么以matrix的左下角为左下角,以(x,y)为右上角的矩阵中搜索,即行的搜索范围[x,m-1],列的范围[0,y]初始时,慢指针在位置head,快指针在位置head.next,如果快指针反过来追上慢指针,说明链表为环形链表,否则快指针到达链表尾部。在更改之前还需存储后一个节点。定义两个指针,一快一慢,慢指针每次只移动一步,快指针每次移动两步。

2024-06-12 07:32:13 1089

原创 LeetCode热题 100

仔细分析这个过程,会发现其中执行了很多不必要的枚举,如果已知有一个从x开始的连续序列,而我们却从x+1开始,那么得到的结果肯定不会优于枚举x为起点的答案,因此我们在外层循环的时候碰到这种情况跳过即可。对于匹配的过程,暴力的方法是O(n)遍历数组去看是否存在这个数,但其实更高效的方法是使用一个哈希表存储数组中的数,这样查看一个数是否存在即能优化至O(1)的时间复杂度。仅仅是这样,我们的算法时间复杂度最坏情况下还是会达到O(n²)(外存需要枚举O(n)个数,内存需要暴力匹配O(n)次),无法满足题目的要求。

2024-06-11 09:15:17 1066

原创 Leetcode学习

对于给定的链表,首先对除了头节点head以外的节点进行删除操作,然后判断。递归的终止条件是head为空,此时直接返回head。当head不为空时,递归地进行删除操作,然后判断 head 的节点值是否等于 val并决定是否要删除 head。

2024-06-04 19:43:35 791

原创 物联网面试准备

串行通信接口:按位发送和接收的接口。如:RS-232/422/485等。RS-232接口(DB9)

2024-06-03 08:49:09 1054

原创 LuatOS学习

未声明的变量就是nil,nil用来表示此变量为空。在测试环境中,用print(a,b)打印。脚本语言是从上往下一行一行运行的。

2024-05-28 13:41:23 449

原创 RTT UART设备框架学习

UART(Universal Asynchronous Receiver/Transmitter)通用异步收发传输器,UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。是在应用程序开发过程中使用频率最高的数据总线。UART串口的特点是将数据一位一位地顺序传送,只要2根传输线就可以实现双向通信,一根线发送数据的同时用另一根线接收数据。

2024-05-28 09:46:48 851

原创 LuatOS-Air二次开发学习

在介绍LuatOS-Air之前,先介绍下LuatOS。LuatOS是合宙自研的嵌入式操作系统。覆盖各类物联网应用场景,可运行于4G Cat.1/MCU/NB-IoT/2G/Wi-Fi/蓝牙等等不同的物联网主控芯片。通过完善的嵌入式操作系统LuatOS,使得物联网主控CPU更容易被用户使用,大幅度降低用户的研发成本和研发周期。LuatOS从2014年推出至今,一直深受广大用户好评,在多行业多应用领域得到充分验证,功能非常齐全,性能非常稳定。

2024-05-25 09:53:26 811

原创 LuatOS-iRTU

除此之外,传统DTU不支持市场需要,LuatOS-iRTU可能也支持,比如丰富的外设驱动库(ADC、I2C、SPI等接口,支持传感器、LCD等),比如数据流模板(可自定义解析处理网络端和主控MCU端的双向数据),比如自定义任务功能(可服务器配置编程脚本远程OTA更新,功能即时扩充)。搭载LuatOS-iRTU的系统级主控DTU,配置功能中包含一个强大的任务配置项,支持脚本编程,在不修改DTU固件的前提下,可以在任务中添加脚本代码配置,DTU下载最新配置参数,就可以轻松支持。支持WEB端和PC段配置功能。

2024-05-25 07:54:11 638

原创 Luat学习

物联网模块就是一个微型电路板。作为电路板设计,根据电路的类型不同,设计难度也大不相同。一般来说,工作频率越高,密度越高,功率越大,信号精度要求越高电路的设计难度就越大。像物联网通信电路,由于同时涉及了高频,超微型,高灵敏度等设计目标,所以设计难度相当的大,可以算作是电路设计领域“王冠上的明珠”了,正因为设计难度大,一般客户无法驾驭,所以需要顶尖级的设计专家来完成。由于大多数客户无力负担独立设计这部分电路的能力,因此这部分工作也就被独立出来,形成了一个细分的行业。

2024-05-24 13:52:33 885

原创 OTA升级概述

OTA(Over-the-Air Technology)即空中下载技术,基于无线网络对设备固件、软件或驱动进行更新。通过OTA升级,可以对物联网设备更新功能、修复漏洞、优化性能。如果物模型不能满足业务需求,可以使用自定义Topic实现设备上下行通信。产品的自定义Topic类会自动映射为该产品下所有设备的自定义Topic。物联网平台对自定义Topic通信的数据格式没有要求,需您自定义。本文介绍如何为产品自定义Topic类及自定义Topic的使用和通信说明。

2024-05-21 10:59:15 727

原创 ADC定时采集上报数据

低功耗处理集中实现了各个独立模块的低功耗处理需求,并在系统进入空闲模式时管理这些低功耗任务。例如,当UART2的DMA用于向控制台打印数据时,系统不得进入低于睡眠模式的低功耗模式,因为DMA时钟在停止模式下关闭。每个需要低功耗管理的模块需要在utilitie_def.h中定义一个ID,最多可以定义32个ID。

2024-05-16 09:54:41 994

原创 MQTT学习(二)

JavaScript Object Notation,JS对象简谱,是一种轻量级的数据交换格式,JSON指的是JavaScript对象表示法。客户端使用PUBLISH报文发送应用消息给服务端,目的是分发到其它订阅匹配的客户端。PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。主题名Topic Name:用于识别有效载荷数据应该被发布到哪一个信息通道。服务端使用PUBLISH报文发送应用消息给每一个订阅匹配的客户端。有效载荷包含将发布的应用消息。数据的内容和格式是应用特定的。

2024-05-13 10:28:54 457

原创 MQTT学习(一)

产品:设备的集合,通常指一组具有相同功能的设备。物联网平台为每个产品颁发全局唯一的productKey。每个产品下最多可以包含50万个设备。设备:归属于某个产品下的具体设备。物联网平台为设备颁发产品内唯一的证书DeviceName。设备可以直接连接物联网平台,也可以作为子设备通过网关连接物联网平台。Topic:Topic是UTF-8字符串,是发布(Pub)/订阅(Sub)消息的传输中介。可以向Topic发布或者订阅消息。Topic类:同一产品下不同设备的Topic集合,用productK。

2024-05-13 08:29:35 1119

原创 LoRa模块学习

LoRa(Long Range,远距离)是一种调制技术,与同类技术相比,提供更长的通信距离。调制是基于扩频技术,线性调制扩频(CSS)的一个变种,具有前向纠错(FEC)。LoRa显著地提高了接受灵敏度,与其它扩频技术一样,使用了整个信道带宽广播一个信号,从而使信道噪声和由于使用低成本晶振而引起频率偏移的不敏感性更健壮。LoRa 可以调制信号 19.5dB 低于底噪声,而大多数频移键控(FSK)在底噪声上需要一个 8-10dB 的信号功率才可以正确调制。

2024-05-10 09:26:39 1212

原创 Core_Air724UG学习

2哥标准2.54mm排针管脚,其中主要管脚已经全部引至外置排针,用户可以根据实际情况焊接单排或者双排的排针,方便用于在使用过程中核心板从座子上拔插下来,同时其它设备可以直接使用杜邦线连接,免去了模块布线的步骤,方便开发。Core_Air724UG核心板是基于Air724UG cat1模板制作的开发实验板。该模块支持Lua二次开发或AT指令,方便开发者根据自己的需求灵活选择。Core_Air724UG核心板专注于小型化,PCB尺寸42。46mm,有12x2。

2024-05-09 17:04:34 313

随机过程-排队论-习题解答

随机过程-排队论-习题解答

2022-10-27

随机过程排队论习题解答

课后习题答案

2022-10-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除