3.2 工程结构 上面说的 build 文件约定了一个默认的文件夹结构。Gradle 遵循约定优先于配置的原则,在可能的情况下提供合理的默认值。 基本的工程始于两个名为 “source sets” 的部分。也就是 main source code 和 test code。他们分别位于: src/main src/androidTest/ 里面的每一个文件夹都对应相应的组件。 对于Java和Andr
Docker 的基本指令及用法详解 Docker官方为了让用户快速了解Docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法。但是由于Docker技术的快速发展,此交互式教程已经无法满足Docker用户的实际使用需求,所以让我们一起开始一次真正的命令行学习之旅。首先,Docker的命令清单可以通过运行 docker ,或者 docker help 命令得到: $ sudo
网络基础 在互联网上之间的通信交流,一般是基于 TCP (Transmission Control Protocol,传输控制协议) 或者 UDP (User Datagram Protocol,用户数据报协议) ,如下图: 编写 Java 应用,我们只需关注于应用层 (application layer),而不用关心 TCP 和 UDP 所在的传输层是如何实现的。java.net 包含了你编程所
11.2 基础正则表达式 既然正则表达式是处理字串的一种表示方式,那么对字符排序有影响的语系数据就会对正则表达式的结果有影响! 此外,正则表达式也需要支持工具程序来辅助才行!所以,我们这里就先介绍一个最简单的字串撷取功能的工具程序,那就是 grep 啰! 前一章已经介绍过 grep 的相关选项与参数,本章着重在较进阶的 grep 选项说明啰! 介绍完 grep 的功能之后,就进入正则表达式的特殊字
Java堆中存放着大量的Java对象实例,在垃圾收集器回收内存前,第一件事情就是确定哪些对象是“活着的”,哪些是可以回收的。 引用计数算法 引用计数算法是判断对象是否存活的基本算法:给每个对象添加一个引用计数器,没当一个地方引用它的时候,计数器值加1;当引用失效后,计数器值减1。但是这种方法有一个致命的缺陷,当两个对象相互引用时会导致这两个都无法被回收。 根搜索算法 在主流的商用语言中(Java、
在Java中,符合“编译时可知,运行时不可变”这个要求的方法主要是静态方法和私有方法。这两种方法都不能通过继承或别的方法重写,因此它们适合在类加载时进行解析。 Java虚拟机中有四种方法调用指令: invokestatic:调用静态方法。 invokespecial:调用实例构造器方法,私有方法和super。 invokeinterface:调用接口方法。 invokevirtual:调用以上指令
英文原文:http://emberjs.com/guides/testing/unit-testing-basics/ 尽管Ember.Object是Ember中得基础对象类型,然后能够测试一个简单的Ember.Object是能测试Ember应用各个特定部分的基础。如控制器、组件等。测试Ember.Object就如创建一个对象实例一样简单,设置其状态并针对对象进行断言。作为实例,下面将来介绍一些一
Celery 是一个 Python 的任务队列,包含线程/进程池。曾经有一个 Flask 的集成, 但在 Celery 3 重构了内部细节后变得不必要了。本指导补充了如何妥善在 Flask 中使用 Celery 的空白,但假设你已经读过了 Celery 官方文档中的教程 使用 Celery 的首要步骤 安装 Celery Celery 提交到了 Python Package Index (PyPI
2017年3月底 Rax 发布了 0.2 版本,让我们一起看一下 0.2 版本为我们带来了哪些新的思考。 一些数据 从开源到 0.2 的发布上线,一些数据印证了 Rax 背后的成长,同时也是 Rax 的一种督促,督促我们要提供一个更好的 Rax 体系。 940 commits 141 pull requests 58 issues 2691 stars weex-driver 基于 Driver
6.a. Chrooting (切换到新系统环境中) 可选: 选择镜像服务器 如果您是从 Gentoo LiveCD 启动的, 那么您就可以使用 mirrorselect 这个工具来更新 /etc/make.conf 中的镜像服务器列表, 为 Portage 和源代码包的下载选择最快最好用的镜像服务器 (当然, 您首先要有可用的网络连接). 代码清单 1: 选择最快的镜像服务器 # mirrors
8.7. 基于select的多路复用 下面的程序会进行火箭发射的倒计时。time.Tick函数返回一个channel,程序会周期性地像一个节拍器一样向这个channel发送事件。每一个事件的值是一个时间戳,不过更有意思的是其传送方式。 gopl.io/ch8/countdown1 func main() { fmt.Println("Commencing countdown.")
C++ 系统通常由几个部分组成:程序开发环境、语言和C++标准库。下面介绍图1.1所示的典型C++环境。 C++ 程序通常要经过6个阶段(如图1.1),即编辑(edit)、预处理(Preprocess)、编译(compile)、连接(Link)、装入(load)和执行(excute)。这里主要介绍典型 UNIX C++系统(注意,本书的程序不经修改或稍作修改即可在大多数当前的++系统中运行,包括M
可以使用各种元素(如面板、栏以及窗口)来创建和处理文档和文件。这些元素的任何排列方式称为工作区。Creative Cloud 中不同应用程序的工作区外观相似,因此您可以在各应用程序之间轻松切换。您也可以通过从多个预设工作区中进行选择或创建自己的工作区来调整 Illustrator,以适合您的工作方式。 主屏幕 启动 Illustrator 后,将会显示主屏幕,该屏幕中包含以下内容: 各种教程,可帮
Sanic源码阅读:基于0.1.2 Sanic是一个可以使用async/await语法编写项目的异步非阻塞框架,它写法类似于Flask,但使用了异步特性,而且还使用uvloop作为事件循环,其底层使用的是libuv,从而使 Sanic的速度优势更加明显。 本章,我将和大家一起看看Sanic里面的运行机制是怎样的,它的Router Blueprint等是如何实现的。 如果你有以下的需求: 想深入了解
通过第二章的学习,我想大家对 SQL 注入攻击应该都非常熟悉了。在我们手工注入的时候,通常我们是要得到管理员的密码。在得到管理员的密码的过程中,我们都是用的数据库的知识,因为管理员的密码是放在数据库中,为了得到管理员的密码,我们当然要操作数据库了,这里所做的操作就是查询数据库。当然在脚本黑客技术中,数据库的作用远远不止这些,比如通常我们还可以利用数据库的差异备份、LOG 备份来获得木马等等。在脚本