首页 文章 精选 留言 我的

精选列表

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

Hadoop The First Day!!!

Hadoop :内部工作机制非常复杂,是一个集分布式系统理论、实际工程理论和常识于一体的系统。提供用于构建分布式系统的每一个工具(用于数据存储、数据分析和协调处理)都非常简单。这些工具都非常抽象,对偶尔有大量数据需要存储的程序员、有大量数据需要分析的额程序员、有大量计算机需要管理的程序员等时期利用Hadoop构建基础平台,满足需要。 我特么才发现,需要点java基础,如果要看Hadoop的话。学前篇:2006年数字世界(digital universe)项目统计的出全球数据总量为0.18ZB并预测在2011年将达到1.8ZB。 小姿势:1ZB=10^21字节=1000EB(exabytes) 1 000 000 PB = 10亿TB(terrabytes) 数据来源可能为2007年纽约证交所曾有段时间统计数据:一天交易数据多达1TBFaceBook 存储的照片至少100亿张,存储容量约为1PBAncestry.com存储的数据约为2.5PB互联网档案馆(The Internet Archive)存储的数据量约为2PB,并以每月至少20TB的速度持续增长瑞士日内瓦附近的大型强子对撞机每年产生的数据约为15PBMyLifeBits:微软研究院的一个研究项目,研究显示,在不久的将来,个人信息档案将日益普及。MyLifeBits的一个实验是获取和保存每个人的对外联系情况,供日后存取。收集的数据包括每分钟拍摄的照片等,数据量每月约为1GB。当存储成本急剧下降以至于可以存储音频和视频时,MyLifeBits项目在未来的存储的数据量将是现在的很多倍。生活中我们一般遇到的问题:在硬盘存储容量多年来不断提升的同时,访问速度(硬盘数据读取速度)却没有与时俱进。1990年,一个普通硬盘可以存储1370MB数据,传输速度为4.4MB/s,因此只需要5分钟就可以读完整个硬盘中的数据,20年过去了,1TB的硬盘已然成为主流,但其数据传输速度约为100MB/s,读完整个硬盘中的数据至少得话2.5小时。现实中我们产生的数据量成几何倍数增长,但是对数据的处理速度却受到硬件设备很大的限制和影响,很难提升。对硬盘中的数据并行进行读写数据,有许多问题:第一个需要解决硬件故障问题;第二个是大多数分析任务需要以某种凡是结合大部分数据来共同完成分析,即从一个硬盘读取的数据可能需要与从另外99个硬盘中读取的数据结合使用。读到这里恍然发现:Hadoop即为我们常说的分布式存储系统的一种。 MapReduce看似采用了一种蛮力方法。每个查询选哟处理整个数据集成或至少数据集的绝大部分。有区别与传统的关系型数据库。即MapReduc为数据库的一种。(暂时理解)和关系型数据库进行比较:类型 传统关系型数据库 MapReduce数据大小 GB PB数据存取 交互式和批处理 批处理更新 多次读写 一次写入,多次读取结构 静态模式 动态模式完整性 高 低横向扩展 非线性的 线性的 MapReduce和关系型数据库之间的另一个区别在于它们所操作的数据集的结构化程度。结构化数据(structured data)是具有既定格式的实体化数据,如xml文档或满足特定预定一个是的数据库表等。半结构化数据(semi-structured data)比较松散,虽然可能有格式,但经常被忽略,所以它只能作为对数据结构的一般性指导。非结构化数据(unstructured data)没有什么特别的内部结构,例如纯文本或图像数据。MapReduce对非结构化或半结构化数据非常有效,因为它是在处理数据是才对数据进行解释。换句话说,MapReduce输入的键和值并不是数据固有的属性,而是有分析数据的人来选的。关系型数据库往往是规范的,以保持数据的完整性且不含冗余。规范给MapReduce带来问题,因为它使记录读取成为非本地操作。而MapReduce的核心假设之一就是可以进行(高速的)流读写操作。web服务器日志是典型的非规范化数据记录,MapReduce非常适用于分析各种日志文件MapReduce是一种线性的可伸缩编程模型。程序员需要写两个函数,分别为map函数和reduce函数,每个函数定义从一个键值对集合到另一个键值对集合的映射。这些函数不必关注数据集及其所用集群的大小,可以原封不动地应用于小规模数据集或大规模的数据集。更重要的是,如果输入的数据量是原来的两倍,那么运行时间页需要两倍。但如果集群是原来的两倍,作业的运行速度却仍然与原来一样。next:1.3.2 来源:Hadoop权威指南

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

Android笔记——My First App

新开一个安卓坑, 此坑的内容来自在Google中国开发者面向Android初学者的论坛http://www.studyjamscn.com 准备工作 Windows10Java Development Kit8Android Studio2.3.3Gradle4.1(后面会讲到, 可以先不下载) 建立工程 Step1 建立工程的第一步这里之所以使用Company domain的逆序作为包名, 是因为域名的唯一性, 这个唯一性是我们之后发布应用到应用商店的身份证明. 有的小伙伴可能会想, 我没有域名怎么办? 不用担心, 我们还可以用通过博客地址,微博地址这些来曲线救国, 现在支持个性域名的网站已经不少. Company domain Step2 选择SDK的时候, 如图中所示, 百分数是指目前在Google Play中此版本到最新版本的手机覆盖率之和, 为了应用能有更好的覆盖面, 我们应该在保证大部分新API能用的情况下, 提高覆盖率. 而不是一味的求覆盖率. 有些功能如Google Pay等不在2.X的Android版本中提供, 这意味着你的应用不能使用相关的api SDK选择 点击Help Me Choose可以看到各个版本Api的详情, 可以根据你要完成的应用所需功能与详情对照来确定使用哪一个 Ratio Step3 接下来按Next保持默认直到最后一步Finish, 之后会进行初始化, 由于墙的原因, 这里正常是初始失败的, 进度条转了半天都在Building gradle project info 之后会报错Gradle下载地址 https://gradle.org/releases/ 注意,下载的时候使用浏览器的默认下载工具很可能又会失败, 因为文件所在的服务器不在中国. 建议用迅雷, 轻松满速下载 使用迅雷下载Gradle 下载完毕后建议在C盘中解压到一个文件夹如C:/Gradle 之后右键计算机>属性>系统高级设置>环境变量>选择系统变量中的Path,编辑,新建, C:\Gradle\gradle-4.1\bin, 之后可以在Power shell中检验安装情况, 输入 gradle -v 安装成功 回到Android Studio, file->settings->如图所示, 选择use local gradle, 选择安装地址, 应用即可 image.png 开始编程 Android Studio在2.2以上的版本默认使用Google在2016的i/O大会推出的ConstraintLayout(约束布局) 在本次笔记中不需要用到, 我们使用RelativeLayout, 如果你想了解Google推出的这个新的布局控件可以看下这篇文章Google I/O:Android ConstraintLayout 扁平化布局入门 我们先把默认布局改回RelativeLayout <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </RelativeLayout> RelativeLayout的布局有点类似栈的概念, 比如放了两个TextView, 如果让它在默认的位置, 后面的TextView会挡出前面的TextView, 这也与Ps中的图层有点相似. 下图是我们要完成的目标, 标题栏已经由系统生成, 无需修改 目标 Select the Views 先把各个组件拆分出来 将鼠标移动到预览界面上, 可以看到一共需要三个控件 组件 包括两个TextView, 一个imageView imageView自动生成的属性中不包括src(图片路径), 需要自己添加,建议与默认设置一样放在res(resource缩写)目录下的drawable文件夹 android:src="@drawable/xxx(文件名, 不需要后缀)" Postion the Views 根据上面的图, 我们需要将两个textView置于中间, 并在两个textView之间留有空隙, 图片需要覆盖整个屏幕, 并选取中间的部分, 与位置相关的属性大部分是含有center, Top, bottom等单词,可以在IDE智能弹出来的下拉框中选到layout_centerHorizontal属性, 设置为true 接着处理空隙, 用margin或者padding均可, margin留的空隙是在这个控件外面的空白, 而padding是控件边缘到内容间的空白, 不填充颜色的情况下, 在本例中的效果相同, 同时使用margin和padding会有叠加效果. 针对imageView, 我们使用centerCrop属性, 此属性会裁切并使用图片的中间部分, 同时要将控件的长宽属性值修改为"match_parent", 这样才能使大尺寸的图片充满整个屏幕(从属性名就可以猜个大概了, 所以变量名还是要认真起) Style the Views 最后对控件进行样式编辑, 需要注意的是, 这里的文字大小我们不用dp, px而是使用sp(Scale-independent Pixel), 这里用36sp, 如英文所示, 可以猜个大概 sp不受屏幕分辨率影响, 如果使用px这样与像素密度分辨率相关的, 在不同设备上的显示效果可能都是不同的. 如相同px, 低分辨率下的更大. 最后把字体(fontFamily)和字体颜色(textColor)修改完, 就可以预览到手机啦 Run the "app" 按shift+f10 或者点击绿色的三角形运行按钮, 选择设备(推荐用真实设备, 启用开发者选项, 启用USB调试, 连接电脑, 首次连接需要授权, 点击授权即可), 然后确定, 之后会在手机安装这个软件, 大功告成! Done!

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

Mobile First! Wijmo 5 之 架构

本文就开发者关心的话题之一架构,展开叙述。 Wijmo 5是一组JavaScript控件,但是不要与Widgets混淆。在此前开发Wijmo的时候,我们能够用像jQuery UI和jQuery Mobile Widget 框架来构建它,同时也为我们构建Web框架--Wijmo节省了时间。 但是,当我们希望构建一个更现代的Wijmo 5,我们认为现在是时候重新审视JavaScript UI组件,尤其是语法和API接口。在做了大量的研究和讨论后,我们使用了&ldquo;真正的JavaScript控件(true JavaScript Controls)&rdquo;,如你在.NET中使用类似的属性,方法和事件等API,同样的在JavaScript UI组件的使用方法几乎完全相同。 同时,我们选择IE9作为Wijmo 5浏览器支持的基准版本,因为IE9支持ECMAScript 5语法,而这点对我们的Wijmo 5架构非常关键,由此创造了新的Wijmo 5架构。 ECMAScript 5 Controls 我们的Wijmo 5框架直接采用了ECMAScript 5。我们的源码使用TypeScript,这使得开发非常容易。如,使用它创建了控件基类(Base Control Class), 所有的控件均派生自该基类。 JS的控件如同类对象一样,大小写敏感,且提供了构造函数用于初始化,同时也提供了属性、方法、事件。 如,FlexGrid控件可通过如下方法进行初始化: //初始化FlexGrid实例对象为一个DOMelementvarmyFlexGrid=newwijmo.grid.FlexGrid('#FlexGrid1'); 属性 在我们的ES 5控件中,我们采用了Object.defineProperty()。这种方法使得我们可以在JS下像使用.NET控件一样便捷。因为,这种方法允许我们定义属性的getters和setters接口,因此,我们可以按照写.NET代码的逻辑思路直接调用属性,非常方便。 设置控件的属性非常方便,直接赋值即可,完全不用通过函数调用来实现。 //设置FlexGrid可编辑myFlexGrid.isReadOnly=false; 还可通过类似的方法对事件进行赋值、检查属性是否有值。 如果IDE支持只能感知(如VS 2013), 则可通过智能感知的自动完成功能来对控件属性赋值。智能感知对于使用控件来说,非常便捷,可以很好的提高工作效率。 为了方便,同样提供了枚举(Enums) //设置FlexGrid的selectionmodemyFlexGrid.selectionMode=wijmo.grid.SelectionMode.CellRange; 属性还可通过标准的JS对象方式获得,如,您可以通过如下方法获得控件的get属性接口: //检查FlexGrid是否可编辑varreadOnly=myFlexGrid.isReadOnly; 如果你熟练的使用.NET语法编程,那么你会非常熟悉这些属性方法。如果你熟练的使用JS编程,那么对这种优美的API接口也会喜欢。 可以对比看如下的对Wijmo Grid Widget赋值语法: //Wijmo的GridWidget允许可编辑$('#WijmoGrid1').wijgrid('option','allowEditing',true); 这种语法可称为&ldquo;字符串类型编程&rdquo;,依赖于字符串的大小写来设置属性值,如设置错误,则不会报错,这个对开发调试将会非常麻烦。 方法 Wijmo 5中的方法使用起来非常方便,可直接通过控件调用控件对应的方法,且调试比较方便。 //刷新FlexGrid控件,以引起relayout和redrawmyFlexGrid.refresh(); 对比JS Widget 调用刷新的方法 //刷新WijmoGridWidget$('#WijmoGrid1').wijgrid('doRefresh'); 如同上面的属性一样,依赖字符串大小写调用方法,调试错误则非常麻烦。 事件 Wijmo 5控件中的事件使用,如同.NET控件中的一样,可通过addHandler、removeHandler订阅、取消订阅事件。 //FlexGridcell编辑完成事件myFlexGrid.cellEditEnded.addHandler(function(sender,args){//Dosomething}); 对应的JS Widget 订阅事件的语法: //订阅Wijmocell编辑完成事件$('#WijmoGrid1').bind('wijgridaftercelledit',function(e,args){//Dosomething}); Controls vs. Widgets 综上所述,下面用表对Wijmo 5Control和JS Widget进行对比 Wijmo 5 Controls JS Widgets 使用TypeScript类,提供类JavaScript构造函数 Functions接口,通过设置JavaScript对象属性 EcmaScript 5:属性有getters 和 setters接口 使用&ldquo;options&rdquo;的属性,通过设置子参数 直接设置属性值 通过调用函数实现属性赋值 通过控件的实例调用方法 以传递函数名字符串方式进行方法调用 通过在事件调用addHandler订阅 通过使用bind(),并以字符串方式传递widget name + even name订阅事件 IDEs提供智能感知(依赖IDE) 非强类型,无智能感知 设计时语法检测 无语法检测 运行时错误提示 运行时很少错误提示 本文转自 powertoolsteam 51CTO博客,原文链接:http://blog.51cto.com/powertoolsteam/1566685,如需转载请自行联系原作者

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

Java 新型垃圾回收器(Garbage First,G1)

HotSpot 垃圾收集器实现 Serial Collector(串型收集器) 适用收集场景:1. 新生代收集(Young Generation Collection)2. 老年代收集(Old Generation Collection) Parallel Conllector(并行收集器) 又叫吞吐量收集器(throughput collector)应用于多核系统。适用收集场景:1. 新生代收集是并行处理。2. 老年代收集和 Serial Collector 一样。 Parallel Compacting Collector(并行压缩收集器) The parallel compacting collector was introduced in J2SE 5.0 update 6. The difference between it and the parallel collector is that it uses a new algorithm for old generation garbage collection. Note: Eventually, the parallel compacting collector will replace the parallel collector. 上述文字中 斜体 文字告诉我们,这个收集器和上一个并行收集器唯一的不同是在老年代使用了新的算法。 适用收集场景:1. 新生代收集(Young Generation Collector) 和Parallel Collector 相同;2. 老年代收集(Old Generation Collector) Concurrent Mark-Sweep (CMS) Collector (并发标记清除) Young generation collections 通常不会造成长时间停顿,然而old generation collections却是是造成长时间停顿的,虽然它不长出现,特别是在大的heaps回收被涉及到的时候。为了处理这个问题,HotSpot JVM 引入了一个叫做 concurrent mark-sweep(CMS) collector ,通常也被称为 低延时收集器low-latency collector. 适用场景: 仅适用于老年代,新生代处理方式和Parallel Collector相同。 G1目标G1 is planned as the long term replacement for the Concurrent Mark-Sweep Collector.计划将G1作为CMS收集器的长久替代物。 它是为了平衡 延时和吞吐量之间的一种最优关系。 G1实现原理基本属性和CMS的相同点CMS Replacement(CMS替代物)Server 'Style' Garbage Collector(服务端垃圾收集器-内存,核数区别)Parallel 并行Concurrent 并发Generational 分代和CMS的主要区别Good Throughput 良好的吞吐量Compacting 压缩Improved ease-of-use 提升了易用性(更多的JVM参数可用)Predictable(though not hard real-time) 可预估的,非绝对实时。基本概念G1 堆布局G1将堆分成若干固定大小的Region/区域(区域大小只有1、2、4、8、16和32M),G1的新生代和老年代都是一个无需连续的区域集合,每一个区域独立进行内存的分配和回收,区域是内存管理的基本单元,在某一个时间节点,可能是空闲的,当内存被请求时,内存管理器将空闲的Region分配到某个分代,然后归还应用分配给的空间。 大多数情况下,GC的操作同一时间只会在一个区域进行。 Region 分布 超大对象(Humongous Objects) 下图中跨区域的灰色模块即代表了超大对象,超大对象是指那些空间大小 >=1/2 个区域空间的对象.超大对象有时候会被以下特殊方式处理: 每个超大对象在老年代区域中的连续区域分配。对象分配起始于在连续区域中的首个成员,如果连续区域中的最后一个区域存在剩余空间的话,那么该空间将失去分配的机会,直到其关联的超大对象被完全回收超大对象的回收通常仅在Cleanup停顿中的Marking结束后、或者在Full GC时。超大对象的分配可能造成垃圾收集停顿过早地发生(主要是因为空间浪费。)超大对象绝不会发生移动,即使在没有Full GC的情况下 回收周期 Young-only Young-only 阶段的垃圾 收集 时逐渐地将老年代的对象填充到当前可用的内存。即将可以提升的新生代对象提升到老年代。 该阶段开始于Young-only的 收集 动作,也就是下图中的蓝色小球,每一个小球都是一次收集动作,也就是提升对象到老年代。Young-only 与Space-reclamation 过渡实际上是开始于 老年代空间 占用 达到某个阈值,即Heap初始化占用阈值。此时,G1将调度Initial Mark的Young-only收集(蓝色大球),而非常规的Young-only(蓝色小球)收集。 Initial Mark此类收集开始于标记过程,附带一个常规的Young-only收集,并发标记决定所有在老年代区域中可达的存活对象是否要遗留到Space-reclamation 阶段。当标记过程未结束时,常规的Young-only 收集可能已经发生,等到标记完成时,将伴随着两个特殊的 Stop-The-World 停顿, Remark 和 CleanUp . Remark 停顿 因为在 Initial Mark 标记过程中,因为它是并发执行,有可能会发生 Young-only 收集,造成标记数据有误差,因此需要重新标记一次,该过程为串行执行,会造成 Stop-The-World . 在Remark 和Cleanup之间,G1将并发地计算出一份对象存活性总结报告,它将在Cleanup停顿阶段更新内部的数据结构 Cleanup 停顿该停顿同样将完整的回收空闲区域,并且决定 Space-reclamation 阶段是否需要继续跟踪,如果继续跟随的话,Young-only阶段的完成仅仅做 Young-only 收集动作。 Space-reclamation Space-reclamation(空间回收/复用)阶段是回收老年代空间,同时处理新生代。 这个阶段由多个混合的收集动作组成,不仅包含新生代区域,同时也会排除老年代区域的存活对象,当G1发觉依然无法满足空闲的空间请求时,G1会终止本阶段。如果应用消耗完内存,G1将执行 Stop-The-World 的全堆压缩(Full GC)。 如下图所示: https://i.loli.net/2019/08/05... ; width="400" > 2种过程是循环往复收集。 G1指令细节初始空间占用Initiating Heap Occupancy Percent(IHOP): Initial Mark 收集触发的阈值,为老年代空间定义Heap占用的百分比。 JVM 设置参数:-XX:InitiatingHeapOccupancyPercent 默认情况下,根据标记时间以及老年代在标记周期中的内存分配,G1垃圾收集器将自动抉择理想的IHOP的值。 JVM 失效参数:-XX:-G1UseAdaptiveIHOP 修改区域空间大小 -XX:G1HeapRegionSize G1 Vs. 传统垃圾回收器G1 不区分新/老生代,只区分RegionG1 收集分2个阶段 Young-only 和 Space-reclamation

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

Retrofit——A type-safe HTTP client for Android and Java(The first part)

一,介绍 Retrofit将你的http接口API转换成项目中的一个java的接口。 public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } Retrofit会自动为上面的Service生成一个实现类。 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .build(); GitHubService service = retrofit.create(GitHubService.class); 每次调用的时候,创建的接口的实现类会产生一个异步或者同步的http请求到远程的web服务器上面。 Call<List<Repo>> repos = service.listRepos("octocat"); 使用注解的方式来描述http请求: 1,支持url参数和查询参数 2,对象转换成请求体,即对json对象的支持 3,多种请求体,文件等也支持(翻译的好土气呀。。。) 二,API声明 使用接口上的方法注解和请求参数来说明一个请求时如何被处理的。 三,请求方法 每个方法都必须有一个http注解来提供请求请求和相关联的URL。这里有五种支持的注解形式:GET,POST,PUT,DLETE,HEAD。相关的请求URL放在请求注解中。 @GET("users/list") 同时,你也可以直接在URL中提供请求参数: @GET("users/list?sort=desc") 四,URL操作 请求参数能被动态更新---by方法中的占位符。一个请求块是用’{}‘——这个符号包围的。一个对应的参数必须被@Path注解,并且使用相同的参数名字。 @GET("group/{id}/users") Call<List<User>> groupList(@Path("id") int groupId); 请求参数也能被添加: @GET("group/{id}/users") Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort); 例如,下面使用一个map来做栗子: @GET("group/{id}/users") Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options); 翻译了一部分,感觉上面的东西好像是外星人写的。。。宝宝会继续更的!希望能忍着翻译完,更希望看过的人不要打我。

资源下载

更多资源
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文件系统,支持十年生命周期更新。

WebStorm

WebStorm

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

用户登录
用户注册