自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

L瑜

绳锯木断,水滴石穿

  • 博客(46)
  • 收藏
  • 关注

原创 360搜索在微服务架构下的技术平台实践(三) -- Thor

为什么要做Thor?360搜索有多个团队,几百号人。每个团队各自有多个平台工具,但各团队各自为战,带来的问题是没有统一的开发、管理规范,不论是交接还是扩展,做的人都很痛苦。当老人离开,新人接手会掉入无尽的坑中Thor的目标重新定义工具&平台该如何优雅的开发和产生简洁、快速地将现有的平台工具集成进来以工厂化的思维,让平台能产生平台,不再为了同类需求造轮子简略架构从Web端发起请求到Gateway,Ga

2017-10-28 11:22:31 918 1

原创 360搜索在微服务架构下的技术平台实践(二) -- 微服务架构

什么是微服务?其实最近两年微服务这个概念挺火的,那其实究竟什么是微服务呢? 微服务其实是一种架构风格、一种约定。就和我们开发中使用的设计模式是一个道理。 每个微服务仅关注于完成一件任务 每个微服务独立部署,互不干预 一个应用由一个或多个微服务组成把我们上一文中的单体架构,拆分成微服务的结构,那么应该是如下图:这里我们将每个功能拆分为一个单独的服务,有自己

2017-09-25 14:39:03 1524

原创 360搜索在微服务架构下的技术平台实践(一) -- 单体架构

单体架构单体架构是最常见的架构方式,将所有功能、业务逻辑都放在一个web容器中,成为一个应用。这就是我们常说的单体架构。例如,我们有一个小型商城系统,那么如下图所示:在这里,我们将所有的功能都放在一个web容器中,例如订单管理、商品管理、支付功能、通知功能、购物车管理、物流相关等。单体架构下,我们发现性能跟不上了,怎么办?我们可以通过LoadBalance扩容,也就是找台机器,将web目录拷过去,把

2017-09-25 11:33:40 1082

原创 PHP foreach使用 &引用 的坑

在PHP中,array是最常用的结构了,可以当做队列、堆栈、hash等结构使用,所以遍历array最常用的foreach循环,我们用得很多,但其实foreach循环中有一个隐藏的坑,如下代码: <?php$arr = [1,2,4];foreach($arr as &$a){ $a = $a*$a;}print_r($arr);foreach($arr as $a){ print_

2017-09-11 21:24:54 6489 2

原创 Linux下快速收起vim 并暂存修改

有时我们在linux下使用vim进行开发的时候,需要暂时切换到另一个事件,此时有可能是ps 命令看一下当前进程存活情况,有时候是需要top 命令 看一下当前资源消耗情况,或许是想看一下另一个文件里某行配置是什么内容这种情况往往是需要短暂的切换,但又不想完全的退出。如果直接:wq 退出当前vim。等操作完了之后又需要切cd 回到当前目录并且再次vim xxx,特别的麻烦。所以接下来我们使用如以下的方法

2017-08-29 00:10:38 1397

原创 PHP 实现后缀表达式(接受四则运算字符串,输出计算结果,附代码)

最近接触了一个有趣的需求:给定变量a、b、c、d等若干,要求由用户输入的普通四则运算字符串(包含加减乘除括号),算出具体的值。 例如,a=1,b=2,c=3,d=4,给出 a+b/(d-c),应计算出结果为3,若为 a*b/(c-1) 则应计算出结果为1这种情况下,第一反应可能是用数字值将字符串里的变量替换,然后通过eval()执行。但这样的逻辑太粗暴,代码也太丑陋,其实大可不必如此。 此时,

2017-08-21 21:59:16 3718

原创 Linux sort命令使用示例

我们在开发、维护的过程中,有时会需要将log、数据等做过滤和筛选例如,我们有这样一个文件 daily_pv.txt ,它可能有10W行,其部分内容如下:20170702 a 5233120170703 a 6321020170701 b 23421320170703 b 34100020170701 a 5210320170702 b

2017-08-20 17:06:18 754

原创 python通过thrift连接hive,异步执行查询

在开始之前,我们需要具备一些基础知识:什么是hive? hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。hive对外暴露出来的用法,基本上和Mysql相同,但是它能做到Mysql做不到的对大数据处理,例如几十亿条数据,放在Mysql中,必然不堪重负,但在hive中,举重若轻

2017-08-20 17:04:56 4990 1

原创 HTTP 连接建立方式

当我们在浏览一个web页面时,页面里的元素可能是来自于多个源的,例如每张图片有各自的来源。我们在浏览一个拥有2张图片的web页面时,浏览器需要发起3个HTTP事务,一个用于获取顶层HTML页面元素,另两个获取相对应的图片。串行连接如果只是简单的对连接进行管理,使用串行化的方式去请求资源。每个请求都需要等待前方的请求完毕,并且每个事务在请求时都需要建立连接-传输数据-关闭连接。使用串行化的方式去请求,

2017-08-20 17:03:33 1494

原创 HTTP 延时

HTTP性能优化一直是个十分重要的话题,但要进行优化,首先得找出有哪些地方会导致HTTP延时。HTTP 请求过程在HTTP请求传输的过程中,会经历这样的场景和可能遇见如下的问题:1 . 用户输入或打开一个地址,client查找本地http缓存,如果有未过期的本地缓存,则直接200(from cache),请求结束。 现代浏览器有这样的机制,在访问server时,由server返回的HTTP响应头

2017-08-15 20:54:11 3850

原创 HTTP 报文头 初解

在 HTTP报文 一章中,我们介绍了HTTP协议由 行、头、体组成。而本章,介绍 “头” 如果你写了一个小爬虫,但抓出来的结果和想象的不同(例如界面样式,返回内容和人工看有差异,或者是需要登录),你可以更改你发送的HTTP请求的header部分,将合法的User-Agent、Cookie等添上,能解决大多数此类问题,因为HTTP是无状态并且不安全的协议,所以这些小手段能够生效。下面取几个常用的

2017-08-15 20:53:47 601

原创 Mysql 事务隔离级别、InnoDB实现隔离机制

当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性。隔离级别在SQL标准中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改,在事务内和事务间的可见性。较低级别的隔离通常可以执行更高的并发,系统的开销也更低。READ UNCOMMITTED (未提交读/脏读) 在READ UNCOMMITTED级别中,事务所做的写操作,即使没有提交,对其

2017-08-15 20:53:13 1106

原创 HTTP 状态码

HTTP的状态码被分为了5大类,分别是:1xx : Hold on (等着)2xx : Here you go (执行完了,没毛病,拿着结果回去吧)3xx : Go away (你要的不在我这儿,去别处找)4xx : You fucked up (你丫出问题了)5xx : I fucked up (我特么出问题了)状态码为客户端提供了一种理解事务处理结果的便捷方式(比解析字符串方便多了)1

2017-08-15 20:52:52 475

原创 redis 事务 理解和使用

redis的事务和传统的关系型数据库不同,在关系型数据库中,用户首先向数据库发送一个BEGIN信号,然后执行各个相互一致的读写操作,最后,用户发送COMMIT来确认之前的操作,或者发送ROLLBACK来放弃之前的操作。在redis中也有简单的方法可以处理一连串的读写操作,使用特殊命令MULTI为开始,然后传入一连串用户的操作,最后以EXEC结束,但这种做法,实际上是在用户执行EXEC之前,客户端缓存

2017-08-15 20:51:55 1349

原创 Mysql分区表 介绍和使用

试想这样一个场景: 你有一张表,存储引擎为InnoDB,里面存储的数据量达到了上亿级别。此时,因为数据量巨大,肯定不能在每次查询的时候都扫描全表。 就算是使用索引(B-Tree),除非使用索引覆盖查询,否则数据库服务器需要根据查询的结果回表,查询所有符合条件的数据, 如果数据量巨大,会产生大量的随机IO,最终使得应用程序僵死。另外,这种数据量下,索引维护的代价也非常高。分区

2017-08-15 20:51:01 1616

原创 Url 初步介绍

基础背景:URI: uri(Uniform Resource Identifier) 是统一资源标识符,就像互联网上的地址一样,在世界范围内唯一标识并定位资源URL: url是uri最常见的形式,URL描述了一台特定服务器上某资源的特定位置。大部分url都遵循一种标准格式: 1、第一部分被称为方案,说明了访问资源所使用的协议类型,例如我们常常看到的 http://、https://

2017-08-15 20:49:43 856

原创 HTTPS 初步介绍

背景:非对称加密: 基于数学方法,生成一个公钥-密钥对,来对数据做加密-解密,被公钥加密的数据只能被私钥解密, 同样,被私钥加密的数据也只能被公钥解密。所以可以用别人公开的公钥加密一段信息然后发送出去, 只有拥有对应密钥的那个人才能解密。但是缺点是加密-解密的计算成本高,比较占用cpu资源对称加密: 和非对称加密相比,只生成一个密钥,加密-解密都用这个密钥,所以需要通信

2017-08-15 20:48:43 1928

原创 HTTP 报文详解

报文的组成部分HTTP报文 由起始行、首部、主体组成。1、 起始行: 起始行是一个由行分隔的ASCII文本,每行都以一个由两个字符组成的行终止符作为结束,行终止符为 一个回车符 + 一个换行符,可以写作CRLF2、 首部: 首部的格式与起始行相同3、主体: 主体是一个可选的数据块,与起始行和首部不同的是,主题可以包含文本或二进制数据,也可以为空报文的语法所有的HTTP报文都可以分为

2017-08-15 20:47:37 967

原创 Nginx - Location 匹配规则

语法规则location = /uri = 表示精确匹配某个urilocation ^~ /uri ^~ 表示精确的前缀匹配以uri开头的请求,优先级在正则之前location ~ uri ~ 表示区分大小写的正则匹配,这里的uri就是一个正则表达式location ~* uri ~* 表示不区分大小写的正则匹配,这里的uri就是一个正则表达式loc

2017-08-15 20:46:18 1823

原创 Yii2框架源码追踪阅读(一)--从入口脚本index.php到类加载器的初始化

首先我们以yii2-basic为源码阅读剖析目标,首先,请到http://www.yiichina.com/download 下载框架源码。接下来就开始我们的yii2源码阅读之旅吧。

2017-01-19 17:51:08 1421

原创 Mysql创建用户后,执行grant授权命令,提示can't find any matching row in the user table

在给新项目做数据库配置的时候,发现一个奇怪的问题:使用命令:mysql> insert into mysql.user(Host,User,Password) values("1.1.1.1","test",password("pswd"));创建用户后,执行权限配置命令:mysql> grant all on testDB.* to 'test'@'1.1.1.1'ident

2016-11-28 14:46:39 82044 1

转载 redis中zipmap源码剖析

最近看了一篇剖析redis中zipmap源码的好文,特意转载保留供将来长期回顾转载自:http://blog.csdn.net/Xiejingfa/article/details/51111230今天为大家带来Redis中zipmap数据结构的分析,该结构定义在zipmap.h和zipmap.c文件中。我把zipmap称作“压缩字典”(不知道这样称呼正不正确)是因为zipmap利用

2016-11-15 14:26:18 981

原创 服务端数据推送方式-SSE(server-sent event)简介及上手小demo

老的http协议是请求-响应式的,对于某些实时性要求比较高的需求(例如微博消息推送),实现起来是比较麻烦的,而html5标准中,新增了一个SSE(server-sent event,服务端推送事件),可以方便地做到消息实时推送,并且由于是官方特性,主流浏览器对其支持是较好的。和websocket不同的是,ws是全双工的,本质上是一个额外的tcp连接,而sse是直接建立在当前http连接上的,本

2016-10-24 15:22:40 9515

原创 更改pip源至国内镜像,显著提升下载速度

经常在使用python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的烦恼。网上有很多可用的源,例如豆瓣:http://pypi.douban.com/simple/                                          清华

2016-09-02 11:00:15 367712 35

原创 yii框架中配置redis并启用安全验证

1、安装php-redis扩展2、安装yii2-redis扩展3、在yii中使用redis4、添加redis安全验证

2016-08-26 14:31:52 3122

原创 redis各类型实现&命令 笔记

1、string类型:mset命令:一次set多个key的值,但若失败一个,则整个命令失效(类似于事务机制,要么都成功,要么都不成功),不会出现部分成功部分失败的情况。msetnx 命令:参考mset,但比mset多一个限制条件:若其中一个key已存在,则也视为事务失败2、list列表:列表在redis中使用双连表实现,但并不提供精确查找,只能范围查找,所以更加适用于做各类

2016-08-19 14:35:35 638

转载 redis可用性提升(哨兵sentinel)配置示例

redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决每个sentinel会向其它sentinal、master、slave定时发送消息,以确认对方是否“活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的“主观认为宕机” Subjective Down,简称SD

2016-07-05 15:22:53 10304

原创 什么是跨域?怎么解决跨域问题?

什么是跨域?跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子:http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)http://www.123.com

2016-06-15 17:32:16 276673 46

原创 php的json和数组转换

1、将数组变为json字符串:json_encode($arr [,$options=0]);//$options为可选参数,默认为0一般来说使用json_encode($arr)即可。但是当有特殊需求时,例如数据中包含文件绝对路径,像“/da1/test/123.php”,直接json_encode会把正斜杠“/”转义成“\/”,这时候就需要添加特殊参数到options里了,option

2016-06-14 15:42:00 1333

原创 Redis的高级特性

基础的使用方式随便在网上都能搜到,所以就不谈论这一块了。主要想分享一下高级特性,如果不对请指正。一、数据失效方式:因为redis是基于内存的,而由于内存的昂贵,注定它的大小是有限的,所以当数据量较大、内存被占满的时候,再插入新数据,就要涉及到如何进行调度了。调度方式主要分为四类:不删除、LRU(最近最久未使用)、随机删除、删除剩余过期时间最短。再考虑到部分key存在过期的特性,所以分为...

2016-05-27 11:13:25 900

转载 Redis Cluster 实现细节

Redis Cluster 实现本文将从设计思路,功能实现,源码几个方面介绍Redis Cluster。假设读者已经了解Redis Cluster的使用方式。简介Redis Cluster作为Redis的分布式实现,主要做了两个方面的事情:1,数据分片Redis Cluster将数据按key哈希到16384个slot上Cluster中的不同节点负责一部分sl

2016-05-13 18:06:40 6368

原创 python中多进程+协程的使用以及为什么要用它

前面讲了为什么python里推荐用多进程而不是多线程,但是多进程也有其自己的限制:相比线程更加笨重、切换耗时更长,并且在python的多进程下,进程数量不推荐超过CPU核心数(一个进程只有一个GIL,所以一个进程只能跑满一个CPU),因为一个进程占用一个CPU时能充分利用机器的性能,但是进程多了就会出现频繁的进程切换,反而得不偿失。不过特殊情况(特指IO密集型任务)下,多线程是比多进程好用

2016-04-15 16:25:03 27962 11

转载 Hudson中部署slave结点的方法

Hudson中分布式部署,node节点设置,假如有2台windwos机器(192.168.200.132、192.168.200.133)作为SLAVE机器。其实Master/Slave相当于Server和agent的概念。http://www.cnblogs.com/itech/archive/2011/11/11/2245849.html新建一个node节点,节点名称可

2016-03-29 17:58:24 1370

原创 谈谈python的GIL、多线程、多进程

最近在看Python的多线程,然而不仅要知其然,更要知其所以然。所以有了下面的深入研究:首先强调背景:1、GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。2、每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求

2016-01-29 11:10:37 3756

原创 正则表达式速查手册

正则表达式十分强大,作用非常多。所以特地记下以下内容以备不时之需。\w是数字+大小写字母+下划线\d是数字\s是空白符(\n、\t等)↑↑↑它们的大写意思是对它们取反. 可以匹配任意字符(除了换行符\n)+是至少一次*是随便多少次?是0次或者1次| 是或者的意思(例如:a|b|c匹配a或者b或者c)a{2} 意思是匹配a这个字符正好连续出现2

2015-11-26 21:26:38 742

原创 如何通过Fiddler对安卓应用进行抓包

有的时候我们需要对安卓应用进行抓包,获取它访问的接口或者其他的信息。我们有一个比较方便的工具--Fiddler如何使用呢?1.从网上下载Fiddler安装包进行安装。2.Fiddler安装完毕之后,使用360免费wifi分享出wifi,连接时,勾选--显示高级选项。设置代理服务器为手动。主机名写电脑的IP地址,端口填写fiddler的监听端口(端口在Tools--F

2015-11-16 20:49:14 1871

原创 使用python抓取js动态加载的网页

我们在做网页抓取的时候,一般来说使用urllib和urllib2就能满足大部分需求。但是有时候我们遇见那种使用js动态加载的网页。就会发现urllib只能抓出一个部分内容空白的网页。解决办法是使用selenium+phantomjs进行抓取。。。审查元素之后,。发现百度图片中,显示图片的div为:pullimages这个div里面的内容是动态加载的。而使用urllib&urllib2

2015-10-19 11:49:11 21464

转载 linux下操作zip文件命令大全

linux下经常需要对压缩文件进行操作,以下是操作zip文件解压的命令:命令名 : unzip语法:unzip [-cflptuvz][-agCjLMnoqsVX][-P ][.zip文 件][文件][-d ][-x ] 或 unzip [-Z]补充说明:unzip为.zip压缩文件的解压缩程序。参数:-c 将 解压缩的结果显示到屏幕上,并对字符做适当的转换

2015-10-09 11:21:25 1205

原创 selenium使用send_keys()方法写中文报错的解决方法

在使用selenium时候,难免会遇到需要处理中文的情况。毕竟咱们是在中国,做的产品大都也是和中文有强烈联系的。举例:打开好搜。搜索“灵魂摆渡”,找到类名为:‘g-mohe ’的类。然后退出。代码如下:driver = webdriver.Chrome()driver.maximize_window()driver.get("http://www.haosou.com"

2015-10-08 15:02:32 28174

原创 如何在linux命令行无界面下,使用selenium进行自动化测试

selenium相信做自动化测试的童鞋并不陌生,但如何在linux下用它做自动化测试呢?

2015-09-25 16:07:40 22440

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除