本文将使用的GDB-Demo例子程序可以从我的github账户上下载。请确保在你的设备上安装和运行。 现在让我们SSH进入设备。 现在我们开启GDB,然后让GDB在应用开启之后就挂钩这个应用。可以通过命令 attach -waitfor Appname来完成。你也可以 在设备上运行这个应用,然后用attach命令挂钩这个运行的进程,如下图所示。 一旦GDB挂钩进了这个应用,你会注意到这个应用目前是
一、什么是树 树是一种类似链表的数据结构,不过链表的结点是以线性方式简单地指向其后继指点,而树的一个结点可以指向许多个结点。树是一种典型的非线性结构。树结构是表达具有层次特性的图结构的一种方法。 二、相关术语 ● 根结点:根结点就是一个没有双亲结点的结点。一棵树中最多有一个根结点(如图2-1的结点A就是根结点)。 ● 边:边表示从双亲结点到孩子结点的链接(如图2-1的所有链接)。 ● 叶子结点:没
图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。 图(Graph)通常会放在树(Tree)后面介绍,树可以说是图的特例。 一、图的基础概念 图的结构很简单,就是由顶点 V 集和边 E 集构成,因此图可以表示成 G=(V, E) 。 上图就是无向图,我们可以说这张图中,有点集 V=\{1, 2, 3, 4, 5,
JavaScript语法 要学习JavaScript知识,就要先学习它的语法。 JavaScript语法知识借鉴了C语言以及类似于C语言(如Java)的编程语言的语法知识。 区分大小写 与其它编程语言类似的一样,JavaScript也区分大小写,如:变量test与TEST代表两种不同的变量,在JavaScript中常量、固定值量(如PI)、全局变量用大写表示外,其它建议均用小写表示。 <!doct
目标:构建基于 Maven 和 Tomcat 的基础镜像 本项目代码维护在 DaoCloud/docker-demo-build-base-image 项目中。 您可以在 GitHub 找到本项目并获取本文中所提到的所有代码文件。 前言 在 Java 开发的世界中,有很大一部分应用是基于 Maven 构建的,而最终的交付结果也是一个 war 包,所以,构建一个基于 Maven 和 Tomcat 的
你可以通过 gradle 命令运行一个 Gradle 构建. gradle 命令会在当前目录中查找一个叫 build.gradle 的文件. 我们称这个 build.gradle 文件为一个构建脚本 (build script), 但是严格来说它是一个构建配置脚本 (build configuration script). 这个脚本定义了一个 project 和它的 tasks. 让我们来先看一个
上面提到的构建文件中有默认的文件夹结构。Gradle 遵循约定优先于配置的概念,在尽可能的情况下提供合理的默认配置参数。最基本的项目有两个 “source sets” 组件,分别存放应用代码及测试代码。它们分别位于: src/main/ src/androidTest/ 里面每个存在的文件夹对应相应的源组件。对于 Java plugin 和 Android plugin 来说,它们的 Java 代
3.3 构建任务 3.3.1 通用任务 在构建文件中应用一个插件的时候会自动的创建一系列可运行的构建任务。Java plugin 和 the Android plugin 都可以做到这一点。以下是约定的一些任务: assemble 这个任务会汇集工程的所有输出。 check 这个任务会执行所有校验检查 build 这个任务会同时执行 assemble 和 check 任务 clean 这个任务会清
3.2 工程结构 上面说的 build 文件约定了一个默认的文件夹结构。Gradle 遵循约定优先于配置的原则,在可能的情况下提供合理的默认值。 基本的工程始于两个名为 “source sets” 的部分。也就是 main source code 和 test code。他们分别位于: src/main src/androidTest/ 里面的每一个文件夹都对应相应的组件。 对于Java和Andr
要构建一个基础的A-Frame场景,你需要具备基本的HTML知识。你将学习如何通过原语(primitives)来添加3D实体(比如对象),应用3D空间变换,使用图片作为纹理贴图,使用动画和事件添加交互性,通过调整光照和添加背景来改变外观,以及使用A-Frame实体-组件生态系统来添加文本。 考虑到A-Frame的读者可能没有3D或VR(乃至编程)经验,我们打算一步步来讲解这些内容。 下面是我们需要
easySwoole 的目录结构是非常灵活的,基本上可以任意定制,没有太多的约束,但是仍然建议遵循下面的目录结构,方便开发 project 项目部署目录 ├─App 应用目录(可以有多个) │ ├─HttpController 控制器目录 │ │ └─Index.php 默认控制器 │
主要内容:一、quicklist,二、源码分析,三、总结一、quicklist 再看一下quicklist,它是从Redis3.2才提供的一个数据结构。从字面意思上理解,这个应该比list快。但是同样是list,为什么它要快?就得找一下原因。在普通的list中,可以通过拥有的前向和后向指针进行前后的遍历和查找。但是,当数据量大时,这两个指针占用的空间就非常明显了。而在前面的ziplist中,可以看到,通过指示本Entry的长度配合相关标识,就可以去除这
主要内容:一、ziplist压缩列表,二、源码分析,三、总结一、ziplist压缩列表 压缩列表是HASH和跳表的小数据时的数据结构,这个在前面提到过。压缩列表的定义和使用其实在源码的头部说明中是很清楚的。看一下英文的注释: The ziplist is a specially encoded dually linked list that is designed to be very memory efficient. It stores both st
主要内容:一、skiplist 跳表,二、源码分析,三、总结一、skiplist 跳表 跳表这个数据结构是新生的,在学习数据结构的时候儿是没有这个的。当然,也可以理解成是对数据结构的进一步的封装,这样理解的话,可能就会更准确一些。为什么叫跳表?想想生活中跳的动作,一般人走路是一步一步的走,而如果跳跃的话,一下子可以走好几步,但是付出的代价就是要多费些力气。 其实跳表也是如此,正常的链表list,访问的时候儿是从头到尾(或者反过来)一条条的遍历,而跳表由于多
主要内容:一、SDS,二、源码分析,三、总结一、SDS 在前面的初步介绍中,知道Redis中的字符串是SDS——simple dynamic string,可能对于非c++人员有点不好理解,其实如果看STL的代码中std::string的实现,可能就会发现,其实有些类似,而且SDS相对简单不少。SDS除了可以实现字符串,其实还可以用来做缓冲区,毕竟char*的定义本身在C/C++中都是天然做为缓冲区的。 使用char*来操作字符串,但是底层