首页 文章 精选 留言 我的

精选列表

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

阿里云大数据利器Maxcompute-使用mapjoin优化查询

大数据计算服务(MaxCompute,原名 ODPS)是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。https://help.aliyun.com/document_detail/27800.html?spm=5176.7840267.6.539.po3IvS主要有三种操作数据的方式SQL,UDF,MapReduce,了解hadoop的同学就比较熟悉这些东西了。 那么Maxcompute的SQL和标准SQL最大的区别就是在Maxcompute中SQL会被解析成MapReduce去执行,当然也可以直接去写MapReduce去计算数据,UDF就是当自带的一些sql引用的函数不能满足业务计算的时候,自己通过代码编写一个函数,sql执行的时候引用。 由此可见实际上底层的计算都是依靠MapReduce这个计算引擎去执行。首先了

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

《Spark大数据处理:技术、应用与性能优化》——导读

https://yqfile.alicdn.com/9fc1970337c275b04055dec83fdf7e27687dd205.png" > 前 言 Spark是发源于美国加州大学伯克利分校AMPLab的大数据分析平台,它立足于内存计算,从多迭代批量处理出发,兼顾数据仓库、流处理和图计算等多种计算范式,是大数据系统领域的全栈计算平台。Spark当下已成为Apache基金会的顶级开源项目,拥有庞大的社区支持,技术也逐渐走向成熟。 为什么要写这本书 大数据还在如火如荼地发展着,突然之间,Spark就火了。还记得最开始接触Spark技术时资料匮乏,只有官方文档和源码可以作为研究学习的资料。写一本Spark系统方面的技术书籍,是我持续了很久的一个想法。由于学习和工作较为紧张,最初只是通过几篇笔记在博客中分享自己学习Spark过程的点滴

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

大数据优化 | 预见未来:谁是你的“克里斯”

“在《预见未来》这部影片中,尼古拉斯·凯奇饰演的克里斯·约翰森有一个特异功能——能够预见未来2秒钟将要发生的事,这一超能力帮助他多次成功避险。商业世界中,Dell Statistica预测分析软件赋予企业“预见未来”的超能力,未来尽在掌控!” 今天,越来越多的企业意识到数据的重要性,且数据已经成为绝大多数企业的重要资产,影响着企业的业务命脉。2015年发布的《中国大数据发展调查报告》显示,大部分企业的数据总量在50TB到500TB之间 ,占调查比例的73%。报告还指出,中国大数据市场,在2016至2018年还将持续增长,增幅将为40%左右。 巨大的数据量中蕴含着无限的价值,也隐藏着无限的商机。大数据这座“金矿”就摆在面前,企业应该如何准确找到“金子”的位置?如何快人一步发掘大数据的“黄金”价值? Dell Statistica能够帮助企业轻松将海量数据转化为最强有力的竞争优势。 Dell Statistica 预见未来不只2秒钟 《中国大数据发展调查报告》 显示,有73.9%的企业认为数据库表是大数据应用当中最主要的数据类型。Dell Statistica提供了企业数据库内和Hadoop内分析。通常情况下,企业都在数据库或Hadoop 集群之外挖掘数据,然后再把挖掘到的数据重新带回服务器或桌面分析——这一导入导出的过程浪费了大量的时间。使用Statistica,企业可直接在内部数据库中对数据进行分析,对任何位置的数据执行优势分析,消除了性能方面的瓶颈。 另外,Statistica支持企业在SQL Server等数据库中或直接在Hadoop内创建预测性模型,并通过不同的程序语言导出,如C、SQL或Java等,然后企业可以根据自己的选择自由地转换到数据环境中。 Dell Statistica 还简化了大数据分析的过程,使企业可以更快速地实施大数据挖掘。 Statistica内置了大量易于使用的方法和模板,企业能够轻松执行数据挖掘、预测分析、机器学习、预测和文本挖掘等功能,更深入地挖掘出海量数据中所隐藏的信息。 Statistica将Hadoop等技术与Lucene/SOLR搜索、Mahout机器学习以及高级自然语言处理相结合,进一步提高了可扩展性和性能。 针对数据类型呈现多样化趋势,Dell Statistica也相应支持来自于关系数据库、NoSQL数据库、云或内部部署等任何来源的任何数据,无论是结构化、半结构化、还是非结构化数据,都可进行高级分析。 Statistica易于上手,为企业用户和高级分析师提供了易于使用的数据挖掘方法和分析工作流模板。包括模型管理在内,Statistica提供了支持整个分析生命周期的完善平台,企业可将业务规则与分析模型相结合以进行实时评分,并且比其他企业级解决方案更加经济实惠。 如文章开头所讲,电影《预见未来》中,克里斯的预测超能力只能看到未来2秒中将要发生的事。相比之下,Dell Statistica的“超能力”绝不仅仅只看到未来2秒。Statistica内置的大量模版、简化的导入导出环境、完善的平台设计——所有这些易于上手的操作设计,都助力企业先人一步发掘数据金矿中的“金子”,更轻松在第一时间最大化数据金矿的“黄金价值”,在大数据时代获得领先优势。 Dell Statistica 受益者不只是“丽兹” 《预见未来》中,克里斯使用预测超能力更想保护的是女友丽兹。而Dell Statistica 所提供的预测超能力,获益的当然不仅仅是一个人…… 从业务分析师、知识工作者,到经理和高管,都可以通过交互式控制板和直观视图轻松协作和浏览数据;通过交互式深入分析和发现,快速地获得所需的答案。管理人员还可以通过网络连接到各种数据源上,实时了解不断变化的数据,从动态的数据中预测发展方向。 百事可乐公司就通过使用Dell Statistica企业版,在数据分析中节省了时间和成本。过去,百事公司的数据需要员工从仪表盘上手动填写到纸质表格中——费时费力,且易遗漏数据。使用Statistica后,操作人员可直接将仪表盘的数据保存到数据库,同时直观地在屏幕上看到质量控制图参数。一旦出现问题,可以立即采取措施来纠正。甚至有些功能可以自动生成报告模版,一键产生结果。 对百事来说,“Statistica的优势是仪表盘可直接发送数据到计算机中处理,不会再出现数据丢失现象。同时,其他用户和同事可以预览数据和分析报告,进而创建出其他统计数据分析”。百事质检部主管Drahomira Bartosova如此评价。 从内置的分析模型、分析步骤到环境的转换,Dell Statistica致力于打造最简化、快捷的路径,推动创新并解决业务难题。 通过随需提供分析功能并为范围更广的群体提供支持,Dell Statistica所提供的“超能力”令企业如虎添翼,未来尽在掌控! 本文转自d1net(转载)

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

RxJava 和 RxAndroid 三(生命周期控制和内存优化

rxjava rxandroid 赵彦军 前言:对Rxjava、Rxandroid不了解的同学可以先看看RxJava 和 RxAndroidRxJava 和 RxAndroid 二(操作符的使用) RxJava使我们很方便的使用链式编程,代码看起来既简洁又优雅。但是RxJava使用起来也是有副作用的,使用越来越多的订阅,内存开销也会变得很大,稍不留神就会出现内存溢出的情况,这篇文章就是介绍Rxjava使用过程中应该注意的事项。 1、取消订阅 subscription.unsubscribe() ; package lib.com.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import rx.Observable; import rx.Subscription; import rx.functions.Action1; public class MainActivity extends AppCompatActivity { Subscription subscription ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); subscription = Observable.just( "123").subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println( "tt--" + s ); } }) ; } @Override protected void onDestroy() { super.onDestroy(); //取消订阅 if ( subscription != null ){ subscription.unsubscribe(); } } } 2、线程调度 Scheduler调度器,相当于线程控制器 Schedulers.immediate() : 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。 Schedulers.newThread() :总是启用新线程,并在新线程执行操作. Schedulers.io():I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。 Schedulers.computation() : 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。 还有RxAndroid里面专门提供了AndroidSchedulers.mainThread(),它指定的操作将在 Android 主线程运行。 常见的场景:为了不阻塞UI,在子线程加载数据,在主线线程显示数据 Observable.just( "1" , "2" , "3" ) .subscribeOn(Schedulers.io()) //指定 subscribe() 发生在 IO 线程 .observeOn( AndroidSchedulers.mainThread() ) //指定 Subscriber 的回调发生在主线程 .subscribe(new Action1<String>() { @Override public void call(String s) { textView.setText( s ); } }) ; 上面这段代码,数据"1"、"2"、"3"将在io线程中发出,在android主线程中接收数据。这种【后台获取数据,前台显示数据】模式适用于大多数的程序策略。 Scheduler 自由多次切换线程。恩,这个更为牛逼 Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定 .subscribeOn(Schedulers.io()) .observeOn(Schedulers.newThread()) .map(mapOperator) // 新线程,由 observeOn() 指定 .observeOn(Schedulers.io()) .map(mapOperator2) // IO 线程,由 observeOn() 指定 .observeOn(AndroidSchedulers.mainThread) .subscribe(subscriber); // Android 主线程,由 observeOn() 指定 从上面的代码可以看出 observeOn() 可以调用多次来切换线程,observeOn 决定他下面的方法执行时所在的线程。 subscribeOn() 用来确定数据发射所在的线程,位置放在哪里都可以,但它是只能调用一次的。 上面介绍了两种控制Rxjava生命周期的方式,第一种:取消订阅 ;第二种:线程切换 。这两种方式都能有效的解决android内存的使用问题,但是在实际的项目中会出现很多订阅关系,那么取消订阅的代码也就越来越多。造成了项目很难维护。所以我们必须寻找其他可靠简单可行的方式,也就是下面要介绍的。 3、rxlifecycle 框架的使用 github地址: https://github.com/trello/RxLifecycle 在android studio 里面添加引用compile 'com.trello:rxlifecycle-components:0.6.1' 让你的activity继承RxActivity,RxAppCompatActivity,RxFragmentActivity 让你的fragment继承RxFragment,RxDialogFragment;下面的代码就以RxAppCompatActivity举例 bindToLifecycle 方法 在子类使用Observable中的compose操作符,调用,完成Observable发布的事件和当前的组件绑定,实现生命周期同步。从而实现当前组件生命周期结束时,自动取消对Observable订阅。 public class MainActivity extends RxAppCompatActivity { TextView textView ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); //循环发送数字 Observable.interval(0, 1, TimeUnit.SECONDS) .subscribeOn( Schedulers.io()) .compose(this.<Long>bindToLifecycle()) //这个订阅关系跟Activity绑定,Observable 和activity生命周期同步 .observeOn( AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { System.out.println("lifecycle--" + aLong); textView.setText( "" + aLong ); } }); } } 上面的代码是Observable循环的发送数字,并且在textview中显示出来 1、没加 compose(this.<Long>bindToLifecycle()) 当Activiry 结束掉以后,Observable还是会不断的发送数字,订阅关系没有解除 2、添加compose(this.<Long>bindToLifecycle()) 当Activity结束掉以后,Observable停止发送数据,订阅关系解除。 从上面的例子可以看出bindToLifecycle() 方法可以使Observable发布的事件和当前的Activity绑定,实现生命周期同步。也就是Activity 的 onDestroy() 方法被调用后,Observable 的订阅关系才解除。那能不能指定在Activity其他的生命状态和订阅关系保持同步,答案是有的。就是 bindUntilEvent()方法。这个逼装的好累! bindUntilEvent( ActivityEvent event) ActivityEvent.CREATE: 在Activity的onCreate()方法执行后,解除绑定。 ActivityEvent.START:在Activity的onStart()方法执行后,解除绑定。 ActivityEvent.RESUME:在Activity的onResume()方法执行后,解除绑定。 ActivityEvent.PAUSE: 在Activity的onPause()方法执行后,解除绑定。 ActivityEvent.STOP:在Activity的onStop()方法执行后,解除绑定。 ActivityEvent.DESTROY:在Activity的onDestroy()方法执行后,解除绑定。 //循环发送数字 Observable.interval(0, 1, TimeUnit.SECONDS) .subscribeOn( Schedulers.io()) .compose(this.<Long>bindUntilEvent(ActivityEvent.STOP )) //当Activity执行Onstop()方法是解除订阅关系 .observeOn( AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { System.out.println("lifecycle-stop-" + aLong); textView.setText( "" + aLong ); } }); 经过测试发现,当Activity执行了onStop()方法后,订阅关系已经解除了。 上面说的都是订阅事件与Activity的生命周期同步,那么在Fragment里面又该怎么处理的? FragmentEvent 这个类是专门处理订阅事件与Fragment生命周期同步的大杀器 public enum FragmentEvent { ATTACH, CREATE, CREATE_VIEW, START, RESUME, PAUSE, STOP, DESTROY_VIEW, DESTROY, DETACH } 可以看出FragmentEvent 和 ActivityEvent 类似,都是枚举类,用法是一样的。这里就不举例了! 总结 1、这三篇文章的相关代码示例都在 http://git.oschina.net/zyj1609/RxAndroid_RxJava 2、通过上面的三种方法,我相信你在项目中使用Rxjava的时候,已经能够很好的控制了 Rxjava对内存的开销。如果你有其他的方法或者问题,可以留言给我。 RxJava 和 RxAndroid 四(RxBinding的使用)

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

移动App性能测评与优化1.3.1 Dalvik Heap内部机制

1.3.1 Dalvik Heap内部机制 为了弄清楚为什么DVM占着内存不释放,我们阅读了DVM分配内存部分的代码。位置在Android源码的dalvik/vm/alloc下,约255KB。分析的主要流程如下: 1)DVM使用mmap系统调用从系统分配大块内存作为Java Heap。根据系统机制,如果分类的内存尚未真正使用,就不计入PrivateDirty和Pss。例如图1-8所示,Heap Size/Alloc很多,但大部分是共享的,实际使用的较少。所以反映到PrivateDirty/Pss里的内存并不多。 图1-8 共享内存较多的进程 2)新建对象之后,由于要向对应的地址写入数据,内核开始真正分配该地址对应的4KB物理内存页面。 Alloc.cpp中,从第176行起的代码如图1-9所示。 图1-9 DVM虚拟机分配内存的代码 3)运行

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

移动App性能测评与优化1.4.3 zygote共享内存机制

1.4.3 zygote共享内存机制 上一小节介绍了应用各部分内存的含义,读者对dumpsys meminfo输出的大部分数据都能够有所理解。但dumpsys meminfo工具还会输出Heap Size/Alloc/Free部分的数值。我们知道这些数值是Dalvik虚拟机统计的内存堆的使用量,但这些数值是如何对应到Pss内存上的?比如Heap Alloc和Heap Pss往往相差不远,那是不是可将其看做基本等同的呢?下面我们试图解释这几项数值之间的关系。 由于虚拟机运行时并不区分某个对象实例是Android框架共享的还是应用独有的,Heap Alloc统计的是由虚拟机分配的所有应用实例的内存,所以会将应用从zygote共享的部分也算进去,于是Heap Alloc值总是比实际物理内存使用值要大。 Heap Alloc虽然反映了Java代

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

Android应用性能优化最佳实践.2.4 避免过度绘制

2.4 避免过度绘制 过度绘制(Overdraw)是指在屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次重叠的UI结构(如带背景的TextView)中,如果不可见的UI也在做绘制的操作,就会导致某些像素区域被绘制了多次,从而浪费多余的CPU以及GPU资源。 当设计上追求更华丽的视觉效果时,我们很容易陷入采用复杂的多层次重叠视图来实现这种视觉效果的怪圈。这很容易导致大量的性能问题,为了获得最佳性能,必须尽量减少Overdraw情况发生。 我们一般在XML布局和自定义控件中绘制,因此可以看出导致过度绘制的主要原因是: XML布局->控件有重叠且都有设置背景 View自绘-> View.OnDraw里面同一个区域被绘制多次 2.4.1 过度绘制检测工具 要知道是否有过度绘制的情况,可以通过手机设置中的开发者选项,打开Show GPU

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

Android应用性能优化最佳实践.2.7 提升动画性能

2.7 提升动画性能 在打造优秀体验的应用和实现酷炫效果的过程中,动画是不可或缺的重要组成部分。Android平台提供了三个动画框架:帧动画(Frame Animation)、补间动画(Tween Animation)和属性动画(Property Animation)。属性动画在Android 3.0开始支持,开发者使用这些动画框架来实现各种动画效果,这三个框架都有其优势和局限性,要深入了解就需要明白它们的实现原理。 属性动画只有Android API 11(Android 3.0)以上才支持,如果使用11以下的SDK,请导入NineOldAndroids动画库,用法完全一致。 虽然通过动画可以实现很多酷炫的动画,但带来的性能开销也有不同程度的影响。在实现动画的过程中,主要从以下三个纬度来对比性能: 流畅度:流畅度是动画的核心,控制每一帧

资源下载

更多资源
Mario

Mario

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

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等操作系统。

用户登录
用户注册