摘要:
承接上一篇中最后的测试结果图,使用过的pytest-html 插件原生态的报告的话。可能会发现 内容样式都有些不同。其实是做了些扩展相关设置所呈现的效果,当然可以定制的更深度一些,更加中文、本地化,又或者根据公司需要进行定向研发。例如就上文中的测试报告进行一些中文定制改造后效果如下图所示。这篇就如何优化、定制pytest-html 测试报告进行些讲解 阅读全文
摘要:
Pytest 是一个非常实用的自动化测试框架,目前来说资料也是非常多了。最近某友人在学习 Python的一些测试技术,帮其网上搜了下教程;发现大多数文章多是在介绍入门 又或者 多是聚焦在 Pytest 的一些语法 和 提供的功能上。对于如何实际功能中使用方面教程介绍不多。介于此,写这篇教程选豆瓣网来作为 黑盒评测 对象为例。 阅读全文
摘要:
JVM 线程栈 到 函数运行。每一个JVM线程来说启动的时候都会创建一个私有的线程栈。一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似,它负责管理局部变量、部分运算结果,同时也参与到函数调用和函数返回的工作中。JVM规范中运行线程栈的大小可以是固定的或者是动态分配的,也可以是根据一定规则计算的。不同jvm对栈的实现会不同,一些可能提供给开发人员自己控制jvm线程栈初始大小的方式;对于动态分配来说也可能提供对jvm最大和最小值的设置。当计算一个线程需要的分配的大小超出了固定值、或者设置的最大值,jvm会抛出StackOverflowError。而对于动态分配栈来说,如果内存不能够提供足够的空间来满足最小值、或者需要的值JVM会抛出 OutOfMemoryError 阅读全文
摘要:
JSR-94 是由JCP(Java Community Process)组织所制定的java规则引擎API的java请求规范。它主要定义了规则引擎在java运行时的一些API,指导各个java规则引擎的厂商能够基于这个API实现规则引擎。当前主流支持这个标准的开源java规则引擎有:Drools、OpenRules、JLisa、JRuleEngine。 阅读全文
摘要:
概率神经网络的全称是Probabilistic neural network,它主要用于模式分类,是基于贝叶斯策略前馈神经网络。它有着坚实的数学理论基础,当然本文并不打算从数学符号来对它进行介绍(有兴趣的可翻阅推荐书目),而是通过一个简单的C语言程序来认知它。 介绍程序之前,先看下它基本模型的结构示意图: 图中可以看到基本分为三层,如果有了解神经网络的话就很熟悉了。第一层是输入层,就如它的名字负责接收数据的输入;第二层是模式层,对数据进行收集整理;第三层是类别层,就是数据整理完后归属于哪一个类别的信息。最后就根据类别的信息输出了,如果把输出也作为一层的话,也可以看成四层结构。其中... 阅读全文
摘要:
上一篇 C语言实现上中介绍了程序实现时定义的一些数据结构、程序执行的流程以及 程序的基本骨架(详情见 C语言实现上)。留下了两个关键函数computO(i) 和 backUpdate(i) 没有分析实现,参数 i 代表的是第 i 个样本,本篇我们一起来分析下这两个函数的实现。BP神经网络输出 函数 computO(i) 负责的是通过BP神经网络的机制对样本 i 的输入,预测其输出。回想BP神经网络的基本模型(详情见 基本模型)对应的公式(1)还有 激活函数对应的公式(2): 在前篇设计的BP神经网络中,输入层与隐藏层权重对应的数据结构是w[Neuron][In],隐藏层与输出层... 阅读全文
摘要:
在上一篇文章中,介绍了BP神经网络的基本模型、模型中的一些术语并对模型进行了数学上的分析,对它的原理有了初步的认识。那么如何用程序语言来具体的实现它,将是我们下一步需要讨论的问题。本文选取的是C语言来实现一个简单的单隐藏层的BP神经网络(默认大家了解了BP神经网络的基本概念,本文中涉及到些术语参见上一篇 基本模型),因此对于其他C类语言(C#、JAVA等)只需对本文中的代码稍作修改即可移植。一些数据的定义 首先,我们介绍些下文中描述的程序里面的一些重要数据的定义。#define Data 820#define In 2#define Out 1#define Neuron 45#def... 阅读全文
摘要:
BP 神经网络中的 BP 为 Back Propagation 的简写,最早它是由Rumelhart、McCelland等科学家于 1986 年提出来的,Rumelhart 并在Nature 上发表了一篇非常著名的文章 《Learning representations by back-propag 阅读全文
摘要:
分布式系统的设计中会涉及到许多的协议、机制用来解决可靠性问题、数据一致性问题等,Quorum 机制就是其中的一种。我们通过分布式系统中的读写模型来简单介绍它。分布式系统中的读写模型 分布式系统是由多个节点(指代一台服务器、存储设备等)构成,由于网络异常、宕机等节点并不能保证正常工作,特别是在节点数量很大的时候,出现异常状况的节点几乎是肯定的。为了保证系统的正常运行,能够提供可靠的服务,分布式系统中对于数据的存储采用多份数据副本(注:这里的副本并非只用来备份,它可参与提供系统服务)来保证可靠性,也就是其中一个节点上读取数据失败了那么可以转向另外一个存有相同数据副本的节点读取返回给用户。这个... 阅读全文
摘要:
接上一篇,通过关键代码段的分析、和一些关键函数的摘录对nginx 运用module 模块构架对nginx.conf 进行解析执行的流程有了一个基本认识。流程总结如下: 1、获取全部参与编译的模块module 进行统计编号。 2、根据module 模块的个数分配 配置信息资源的指针空间。 3、创建NGX_CORE_MODULE 核心模块的配置信息,并将指针空间中对应模块编号的指针进行设置。 4、初始化conf 配置信息,解析参数ngx_conf_param,解析配置文件ngx_conf_parse。 以上第4步中解析配置文件ngx_conf_parse过程又可分为: ... 阅读全文
摘要:
搭建nginx服务器时,主要的配置文件 nginx.conf 是部署和维护服务器人员经常要使用到的文件, 里面进行了许多服务器参数的设置。那么nginx 以模块 module为骨架的设计下是如何运用模块 module来解析并执行nginx.conf配置文件下的指令的呢?在探究源码之前,需要对nginx下的模块 module 有个基本的认知(详情参考前面的博文 Nginx 源码分析-- 浅谈对模块module 的基本认知)同时也要对nginx中常用到的一些结构有个基本的了解如: 内存池pool 管理相关的函数、ngx_string 的基本结构等(详情参考前面的博文),若不然看代码的时候可能不.. 阅读全文
摘要:
对于一个web服务器程序来说,对字符串处理的需求是必须的。由于web环境下的各种编码,也导致了web服务器程序字符串处理的繁杂性。在nginx源码中,ngx_string.c 这个文件就是来应对字符串处理的一些源码,源码中经常的使用到了这里中的函数,本文对ngx_string.c 进行一些简单的分析,以方便阅读其他源码。 我们来看它的基本数据结构:typedef struct { size_t len; u_char *data;} ngx_str_t; 比较明显的可以看出,ngx_str_t 只是将字符串添加了一个标志长度的字段,并无其他特殊结构。 ... 阅读全文
摘要:
应该说大家对这两个数据结构相当熟悉了,因此我们一并将它们进行分析,瞧一瞧nginx是如何实现它们的。在此篇之前,我们已经对nginx 内存池(pool)进行了分析,在此基础上来理解ngnix对它们的实现将变得非常简单,特别是内存池(pool)中的ngx_palloc 函数在这两个结构中多次用到,若不清楚想了解原理的可以看看我前面写的文章,它返回的是在内存池分配好空间了的首地址。一、ngx_array 数组:struct ngx_array_s { void *elts; ngx_uint_t nelts; size_t size; ng... 阅读全文
摘要:
分析nginx源码,谈到模块module是必然的。纵观nginx源码,可以说模块module机制是整个nginx的骨架。因此,对nginx的源码进行分析,那么对模块module就需要有一个基本的认知。在浅谈开始,我们要明确nginx 模块构架是从编译阶段开始的,不像apache那样可以动态的添加模块,nginx使用的是静态模块。这应该也是nginx 为何效率高的原因之一。对nginx的模块认知,必须要提到一篇大大有名的文章,我想也是每个分析nginx源码的人都拜读过的文章《Emiller's Guide To Nginx Module Development 》里面的内容虽然少了点,但 阅读全文
摘要:
上一篇已经通过对ngx_palloc 这个内存池(pool)管理的核心函数--内存分配函数进行解析,我们窥探到了Nginx内存管理的主体方法还有对于大内存需求的解决之道,同时也对管理内存池的数据结构有了更深一步的认识,通过这些认识我们可以得到以下这样一张数据结构的示意图:图3 Nginx内存管理数据结构示意图 做说明下,这里示意的是有需求大内存分配时的结构示意图,为了图示的方便,我们将 large_t 特殊话到了和 large所在的同一个pool单元里面,其实实际运行中并非一定在同一个pool单元中。如果没有大内存需求时 large_t 也并不存在。 分析完了,内存分配函数ngx_pa... 阅读全文
摘要:
在上一篇中,以一张图(图1)介绍了nginx内存池管理函数的总体概况,并分析了底层支持函数和内存池(pool)管理所需要用到的一些数据结构。这里我们将来具体分析内存池管理功能函数。由上篇图1我们可以看出ngx_palloc为内存分配的核心,为此我们先看看这个函数。void * ngx_palloc(ngx_pool_t *pool, size_t size){ u_char *m; ngx_pool_t *p; /* 注意2个if,3个return */ if (size <= pool->max) { p = pool->curr... 阅读全文
摘要:
Nginx内存池(pool)的管理的实现主要写在ngx_palloc.c这个文件中,为了明晰的看该文件中的函数之间的关系,我们描绘出以下一张简单的示意图:图1 Nginx内存池(pool)管理功能函数关系图 由以上图我们可以清晰的看出Nginx内存池(pool)管理函数可分为两部分,一部分底层支持函数主要为ngx_alloc、ngx_free、ngx_align_ptr(内存对齐的宏)、ngx_memalign、ngx_memzero,这部分函数比较简单多为对C语言标准库的一些封装,另一部分内存池管理功能函数如ngx_creat_pool、ngx_destroy_pool、ngx_res... 阅读全文
摘要:
1、首先在官网下载Nginx 发布版的源码,Nginx 官网下载的地址是 :http://www.nginx.org/en/download.html因为Nginx官网支持SVN,可以简单方便的使用svn下载的是Nginx 1.3.0 版源码编译,命令如下:svn checkout svn://svn.nginx.org/nginx/tags/release-1.3.02、configure信息的配置说明简单浏览下载的源码后,可以发现和编译相关的信息文件在auto目录下,其中configure也在这个目录下。用vi打开configure,可以发现它应该放在源码的顶级目录下,移动configur 阅读全文