首页 文章 精选 留言 我的

精选列表

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

深入对比Java与Hadoop大数据序列化机制Avro

Java有自己提供的序列化机制,而我们的Hadoop也提供了自己的序列化机制,二者究竟有什么差异呢?为什么Hadoop要重新设计自己的序列化体系?序列化大数据对象的过程,Writable接口底层源码实现。首先我们先了解一下什么是序列化,为什么需要序列化?1、序列化机制Serialization序列化Serialization,是将结构化对象转换为字节流以便通过网络传输或写入持久存储的过程。 中文也有翻译为:串行化。 反序列化deSerialization相反,是将字节流转换回一系列结构化对象的相反过程。 序列化用于分布式数据处理的两个截然不同的领域:进程间通信和持久存储。 2、Java序列化Java对象序列化JDK 1.1引入,将Java对象转换为用于存储或传输的字节数组的机制,这样所述字节数组可以再转换回Java对象。Java提供了

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

APPium+Python+iOS使用execute_script() 屏幕滑动方法对比

最近在学习appium自动化,对iOS手机进行滑动操作进行总结:1、mobile:scroll向下滚动整个屏幕driver.execute_script('mobile: scroll', {'direction': 'down'})向上滚动整个屏幕driver.execute_script('mobile: scroll', {'direction': 'up'})向左滚动整个屏幕driver.execute_script('mobile: scroll', {'direction': 'left'})向右滚动整个屏幕driver.execute_script('mobile: scroll', {'direction': 'right'})该方法在实际使用调用时,会滚动2次。执行时间很长。 2、mobile:swipe向下滚动屏幕driver.execute_script('mobile: scroll', {'direction': 'up'})向上滚动屏幕driver.execute_script('mobile: scroll', {'direction': 'down'})向右滚动屏幕driver.execute_script('mobile: scroll', {'direction': 'left'})向左滚动屏幕driver.execute_script('mobile: scroll', {'direction': 'right'})该方法在调用过程中,执行速度快,滑动屏幕距离短 3、mobile:dragFromToForDurationduration: 浮点数范围[0.5,60]。表示开始拖动点之前的点击手势需要多长时间才能开始拖动fromX:起点X坐标fromY:起点Y坐标toX:终点X坐标toY:终点Y坐标以上都是必要参数。element:控件ID,可以指定为None,为None时以整个手机屏幕为边界。示例:driver.execute_script("mobile:dragFromToForDuration",{"duration":0.5,"element":None,"fromX":0,"fromY":650,"toX":0,"toY":100}该方法在调用过程中,执行速度快,滑动屏幕距离可根据屏幕进行控制,但是如果滑动中起点坐标在控件上,会触发点击操作。

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

Python---试除法求质数的三种方式对比

此三种方法都是基于试除法,即不断地尝试能否整除。比如要判断自然数 x 是否质数,就不断尝试小于 x 且大于1的自然数,只要有一个能整除,则 x 是合数;否则,x 是质数。 方式1:从 2 一直尝试到 x-1。方式2:从 2 一直尝试到 x/2。方式3:从 2 一直尝试到√x。 代码部分 import time import math def f1(x): a = [] for i in range(2, x+1): for j in range(2, i): if i % j == 0: break else: a.append(i) # print(a) def f2(x): a = [] for i in range(2, x+1): y = int(i//2+1) for j in range(2, y): if i % j == 0: break else: a.append(i) # print(a) def f3(x): a = [] for i in range(2, x+1): y = int(math.sqrt(i)+1) for j in range(2, y): if i % j == 0: break else: a.append(i) # print(a) if __name__ == '__main__': t1 = time.clock() f1(100) t2 = time.clock() print('第一种方式所用时间为{}秒'.format(t2-t1)) t3 = time.clock() f2(100) t4 = time.clock() print('第二种方式所用时间为{}秒'.format(t4-t3)) t5 = time.clock() f3(100) t6 = time.clock() print('第三种方式所用时间为{}秒'.format(t6-t5)) 运行结果 第一种方式所用时间为0.00011377787891367015秒 第二种方式所用时间为0.00010088897856798095秒 第三种方式所用时间为0.0001515556902717247秒 在计算100以内质数时三种方法的运算速度差不多,第二种似乎占据一定优势,那来看一看如果不断增大范围,三种方法的运行速度到底有多大的差别。。。。。。 三种方式差别 显而易见,在范围10000之前,三种方式差别不大,但在10000以后,他们之间的差距呈几何扩大,可得,第三种方法远远快于前两种方法 后续,还可以尝试先将偶数去除(除2以外),再来进行试除,速度一定再上一个台阶,当然求质数还有其他N种方法,比如筛法,其发明人是公元前250年左右的一位希腊大牛——埃拉托斯特尼 首先,2是公认最小的质数,所以,先把所有2的倍数去掉;然后剩下的那些大于2的数里面,最小的是3,所以3也是质数;然后把所有3的倍数都去掉,剩下的那些大于3的数里面,最小的是5,所以5也是质数...... 上述过程不断重复,就可以把某个范围内的合数全都除去(就像被筛子筛掉一样),剩下的就是质数了!

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

对比来看java的Runnable&Callable&FutureTask

这篇文章其实主要是想要讲清楚一个概念,就是Runable和Callable的区别,以及当它们和FutureTask、ExecutorService一起执行的原理。 基本概念 java多线程实现方案 说明: 1、上图中java多线程的实现方案就没什么好说的了,基本上搞java的人都是理解的。 2、其实我始终觉得Thread是一个容器,所以和Runnable和Callable应该不在一个层次的概念,Thread应该是cpu真正调度的实体,这个实体会做什么呢,会执行Runnable和Callable的方法,所以特别不喜欢把这三者放在一起。 基本流程 FutureTask基本流程 说明: 1、左边是任务创建过程,右边是任务执行过程。 基本用法 常用方法 说明: 1、这个截图基本上就是Runnable和Callable和ExecutorService结合一起使用的用法。 2、关键是我比较感兴趣submit内部做了什么事情。 FutureTask创建之Callble对象 Callable的futureTask创建过程 说明: 1、在submit一个对象的时候,其实内部是给我们创建了一个FutureTask对象,整个创建过程是层层递进的。 2、FutureTask对象有两个重要属性,一个是callable对象也就是执行对象,一个state,标记这个任务是否完成。 FutureTask创建之Runable Runnable的FutureTask的创建过程 说明: 1、当我们针对Runnable对象创建futureTask的时候内部其实用Callable的适配器包装了一下,然后对外以Callable的对象运行。 2、可以看到call实际上调用的是task的run函数,这个run就不说了吧,线程里面的入口函数。 FutureTask内部属性 futureTask的核心内容 说明: 1、几个核心属性,callable就是刚刚所谓的执行对象,outcome最后执行返回的结果,其他整个线程的执行状态流转。 FutureTask任务提交 futureTask提交过程 说明: 1、这个futureTask的提交过程跟我们跟文章《我发现我不懂你了_JUC》其实是一样的,可以自行参考。 2、ExecutorService里面的worker其实真正调用的是run函数,所以我们还需要进一步搞清楚FutureTask是否包含run函数,当然毫无疑问肯定是有的,可以参考下面这个图。 FutureTask任务执行 futureTask内部实现run接口 说明: 1、接上面描述的文字,所以ExecutorService的worker其实真正执行的是Callable对象的call函数并设置回调结果。

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册