首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

嵌入式经典面试题

多线程应用中被几个任务共享变量 2, 一个指针可以是volatile ?解释为什么。 2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer指针时。 9....希望看到几个要点:说明常数、|=和&=~操作。 11. 中断是嵌入式系统中重要组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。...所谓“”是把一个字节中二进位划分为几个不同区域,并说明每个区域位数。每个一个域名,允许在程序中按域名进行操作。这样就可以把几个不同对象用一个字节二进制来表示。...如一个字节所剩空间不够存放另一时,应从下一单元起存放该位。也可以有意使某位从下一单元开始。...由于不允许跨两个字节,因此长度不能大于一个字节长度,也就是说不能超过8二进位。    3. 可以域名,这时它只用来作填充或调整位置。无名是不能使用

1.5K31

对象原理探究(二)

因为一个字节8,即00000000,如果只需要存储一个布尔值,即非0即1,我们没有必要使用8只需要使用1即可(0表示no ,1表示yes)。...因此,可以定义一个char类型(char是一个字节),一个char8,我们就可以使用这8后4来分别定义前后左右了。这样就能节省很多内存空间。...除了根据bits来知道isa指针占8个字节,根据ISA_BITFIELD也可以知道。ISA_BITFIELD是一个结构体,而结构体里面的内容算一下的话也是64,即8个字节: ?...第37到第42是magic,它用于调试器判断当前对象是真的对象还是没有初始化空间 第43是weakly_referenced,它标志对象是否引用,没有弱引用对象可以更快被释放 第44是deallocating...或者说,类对象可以创建多份

38510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    分享 Java 常见面试题及答案(上)

    多线程、并发及线程基础问题 1)Java 中能创建 volatile 数组? 能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组引用,而不是整个数组。...意思是,如果改变引用指向数组,将会受到 volatile 保护,但是如果多个线程同时改变数组元素,volatile 标示符就不能起到之前保护作用了。...因为 Java 中读取 long 类型变量不是原子,需要分成两步,如果一个线程正在修改该 long 变量值,另一个线程可能只能看到该值一半(前 32 )。...double 和 long 都是64宽,因此对这两种类型读是分为两部分,第一次读取第一个 32 ,然后再读剩下 32 ,这个过程不是原子,但 Java 中 volatile 型 long...并且需要知道 clone() 方法是一个本地方法,这意味着它是由 cc++ 或 其他本地语言实现。 23)Java 中 ++ 操作符是线程安全? 不是线程安全操作。

    75020

    软件方法(下)第8章分析之分析类图—知识篇Part06(202205更新)

    图8-60 经过透镜前后概念对比 对每一个用语我们都可以这样过一下:这个用语属于核心概念?如果不属于,映射到核心概念意味着什么?...例如,图8-61左侧,“商品”一个“加粗显示”属性来标记它是否加粗显示。如果核心是“商品”相关领域,那么“加粗显示”不属于核心概念。我们可以追问:为什么要“加粗显示”?...在对知识二已经了共识情况下,再加上一个“类”字是冗余。...图8-62 删除命名中冗余部分 关于类和属性命名,常犯冗余错误: (1)在类名最后加"类"字; (2)在类名前面加"Class"或"C"; (3)在类名最后加"情况"、"信息"、"记录"、...(4)因为类属性是“类”属性,所以,给属性前面加上类名称。 (5)因为关联也是属性一种,只不过类型是另一个类,所以,每个类为关联加一个属性。

    23710

    字节跳动最爱考前端面试题:JavaScript 基础

    (符号 + 指数位 + 小数部分有效) 问:Number() 存储空间是多大?...如果函数返回一个对象,那么new 这个函数调用返回这个函数返回对象,否则返回 new 创建新对象 问:symbol 什么用处 可以用来表示一个独一无二变量防止命名冲突。但是面试官问还有?...没想出其他用处就直接答不知道了,还可以利用 symbol 不会被常规方法(除了 Object.getOwnPropertySymbols 外)遍历到,所以可以用来模拟私有变量。...闭包产生本质 当前环境中存在指向父级作用引用 什么是闭包 闭包是一种特殊对象,它由两部分组成:执行上下文(代号 A),以及在该执行上下文中创建函数 (代号 B),当 B 执行时,如果访问了 A...,bind了一个对象,用这个构造函数创建出实例会继承这个对象属性

    1.4K20

    一文带你走进 Rust 和 WebAssembly 世界

    与JavaScript部分相似的语法,就入门来说,应该不难(大概) 安全高效新兴语言,通过Rust你可以对计算机底层是如何操作一个基本认识。...对于此,Rust采用了一个规则,禁止把引用堆空间栈空间变量改变(栈空间上值类型可以直接引用),因为Rust 不需要在被首次分配空间变量离开作用后清理任何东西。...当持有堆中数据值变量离开作用时,其值将通过 drop 被清理掉,除非数据被移动为另一个变量所有。...如果我们想要函数使用一个值但不获取所有权该怎么办呢?这里就需要引用和借用(可以理解为c里面的指针)。...一个思路就是可以直接把 CC++、Rust等语言编译成 WebAssembly 并能在浏览器中运行,但是一点需要注意,使用wasm并不是完全舍弃掉了JavaScript,这两者实际上是相辅相成关系

    2.1K20

    ip addr 和 ifconfig「建议收藏」

    大家好,又见面了,是你们朋友全栈君。 你知道怎么查看 IP 地址? 当面试听到这个问题时候,面试者常常会觉得走错了房间。面试是技术岗位啊,怎么问这么简单问题?...于是就有了ipv6,也就是上面结果里面的inet6 fe80::f816:3eff:fec7:7975/64 本来32ip地址就不够用,还被分成了5类 a,b,c类主要分两部分,前面一部分是网络号...于是一个折中方式叫做无类型间选路,简称CIDR 无类型间选路(CIDR) 这种方式打破了原来设计几类地址做法,将32ip地址一分为2,前面是网络号,后面是主机号。那么从哪里分呢?...伴随着CIDR存在一个是广播地址,10.100.122.255。如果发送这个地址,所有10.100.122网络里面的机器都可以收到。另一个是子网掩码,255.255.255.0。...既然这样,整个互联网通信,全部用mac地址就好了,只要知道了对方mac地址,就可以把信息传过去。 这样当然是不行一个网络包要从一个地方传到另一个地址,除了要有确定地址,还需要有定位功能。

    95810

    【笔记】《C++Primer》—— 第19章:特殊工具与技术

    其中个人觉得19.1对new和delete讨论很重要,19.2RTTI介绍也扩展了我们编码自由度,最后19.8让我们可以更方便地进行运算。...这个类型主要是让我们可以将一组整型常量组织在一起,像一个简单文件夹一样 C原本只有一种枚举类型:不限定作用枚举。C11加入了限定作用枚举。...典型不可移植特性是2.1中说到算术类型在不同机器上差异 类可以将其数据成员定义为(bit-field),一个域中含有一定数量二进制位数据,定义方式是Bit name: bitCount;...bitCount就是其包含二进制位数 连续定义会被编译器压缩在一个整数相邻中,但是如何压缩是机器相关 通常是使用运算符来操作 程序中可能有一些变量并不由程序自身控制,例如与时钟相关变量...链接指示函数可能不支持一些特性,例如C函数无法重载和传递对象 我们也可以一个C++定义函数标记链接指示,这样会使得这个函数可以被目标语言调用

    84940

    Java 面试问题大全

    因为 Java 中读取 long 类型变量不是原子,需要分成两步,如果一个线程正在修改该 long 变量值,另一个线程可能只能看到该值一半(前 32 )。...double 和 long 都是64宽,因此对这两种类型读是分为两部分,第一次读取第一个 32 ,然后再读剩下 32 ,这个过程不是原子,但 Java 中 volatile 型 long...并且需要知道 clone() 方法是一个本地方法,这意味着它是由 cc++ 或 其他本地语言实现。 23)Java 中 ++ 操作符是线程安全? 不是线程安全操作。...(答案) 这是在写Java 并发程序时候遵循一些最佳实践:a)给线程命名,这样可以帮助调试。b)最小化同步范围,而不是将整个方法同步,只对关键部分做同步。...组合中,一个对象是另一个拥有者,而聚合则是指一个对象使用另一个对象。

    91340

    最常见 35 个 Python 面试题及答案(2018 版)

    深拷贝-Python 面试问题及答案 浅拷贝是将对象引用复制给另一个对象。因此,如果我们在副本中进行更改,则会影响原对象。使用 copy()函数进行浅拷贝,使用方法如下: ?...当然,所有传递都会增加执行开销。 Q.6. 解释继承 一个类继承自另一个类,也可以说是一个孩子类/派生类/子类,继承自父类/基类/超类,同时获取所有的类成员(属性和方法)。...答案是否定。那些具有对象循环引用或者全局命名空间引用变量,在 Python 退出是往往不会被释放 另外不会释放 C 库保留部分内容。 Q.11. 什么是猴子补丁? 在运行时动态修改类和模块 ?...字典是C++和 Java 中没有见过数据结构,它拥有键-值对 ? 3 字典是可变,我们也可以用推导式方式创建它. ?...对在外部作用(但不是在全局作用变量进行引用,那么内部函数就是一个闭包。 ? 7 闭包详细解释请点击 Closures in Python。

    4.5K31

    C语言】一篇速通结构体

    所以在这里结构体实际上也是复杂对象类型称之为构造类型,觉得可以把这个构造类型看成是一个项目的总共。而基本类型就是小项目。 而在这里很多人可能会联想到数组,但是数组是一组相同类型元素集合。...,用指针类型创建了BOOK1,那么此时我们可以用 BOOK1 = &BOOK?...---- 结构体自己引用  结构体自己引用其实就是:结构体里面是可以包含结构体。...看到这个如果学过数据类型小伙伴们可以快速理解。 数据:存放所要存储数据。 指针:是为了找到下一个节点地址。...段和结构体声明都是类似的,但是两点不同↓ 成员必须是 整形类型(int)、无符号整形类型(unsigned int)、符号整形类型(signed int) 成员名后面是一个冒号

    42330

    要深入 JavaScript,你需要掌握这 36 个概念

    3.值类型和引用类型 最近,对“引用传递" 在 JS 是怎么工作感到困惑。 尽管我知道 C 和 Java 等语言中有“按引用传递”和“按值传递”概念,但是不确定它在 JS 中如何工作。...JS 引擎可以用多种语言编写。例如,驱动Chrome浏览器V8引擎是用 c++ 编写,而驱动Firefox浏览器SpiderMonkey引擎是用 Cc++编 写。...DOM 和布局树 我们大多数人都听说过文档对象模型(DOM),但只有少数人对此深入了解。 你知道在浏览器中看到不是DOM? 而是渲染树,它实际上是DOM和CSSOM组合。...简单来说,它检查一个对象是否是另一个对象实例。 这才助于你理解对象如何相互继承,继承是通过原型实现。 17.原型 这是 JS 中最令人困惑概念之一,即使对于十年经验的人来说也是如此。...它们可以在Array原型中找到。 如果你一个数组,并且想对每个元素做一些事情,那么您可以使用map方法。 如果你一个数组,并且想通过某些条件来过滤一些值时,则可以使用filter方法。

    47110

    为什么指针被誉为 C 语言灵魂?

    在这里想谈几个看起来有点无聊的话题: 为什么我们需要指针?直接用变量名不行吗? 当然可以,但是变量名是局限。 变量名本质是什么?...可是还是不知道指针存在必要性,那么问题来了,看下面代码: int func(...) { ... }; int main() { int a; func(...); }; 假设一个需求...这个操作就叫做解引用,在 C 语言中通过运算符 *就可以拿到一个指针所指地址内容了。 比如*pa就能获得a值。 我们说指针存储是变量内存首地址,那编译器怎么知道该从首地址开始取多少个字节呢?...int ** a 可以把它分为两部分看,即int* 和 *a,后面 *a 中*表示 a 是一个指针变量,前面的 int* 表示指针变量a 只能存放 int* 型变量地址。...对于二级指针甚至多级指针,我们都可以把它拆成两部分。 首先不管是多少级指针变量,它首先是一个指针变量,指针变量就是一个*,其余*表示是这个指针变量只能存放什么类型变量地址。

    73110

    Java双端队列给定一个数组 nums,一个大小为 k 滑动窗口从数组最左侧移动到数组最右侧。你只可以看到在滑动窗口内 k 个数字。滑动窗口每次只向右移动一。 返回滑动窗口中最大值。

    双端队列实现 给定一个数组 nums,一个大小为 k 滑动窗口从数组最左侧移动到数组最右侧。你只可以看到在滑动窗口内 k 个数字。滑动窗口每次只向右移动一。...返回滑动窗口中最大值。...和一个结果数组(存储结果最大值) 2 只需要把双端队列第一个设置为最大值 3 每一次满足窗口大小就 返回第一个Nums[ 队列里面的第一个值] 4 刚开始的话是要满足 队列里面填充k 个 5...满了之后,随着窗口易懂,移除第一个,那么吧nums[新最大值下标]给res class Solution { public int[] maxSlidingWindow(int[] nums...,那么移除原来 } stack.addLast(i); //添加新进 if(stack.peekFirst()==i-k

    1.2K10

    C++】多态

    虚函数返回值除本身父子类继承关系中类型外,还可以是其他继承关系中父子类指针或引用,例如下面虚函数返回值分别是A *和B *,这也是协变另一种场景。...我们可以通过对比地址方式来确定虚表位置,从代码运行结果就可以看出,虚表地址和代码段地址较为相近,所以虚表位置极大可能性就是在代码段,另一方面去理解的话,虚函数本质不就是类成员函数?...很多文章都说g++平台下虚表指针存在.rodata段,但也没人能够验证这个结论,老师告诉g++虚表指针也是存在于代码段里面的,个人也这么觉得,下面第一张图片便是程序在g++下运行结果,可以看到虚表位置和代码段非常接近...但上面这样方式只适用于32平台下4字节指针,如果想让程序同时适应32和64呢?...我们也有两种解决办法,一种就是在类型转换时将对象地址强制类型转换为二级指针,这样在解引用时候,拿到就是一级指针,一级指针大小在32和64平台是不同值,那么再将指针转换为虚函数地址类型就可以

    54320

    关于异步FIFO设计,这7点你必须要搞清楚「建议收藏」

    大家好,又见面了,是你们朋友全栈君。 写在前面 在这篇文章,默认您已经对异步FIFO设计方法了基本了解。...好了,现在问你,根据格雷码性质你能默写出16个4bit宽度格雷码来想一般是比较难,因为单靠上述性质很难推导出来。...第三方时钟:不难知道一个信号从一个时钟同步到另一个时钟(被同步时钟)是需要时间(这里仅考虑从满到快,也就是暂时不考虑漏采问题),需要时间取决于被同步时钟周期以及需要同步个数。...在第4点我们知道了—-将读指针同步到写时钟来判断满;将写指针同步到读时钟来判断空。既然是异步FIFO,那么读写时钟信号是不一致,其中一个频率快,另一个频率这慢。...进行写满判断时候需要将读指针同步到写时钟,因为读快写慢,所以当写时钟同步读指针时候,必然会漏掉一部分读指针,我们不用关心那到底会漏掉哪些读指针,我们在乎是漏掉指针会对FIFO写满产生影响

    2.8K50

    初识C语言

    //单精度浮点数 double //双精度浮点数 //以上C语言内置类型 //C语言内置类型在计算机所占大小 变量作用和生命周期 作用 作用(scope)是程序设计概念,通常来说...生命周期 变量生命周期指的是变量创建到变量销毁之间一个时间段。 局部变量生命周期是:进入作用生命周期开始,出作用生命周期结束(出了大括号就无了)。...全局变量生命周期是:整个程序生命周期。 注意:**主函数是程序入口。 ​ 在一个工程中,主函数且只有一个。 ​...转义字符 故名思义就是改变其原来意思,变成另一个意思。 假如我们要打印一个目录:c:\code\test.c\n,可能我们会天真以为它会原样输出,可是… 转义字符表 注释 1....就举32操作系统为例,32代表电脑32根地址线/数据线。地址线接上电线在通电的话便可以产生电信号,电信号又会转换成数字信号1/0。电脑帮我们储存数据,图片,音乐等等。

    18120

    横扫9家大厂前端校招offer

    ) 了解过BFC ×(不了解) js 用三句话概括所有值传递类型,所有引用传递类型,以及如何用引用方式传递值类型 ?...(不确定) js作用你怎么理解 √ js里多重继承怎么实现 √(call,es6 extend) 追问 还有?(不知道) 二、工程部分 React 和 Vue 生命周期什么区别?...这里是一个巨坑,0/8意思代表子网掩码255.255.255.0,也就是最后8可以动态范围,这是一种简写方法,但是腾讯并没有说明其含义,可能也是一处考察。...然后考虑第2到k-1可以发现这一段每一都是由前一密文异或结果再与当前明文异或得到。...接下来考虑第k到n-1,观察规律可以发现这一段每一都是由前一密文与第i-k明文异或得到结果再与当前明文异或得到

    1.4K20

    JVM之关于GC扩展知识

    没错,因为之前讲过从Exact VM开始就已经采用了准确式内存管理即知道哪部分内存是引用;而且在即时编译过程中也会知道栈中或者寄存器里哪部分内存是引用。...如果一个线程没有得到CPU时间片执行(java中线程对应于操作系统线程,对应关系也可以找笔者之前关于SignCatcher对线程理解进行查阅),但是可以确保其中一部分代码区域是不会改变内存引用关系...当我第一个数组下标对应内存跨引用了其他分代中内存,将把第一个数组下标对应内存元素值标识为1代表脏(Dirty),没有则为0。...根据我映射内存大小精度又可以进行细分: 1.字长精度:只记录一个机器字长(处理器寻址位数)该字包含跨代指针 2.对象精度:记录一个对象(对象字段中含有跨代指针) 3.卡精度:记录一块内存区域(该区域对象包含跨代指针...512字节,也就是一个卡表中64个元素在一个缓存行,而这64个元素对应总卡页内存为32KB(64 X 512字节),如果两个线程中变量分配到了这部分内存中,之后变量发生跨代引用更新卡表元素时就会导致另一个线程缓存行失效而从主存中去拿

    28830
    领券