🌓

YAML入个门

拷贝自:http://www.ruanyifeng.com/blog/2016/07/yaml.html

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。

本文介绍 YAML 的语法,以 JS-YAML 的实现为例。你可以去在线 Demo 验证下面的例子。

一、简介

YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。

它的基本语法规则如下。

1
#

表示注释,从这个字符一直到行尾,都会被解析器忽略。

YAML 支持的数据结构有三种。

以下分别介绍这三种数据结构。

二、对象

对象的一组键值对,使用冒号结构表示。

1
animal: pets

转为 JavaScript 如下。

1
{ animal: 'pets' }

Yaml 也允许另一种写法,将所有键值对写成一个行内对象。

阅读全文

测试测mysql语句的性能——explain ,Mysql查询优化器的使用

MySQL 查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行。最终目标是提交 SELECT 语句查找数据行,而不是排除数据行。优化器试图排除数据行的原因在于它排除数据行的速度越快,那么找到与条件匹配的数据行也就越快。如果能够首先进行最严格的测试,查询就可以执行地更快。
MySql 深化学习

1 explain用法

explain可以帮助我们分析select语句,找出select语句的瓶颈,从而可以针对性地去做优化,让MySQL查询优化器更好地工作。

MySQL查询优化器有几个目标,其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行

使用explain+select语句,会返回以下的一个表,截图使用的navicat的工具截图:

下面对上述表的每一列进行说明:

1.1 id列

说明:MySQL Query Optimizer 选定的执行计划中查 询的序列号。表示查询中执行 select 子句或 操作表的顺序,id 值越大优先级越高,越先 被执行。id 相同,执行顺序由上至下。

1.2 select_type列

select_type查询类型

说明 SIMPLE

简单的select查询,不使用union及子查询 PRIMARY

最外层的select查询 UNION

UNION中的第二个或随后的select查询,不依赖外部查询的结果集 DEPENDENT UNION

UNION 中的第二个或随后的 select 查询,依赖于外部查询的结果集 UNION RESULT

UNION 查询的结果集 SUBQUERY

子查询中的第一个 select 查询,不依赖于外部查询的结果集 DEPENDENT SUBQUERY

阅读全文

开始撸书

我这个人有个毛病,实践比较少,学习偏理论。读书时代,不偏科,没有强的,没有弱的。就是所谓的动手能力不足一类。但是并不妨碍我进步啊。上次一周多电,嗑了一本《操作系统之哲学原理》,感觉很爽。 雾中看花,打算停止在网络上搜集零散的知识了。系统性的回归一遍计算机领域的基础知识,本人是半个计算机应用门类的高材生,本科(尼玛我是一本进去的,东三省都是二本线,朝鲜族的三本...

阅读全文

我公司目前的敏捷持续部署总结和展望

上一篇文章用了我2个晚上,今天把老早之前就想写的公司持续集成的总结和展望写了,算是给自己大脑一个交代——对自己说到做到。

持续的干货三大块:

为了规避风险,隔离不可控因素。三大块中又可以插入环境差异。通常是二到四个:

持续集成三大块,通常就在1\2\3环境里不停的迭代。最后到生产上被利用。生产迭代频率相对低一些。

代码管理

公司刚建立的时候用的是SVN,那个时代我还是个小白,并没有过多参与。后来,公司领导看git的分布式代码仓库牛掰,就在观望、学习、变革中,把代码管理的环境迁移到了git上面,这期间,团队经历了不适应,不会,抱怨,理解,能用,会用,善用的转变。主要还是招聘到了一个git小王子,他帮助团队对git的理解大踏步前进。废话讲完。

git工作流

git工作流
从推动力上来说,研发团队的推动力来自产品和市场。这个在写公司srum流的文章里有提及。
这个地方就不啰嗦git的工作流了。我们遵从了Gitflow工作流的基本逻辑。实际运用中灵活处理。
想了解git的工作流请移步github上的git-workflows-and-tutorials

数据库变更管理

数据库是最难控制变更的。因此我们经过探索和总结摸索了一套较为有效的管理方式。可能还不是最科学的,虽然会有些问题,但是目前运作问题不算大。也很少看到这方面的文章。我们约定,数据库变更以脚本方式提交,禁止研发在测试环境自己修改数据库,变更需提交脚本作为依据。那么,我在执行过程中,如测试环境A,跑了,我就会以修改文件夹名称,以名称为标记。如果脚本还要再修改,则研发口头告知或他直接提交新的变更脚本。变更脚本有若干个,通常以任务标号为命名规则,没有项目标号则按自定义方式定义。
这套机制,实施最大的难度是协调,让研发了解这个规则。了解并熟悉这套流程之后,基本就没有什么大问题。

编译打包发布测试环境

现在这一套全部脚本化,总结就是流程是逐步完善起来的,一个阶段有一个阶段的做法。
开始,研发手动在本地打包,工具eclipse+maven,打包完后手动上传到服务器的tomcat指定目录。那会我们只有3个项目,这么做问题不大。
后来,总是等着研发发布,太慢了,这么low的重复劳动我说我来做好了,你教下我怎么打包的,然后我就会了,我就研究了maven的一起机制。搞了那么一周多点,由于拿到了测试服务器的账户密码,我就在想怎么可以提高效率。研究了明白了里面的原理,我就很自然的认为,既然本地可以打包,那服务器上到打包拷贝过去不是更快,网络传输的时间就略去了。于是,我测试了下,填了很多坑,手动在服务器上打包发布成功。就掌握了最原始的发布。
再后来,项目越来越多,多到大于10个,虽然只有几个发布频率很高,但是手动发布感觉劳心费力,效率底下,我就琢磨如何提高。shell就引入。项目进度太快,我根本没有时间利用上班时间搞,于是下班后,自己一点一点测试。把第一版的自动发布脚本写出来,结合crontab 命令,每天自动发布。然后就轻松多了。后来专门利用业余时间对shell做了一个深化,就有了一次重构。
可以参考:http://blog.csdn.net/windanchaos/article/details/53490630
现在使用的脚本已经不是这个版本了,又被我重构了一次。由之前的一锅贴全部发布,改进为任意项目选择发布,由jenkins驱动。现在的模式:自动+手动方式。比起从前还是大大的加快了迭代测试效率。虽然还有很多问题。比如现在的不熟结构是所有项目都在一个tomcat下面,发布一个,其实是影响全局的。全套发布下来,花了很多不必要的时间。
当然,还写了很多发布小工具,比如自动识别24小时内修改提交到代码库的js/css/jsp等静态资源文件,巧个命令自动拷贝过去,完全不用重新打包。
还存在的问题:
1、tomcat部署在一起导致的发布启动效率,浪费不必要的时间。主要是系统资源不够,没有去拆分。
2、外网地址一周要变2-3次,需要手动去修改域名映射。浪费时间。
3、jenkins让人人都具备发布能力,从某种意义上来说是不恰当的。虽然解放了我,但是还是存在相互干扰的情况。不算严重。

阅读全文

我公司商城架构学习和研究

我可以一口气把我所了解的技术说一遍,但是我却无法更深入的理解这些东西在具体使用中的职责是什么,所以有了本篇博客一个记录、学习。

商城的后台是java语言的,所以很自然的使用了:

jsp+servlet+structs2+hibernate+spring+ajax

jspserlet我之前学习过了,其中一个整理了一篇日志。我手上有一本《JavaWeb编程实战宝典》,学习到jsp写登陆就暂停了。哦~大不当啊,没有持续。当时我在干什么呢?从日志记录来看是分神了,去捅了一点研发管理、测试管理的理论,加上最近太忙,就没有拐回来所致,哎,我这个人就是太贪心了,面面俱到,没有深入的。所以这个计划还是要继续下去。话又说回来,学这么多,其实我在测试这块的累计还是有限啊,明年怎么涨工资啊,万一干的不爽出去找工作,卖什么啊?说什么jmeter会用,讲真我真不觉得那工具能怎么样,我花了2天晚上就把教学视频看完了。真的在工作中使用,作为一个测试,你唯一厉害一点的就是工具熟悉一点,压测的时候也需要研发配置你,给你开接口才可以压测。真的不能以为你掌握了一个性能工具就懂性能测试了,不是那样的,要做一个压测,都是团队合作,反正我做了很多次压测,基本上是low的一逼,我甚至教研发用jmeter,最简单那种一教就会,在研发内部推荐大家自己压,一个研发反应快马上就懂压测自己的代码了,嘿,测试小朋友,你的价值呢,搞笑啊,会用jmeter?由于我之前研究学习了http协议,用起jmeter还是没有什么障碍。知识网上有,不懂2分钟后就懂了,再不行,开源的有官方文档,读啊,尼玛六级不是白过的。最近一周读完了《操作系统之哲学原理》后,对计算机又加深了认识,看看对性能测试这个方向真的感觉我做的太low逼了。扯得远了点,就是说学的东西(就是这个javaweb宝典)啊,不好卖钱,我又缺钱,而且还很贪(双11买了一堆无关测试的书)。三难啊。

使用的容器:tomcat,这个基本配置是我在维护,有所了解,但是还没有达到精进的程度,比如性能优化怎么搞,我就不太懂。这里还有提升空间。最近去看了jvm的原理,忘了摘抄,大概知道些,堆栈,垃圾回收,线程,这个地方回头单独出文。

代码管理工具:git,这个在公司内部使用最深的人大概就是我了,命令行操作无形的装逼,脚本自动化之类的,可以解决各种发布的问题,什么多少小时内提交过代码就怎么样之类的逻辑。不懂,查一下就解决了,所以没有什么困难了。

编译和包管理工具:maven。能用,编译打包,其他的更深的没有必要纠结。

研发工具:eclipse。只能呵呵了,java用的少,基本能用起来,一般是看git log,查看方法调用、查看研发修改代码引用之类,自己写代码还差点火候,还有延展空间。

数据库:mysql。我负责刷脚本,研发提交脚本过来,我负责刷生产和测试库,一些语法错误可以纠正,什么左联右连不熟啊亲。其他select\update\insert\之类的知道,但是不熟练。所以这个地方可以找个时间再总结下,虽然已经看过2次教材了,但是平时用得少,知而已。哎,一切以效率为先,navicat足够了。。。自我鄙视

页面框架:vue+kendo。哦,这个就完全不是我的领域了。但是我shell帮他们解决了每次发布手动替换的问题,自动化发布。我的水平,知道css/html/javascript的分工,css的几个样式分类器(不确定这么叫),html的标签啊,大概知道html里面的结构之类。好歹也是用selenium玩过jQuery的啊╮(╯▽╰)╭

技术对我来说,知道个大概,具体要说明白,说出点道道来不是一下两下的事,就目前这种状态呢,基本和我大学时代接受一个观点相同,那个观点的核心就是:这是一个知识大爆炸的时代,你不可能也不用去记住具体的知识是怎么样的,但是你一定要搞清楚知识是如何被使用的,已经有哪些知识可以被使用,最关键的是你要知道如何找到它们,并用起来。这里想起另一观点,知识是分级别的,一手知识来自源头,二手知识来自无差别转发,三手就是自己理解转述之类,最好是去拿一手的知识。

其他我暂时还无法知道具体作用的:

netty是代码里的,从研发口中听说过,其他我在负责维护,基本的启动配置都知道。但就点到为止了,不能再深入。所以这篇文章主要是它们几个。

Netty

homepage
http://netty.io/
百度百科基本忠实了官网描述,那我再引用一张官网的图:
这里写图片描述

Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.
在我目前这种层次来看,我们用netty就是简化了网络通信的编程复杂程度,把底层的通信都交给了netty打理。
基于netty提供的能力(可扩展的事件模型、通用的通信api、防内存溢出的富字节缓存机制(意译二手)),构建起我们商城的各类网络通信。

阅读全文

Jmeter的Non_GUI模式,命令行模式

For load testing, you must run JMeter in this mode (Without the GUI) to get the optimal results from it. To do so, use the following command options:-n This specifies JMeter is to ...

阅读全文

我理解的计算机

研究完了http的协议及操作,下面计划把网络测试和性能有关偏底层一点的概念梳理梳理。固本求原。进程\线程\死锁在《软件设计师教程》中已经阅读学习过,虽然软考挂了没过,但是毕竟还是看过的,再温故知新一遍。就脱离课本上高精深的描述求个自我解脱型的理解。不足之处以后深入再补。计算机的本质或者说对人类的价值是计算,非要加个定语的话,超高速的计算。抽象出来的模型为:输...

阅读全文

python requests请求http

主要还是参考官方文档,摘抄改改,runrun 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283...

阅读全文

ubuntu16.04升级需要知道的事

1、你有一个快速且正确的源/etc/apt/sources.list 12345678910111213141516# deb cdrom:[Ubuntu 16.04.1 LTS _Xenial Xerus_ - Release amd64 (20160719)]/ xenial main restricteddeb-src h...

阅读全文

http协议详解及操作

互联网,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用,核心就是不同构建在TCP/IP协议基础上的http请求。固本求原,本篇文章将对http协议进行整理学习、然后使用代码去操作。

1.http协议

1.1如何工作

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP”客户端”是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

一个HTTP”服务器”同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
以下图表展示了HTTP协议通信流程:
这里写图片描述

因此,该协议就是客户端和服务器交换数据的一揽子标准。

可以是浏览器发起请求,也可以是程序代码去发起。
序号 方法 描述 1 GET 请求指定的页面信息,并返回实体主体。 2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报文 3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 5 DELETE 请求服务器删除指定的页面。 6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 7 OPTIONS 允许客户端查看服务器的性能。 8 TRACE 回显服务器收到的请求,主要用于测试或诊断。 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,见下文http报文。

HTTP响应也由四个部分组成,分别是:状态行、消息报文、空行和响应正文。
这里写图片描述

1.2协议特点

HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

1.3HTTP协议的报文

阅读全文