首页 文章 精选 留言 我的

精选列表

搜索[文件对比],共10000篇文章
优秀的个人博客,低调大师

DRDS和RDS只读实例性能对比测试

我们都知道,对于数据库中基础信息表来说,它的数据变化频率低,数据量小,但由于基础数据本身的特点,大多数相关系统都会对频繁地读取它。即便我们通过对数据调取服务进行服务化包装,通过HSF服务的方式对外暴露,以减少多个系统直接操作数据库带来的问题,但数据本身的读取频率和并发度都非常高,QPS可以轻易达到10万以上。通常,使用普通的关系型数据库,比如RDS很难满足这样的场景,业内普遍的做法是在数据库前加一层数据库缓存服务,比如redis或memcache来存放基础信息,以此承载海量的高并发访问请求。但是也会存在问题,当缓存服务发生故障,或者由于某种异常被击穿,大量的访问请求迅速会打到后端的数据库上,数据库能不能在关键时候扛住压力,为运维人员争取时间,快速修复缓存服务,显得至关重要。 是的,这个时候,阿里云RDS和DRDS都提

优秀的个人博客,低调大师

[转] 关于VisualC++的ATL、MFC、CLR对比

MFC、ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用。当然关于C++开发的库不止这3个,不过这3个是微软推荐。从编程所处层次而言,WIN32为最底层,其次是MFC.然后是CLR. WIN32 winAPI MFC MFC类库 CLR .net库 1. WIN32常规就是不用MFC,使用API函数编的程序。 2. MFC库有很多年的历史了,MFC是基于Windows API 的简单封装。其核心架构基于"Document/View"架构(20年前被认为很潮流的一种概念)和消息流动机制。这个库自从VC6开始到现在都没有多大改动。MFC封装的范围包括GUI,IO,数据库,网络编程等等方面。但是很多系统开发必须的api都没有封装,这样开发者一般都在MFC的基础上自己处理与业务相关的任务。事实上很多人用MFC只是利用其GUI部分的封装。这个库GUI处理的效率也并不是很高,有时候与UI处理相关的代码会占到整个项目的一半甚至更多。总的来说,这是一个垂老的库,微软在10年以来,除了对MFC进行修修补补以外,没有进行大的改进或者更新。如果你问MFC还会活多久?恩,这是个问题。如果有一天MFC不在了,微软在这个级别上并没有其他产品能够代替它。 3. CLR库是随着.Net Framework 2 和VS2005一起发布的库,其核心的实现和C#,VB.net 一样。都是基于公共语言运行库。.Net Framework封装了大量系统的api,以类库的形式提供给开发者。C++中的CLR库可以使用其中和本机代码有关的部分,目前C++还不能涉及到asp.net部分。CLR库中的C++颠覆了很多标准C++的传统,甚至可以说,这里的C++不是C++,只是披着C++的皮干其他的事。这里的C++更像是C#或者类似的语言。所以这里不叫C++,而叫做C++/CLI,值得一提的是,有关C++/CLI的部分目前还没有被标准C++接受,最近微软有关C++/CLI标准化的提案被C++标准化委员会拒绝了。所以C++/CLI目前还是微软的一家之言。 4. ATL用于编写COM程序。ATL库貌似也年纪很大了,至少在我接触到VC的时候就有它的存在了。这个库可以追溯到COM组件,因为ATL的目的就是帮助开发者更好的与COM交互。到底什么时候有COM这个东西的?我也不知道,我只知道COM是有16位版本的,在Windows升级到32位的时候COM也随着升级到了32位。COM就像一些封装好的类对象一样,通过封装系统的api,提供一些标准的方法来给你使用。所以系统中有什么组件,就可以在ATL中用什么方法。所以ATL不止可以写ActiveX,也可以有window,也可以有其它。有时候有些微软发布的功能是只以COM 组件的形式发布的,例如MSXML,这时候MFC就不适合,是要ATL来处理的。但是ATL在处理UI这方面并不是很强,所以微软工程师有一个开源的UI 框架,叫做WTL,专门用来处理UI的。ATL库的缺点是,作为模板库,在出现错误的时候会比较麻烦,出错提示会牛头不对马嘴。 本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2010/08/09/1795956.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Elasticsearch之CURL命令的PUT和POST对比

PUT是幂等方法,而POST并不是。 PUT用于更新操作,POST用于新增操作比较合适。 PUT,DELETE操作是幂等的,所谓幂等就是指不管进行多少次操作,结果都一样。 比如,我用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有不同,DELETE也是一样。 POST操作不是幂等,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。 还有一点需要注意的是,创建操作可以使用POST,也可以使用PUT。区别在于POST是作用在一个集合资源之上的(/articles),而PUT操作是作用在一个具体资源之上的(/articles/123),比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST。 [hadoop@master elasticsearch-2.4.0]$ curl -XPOST http://master:9200/zhouls/user/1 -d '{"name" : "john" , "age" : 28}' {"_index":"zhouls","_type":"user","_id":"1","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ zhouls是索引,user是类型,1是id [hadoop@master elasticsearch-2.4.0]$ curl -XPOST http://master:9200/zhouls/user -d '{"name" : "john"}' {"_index":"zhouls","_type":"user","_id":"AVz5Q9u7U8bDb6QDgbDS","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ zhouls是索引,user是类型 由此,可见,如果,我们不指定id,则会自动随机生成 POST方式是自增id,PUT是必须要跟上id。 [hadoop@master elasticsearch-2.4.0]$ curl -XPUT http://master:9200/zhouls/user/2?op_type=create -d '{"name" : "john" , "age" : 28}' {"_index":"zhouls","_type":"user","_id":"2","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ zhouls是索引,user是类型,2是id, ?op_type=create是 [hadoop@master elasticsearch-2.4.0]$ curl -XPUT http://master:9200/zhouls/user/2/_create -d '{"name" : "john" , "age" : 28}' {"error":{"root_cause":[{"type":"document_already_exists_exception","reason":"[user][2]: document already exists","index":"zhouls","shard":"2"}],"type":"document_already_exists_exception","reason":"[user][2]: document already exists","index":"zhouls","shard":"2"},"status":409}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ zhouls是索引,user是类型,2是id, _create是 由此,可见,PUT是不允许,已经创建过的id,再来创建。 [hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ curl -XPUT http://master:9200/zhouls/user/3/_create -d '{"name" : "john" , "age" : 28}' {"_index":"zhouls","_type":"user","_id":"3","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/7100953.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

对比了解Grafana与Kibana的关键差异

稍后阅读 我的阅读清单 我们身处海量数据的包围之中已成众所周知的事实。即使你管理的是一个单独的Linux服务器,那么带着问题一发生就能检测出来并采取措施的目的去管理所有日志时也会遇到问题。问题有多大取决于环境的规模、每台主机的职责、已经安装的服务以及正在使用的协议。 当然,日志数据能让我们更好地洞察检测模式,当信息以可视化的形式呈现出来时让我们可以更快速地采取措施。这种分析方法使IT运维团队可以创建透明度,要清楚任何时间点正在发生什么时正需要这种透明度。 Kibana 和 Grafana 是两个开源工具,能可视化和推断大量日志数据内的趋势。本文将向你简单介绍一下每个工具,并主要比较一下它们之间的关键不同。 Kibana Kibana是一个分析和可视化平台,它可以让你浏览、可视化存储在Elasticsearch集群上排名靠前的日志数据,并构建仪表盘。你可以执行深入的数据分析并以多种图表、表格和地图方式可视化这些数据。 相关厂商内容 京东物流系统自动化运维平台技术揭密 阿里巴巴基础运维平台实践经验谈 Uber SRE团队如何做好守护系统稳定的最后一道防线? 腾讯云多Kubernetes集群高可用运维实践 京东硅谷研究院如何进行自动深度语法分析 相关赞助商 CNUTCon全球运维技术大会,9月10日-9月11日,上海·光大会展中心大酒店,精彩内容抢先看 许多诸如Netflix 和 Linkedin之类的现代IT组织使用流行的ELK栈 (Elasticsearch、Logstash 和 Kibana) 进行日志管理。通过使用这个栈中的Kibana可简化部署,并可以将其用于可视化。一旦安装了ELK栈,你就可以使用平台的“发现(Discover)”部分内的强大工具去浏览和可视化你的日志数据了。Kibana的仪表盘非常简单易用,任何人都可以使用它,甚至IT技能和知识很少的业务人员也可以使用。 Grafana Grafana是一个开源仪表盘工具,它可用于Graphite、InfluxDB与OpenTSDB一起使用。最新的版本还可以用于其他的数据源,比如Elasticsearch。 从本质上说,它是一个功能丰富的Graphite-web替代品,能帮助用户更简单地创建和编辑仪表盘。它包含一个独一无二的Graphite目标解析器,从而可以简化度量和函数的编辑。Grafana快速的客户端渲染默认使用的是Flot,即使很长的时间范围也可应对,这样用户就可以创建具有智能轴格式(比如线和点)的复杂图表了。 1. 日志与度量 这方面的主要的不同在于,Grafana专注于根据CPU和IO利用率之类的特定指标提供时间序列图表。Kibana则专注于另一方面,它运行于Elasticsearch的上层,能创建一个复杂的日志分析仪表盘。举个例子,Grafana无法进行数据的检索和浏览。 2. 基于角色的访问 默认情况下,Kibana的仪表盘是公开的,没有进行基于角色的访问控制。如果你需要针对多个用户设置不同的权限级别,就得增加额外的配置预算采购Shield了。比较而言,Grafana内置的RBA允许你维护用户和团队访问仪表盘的权限。另外,Grafana的富API可能用于保存特定仪表表、创建用户用户和更新数据源的任务。你还可以创建特定的API关键字并赋予它们新的职责。 3. 仪表盘灵活性 虽然Kibana有大量内置的图表类型,但它们之上的控制仍是最初的限制,Grafana包括更多的选择,可以更灵活地浏览和使用图表,如果要选择一个指定的时间序列,可以使用Y-Bar之类的工具。然而,随着Kibana 4中展示的增强特性,比如可以保存元素并拖曳到新的仪表盘中,我们可以预期Kibana能快速地弥补这一差距。 4. 数据源的集成 Grafana支持许多不同的存储后端。Grafana针对每个数据源都有一个特定的查询编辑器,它是针对数据源所具备的特性和能力特别定制的。然而,正如上文所说,Kibana原生集成进了ELK栈,这使安装极为简单,对用户非常友好。 5. 开源社区 这两个开源工具都很强大。如果密切观察一下Github上的Grafana,你将发现大概有7000次代码提交,而Kibana更有12000次。而如果要了解Kibana开源社区真正的优势,可以看看谷歌趋势,它把ELK作为一个整体进行了相关信息的揭示: 即使把Graphite也算进来,ELK仍保持着快速的增长,并有潜力在不久的将来保持领先。 共同协作 Kibana和Grafana都是强大的可视化工具。然而,Grafana和InfluxDB组合是用于度量数据的,反之,Kibana是流行的ELK栈的一部分,它可以更为灵活地浏览日志数据。 这两个平台都是好的选择,甚至有时还可以互补。首先,用Kibana去分析你的日志。然后,把数据导入到Grafana作为可视化层。这些的前提是需要同一个Elasticsearch库。 Logz.io是一个预言性的、基于云的日志管理平台,它处于开源的ELK栈(Kibana是其中的一部分)的上层。你不妨动手试用一下免费版! 关于作者 Asaf Yigal是Logz.io的联合创始人和产品副总裁。在 Logz.io之前,Asaf联合创办了Currensee,这是一个社区交易平台,此后被OANDA(奥安达公司)于2013年收购。而在Currensee之前,Asaf负责管理在Akorri的端到端性能监控平台的开发和在Onaro的存储资源管理平台的开发。 Akorri 和 Onaro均已被NetApp收购。在Onaro之前,Asaf带领以色列海军的一支研究团队,用一个人工智能系统进行军队调度。 本文转自Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1961940,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android Wear与Apple Watch交互设计对比

【编按】本文作者林宜立,出门问问产品经理,文章首发36kr,雷锋网(公众号:雷锋网)转载已获作者授权。对智能手表有兴趣可以加入他们的Android Wear 智能手表QQ群369838318 苹果公司 11 月 18 日正式发布了WatchKit开发工具,揭开了 Apple Watch 交互逻辑和诸多 UI 元素细节。虽然目前 Apple Watch 真机尚未发布,但凭借官方的材料,我们已经能够更具体地感受和想象 Apple Watch 的用户体验了。和已经开售的安卓智能手表操作系统 Android Wear 相比,苹果在设计哲学和交互逻辑上到底和谷歌有和不同? 两家公司虽然最终的结果方案不同,但是产品设计的出发点和原则都是十分类似的。他们都强调个性化推送,简洁的布局,轻量短促的交互。都认为智能手表不应成为用户的另一个信息干扰源,而

优秀的个人博客,低调大师

WatchKit对比Android Wear:南辕北辙还是殊途同归?

苹果在11月19日发布了供开发者使用的WatchKit,从中我们可以看出Apple Watch的应用将会是什么样子,以及在苹果对这款智能手表的定位。但是它与竞争对手谷歌的Android Wear相比会有怎样的不同呢?雷穿戴(leiwear)采访了果壳电子软件副总裁于海东、映趣科技CEO王小彬和出门问问CEO李志飞来回答这个问题,结果发现有人觉得它们设计出发点是相同的,也有人觉得这是两个截然不同的东西。 王小彬在看过WatchKit的资料后表示最大的感觉是“watchkit为了方便用户操作,软件手势+硬件操作都用上了,这点比Android Wear更加开放。但是现在公开的信息来看,watchkit的运算、消息、交互等大量处理,还是要交给手机,从独立性上来说比不过Android Wear”。但是两者的定位很准确,都是“app ex

优秀的个人博客,低调大师

移植MonkeyRunner的图片对比功能实现-Appium篇

如果你的目标测试app有很多imageview组成的话,这个时候monkeyrunner的截图比较功能就体现出来了。而其他几个流行的框架如Robotium,UIAutomator以及 Appium都提供了截图,但少了两个功能: 获取子图 图片比较 既然 Google开发的MonkeyRunner能盛行这么久,且它体功能的结果验证功能只有截屏比较,那么必然有它的道理,有它存在的价值,所以我们很有必要在需要的情况下把它相应的功能给移植到其他框架上面上来。 经过本人前面 文章描述的几个框架的源码的研究(robotium还没有做),大家可以知道MonkeyRunner是跑在PC端的,只有在需要发送相应的命令事件时才会驱动目标机器的monkey或者 shell等。比如获取图片是从目标机器的buffer设备得到,但是比较图片和获取子图是从客户PC端做的。 这里Appium工作的方式非常的类似,因为它也是在客户端跑,但需要注入事件发送命令时还是通过目标机器段的bootstrap来驱动uiatuomator来完成的,所以要把MonkeyRunner的获取子图已经图片比较的功能移植过来是非常容易的事情。 但UiAutomator就是另外一回事了,因为它完全是在目标机器那边跑的,所以你的代码必须要android那边支持,所以本人在移植到UiAutomator上面就碰到了问题,这里先给出Appium 上面的移植,以方便大家的使用,至于UiAutomator和Robotium的,今后本人会酌情考虑是否提供给大家。 还有就是这个移植过来的代码没有经过优化的,比如失败是否保存图片以待今后查看等。大家可以基于这个基础实现满足自己要求的功能 1. 移植代码 移植代码放在一个Util.java了工具类中: public static boolean sameAs(BufferedImage myImage,BufferedImage otherImage, double percent) { //BufferedImage otherImage = other.getBufferedImage(); //BufferedImage myImage = getBufferedImage(); if (otherImage.getWidth() != myImage.getWidth()) { return false; } if (otherImage.getHeight() != myImage.getHeight()) { return false; } int[] otherPixel = new int[1]; int[] myPixel = new int[1]; int width = myImage.getWidth(); int height = myImage.getHeight(); int numDiffPixels = 0; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (myImage.getRGB(x, y) != otherImage.getRGB(x, y)) { numDiffPixels++; } } } double numberPixels = height * width; double diffPercent = numDiffPixels / numberPixels; return percent <= 1.0D - diffPercent; } public static BufferedImage getSubImage(BufferedImage image,int x, int y, int w, int h) { return image.getSubimage(x, y, w, h); } public static BufferedImage getImageFromFile(File f) { BufferedImage img = null; try { img = ImageIO.read(f); } catch (IOException e) { //if failed, then copy it to local path for later check:TBD //FileUtils.copyFile(f, new File(p1)); e.printStackTrace(); System.exit(1); } return img; } 这里就不多描述了,基本上就是基于MonkeyRunner做轻微的修改,所以叫做移植。而UiAutomator就可能需要大改动,要重现实现了。 2. 客户端调用代码举例 packagesample.demo.AppiumDemo; importstaticorg.junit.Assert.*; importjava.awt.image.BufferedImage; importjava.io.File; importjava.io.IOException; importjava.net.URL; importjavax.imageio.ImageIO; importlibs.Util; importio.appium.java_client.android.AndroidDriver; importorg.apache.commons.io.FileUtils; importorg.junit.After; importorg.junit.Before; importorg.junit.Test; importorg.openqa.selenium.By; importorg.openqa.selenium.OutputType; importorg.openqa.selenium.WebElement; importorg.openqa.selenium.remote.DesiredCapabilities; publicclassCompareScreenShots{ privateAndroidDriverdriver; @Before publicvoidsetUp()throwsException{ DesiredCapabilitiescap=newDesiredCapabilities(); cap.setCapability("deviceName","Android"); cap.setCapability("appPackage","com.example.android.notepad"); cap.setCapability("appActivity",".NotesList"); driver=newAndroidDriver(newURL("http://127.0.0.1:4723/wd/hub"),cap); } @After publicvoidtearDown()throwsException{ driver.quit(); } @Test publicvoidcompareScreenAndSubScreen()throwsInterruptedException,IOException{ Thread.sleep(2000); WebElementel=driver.findElement(By.className("android.widget.ListView")).findElement(By.name("Note1")); el.click(); Thread.sleep(1000); Stringp1="C:/1"; Stringp2="C:/2"; Filef2=newFile(p2); Filef1=driver.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(f1,newFile(p1)); BufferedImageimg1=Util.getImageFromFile(f1); f2=driver.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(f2,newFile(p2)); BufferedImageimg2=Util.getImageFromFile(f2); Booleansame=Util.sameAs(img1,img2,0.9); assertTrue(same); BufferedImagesubImg1=Util.getSubImage(img1,6,39,474,38); BufferedImagesubImg2=Util.getSubImage(img1,6,39,474,38); same=Util.sameAs(subImg1,subImg2,1); Filef3=newFile("c:/sub-1.png"); ImageIO.write(subImg1,"PNG",f3); Filef4=newFile("c:/sub-2.png"); ImageIO.write(subImg1,"PNG",f4); } } 也不多解析了,没有什么特别的东西。 大家用得上的就支持下就好了... 最新内容请见作者的GitHub页:http://qaseven.github.io/

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册