0%

执行用时:112ms 击败 100% 的 C++ 提交

内存消耗:37.9mb 击败 100% 的 C++ 提交

题目

给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。
二叉搜索树保证具有唯一的值。

示例 1:

输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32

示例 2:

输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10

输出:23  

提示:

  1. 树中的结点数量最多为 10000 个。
  2. 最终的答案保证小于 2^31。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-sum-of-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

阅读全文 »

Quick EMUlator(QEMU)

简介

  • 仿真器和虚拟化器
  • 模式:
    • 用户模式仿真:允许一个(Linux)进程执行在不同架构的CPU上,该模式下,QEMU 可以作为进程级虚拟机。
    • 系统模式仿真:允许仿真完整的系统,包括处理器和配套的外设,该模式下,QEMU 也可以作为系统虚拟机
  • 主要用途
    • 跨平台编译与开发环境
    • 虚拟化,尤其是外设仿真,作为对 xen 和 kvm 的补充
    • 安卓仿真器(作为 SDK 的一部分)

动态二进制翻译

动态转译过程:

  1. 读取源指令流(二进制)-> gen_intermediate_code()
  2. 解释为微操作(TCG 微操作)-> tcg_gen_code()
  3. 编译为目标文件(二进制)
  4. 动态产生目标指令流
  • 功能转译:模仿源处理器完成的功能而非执行过程
  • 动态二进制翻译:像一个不含解释器的 JIT 编译器
    • 解释器逐一执行指令,使得执行速度因为固定的额外开销显著变慢
    • 作为替代,QEMU 用自己需要的方式转换代码
      • 翻译基本块 -> 生成主机目标代码
      • 在翻译缓存中存储翻译块
  • Tiny Code Generator (TCG)
    • 将源二进制流转换为微操作
    • (固定的)寄存器映射来减少产生的 load/store 指令
    • 翻译块:不包含跳转指令,以分支指令为分隔,翻译块被转换为主机指令的一个单一序列,并放入翻译缓存
      • 缓存中的翻译块用它们的客户机虚拟地址(如PC值)索引,因此可以快速查得
      • 翻译缓存的大小默认为 32MB,但是可以自行配置
      • 一旦缓存运行超出空间,全部缓存被清理
    • 块链接
  • 在主循环中,通过 cpu_exec() 进入下一代码块
  • 程序执行至无后续链接的代码块,则通过后置代码返回 cpu_exec()

块链接

  • 正常情况下,每个转译块的执行,被特殊代码块的执行环绕
    • 前置代码初始化处理器以生成跳转并执行到指定代码块的主机代码
    • 后置代码恢复处理器至正常状态并返回到主循环
  • 在每个代码块后返回主循环显著增加了额外开销
    • 因此在下一个代码块已经翻译好的情况下,QEMU会patch原始块,以跳过后置代码而直接执行下一代码块。
  • 在代码块间直接跳转:
    • 在存放返回至后置代码的指令和代码块返回间,留出跳转空间
    • 每当一个块返回时,尝试链接至下一代码块
  • 当链接在数个连续块间完成后,代码块间将形成链和环
    • 这允许 QEMU 仿真内循环时,无需运行额外的代码
    • 这也意味着,在循环过程中,只有在遇到未链接或未翻译的块需要被执行时,才将控制权还给 QEMU
  • 异步中断
    • QEMU 不主动检查每个基础块中是否有硬件中断在等待,而是由用户异步的调用特定函数 cpu_interrupt() 来告知 QEMU 中断正在等待
    • 该函数的功能是重置当前正在执行的块链,返回至 CPU 仿真器的主循环
    • 异步中断常常来自其它线程

寄存器映射

阅读全文 »

智能音箱在传统音箱的基础上,添加语音交互能力和互联网、物联网协议能力,正在成为智能家居的交互入口。

智能音箱功能

为了支持以上能力,智能音箱应具备:

  1. 语音交互
  2. 提供本地/流媒体的内容服务
  3. 场景化智能家居的控制能力

硬件实现上,应支持:

  1. Wi-Fi 连接(访问互联网服务)
  2. 蓝牙连接(访问手机本地媒体或本地智能设备)
  3. 物理接口连接(可选,如USB等支持本地媒体播放)
  4. 智能家居组网协议(如zigbee协议等)

智能音箱组网模式

一般地,用户通过手机端app进行全面操控,例如用户注册,登陆,各种基础和个性设置以及服务内容定制等。手机端app只和远程云服务器进行通信,云服务器,将用户指令转发给智能音箱,智能音箱响应云服务器下达的指令。响应结果再通过云服务器反馈到手机端并展示给用户。当然,用户可以通过语音交互直接和智能音箱交流,智能音箱接收到语音信息后,将语音信息打包转发给云服务器进行解析。云服务器将语言信息转义后形成指令再次返给智能音箱进行执行,执行结果通过云服务器再次反馈到手机端展示给用户。云服务器和智能音箱之间的通信协议,各家都不同。例如,小米之前使用过miio协议等。智能音箱作为智能家居中一个重要设备节点,当然也支持与第三方设备进行控制协议交互,使用的通信协议通常是自定义的。对于智能音箱本身,通常自身具备连接局域网WiFi的功能。下图为智能音箱组网模式。

组网示意图

智能音箱安全风险

阅读全文 »

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate
阅读全文 »