摘要:假设我们如下一个日志文件,这个文件的内容是来自某个电信运营商的手机上网日志,文件的内容已经经过了优化,格式比较规整,便于学习研究。有了上面的测试数据—手机上网日志,那么问题来了,如何通过map-reduce实现统计不同手机号用户的上网流量信息?通过上表可知,第6~9个字段是关于流量的信息,也就是说我们需要为每个用户统计其upPackNum、downPackNum、upPayLoad以及downPayLoad这个四个字段的数量和,达到以下的显示结果: 阅读全文
posted @ 2015-02-13 01:03 EdisonZhou 阅读 (2619) 评论 (2) 编辑
摘要:MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。但对许多开发者来说,自己完完全全实现一个并行计算程序难度太大,而MapReduce就是一种简化并行计算的编程模型,它使得那些没有多有多少并行计算经验的开发人员也可以开发并行应用程序。这也就是MapReduce的价值所在,通过简化编程模型,降低了开发并行应用的入门门槛。Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是 阅读全文
posted @ 2015-02-12 15:26 EdisonZhou 阅读 (30615) 评论 (2) 编辑
摘要:RPC,即Remote Procdure Call,中文名:远程过程调用;(1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的。因此,它经常用于分布式网络通信中。(2)Hadoop的进程间交互都是通过RPC来进行的,比如Namenode与Datanode直接,Jobtracker与Tasktracker之间等。因此,可以说:Hadoop的运行就是建立在RPC基础之上的。 阅读全文
posted @ 2015-02-11 14:18 EdisonZhou 阅读 (16416) 评论 (2) 编辑
摘要:load balance当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。 阅读全文
posted @ 2015-02-10 00:37 EdisonZhou 阅读 (68089) 评论 (63) 编辑
摘要:(1)通过选择以XML方式打开edmx文件,我们可以可以清楚地看到,edmx模型文件本质就是一个XML文件;(2)可以清楚地看到,edmx模型文件是一个XML文件,其中定义了三大组成部分,这三大组成部分构成了所谓的ORM(对象关系映射);(3)再通过解决方案管理器分析edmx模型文件,其包含了三个子文件:①第一个是xxx.Context.tt,这个首先是一个T4的模板文件,它生成了我们这个模型的上下文类;②第二个是设计器部分,它定义了模型关系图的元数据,比如每个类图的宽度多少,在图中的坐标(X、Y轴)等;③第三个就是数据库表中所对应的实体类对象,它也是一个T4模板文件,对应了所有选择的数据库表: 阅读全文
posted @ 2015-02-06 15:39 EdisonZhou 阅读 (3001) 评论 (10) 编辑
摘要:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的Web服务器来体会一下。本次模拟的一个超级简单的Web服务器软件,实现了静态文件和动态文件(通过模拟aspx页面对象)的处理和响应。但是,还有很多的功能并未实现。不过,对于一个最基本的Web服务器所需要了解的最基本的原理:Socket的监听和连接、基于TCP协议的HTTP协议、动态文件类的反射与调用等,模拟开发本次的DEMO的过程是可以达到的。 阅读全文
posted @ 2015-02-01 22:45 EdisonZhou 阅读 (22248) 评论 (7) 编辑
摘要:当我们需要对一个网页上的某个按钮进行多次点击以求得某种“好处”的时候,例如天猫的抢红包活动,我们可能需要点击N次之后才有可能获得一个红包,但是这个N是一个未知数,有可能我们要不停地点击半个小时甚至一个小时都还无法获得,自己估计也会点鼠标点得醉了。因此,针对这种情况,我们希望自己写一个小工具来让计算机帮我们做这件事。既然是让计算机模拟我们的点击操作,其思路自然是找到指定的按钮或图片,循环对其执行click事件。于是,我们开始对其做一个最简单的实现来看看其基本思路。首先,我们准备一个网站,这里我是用ASP.NET开发了一个网页,其中有一张图片作为抢红包的按钮图片,然后写了一个一般处理程序。 阅读全文
posted @ 2015-01-28 22:21 EdisonZhou 阅读 (43966) 评论 (3) 编辑
摘要:要说微信中最火爆的小游戏是哪款,可能既不是精心打造的3D大作,也不是《植物大战僵尸2》,而是微信5.0刚开启时的《飞机大战》。就是这样一款铅笔手绘风格的简单到不能再简单的“打飞机”游戏,让国内的微信用户一次又一次地尝试,并表示似乎又找回了童年时玩电子游戏的那份单纯的快乐。至于游戏的玩法都不用加以介绍,就是简单的“打飞机”。 阅读全文
posted @ 2015-01-25 22:44 EdisonZhou 阅读 (10440) 评论 (4) 编辑
摘要:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init、加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给了浏览器。那么,在ASP.NET MVC模式下,一个页面的生命周期又经历了哪些步凑呢?别急,本篇漫漫道来!2009年,Microsoft推出了ASP.NET MVC,也将ASP.NET MVC项目作为开源项目推送到了开源社区中,至今时间也过去快6年了,ASP.NET MVC已经到了5.0的版本阶段了。我们看到ASP.NET MVC从一个不完整的小孩长成一个日渐成熟的巨人,我们可以从开源社区找到ASP.NET MVC的源码,相比之前我们需要Reflector进行反编 阅读全文
posted @ 2015-01-19 22:04 EdisonZhou 阅读 (13351) 评论 (28) 编辑
摘要:在前面对于请求处理管道的介绍中,我们已经了解了一个ASP.NET WebForm页面请求事件的整体流程。那么,在其中一个最重要的部分就是ASP.NET Page页面,但是我们并没有对其进行详细讨论。因此,我们在此深入地了解一下ASP.NET页面事件。每一个ASP.NET Page页都有2个部分:一个部分是在浏览器中进行显示的部分,它包含了HTML标签、viewstate形式的隐藏域 以及 在HTML input中的数据。当这个页面被提交到服务器时,这些HTML标签会被创建到ASP.NET控件,并且viewstate还会和表单数据绑定在一起。另一个部分是在xxx.cs文件中的进行业务逻辑操作的部分,一旦你在后置代码中得到所有的服务器控件,你可以执行和写入你自己的逻辑并呈现给客户浏览器。 阅读全文
posted @ 2015-01-14 14:55 EdisonZhou 阅读 (6503) 评论 (8) 编辑
摘要:转眼之间,2014就成为了过去,园子里的园友们纷纷发表了自己的年终总结以及新年规划。看到自己的园龄都快3年了,但自己真正活跃于园子却只有1年,但就在这一年里,博客园已经成为了我生活的一部分,我几乎每天都要在博客园首页逛逛,浏览一两篇文章,在空闲时间(经常都是凌晨)发表一些自己写的文章。在这个过程中,我收获了一些宝贵的东西,比如分享的精神,学习的态度,园友的鼓励,在此,十分感谢博客园,也对各位园友表示感激!于是,也就有了这篇总结性的随笔,对2014年的我做一个最真实的回顾,有收获也有失败,但那都是我最宝贵的回忆。 阅读全文
posted @ 2015-01-13 15:10 EdisonZhou 阅读 (2025) 评论 (9) 编辑
摘要:上一篇我们了解了一个ASP.Net页面请求的核心处理入口,它经历了三个重要的入口,分别是:ISAPIRuntime.ProcessRequest()、HttpRuntime.ProcessRequest()以及HttpApplication.Init()。其中,在HttpApplication的Init()方法中触发了请求处理管道事件的执行,本篇我们就来看看所谓的请求处理管道。HttpApplication对象是ASP.NET中处理请求的重要对象,但是,这种类型的对象实例不是由程序员来创建的,而是由ASP.NET帮助我们创建的。为了便于扩展处理工作,HttpApplication采用处理管道的方法进行处理,将处理的过程分为多个步骤,每个步骤通过事件的形式暴露给程序员,这些事件按照固定的处理 阅读全文
posted @ 2015-01-06 00:46 EdisonZhou 阅读 (9976) 评论 (36) 编辑
摘要:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):HttpRuntime、HttpWorkerRequest、HttpContext、HttpApplication等。ISAPIRuntime是进入NET托管环境的入口,它在方法中通过一个ecb句柄指向了当前请求报文体的内存地址,将HTTP请求报文简单封装为一个HttpWorkerRequest对象,然后就是各种我们经常听到的PR(ProcessRequest)方法了。 阅读全文
posted @ 2014-12-31 20:21 EdisonZhou 阅读 (6308) 评论 (16) 编辑
摘要:ASP.Net是一项动态网页开发技术,在历史发展的长河中WebForm曾一时成为了ASP.Net的代名词,而ASP.Net MVC的出现让这项技术更加唤发朝气。但是,不管是ASP.Net WebForm还是ASP.Net MVC在请求处理机制上大部分都是相同的,只是在请求处理管道上的处理事件做了不同的操作,因此,本文标题不区分ASP.Net WebForm和ASP.Net MVC,但在后续的介绍中会区分开来介绍。此外,本文以IIS经典模式为主,不讨论集成模式(IIS7后加入了集成模式,不用加载外部的aspnet_isapi.dll组件)。 阅读全文
posted @ 2014-12-30 20:57 EdisonZhou 阅读 (7313) 评论 (20) 编辑
摘要:在某些场景下,我们想要对百度图片搜出来的东东进行保存,但是一个一个得下载保存不仅耗时而且费劲,有木有一种方法能够简化我们的工作量呢,让我们在离线模式下也能爽爽地浏览大量的美图呢?于是,我们想到了使用网络抓取去帮我们去下载图片,并且保存到我们设定的文件夹中,现在我们就来看看如何来设计开发一个这样的图片批量下载器。本次我们实现了一个小工具,它可以帮我们下载我们想要搜索的图片到执行的图片文件夹中,让我们可以离线爽爽地看美图。 阅读全文
posted @ 2014-12-22 22:52 EdisonZhou 阅读 (8638) 评论 (24) 编辑
摘要:《坦克大战》(Battle City)是1985年日本南梦宫Namco游戏公司开发并且在任天堂FC平台上,推出的一款多方位平面射击游戏。游戏以坦克战斗及保卫基地为主题,属于策略型联机类。同时也是FC平台上少有的内建关卡编辑器的几个游戏之一,玩家可自己创建独特的关卡,并通过获取一些道具使坦克和基地得到强化。1985年推出的坦克大战(Battle City)由13×13大小的地图组成了35个关卡,地形包括砖墙、海水、钢板、森林、地板5种,玩家作为坦克军团仅存的一支精锐部队的指挥官,为了保卫基地不被摧毁而展开战斗。游戏中可以获取有多种功能的宝物,敌人种类则包括装甲车、轻型坦克、反坦克炮、重型坦克4种,且存在炮弹互相抵消和友军火力误伤的设定。 阅读全文
posted @ 2014-12-11 22:58 EdisonZhou 阅读 (3888) 评论 (0) 编辑
摘要:随着互联网的发展,许多大中型的网站都保存了大量的图片资源,用户在访问这些图片资源异常丰富的网站(如淘宝、京东等电子商务网站)时,网页中的图片信息占据了页面数据流量的很大部分,那么问题也来了:(1)由于受客户端浏览器限制,无法从一台服务器上同时下载页面中所有图片信息;(2)由于图片保存在物理服务器上,访问图片需要频繁进行I/O操作:因此当并发用户数越来越多时,I/O操作就会成为整个系统的性能瓶颈;(3)由于受操作系统的限制,一个目录中能存放的图片文件数量也是有限的:随着图片资源不断增加,如何有效管理和维护图片也是一个难题; 阅读全文
posted @ 2014-12-02 16:24 EdisonZhou 阅读 (14140) 评论 (13) 编辑
摘要:随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长。特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案不够健壮,那么数据库服务器很有可能在高并发访问负载压力下宕机,造成数据访问服务的失效,从而导致网站的业务中断,给公司和用户造成双重损失。那么,有木有一种方案能够解决此问题,使得数据库不再因为负载压力过高而成为网站的瓶颈呢?答案肯定是有的。目前,大部分的主流关系型数据库都提供了主从热备功能,通过配置两台(或多台)数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站可以利用数据库的这一功能,实现数据库的读 阅读全文
posted @ 2014-11-30 21:53 EdisonZhou 阅读 (16358) 评论 (10) 编辑
摘要:在本文中,借助了Nginx这个神器简单地在Windows环境下搭建了一个反向代理服务,并模拟了一个IIS服务器集群的负载均衡效果。从这个DEMO中,我们可以简单地感受到反向代理为我们所做的事情,并体会负载均衡是怎么一回事。但是,在目前大多数的应用中,都会将Nginx部署在Linux服务器中,并且会做一些针对负载均衡的优化配置,这里我们所做的仅仅就是一个小小的使用而已(just修改一下配置文件)。不过,万丈高楼平地起,前期的小小体会,也会帮助我们向后期的深入学习奠定一点点的基础。 阅读全文
posted @ 2014-11-29 01:19 EdisonZhou 阅读 (48836) 评论 (86) 编辑
摘要:最近闲来无事,看了看一下《C#开发Flappy Bird游戏》的教程,自己也试着做了一下,实现了一个超级简单版(十分简陋)的Flappy Bird,使用的语言是C#,技术采用了快速简单的WindowsForm,图像上主要是采用了GDI+,游戏对象的创建控制上使用了单例模式,现在我就来简单地总结一下。《Flappy Bird》是由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍而这只鸟其实是根本不会飞的……所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。 阅读全文
posted @ 2014-11-22 16:11 EdisonZhou 阅读 (10390) 评论 (3) 编辑