JavaScript中的this指针与回调函数
在常规的面向对象语言中(比如C++),this指针的指向是确定的。但在JavaScript中,this指向依赖于运行环境。 下面的例子,预期的输出是nihao: class A { setEventListener(func) { this.callback = func; } triggerEvent() { this.call...
在常规的面向对象语言中(比如C++),this指针的指向是确定的。但在JavaScript中,this指向依赖于运行环境。 下面的例子,预期的输出是nihao: class A { setEventListener(func) { this.callback = func; } triggerEvent() { this.call...
capabilities将系统root权限按功能单元划分,使用者按需打开/关闭相关权限,比基于UID的权限控制方式更精细。 不过,Linux下的capabilities是线程相关的,同一个进程的不同线程可以具有不同的capabilities权限,使用不当,可能会造成权限泄露。 可以使用libpsx规避该问题,它的原理很简单,就是把当前进程中所有线程的capabilities设置一遍。 ...
本文主要介绍fork导致的死锁问题及其解决方法。 先看一个示例程序,该程序有个全局对象sGlobalInstance,父进程先通过该对象执行了lock操作,然后执行fork,在子进程中,也去执行lock操作。可以先看下这个程序有没有问题: #include <errno.h> #include <pthread.h> #include <stdio.h>...
本文介绍在共享内存中自建hash的一种方法。 下图所示的共享内存有一个writer和多个reader,为了提高数据存取效率,共享内存中的数据需要按hash组织。 注:本文不讨论writer和和reader之间的同步问题,具体可由信号量、文件锁等方式实现。 初步想法是将整块共享内存划分成一个下标为0~n的数组,如下图所示。数据Record的key经过Hash计算后得到hashcode...
Cyber RT是apollo的运行环境框架,提供了模块动态加载机制。 本文基于apollo v6.0介绍Cyber RT的模块加载流程。 Cyber RT模块初探 apollo里面的很多功能都是基于Cyber RT的模块框架开发的,其生命周期由Cyber RT管理。 先介绍下两个容易混淆的概念,module(模块)和component(组件),在Cyber RT中,一个module可...
车载软件开发调试,不可能每次都出车路测,否则成本太高。 apollo中提供了cyber_recorder工具,可以将报文录制下来,保存为文件。这样,实际路测的时候,可以把相关报文保存下来,后续可以通过报文回放进行开发调试。 本文主要基于apollo v6.0介绍cyber_recorde的报文录制功能。 cyber_recorder录制的文件结构如下图所示,各组成部分由protocolbu...
毕业前准备校招面试的时候,和同学一起刷《高质量C++/C编程指南》,以为作者林锐是个严肃的学者(老学究)。 《软件工程思想》彻底颠覆了我对作者的认知。作者不仅技术文章写的好,文采也很出众,思维、行为都很活跃,很多思想在二十年后的今天仍然适用。 下面是《软件工程思想》的精华摘录,原汁原味的鸡汤,闲暇时不妨品下,可能会有些许收获。如果想拜读原文,可以从这里下载:软件工程思想。 一、软件工程的...
一、预备知识 1. 2的补码 2. 十进制转换为2的补码 3. 2的补码转换为十进制 4. 减法运算 例1:结果为正数的减法 例2:结果为负数的减法 二、整数在程序中的表示 1. 整数在汇编代码中的表示 ...
想了解堆栈等虚拟内存相关知识吗? 想知道下面这张进程地址空间示意图是如何一步一步画出来的吗? 虚拟内存探究系列文章将通过实验的方式带你学习相关知识。 中文版 第一篇:虚拟内存探究 – 第一篇:C strings & /proc 第二篇:虚拟内存探究 – 第二篇:Python 字节 第三篇:虚拟内存探究 – 第三篇:一步一步画虚拟内存图 第四篇:虚拟内存探究 ...
一、栈 二、预备知识 三、实验环境 四、局部变量 1、自动分配内存 2、使用局部变量 3、自动销毁内存 五、对栈的进一步探究 1、局部变量为什么要初始化 2、函数返回机制:ret指令 六、通过寄存器探索栈内容 1、访问局部变量 2、访...