首页 文章 精选 留言 我的

精选列表

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

Hadoop源码学习之HDFS(一)

Hadoop的HDFS可以分为NameNode与DataNode,NameNode存储所有DataNode中数据的元数据信息。而DataNode负责存储真正的数据(数据块)信息以及数据块的ID。 NameNode上并不永久保存哪个DataNode上有哪些数据块的信息,而是通过DataNode启动时的上报,来更新NameNode上的映射表。 那么从DataNode上开始一点一点看: 在存储层面,Storage抽象类继承了StorageInfo。在StorageInfo中存储了layoutVersion:版本号,namenodeID是Storage的ID,cTime,creation time,storageType。

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

iOS学习之UIActionSheet的使用

UIActionSheet是在iOS弹出的选择按钮项,可以添加多项,并为每项添加点击事件。 为了快速完成这例子,我们打开Xcode 4.3.2, 先建立一个single view application。然后再xib文件添加一个button,用来弹出sheet view。 1、首先在.h文件中实现协议 加代码的地方在@interface那行的最后添加<UIActionSheetDelegate>,协议相当于java里的接口,实现协议里的方法。 [cpp] view plain copy @interfacesheetviewViewController:UIViewController<UIActionSheetDelegate> @end 2、添加button,命名button为showSheetView. 3、为button建立Action映射,映射到.h文件上,事件类型为Action ,命名为showSheet。 4、在.m文件上添加点击事件代码 图的效果是这样的: [cpp] view plain copy -(IBAction)showSheet:(id)sender{ UIActionSheet*actionSheet=[[UIActionSheetalloc] initWithTitle:@"title,nil时不显示" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:@"第一项",@"第二项",nil]; actionSheet.actionSheetStyle=UIActionSheetStyleBlackOpaque; [actionSheetshowInView:self.view]; } actionSheet.actionSheetStyle=UIActionSheetStyleBlackOpaque;//设置样式 参数解释: cancelButtonTitle destructiveButtonTitle是系统自动的两项。 otherButtonTitles是自己定义的项,注意,最后一个参数要是nil。 [actionSheetshowInView:self.view];这行语句的意思是在当前view显示Action sheet。当然还可以用其他方法显示Action sheet。 对应上面的图和代码,一目了然了把 5、接下来我们怎么相应Action Sheet的选项的事件呢? 实现协议里的方法。为了能看出点击Action sheet每一项的效果,我们加入UIAlertView来做信息显示。下面是封装的一个方法,传入对应的信息,在UIAlertView显示对应的信息。 [cpp] view plain copy -(void)showAlert:(NSString*)msg{ UIAlertView*alert=[[UIAlertViewalloc] initWithTitle:@"ActionSheet选择项" message:msg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alertshow]; } 那相应被Action Sheet选项执行的代码如下: [cpp] view plain copy (void)actionSheet:(UIActionSheet*)actionSheetclickedButtonAtIndex:(NSInteger)buttonIndex { if(buttonIndex==0){ [selfshowAlert:@"确定"]; }elseif(buttonIndex==1){ [selfshowAlert:@"第一项"]; }elseif(buttonIndex==2){ [selfshowAlert:@"第二项"]; }elseif(buttonIndex==3){ [selfshowAlert:@"取消"]; } } -(void)actionSheetCancel:(UIActionSheet*)actionSheet{ } -(void)actionSheet:(UIActionSheet*)actionSheetdidDismissWithButtonIndex:(NSInteger)buttonIndex{ } -(void)actionSheet:(UIActionSheet*)actionSheetwillDismissWithButtonIndex:(NSInteger)buttonIndex{ } 可以看到 buttonIndex 是对应的项的索引。 看到那个红色的按钮没?那是ActionSheet支持的一种所谓的销毁按钮,对某户的某个动作起到警示作用, 比如永久性删除一条消息或图像时。如果你指定了一个销毁按钮他就会以红色高亮显示: actionSheet.destructiveButtonIndex=1; 与导航栏类似,操作表单也支持三种风格: UIActionSheetStyleDefault //默认风格:灰色背景上显示白色文字 UIActionSheetStyleBlackTranslucent //透明黑色背景,白色文字 UIActionSheetStyleBlackOpaque //纯黑背景,白色文字 用法: actionSheet.actionSheetStyle=UIActionSheetStyleBlackOpaque;//设置样式 我选sheet 里的第一项,显示如下: 6、注意事项 在开发过程中,发现有时候UIActionSheet的最后一项点击失效,点最后一项的上半区域时有效,这是在特定情况下才会发生,这个场景就是试用了UITabBar的时候才有。解决办法: 在showView时这样使用,[actionSheet showInView:[UIApplication sharedApplication].keyWindow];或者[sheet showInView:[AppDelegate sharedDelegate].tabBarController.view];这样就不会发生遮挡现象了。 代码获取:http://download.csdn.net/detail/totogo2010/4343267 https://github.com/schelling/YcDemo 著作权声明:本文由http://blog.csdn.net/totogo2010/原创 本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3498920.html,如需转载请自行联系原作者

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

Android Bitmap和Canvas学习笔记

位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的。 1. 从资源中获取位图 可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。 当然,首先需要获取资源: Resources res=getResources(); 使用BitmapDrawable获取位图 使用BitmapDrawable (InputStream is)构造一个BitmapDrawable; 使用BitmapDrawable类的getBitmap()获取得到位图; // 读取InputStream并得到位图 InputStream is=res.openRawResource(R.drawable.pic180); BitmapDrawable bmpDraw=new BitmapDrawable(is); Bitmap bmp=bmpDraw.getBitmap(); 或者采用下面的方式: BitmapDrawable bmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic180); Bitmap bmp=bmpDraw.getBitmap(); 使用BitmapFactory获取位图 (Creates Bitmap objects from various sources, including files, streams, and byte-arrays.) 使用BitmapFactory类decodeStream(InputStream is)解码位图资源,获取位图。 Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180); BitmapFactory的所有函数都是static,这个辅助类可以通过资源ID、路径、文件、数据流等方式来获取位图。 以上方法在编程的时候可以自由选择,在Android SDK中说明可以支持的图片格式如下:png (preferred), jpg (acceptable), gif (discouraged),和bmp(Android SDK Support Media Format)。 2. 获取位图的信息 要获取位图信息,比如位图大小、像素、density、透明度、颜色格式等,获取得到Bitmap就迎刃而解了,这些信息在Bitmap的手册中,这里只是辅助说明以下2点: 在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题; Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充了。 3. 显示位图 显示位图可以使用核心类Canvas,通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。当然,也可以通过BitmapDrawable将位图显示到View中。 转换为BitmapDrawable对象显示位图 // 获取位图 Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180); // 转换为BitmapDrawable对象 BitmapDrawable bmpDraw=newBitmapDrawable(bmp); // 显示位图 ImageView iv2 = (ImageView)findViewById(R.id.ImageView02); iv2.setImageDrawable(bmpDraw); 使用Canvas类显示位图 这儿采用一个继承自View的子类Panel,在子类的OnDraw中显示 public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new Panel(this)); } class Panel extends View{ public Panel(Context context) { super(context); } public void onDraw(Canvas canvas){ Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic180); canvas.drawColor(Color.BLACK); canvas.drawBitmap(bmp, 10, 10, null); } } } 4. 位图缩放 (1)将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样:drawBitmap(Bitmapbitmap,Rectsrc,Rectdst,Paintpaint)。 (2)在原有位图的基础上,缩放原位图,创建一个新的位图:CreateBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) (3)借助Canvas的scale(float sx, float sy) (Preconcat the current matrix with the specified scale.),不过要注意此时整个画布都缩放了。 (4)借助Matrix: Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic180); Matrix matrix=new Matrix(); matrix.postScale(0.2f, 0.2f); Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(), bmp.getHeight(),matrix,true); canvas.drawColor(Color.BLACK); canvas.drawBitmap(dstbmp, 10, 10, null); 5. 位图旋转 同样,位图的旋转也可以借助Matrix或者Canvas来实现。 Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic180); Matrix matrix=new Matrix(); matrix.postScale(0.8f, 0.8f); matrix.postRotate(45); Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(), bmp.getHeight(),matrix,true); canvas.drawColor(Color.BLACK); canvas.drawBitmap(dstbmp, 10, 10, null); 旋转效果: 6.图片水印的生成方法 生成水印的过程。其实分为三个环节:第一,载入原始图片;第二,载入水印图片;第三,保存新的图片。 /** * create thebitmapfrom a byte array * * @param src thebitmapobject you want proecss * @param watermark the water mark above the src * @return return abitmapobject ,if paramter's length is 0,return null */ privateBitmap createBitmap( Bitmap src, Bitmap watermark ) { String tag ="createBitmap"; Log.d( tag,"create a newbitmap"); if( src ==null) { returnnull; } intw = src.getWidth(); inth = src.getHeight(); intww = watermark.getWidth(); intwh = watermark.getHeight(); //create the new blankbitmap Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个新的和SRC长度宽度一样的位图 Canvas cv =newCanvas( newb ); //draw src into cv.drawBitmap( src,0,0,null);//在 0,0坐标开始画入src //draw watermark into cv.drawBitmap( watermark, w - ww +5, h - wh +5,null);//在src的右下角画入水印 //save all clip cv.save( Canvas.ALL_SAVE_FLAG );//保存 //store cv.restore();//存储 returnnewb; } 7.Canvas的save和restore onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。 在onDraw方法里,我们经常会看到调用save和restore方法,它们到底是干什么用的呢? save:用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。 restore:用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。 save和restore要配对使用(restore可以比save少,但不能多),如果restore调用次数比save多,会引发Error。save和restore之间,往往夹杂的是对Canvas的特殊操作。 例如:我们先想在画布上绘制一个右向的三角箭头,当然,我们可以直接绘制,另外,我们也可以先把画布旋转90°,画一个向上的箭头,然后再旋转回来(这种旋转操作对于画圆周上的标记非常有用)。然后,我们想在右下角有个20像素的圆,那么,onDraw中的核心代码是: int px = getMeasuredWidth(); int py = getMeasuredWidth(); // Draw background canvas.drawRect(0, 0, px, py, backgroundPaint); canvas.save(); canvas.rotate(90, px/2, py/2); // Draw up arrow canvas.drawLine(px / 2, 0, 0, py / 2, linePaint); canvas.drawLine(px / 2, 0, px, py / 2, linePaint); canvas.drawLine(px / 2, 0, px / 2, py, linePaint); canvas.restore(); // Draw circle canvas.drawCircle(px - 10, py - 10, 10, linePaint); 效果如图1所示: 如果我们不调用save和restore会是什么样子呢?如图2所示: 从这两个图中,我们就能看到圆圈位置的明显差异。不进行Canvas的save和restore操作的话,所有的图像都是在画布旋转90°后的画布上绘制的。当执行完onDraw方法,系统自动将画布恢复回来。save和restore操作执行的时机不同,就能造成绘制的图形不同。 本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/01/10/1643460.html,如需转载请自行联系原作者

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

Android 5.0共享元素学习总结

首先:看一个误区,很多博客都说明了需要在activtiy的主题设置name=”Android:windowContentTransitions”为true的属性才可以使用5.0的共享元素动画, 经过测试,当minsdkVersion设为21时,没有设置该属性的时候还是可以使用,使用方法: 1 创建ActivityOptions,设置需要共享的View和transitionName 设置ActivityOptions 2 在另一个Activity中的xml文件中需要共享的View的transitionName属性设置为同一个transitionName 确定transitionName 根据以上步骤在5.0上已经可以实现元素共享了,But。。。返回的时候还是要注意的使用:finishAfterTransition()代码(当minsdkVersion小于21时该代码会报错)。 当minsdkVersion设为小于21时,同样没有设置activity的windowContentTransitions属性,使用方法: 1 创建ActivityOptionsCompat,并设置共享的View和transitionName 改为ActivityOptionsCompat 2 同上,但返回的时候不能用finishAfterTransition()了,因为该方法不存在了,只能直接finish 同样,minsdkVersion小于21时,在我的魅族MX5上面实现了元素共享。 以上纯属个人总结,如有问题,请指出,勿喷! 当需要在5.0以下的设备上实现元素共享就需要另外想办法了,github上有第三方库,请自行搜索。。。

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

docker学习 - docker启动和镜像

docker daemon启动 载体为daemon,调度管理engine,任务执行靠jobEngine是map[string]Handler,type Handler func(*Job) Status Daemon的启动流程: 注册serve job、pull job、create job、start job等 构建serveapi job,并执行ServeApi handler,创建支持多种协议请求(tcp/socker fd/默认unix socket)的http Server,支持TLS,包含http路由规则”POST”:{“/images/create”: postImagesCreate} 初始化graphdriver、graphdb、 graph.TagStore、 execdriver、volumedriver、daemon

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

海量数据处理技术学习

海量数据处理的常用技术可分为: 外排序:因为海量数据无法全部装入内存,所以数据的大部分存入磁盘中,小部分在排序需要时存入内存。 MapReduce:分布式处理技术 hash技术:以Bloom filter技术为代表 外排序:主要适用于大数据的排序、去重。 分布式处理技术:MapReduce 技术思想是将数据交给不同的机器去处理,将数据切分,之后结果归约。 举例,统计出一批数据的TOP N 首先可以根据数据值或者数据HASH(MD5)后的值将数据按照范围划分,不同的服务器负责处理各种的数值范围,实际上就是map,得到结果后,各个服务器拿出各自的出现次数最多的前N个数据,然后汇总,选出所有的数据中出现次数最多的前N个数据,这实际上就是reduce的过程。 1、处理海量数据的常用技巧,比如分区操作。比如针对按年份或按月份存取的数据,将数据分散开,减少磁盘I/0,减少系统负荷,也可将日志、索引存放于不同的分区下。 2、提高硬件条件、增加CPU,加大磁盘空间等。 3、加大虚拟内存。 4、分批处理。 可以对海量数据分批处理,处理后的数据再进行合并操作,这样逐个击破,有利于下哦数据量的处理。 一般按日、月等存储的数据,都可以采用先分后合的方法,对数据分开处理。 5、使用临时表和中间表。 如果大表处理不了,只能拆分为多个小表,不要一个sql语句全部完成,卡死你。 6、部分文件可以使用文件格式进行处理。一般海量的网络日志都是文本格式或者CSV格式,对它进行处理牵扯到数据清洗,可以利用程序进行处理,无需导入数据库再做清洗。

资源下载

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

Sublime Text

Sublime Text

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

WebStorm

WebStorm

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

用户登录
用户注册