- 博客(462)
- 资源 (8)
- 收藏
- 关注
原创 缓冲区溢出攻击
作者:Tang Zhemingstrcpy 是C语言中最常用的函数之一,今天我们将要看到的就是如何利用strcpy的错误而导致的一次匪夷所思的函数调用。实验例子如下:void copyString(char* s){ char buf[10]; strcpy(buf, s);}作为一个合格的C语言程序员,当然不应该出现这样的代码,因为这样的函数可能会导致数据溢出,但是很遗憾在现实
2016-03-31 14:57:49 1078
原创 一次单元测试讨论引发的奇想
作者:Zhang Yang近日,听了一段关于单元测试的讨论,在回家路上细细品味时产生了一些想法,这里记录下来,大家一起探讨。单元测试的讨论当时是这样一件事:项目上的一个子系统(subsystem)刚刚增加了单元测试的测试用例, 这些用例在开发人员那里编译是没有问题的,但是在CI中总是失败。原因是单元测试的makefile文件中,使用了产品工程中的一个环境变量${ENV_ROOT},该变量用于指示外部
2016-03-31 09:59:54 785
翻译 微服务(四)
作者:James Lewis/Martin Folwer 翻译:Zhang Yang 出错设计使用服务作为组件的一个结果是,需要设计应用程序能容忍服务的失败。任何服务调用都可能由于提供方不可用而失败,客户端必须尽可能优雅地响应这一点。相比整体式,这是一个缺点。因为它需要引入了额外的复杂性来处理它。其结果是,微服务团队不断反省服务故障如何影响用户体验。Netflix的Aimian Army诱发工作日
2016-03-25 16:05:41 762
翻译 微服务(三)
作者:James Lewis/Martin Folwer 翻译:Zhang Yang分权治理集中治理的一个后果是,在单一的标准化技术平台的趋势。经验表明,这种方式是收敛的 - 不是每一个问题都是钉子,同样不是每一个解决方案都是锤子。我们更喜欢使用正确的工具的工作,而整体件应用程序在一定程度上使用不同的语言,并不常见。当整体的组件分割的到多个服务,在当建立他们的时候,我们有一个选择。你想用Node.
2016-03-25 16:02:45 1377
翻译 微服务(二)
作者:James Lewis/Martin Folwer 翻译:Zhang Yang 围绕业务功能组织仔细看大型应用程序分成的几个部分,往往管理的重点在技术层面上,产生用户界面团队,服务器端功能团队和数据库团队。当这些团队沿着这些线路分开,即使是简单的改变也可以导致一个跨团队项目,需要花费时间和预算。一个聪明的团队将优化解决这个,两害取其轻-强迫分配业务到它涉及到应用程序中。业务逻辑无处不在。这里
2016-03-25 15:58:32 855
翻译 微服务(一)
作者:James Lewis/Martin Folwer 翻译:Zhang Yang “微服务” – 软件体系结构这样一个拥挤的街道上的又一个新术语。虽然我们很自然地倾向于用轻蔑的眼神来看它,但是它描述了一种软件风格,现在我们却越来越多的发现它吸引人的地方。在过去数年中,我们已经看到了很多的项目在使用这种风格,到目前为止结果都是积极的,以至于我们很多同事来说,它正成为构建企业应用程序的默认样
2016-03-25 15:49:58 1298 1
原创 地道的 Python(二)
作者: Zhang Yang列表推导上文介绍了一个高逼格的创建字典的方法,那列表呢?根据蛋痛定律,它也一定有,但是它被起了一个非常蛋痛的名字,叫列表推导: 先看看这样的代码:li = []for a in A: if a%2 != 0: li.append(a)看到代码第一行的时候,小编已经不想再看下去了,是的,这才真正的万变不离 C 语言。蛋痛指数直冲云霄了。Pytho
2016-03-23 14:49:19 1372 2
原创 地道的 Python(一)
作者: Zhang Yang逼格水果公司的一句 “The bigger than bigger” 广告词,使得逼格进入了大众的视野。内置逼格神器的程序猿们的内心一定是向往着更高的逼格。试问自己心里是否憧憬着这样一个场景:当你随手写下一行代码的时候,旁边的人不可思议的睁大眼睛,表示着原来代码可以这样写? 这是怎样一种装X之旅。Python 可以帮助你实现这样的愿望。Python 对于外行们来说,它都非
2016-03-23 14:43:51 2053
原创 Python 能干什么(一)
当你看到 Python 的时候, 心里想“蛇 ?!”,请从0节开始;“这是测试的事”,请跳转第2节;“脚本语言”,请跳转到3节;“不适用于大工程”,请跳转4节;
2016-03-22 17:18:59 25274 3
原创 spider/pyspider基础
一、爬虫的基本思路(以下内容选自《知乎》) 链接:http://www.zhihu.com/question/20899988/answer/24923424 想象你是一只蜘蛛,现在你被放到了互联“网”上。那么,你需要把所有的网页都看一遍。怎么办呢?没问题呀,你就随便从某个地方开始,比如说人民日报的首页,这个叫initial pages,用$表示吧。 在人民日报的首页,你看到
2016-01-27 21:14:20 3911 1
原创 logstash grok解析
在《本地搭建ELK系统》中,在本地搭建了一个非常简单的ELK系统。其中logstash从本地日志文件中读取信息并交给elasticsearch。然而直接把原始未加工的日志交给elasticsearch没有什么意义。logstash还有一个重要的工作就是解析日志。把解析出来的关键字与日志本身共同交给elasticsearch,elasticsearch才能很好地建立日志索引。logstash支持多种解
2016-01-24 11:51:39 18873
原创 本地搭建ELK系统
ELK系统主要由三部分组成,分别是elasticsearch、logstash、kibana。ELK系统收到推送过来的日志后,首先由logstash解析日志中的字段,分解成一个一个的关键字。elasticsearch将关键字与日志信息关联起来,以一种特定的格式化方式存储数据到硬盘。kibana提供与用户的交互界面,根据用户需求,从elasticsearch中读取信息并在网页上显示。本文以Redhat
2016-01-24 11:39:43 3310 1
原创 linux中内存泄漏的检测(五)记录内存泄漏的代码
到目前为止,先后通过wrap malloc、new函数重载和计算指针内存大小的方法,基本上满足了对内存泄漏检测的需要。如果发现了内存泄漏,那么就要找到内存泄漏的地方并且修正它了。茫茫代码,如何去找?如果能根据未释放的内存找到申请它的地方就好了。我们今天就是要做这个事情。想要根据内存地址查出申请者的信息,那么在一开始申请的时候就要建立地址与申请者之间的映射。1.内存地址内存地址,是一个unsigned
2016-01-23 10:45:10 3137
原创 linux中内存泄漏的检测(四)记录泄漏的大小
《linux中内存泄漏的检测(三)定制化的new/delete》讲到,利用C++的函数重载的特性,使C++的代码,也能方便地为new/delete加上用于检测内存泄漏的统计代码。然而,也因此引入的新的问题。目前的统计方式仅仅统计申请/释放内存的次数,并没有统计每次申请/释放内存的大小。 这种方法对于C来说是够用了,因为在C中申请和释放的大小是相同的,而在C++中就不一定了。 考虑以下两种情况:(
2016-01-23 10:42:16 4237 1
原创 linux中内存泄漏的检测(三)定制化的new/delete
《linux中内存泄漏的检测(二)定制化的malloc/free》中的__wrap方法只解决了C的问题,这一节介绍怎么让C++中的new/delete也能方便地插入计数代码。wrap方法尝试可不可以使用__wrap_new/__wrap_delete?我们试试看。我写了这样的测试代码#include <iostream>using namespace std;int count = 0;void
2016-01-21 09:14:59 2940
原创 linux中内存泄漏的检测(二)定制化的malloc/free
《linux中内存泄漏的检测(一)最简单的方法》介绍了最简单的内存泄漏检测方法,这种方法虽然简单,却有很多现实的问题,导致它不能用于实际的生产中。直接使用这种方法肯定是不现实的,因为:(1)把整个工程里所有调用malloc/free的地方都改成my_malloc/my_free,代码改动很大。(2)通常动态库和静态库的代码是没有权限修改的。今天就来解决这个问题,动态地决定让程序使用自己的还是系统的内
2016-01-21 09:13:46 5460 2
原创 linux中内存泄漏的检测(一)最简单的方法
什么是内存泄漏内存泄漏是指程序动态申请的内存在使用完后没有释放,导致这段内存不能被操作系统回收再利用。 例如这段程序,申请了4个字节的空间但没有释放,有4个字节的内存泄漏。#include <iostream>using namespace std;int main(){ int *p = new int(1); cout <<*p<<endl; return 0
2016-01-21 09:12:36 10065 1
原创 使用Python处理目录(二):计算某个目录下特定文件类型中文件总行数
计算某个目录下特定文件的行数,从文件中读入配置参数,计算结果输出到文件指定文件: 该功能是基于第一篇系列文章《打印目录下的文件名》的基础上加以修改得到的,主要的逻辑是遍历目录下的文件,然后读取文件中的内容,计算行数。为了方便修改配置,本文中的代码所需要的配置都是从文件中读取的。FilePath标识文件路径,patterns, single_level同第一篇文章中的功能一样。exceptFile指
2016-01-19 18:35:49 1771
原创 使用Python处理目录(一):打印目录下的文件名
要想遍历某一目录下的文件名,使用os.walk再方便不过了。他返回的是一个以元组为元素的列表。每一个元素都包含三个内容:路径,该路径下的子目录,该路径下的文件。os.walk使用了生成器技术(关于该技术的说明请参考其它文档或者技术资料)yield,给使用者带来了非常大的使用上的灵活性。由于生成器技术使得会函数walk的调用一次只返回一个元组,节省了内存空间,提升了执行效率。比如使用者只想得到当前目录
2016-01-19 18:29:00 7636
翻译 redis配置文件样例(二)
原文:https://raw.githubusercontent.com/antirez/redis/2.8/redis.conf主从备份。使用slaveof创建一个Redis实例作为另一个Redis服务器的备份。一些可以尽快理解关于redis备份的新东西。 1)redis备份是异步的,但你可以这样配置,若主站没有至少指定数量的从站与之相连,主站就停止接收写操作。 2)如果同步链接丢失了一小段时
2015-11-25 09:18:14 4282 2
原创 算法导论 9.1-1 求第二小元素
一、题目描述证明:在最坏情况下,利用n+ceil(lgn)-2次比较,即可得到n个元素中的第2小元素。(提示:同时找最小元素)二、常规方法使用两次for循环,分别将数组从前往后扫描。 第一扫次扫描过程中,不断记录和更新当前情况下的最小元素。 第二次和扫描过程中,不断记录和更新当前情况下的第二小元素。 伪代码如下:Int min = array[0], minId = 0;FOR i in [
2015-11-23 19:12:48 2362
翻译 redis配置文件样例(一)
原文链接:https://raw.githubusercontent.com/antirez/redis/2.8/redis.conf注意,要想让redis使用这个配置文件,redis启动时必须把这个文件的路径作为第一个参数:./redis-server /path/to/redis.conf注意,如果需要设置内存大小,可以设置的大小为1K到5G的范围,说明形式如下:# 1k => 1000 byt
2015-11-21 18:01:09 2041
原创 读哲学书笔记
最近看了一些关于中国古代哲学以及中医相关的书。竟然发现,中国古代哲学的思维方式在计算机领域无处不在。 虽然想法有点奇怪,但是遇到问题暂时没有想法时,或许也能成为一种启发。 以下是我的理解:整体与部分的对立统一:持续迭代与持续集成 阴阳交感万物化生:算法+算法=新算法 天之道权衡之道:无处不在的平衡 运动是绝对的:精确与模糊 抽象-哲学与计算机的共同点(之一)把几千年前的中国古代哲学与计
2015-10-27 19:35:48 1722
原创 抽象-哲学与计算机的共同点(之一)
在中国古代,阴阳最原始的含义就是指阳光的向背。随着其含义的不断扩展和衍化,最终上升到了哲学的高度,将阴阳理解为“相互对待的两端”。 然后从哲学的高度,分析“相互对待的两端”的关系与属性,将这一理论结果再用到具体的实践中。 根据实践的结果,对理论去糙取精,并进一步指导新的实践活动。我所理解的抽象,就是将具体事物上升到理论高度,从理论高论分析问题,再用于实践的过程。这一过程,不管在哲学及中医中,还是
2015-10-27 19:23:04 2568 1
原创 天之道,权衡之道
损有余而补不足,天之道也。—《黄帝内经》有没有觉得这句话很熟悉?它其实出自黄帝内经。 而关于阴阳理论最重要的一点便是阴阳自和(现在通常译为“中庸”)。 正如健康的人是阴阳之间的平衡。 当某一方过于强盛,就损之,某一方过于虚弱,就补之。 怎样才算是平衡呢?关键就在于找准平衡点了。这便是玄机所在。 因为平衡点的位置因人而异、因时而异、因事而异动态调整的。并没有什么标准。 如果一定要说有什么
2015-10-27 11:18:09 2778
原创 持续迭代与持续集成
天有其时,地有其材,人有其治,夫是之谓能参。—《询子》读中国古代哲学,首先感受到的是它的整体思维。 例如天地人一体观,讲究在看待任何事物时,都要把它们放置于天、地、人三大要素构成的宇宙框架中去分析、衡量,以寻找他们的本质和规律,预测它们的未来变化。 基于中国古代哲学的中医也是如此,认为为医之道,应该上知天文,下知地理,中知人事,综合考虑自然环境、社会环境、个人气质,把人体地生理、病理变化放在天
2015-10-27 09:08:21 5105 3
原创 算法 + 算法 = 新算法
道生一,一生二,二生三,三生万物。—道德经我们都知道,基础的搜索算法有深搜DFS和广搜BFS。它们的搜索效率都差不多,都是O(E)。只是对于不同的搜索特点,有各自适用场合。 假如有这样一棵树,在写搜索算法之前先分析一下。 如果目标结点在叶子上的可能性非常大,那么通常用深搜。 如果希望目标结点的位置尽可能地离根结点近,那么通常用广搜。 如果目标结点与位置无关,而是每条路径都有一个权值,权
2015-10-24 15:43:56 5807 5
原创 模糊与精确
背景:最近看了一些关于中国古代哲学以及中医相关的书。竟然发现,中国古代哲学的思维方式在计算机领域无处不在。中国古代哲学中,有一个非常经典的思想就是中和思想(现代书籍中译为中庸思想)。中和思想来源于阴阳理论。以下是关于阴阳理论的主要内容:以下是我的理解: 盖阴阳者,万物之终始,死生之本,逆之则灾害生,从之则苛疾不起,故能取法以和调。—《黄帝内经》我在读研时做过一些图像处理的研究
2015-10-24 12:15:25 3814 1
原创 for what? so what?
每次,朋友得知我维护着这样一个博客,都会问这样的问题: 写这个有什么用?能让你出名吗?能让你赚钱吗?能被很多人用吗?我不知道怎么回答。 为名?为利?为改变全世界? 我只能说“呵呵”。从来没有期待过,能得到什么。只是感谢自己多年的坚持。
2015-10-20 15:53:54 1387 1
原创 在linux上搭建gtest
1.获取 wget https://googletest.googlecode.com/files/gtest-1.7.0.zip2.编译 unzip gtest-1.7.0.zip cd gtest-1.7.0 ./configure –prefix=/opt/gtest make3.安装 sudo mkdir /opt/gtest /opt/gtest/include /opt/gt
2015-10-18 10:21:49 4560
转载 Redis运行流程源码解析
link: http://blog.nosqlfan.com/html/4007.html作者:nosqlfan 本文来自@凡趣科技 pesiwang同学的投稿分享,对Redis运行流程,命令处理的内部实现进行了深入讲解。 本文分析源码基于 Redis 2.4.7 stable 版本。概述Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关
2015-10-13 19:04:36 849
转载 Linux下静态库_库的基本概念;如何生成静态库动态库;nm查看库中包含那些函数、ar生成静态库,查看库中包含那些.o文件、ldd查看程序依赖的.so文件;gcc/g++与库相关的参数-L,-l,-f
link: http://www.cppblog.com/tqsheng/archive/2013/01/04/196948.html一、基本概念1.1、什么是库在 windows 平台和 linux 平台下都大量存在着库。 本质上来说库是 一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于 windows 和 linux 的平台不同(主要是编译器、汇编器和连接器 的不同),因此二者
2015-10-13 18:42:59 1491
翻译 redis的持久化
本文提供了关于redis持久化的技术描述,适用所有的redis用户阅读。如果想要更加全面地了解redis持久化及它提供的持久保障,你可能还需要阅读《redis持久化揭秘》redis持久化redis提供了不同幅度的持久化选项:RDB持久化对你的数据集基于特定的时间间隔执行时间点快照。AOF持久化在每次服务器收到写操作时记入日志,当服务器重启时,这些写操作会再次执行,重构出原始的数据集。命令以只能
2015-10-08 19:55:34 2286
转载 Redis Persistence
This page provides a technical description of Redis persistence, it is a suggested read for all the Redis users. For a wider overview of Redis persistence and the durability guarantees it provides you
2015-10-05 19:37:06 1050
原创 从面向过程到面向对象
改变思维 曾经在学校学习数据结构课程时,第一节课上,老师就告诉我们:程序=数据结构+算法。这句话对我后来学习数据结构起了很大的作用,积极的作用。 可是后来学到C++面向对象部分时,这句话让我在有些地方怎么也想不通。想了很久之后,我得出了另一个结论,在面向对象程序中,程序=对象&行为。这里我使用&,是为了说明对象与行为是关系的。行为是对象的行为,对象要对它自己的行为负责。 这种思维上的转换在从P
2015-10-02 21:43:50 4632 2
翻译 redis的备份
redis的备份功能使用非常简单。配置一个主从式备份机制使得redis的从服务器与主服务器完全一样。以下是对redis备份非常重要的描述。 redis使用异步备份。从2.8版本开始,从站会周期性地从备份流中接收一定量的数据。主站可以有多个从站。从站能够接收来自其它从站的连接请求。除了连接多个从站到同一个主站,从站还可以连接到其它从站,形成一个图状结构。redis备份在主站端是非阻塞的。这就意
2015-09-30 12:23:03 1540
转载 Replication
Redis replication is a very simple to use and configure master-slave replication that allows slave Redis servers to be exact copies of master servers. The following are some very important facts about
2015-09-28 17:23:48 1263
翻译 redis的配置
redis可以不需要配置文件,仅通过一个默认的内置配置文件就可以启动。但是这种方式只推荐用于测试和开发目的。 正确配置redis的方法是提供一个redis的配置文件,通常名为redis.conf。 redis.conf包含多个由下面简单格式组成的指令:keyword argument1 argument2 ... argumentN这是一条配置指令的例子slaveof 127.0.0.1 638
2015-09-23 20:18:14 1380 1
转载 Redis configuration
linking:http://redis.io/topics/configRedis is able to start without a configuration file using a built-in default configuration, however this setup is only recommended for testing and development purpo
2015-09-22 18:54:40 832
翻译 redis数据结构介绍
redis不只是一个简单的键(key)-值(value)数据库,实际上它是一个数据结构服务器,支持各种类型的值。也就是说,在传统的键-值数据库中,你把字符串键与字符串值联系起来,而在redis,值不仅限于一个简单的字符串,还可以是更复杂的数据结构。下面列出了所有redis支持的数据结构,下文会分别对这些结构进行介绍:二进制安全字符串队列(lists):基于插入顺序有序存储的字符串元素集合。主要是
2015-09-21 21:13:59 4764
VC++和VS写的小游戏贪吃蛇
2012-06-12
背包问题九讲
2012-05-14
openGL的配置文件
2011-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人