精选列表

搜索[初体验],共231篇文章
优秀的个人博客,低调大师

CloudDBA初体验:SQL优化建议

数据库诊断和优化过程具有相当的复杂性,通常需要专业的DBA来解决。但在云计算的今天,人力运维和支撑已经变得不可能,自动化,智能化运维和服务支持日益迫切。 阿里云数据库团队在这方面不断的探索和积累,产出了CloudDBA。其目的就是要把我们已知问题和最佳实践能够以最简单的方式告诉用户,把我们多年使用数据库的经验传承给用户,方便客户使用云上数据库,给客户带来直接的价值。CloudDBA同时也在服务着内部业务,4000+的数据库实例之前需要一个team的运维人员,到现在我们只有一个同学,运维效率大幅提升。 CloudDBA一期给客户输出的功能包含数10项,迫不及待先给大家介绍SQL优化建议功能。 SQL优化方法 SQL对技术人员来说再熟悉不过,但开发人员和数据库人员对其却有不同的理解。比如开发人员看到的如下SQL语句, 在数据库中却是另外一种视图: CloudDBA的优化功能就帮助数据库寻找最佳执行路径,将其优化成更为简洁和高效的视图: 示例1 SQL条件下推是多数开发人员忽视的问题,详细介绍及解法说明参见MySQL · 性能优化 · 条件下推到物化表 以及 MySQL · 性能优化 · MySQL常见SQL错误用法。 该例子中的SQL在开发人员工作中经常出现: 聚合子查询其实是先定义的一个视图,之后用的时候再加条件出结果(SQL看起来简洁^^); 条件是拼接出来的,或许还出了bug,匹配符号位置放错了; 这样的写法性能肯定是好不了的。 有了CloudDBA后,开发人员会得到直接的提示: 根据提示,创建索引,重写SQL性能大幅提升: 示例2 再贴一个复杂点SQL语句。继续体验一下CloudDBA的自动化建议: CloudDBA是数据库自动化运维的一个分水岭。我们会不断努力,致力于阿里云数据库用户体验的提升!CloudDBA等待你的加入,实现更多闪耀的功能 。

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

Macaca初体验-Android端(Python)

前言: Macaca 是一套面向用户端软件的测试解决方案,提供了自动化驱动,周边工具,集成方案。由阿里巴巴公司开源:http://macacajs.github.io/macaca/ 特点: 同时支持PC端和移动端(Android、iOS)自动化测试。 支持JavaScript(Node.js)、Java、Python。 周边工具:支持用例录制的UI Recorder。 本次教程将介绍如何使用Macaca进行Android端自动化测试。使用编程语言为Python3.5(Macaca只支持Python3.4以上版本) 环境安装: 1、Macaca环境+Android SDK环境+Java环境+Node环境见:Android环境配置 2、通过macaca doctor可以检查环境是否配置成功,如下图所示则表示环境均配置正常,如果有标红提示,则需要对应处理。 >>macaca doctor 3、安装Macaca Python Client,支持pip安装。 >>python3 -m pip install wd 用例编写: 项目目录F:\workspace\macaca-android\macaca-test下创建测试用例:macaca-android-sample.test.py,其中macaca-test为测试目录集。 https://github.com/macaca-sample/sample-python/blob/master/tests/macaca-android-sample.test.py 代码如下: API详解: driver.init() 初始化 driver.quit() 退出 driver.back() 返回上一步 driver.element_by_id 根据id来查找元素 driver.element_by_name 跟据name来查找元素 driver.elements_by_class_name 跟据class_name来查找元素 driver.accept_alert() alert弹框确认 driver.touch('tap', {'x':100,'y':100}) 在设备上应用触摸操作,例如:tap/doubleTap/press/pinch/rotate/drag ,操作后面填写对应坐标x,y值 driver.save_screenshot 保存截图 备注:与appium的API极为相似,熟悉appium的同学可以快速上手,定位元素的方法一致。 详细API见官网:https://macacajs.github.io/wd.py/api.html 执行用例: 1、启动macaca服务: >>macaca server --verbose //加--verbose可以看到详细的执行过程 2、执行用例: >>python3 macaca_test\macaca-android-sample.test.py 以上 作者:搁浅 出处: http://www.cnblogs.com/xiaoxi-3-/ 如果对您有帮助,请关注我的同名简书:https://www.jianshu.com/u/da1677475c27 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

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

Microsoft Band初体验:功能没有很大创新

微软在10月30号发布了全新的硬件产品Microsoft Band智能手环,这款产品在发布第二天就能在微软线上和线上的直营店购买,售价199美元。微软出品的智能手环到底如何呢?来看看国外媒体的上手体验。 之前并没有提到的是,微软这款手环拥有大小尺寸可选,不过目前有存货的都是小尺寸的。Gigaom的作者Kevin C. Tofel一早买了一台,并很快写了一篇初上手体验。 外观 Microsoft Band让人联想起Fitibit Force,但是感觉更加扎实,重量为60克。矩形屏幕则与三星Gear Fit有些类似。搭扣可以很容易调整松紧。 心率传感器在腕带搭扣的一端,不管屏幕在手腕内侧还是外侧它都能使用。整只手环只有两个按键。类Windows Phone的界面设计使用起来很直观。 手环佩戴起来最好屏幕放在手腕内侧,这样信息读取更容易,也

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

我的 OpenStack 代码贡献初体验

OpenStack如今已成为开源云平台中的明星项目,得到广泛关注。OpenStack的优秀出众依赖于众多开发者的努力,在享受其带来的便利与快捷的同时,为其做一份贡献也是一个开发者的义务。在前段时间的OpenStack的测试过程中,我发现Nova项目中的一个Bug,于是向社区提交了Bug报告,并提交代码修复了该Bug,从提交报告到代码入库经历近一月,下面重现整个过程。 一.发现Bug: Nova中的虚拟机软删除(soft-delete)功能,是指在一段时间内,仅将数据库中的某虚拟机记录做一个标记 (status='SOFT-DELETE'),然后将虚拟化平台(kvm等)中对应的虚拟机实例置为关机状态,当超过某一时间段后才将虚拟机实例真正删除;该功能为云平台用户提供了“后悔时间”,可以在一定程度上挽回误操作。默认情况下,软删除功能是关闭的,其开启方式是在nova配置文件中添加"reclaim_instance_interval"选项,并将其值设置为"后悔时间"的毫秒数。 在描述具体Bug前,需要对openstack中的用户管理方面的基本概念简单介绍一下。 上图是openstack用户模型的简化版本,为了便于理解将不属于keystone管理的quota也拿了过来。 Bug就与软删除相关。具体场景是这样的:假设OpenStack中有两个项目和两个用户:普通项目A其用户a,管理员项目Admin其用户为 admin(用户管理相关概念可以查阅keystone文档),用户a不慎将自己的一台虚拟机删除了,这时求助系统管理员看看有没有办法恢复,好在系统开启的软删除功能,而且被删除的虚拟机还在可回收的时间范围内,这时管理员便以admin的身份登录系统,为用户a恢复了虚拟机,但是细心的管理员却发现了一些不对:其Admin项目下并没有任何虚拟机,但是其配额却被使用了,难道这和刚才的操作有关?再来重试一下:普通用户删除虚拟机,admin用户来为其恢复,这时配额又发生了变化,果然如此:被恢复的虚拟机的配额错误的添加到了Admin项目下。该Bug在最新的kilo版本中仍然存在,感兴趣的同学可以实验一下。 二.定位Bug: 发现了Bug的存在,那就更进一步,到代码中找一下原因吧。 如何确定问题代码的位置呢?这需要对Nova的项目结构有大体的了解,我们来简单了解一下:上图是nova架构的极简版本,与本问题无关的组件都没有画上去,恢复虚拟机的操作过程大致是这样: nova api接收到用户请求,到数据库中查询虚拟机详情,将该虚拟机所在的主机、名称等数据发送到消息队列中; nova compute服务在监听到相关消息后,开始执行具体操作,将虚拟机在数据库中的记录做些调整,调用底层驱动恢复虚拟机。 既然软删除的功能层面没有任何问题,虚拟机的删除和恢复过程都很顺利,可见不会是驱动的问题,顺着API层的代码调用往下找,很快就可以定位了。直接看出问题的代码片段: defrestore(self,context,instance): #该代码做了删减 flavor=instance.get_flavor() #获取quotas对象 num_instances,quotas=self._check_num_instances_quota( context,flavor,1,1) self._record_action_start(context,instance,instance_actions.RESTORE) try: ifinstance.host: instance.task_state=task_states.RESTORING instance.deleted_at=None instance.save(expected_task_state=[None]) self.compute_rpcapi.restore_instance(context,instance) else: instance.vm_state=vm_states.ACTIVE instance.task_state=None instance.deleted_at=None instance.save(expected_task_state=[None]) #更新quotas quotas.commit() 上面的这段代码就是API层面上进行虚拟机回收的主要方法,可以看到其中有明显的配额操作(quotas),在解读这段代码前有必要先对nova 中"context"的概念做个简介。不仅是nova,在openstack其他项目中都随处可见这个"context",它是一个包装了用户请求信息的对象,包含用户的项目和认证信息等,通过它可以简便的进行各项目之间的API调用和用户信息的查询,API服务接收到用户的每一次HTTP请求,都会创建一个新的context。 回到这段代码,我们重点关注对quotas所作的操作:在方法的第二行,通过了一个方法获取了quotas,有在方法的结尾执行了 quotas.commit(),能够获取到的信息不多,我们再看一下获取quotas的方法:_check_num_instances_quota #这里只截取一部分 def_check_num_instances_quota(self,context,instance_type,min_count, max_count): req_cores=max_count*instance_type['vcpus'] vram_mb=int(instance_type.get('extra_specs',{}).get(VIDEO_RAM,0)) req_ram=max_count*(instance_type['memory_mb']+vram_mb) try: quotas=objects.Quotas(context) quotas.reserve(context,instances=max_count, cores=req_cores,ram=req_ram) ... returnmax_count,quotas 这里可以看到获取quotas的过程:通过当前的context创建quotas对象,并且执行了reserve操作; 我们知道context是由HTTP请求而来,里面保存的是发请求的用户的信息,所以这里的quotas对象的“所有者”也就是context中的用户。 结合Bug发生的场景来看:管理员还原用户a的虚拟机,发请求的是管理员,当前context中记录的是管理员的信息,这里的quotas理所当然的就是管理员的,然后操作了用户a的虚拟机,更新的却是管理员的quotas。嗯,真相大白! 三.修复Bug: Bug的原因是获取的quotas并不属于期望的用户,但是直接修改context显然不合适(会影响后续的操作),先了解一下quotas对象自身吧: classQuotas(base.NovaObject): #部分代码 def__init__(self,*args,**kwargs): super(Quotas,self).__init__(*args,**kwargs) #Setupdefaults. self.reservations=[] self.project_id=None self.user_id=None self.obj_reset_changes() ... defreserve(self,context,expire=None,project_id=None,user_id=None, **deltas): reservations=quota.QUOTAS.reserve(context,expire=expire, project_id=project_id, user_id=user_id, **deltas) self.reservations=reservations self.project_id=project_id self.user_id=user_id self.obj_reset_changes() defcommit(self,context=None): ifnotself.reservations: return ifcontextisNone: context=self._context quota.QUOTAS.commit(context,self.reservations, project_id=self.project_id, user_id=self.user_id) self.reservations=None self.obj_reset_changes() 注意看reserve方法的参数,默认为None的project_id和user_id,这正是改变quotas属主的方便入口! 修改后的代码这里就不贴了,感兴趣的同学可以到这次提交中看:Code Review 四.代码提交和Review: openstack社区有着整套项目管理流程,这里有一张图能够较详细的描述工作流程: 由图可见bugfix是其中最简单的流程。 关于如何提交代码,这篇文章有详细的介绍: 向 OpenStack 贡献您的代码。另外需要注意一点,在国内向社区提交代码,经常会因为网络问题导致无法提交,幸好找到了大牛的博客介绍了该类问题的解决办法。 修改完代码的单元测试和pep8本地测试当然不能少,早就知道社区对单元测试要求很严格,这次才真正领教了,三行代码的修改,单元测试却写了30 行,review期间多次因为单元测试的问题重提代码(哭)。社区里面的开发者,尤其是项目的core,对待项目有着像对自己孩子般的认真与细致:他们会在一个自己根本不会在意的地方提醒你、面对当前的问题他们会延伸的考虑类似的问题。他们的态度让我首先感受到的吃惊,然后是敬佩! 经历八次review、历时近一个月,我的代码总算是入库了!希望我的这篇记录能对你有帮助。 感谢休伦公司技术总监 孙琦 提供的英文支持,社区大牛Alex Xu给出的修改建议。 Launchpad上面的bug提交:Abnormal changes of quota usage after instance restored by admin 代码审查过程:Fix abnormal quota usage after restore by admin Git@OSC中的代码:Fix abnormal quota usage after restore by admin 博文出处:http://my.oschina.net/zyzzy/blog/509315 关于OpenStack OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。 OpenStack除了有Rackspace和NASA的大力支持外,还有包括戴尔、Citrix、Cisco、Canonical等重量级公司的贡献和支持,致力于简化云的部署过程并为其带来良好的可扩展性。 本文作者:YueZheng 来源:51CTO

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

小白用户MaxCompute数据同步初体验

作为一个运营人员,工作中经常性地需要对大量业务数据进行分析,使用阿里云的MaxCompute可以非常方便的进行海量数据的处理。基于工作的特殊性,日常处理的都是CSV/TXT等碎片化的文件(比如用OSS存储的生产数据),如何将大文本文件写入到MaxCompute(原ODPS)是一件很头疼的事情。好在,阿里云大数据开发套件提供了非常强大的数据同步的工具。 近期体验了一下阿里云的数据同步工具,发现非常简单易用,同时又十分强大。作为非技术同学,借助文档,基本实现了从OSS到ODPS以及从OSS到本地自建FTP的数据同步,期间也碰到了许多问题。本文主要介绍自己作为一个小白用户,在使用过程中遇到的问题以及解决办法。 要解决的问题:OSS对象存储文件定时同步到ODPS 应用到的阿里云产品:OSS 数据同步组件 MaxCompute 1. 阿里云的数据同步为向导模式和脚本模式两种方式。向导模式是可视化操作,非常方便,不过有些类型的数据同步不支持。脚本模式通过Json脚本实现,功能更强大。OSS数据同步到ODPS,两种方式是均支持的。分为数据源读取、数据传输、写入目标数据三部分。具体操作,先添加数据源后,按照向导可一步步操作,不在赘述。 2. 数据同步的调度任务,无法自动识别OSS是否有文件增加,因此,如果OSS中的Object是不断增加的,调度任务需要设定为分钟或者小时级别的周期调度。 3. OSS的读取支持形如example*的通配符匹配: 同时,OSS的文件名可以用日期时间命名,这样调度任务可以通过时间参数来读取最新写入的Object。 4.调度任务执行的时候,数据源Object必须已经存在,可以调整时间参数的先后关系,例如: 该例子是延时一小时的。 5. 阿里云的文档非常详尽,基本可能遇到的问题通过查找文档都可以解决。数据同步文档

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

JAVA性能测试初体验

序言:做自动化测试的时候,一直没想过要去做性能,等到现在做性能的时候,才明白这本身就是一个必须都要经历的过程,就像编程一样,编写小型软件的时候,我们不用过多关注架构和性能,但是等成长到一定时候,就会需要关注软件的可复用性(这是由开发成本决定,这点可以在软件架构上去改善,常说的自动化框架也是为了增强脚本的可复用性和可维护性)、性能瓶颈(这是由系统资源成本决定,空间和时间的调配)、可测试行(这能大大提高测试人员的测试效率,很多时候我们要求开发提供一种测试的接口来方便测试人员进行测试)、可部署性(利用make、ant或者maven,能够大大提高软件发布效率,这也是持续集成中的一种手段)等,因此,测试中的发展其实可以有很多的,不仅关注测试手段,还要关注如何在更多的途径上提高测试效率。下面是对本次性能测试项目至今的一些简单总结,欢迎指正。 一、性能测试项目的背景 性能测试缘起于产品存在大量背景数据时,程序响应时间过慢,而且在特定的情况下有可能会造成一些数据上报丢失,所以需要定位。 产品为C/S架构,采用的协议是snmp协议,运行在jvm上。 二、性能测试的策略 1、测试目的的确定 1)系统监控,包括cpu、内存、线程使用情况,在大数据情况下,发现问题,帮助修正代码结构,系统结构,提高系统的运行效率。 2)确定软件运行资源需求指标。 2、性能测试指标确定 1)确定指标来源,主要包括:产品规格、行业标准、客户需求与故障场景等 2)确定测试特性,例如:系统容量、及时性、稳定性、抗压性、资源利用性等,这些特性可以根据行业性能测试特性以及产品的相关特性来决定。 3)确定具体指标,包括数目和单位。 3、性能测试技术储备 其实性能测试可以算得上是自动化测试的一种大数据测试 1)测试场景准备:准备测试场景,可以理解为对背景数据的构造,其实可以将这种构造理解为另类的接口测试,例如:我们的软件服务器是应用SNMP协议进行通信,设备端有一个agent,专门用来与软件服务器端通信,那么可以虚拟出这么一个agent,保存相应的设备信息,虚拟过程可以通过对在网的实际设备进行录制,然后生成。 互联网中,客户端与服务器的交涉是基于http接口协议,其一般的性能测试都是发送大量的http请求,其实这种过程有一个问题就是无法模拟真实的背景数据,因为报文过于单一,而印象很深的是新浪一位朋友开发的tcpcopy工具,在传输层,将线上数据复制到测试场景下,从而成功模拟了真实场景环境,这是一种很好的测试方法。 (还有一种准备工作就是对测试服务器的选型,包括操作系统类型、CPU内核数目、内存数目等) 2)测试数据准备:这其实就是接口数据,在互联网中,这方面的模拟比较简单,用很多工具,例如LR、jmeter、soaupi等都可以成功构造模拟http报文,从而查看服务器的响应。因为我们采用的是snmp协议,所以业内没有这样的snmp接口工具,所以就自己基于snmp协议包开发了其snmp报文模拟工具。 3)性能测试监控:性能测试过程中,对软件系统服务器的监控是关键,例如:web测试中,往往会对web服务器和数据库服务器、操作系统的指标性能进行监控,因为我们的软件是运行在jvm上,所以直接采用jconsole或者jprofiler监控服务器的内存使用、cpu使用、各个线程使用情况,还有对数据库和操作系统的监控等。 4、性能测试方法 1)基于指标,进行测试数据构造测试,查看系统是否工作正常以及监测是否没有问题。 2)基于指标,在基于测试数据测试的同时,由测试人员参与进行操作,测试在特定环境下的系统工作情况。 3)客户场景模拟测试。 4)随机测试,利用算法进行大量随机数据构造。 三、性能测试调优 1、性能测试是一个不断探索和不断完善的一个测试过程。 调优步骤:衡量系统现状、设定调优目标、寻找性能瓶颈、性能调优、衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈)、性能调优结束 2、衡量现状,系统性能主要存在问题 1)内存泄露 2)内存占用过大,响应速率慢 3)线程数不断增加,出现死锁或空闲线程 4)某些类实例化数目过多,占用多余的内存空间 3、内存泄露 1)检验方式:内存泄露需要进行时长测试,既将监控界面及系统界面全部打开,进行长时间运行(如12小时),观察系统类的增长情况。 2)问题定位:若出现JVM的Heap持续增长或者Memory views经过时长测试,出现较大规模的红色部分(增长部分),且无法GC。 4、系统内存占用大 1)检验方式:进行某些特定的操作,系统进行大量内存占用或者数据读写操作。 2)问题定位:若系统内存数突发性的增长,且之后不回落,说明某些模块在持续性的占用系统资源。或者出现JVM的Heap有增长,虽不是持续增长,但一直无法回落。 5、线程数目过多或死锁 1)检验方式:进行某些特定的操作,可以使系统产生大量线程操作。 2)问题定位:若系统线程数突发性的增长或持续增长,且之后不回落,说明某些模块在持续性的占用线程。或者观察是否有许多线程来自同一个模块、长期处于waiting或block状态 6、性能调优原则 调优过程中,充分而不过分使用硬件资源、不要一遇到问题就去改善资源环境,然后,合理调整JVM,需要重点掌握一些JVM的参数,并且要善于分析系统架构和JVM的底层工作机制。 总结:性能测试是一个很漫长的过程,不管是做JVM性能测试、WEB架构方面的性能测试,其实道理是相通的,个人觉得,要做好性能测试,不仅要对测试理解,更要对软件架构和底层的服务器工作机制特别理解,不然,往往,你只能去简单做一些所谓的性能测试操作,但是却无法针对很多场景提供有效的测试策略和调优建议。好的性能测试工程师应该是能够快速搭建场景定位问题、提供指标,并且能够对软件系统架构提出有效建议。共勉之 ====================================分割线================================ 最新内容请见作者的GitHub页:http://qaseven.github.io/

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。