首页 文章 精选 留言 我的

精选列表

搜索[笔记工具],共10011篇文章
优秀的个人博客,低调大师

hive 使用技巧笔记

来源: http://michael-roshen.iteye.com/blog/2115268 例子: INSERT OVERWRITE TABLE prices_collected_${hiveconf:wid_version} select pc.collect_id as product_id , regexp_extract(pc.price,'(\\d*\\.?\\d+)',1) as price , pc.region, '' as location_area_code, '' as city_code, from_unixtime(unix_timestamp() , 'yyyy-MM-dd hh:mm:ss') as created_at, from_unixtime(unix_timestamp() , 'yyyy-MM-dd hh:mm:ss') as updated_at from products_compared_${hiveconf:wid_version} as pc 1.根据hive执行的参数来动态的设置表名称prices_collected_${hiveconf:wid_version} hive -hiveconf wid_version='4' 则可以通过${hiveconft:wid_version}来接收参数,生成prices_collected_4这张表 2. 使用正则表达式获取需要的信息,如:获取一段字符串中的数字 regexp_extract(pc.price,'(\\d*\\.?\\d+)',1) as price 注意hive中需要使用双斜杠来处理正则表达式 3. 获取系统时间 from_unixtime(unix_timestamp() , 'yyyy-MM-dd hh:mm:ss') as created_a 使用from_unixtime(unix_timestamp() , 'yyyy-MM-dd hh:mm:ss')获取系统时间,格式可以根据需要调整 4. 多个表进行join的时候,可能会报错 使用set hive.auto.convert.join=false;解决 5. 创建表 create table if not exists brands ( name string, created_at string, updated_at string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE; 以文本方式进行存储,"\\"进行转义,"\t"作为换行符 6.到处hive中的某个表中的数据到本地,执行hive命令如下: hive -hiveconf local_path=/home/hive/hive_data/products_24_1 -hiveconf hive_table=products_24_1 -hiveconf columnstr=' name , created_at, updated_at, "released" as status ' -f /home/hive/export_hive_table_to_local.sql 需要执行的参数依次是 1.导出到本地的位置local_path 2.导出hive中的哪个表hive_table 3. 导出products_24_1 表中的哪些字段 colunmstr 4. 根据上面的参数,在本地创建products_24_1 表,使用-f来指定调用的文件 /home/hive/export_hive_table_to_local.sql 文件内容如下: insert overwrite local directory '${hiveconf:local_path}' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE select ${hiveconf:columnstr} from ${hiveconf:hive_table}; 7.将本地文件导入到psql数据库中, hive对pg的支持不好,不能用sqoop来进行数据的导入,可以先将hive中的数据读到本地,在使用python脚本来进行文件的写入 Python代码 definsert_to_pg(conn,table_name,file_path,insert_columns=None): conn=psycopg2.connect(conn) cursor=conn.cursor() ifos.path.isfile(file_path): datafile=ReadFileProgress(file_path) cursor.copy_from(file=datafile,table=table_name,sep='\t',null='\\N',size=81920,columns=insert_columns) datafile.close() Python代码 #!/usr/bin/python ##_*_coding:utf-8_*_ importos,sys importpsycopg2 classReadFileProgress: def__init__(self,filename): self.datafile=open(filename) self.totalRecords=0 self.totalBytes=os.stat(filename).st_size self.readBytes=0 self.datafile.readline() i=0 fori,linenumerate(self.datafile): pass self.totalRecords=i+1 sys.stderr.write("Numberofrecords:%d\n"%(self.totalRecords)) self.datafile.seek(0) self.datafile.readline() self.perc5=self.totalBytes/20.0 self.perc5count=0 self.lastPerc5=0 sys.stderr.write("Writingrecords:0%") defcountBytes(self,size=0): self.readBytes+=size if(self.readBytes-self.lastPerc5>=self.perc5): self.lastPerc5=self.readBytes if(int(self.readBytes/self.perc5)==5): sys.stderr.write("25%") elif(int(self.readBytes/self.perc5)==10): sys.stderr.write("50%") elif(int(self.readBytes/self.perc5)==15): sys.stderr.write("75%") else: sys.stderr.write(".") sys.stderr.flush() defreadline(self,size=None): countBytes(size) returnself.datafile.readline(size) defread(self,size=None): self.countBytes(size) returnself.datafile.read(size) defclose(self): sys.stderr.write("100%\n") self.datafile.close() 8. 从pg上导出指定表 Python代码 defdo_export(conn,table_name,file_path,columns=None): conn=psycopg2.connect(conn) cursor=conn.cursor() cursor.copy_to(file=file(file_path,'w'),table=table_name,sep='\t',null='\\N',columns=columns) cursor.close() conn.commit() sys.stdout.write("Transactionfinishedsuccessfully.\n") 9. 则select语句中也可以通过hiveconf来传递参数,执行hive命令 hive -hiveconf name='hello hive' INSERT OVERWRITE TABLE companies select '${hiveconf:name}' as name from companies_old 本文转自 SimplePoint 51CTO博客,原文链接:http://blog.51cto.com/2226894115/1898261,如需转载请自行联系原作者

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

Android笔记:CoverFlow相关

====================效果一,修改getChildDrawingOrder方法================================= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 // 重载视图显示顺序让左到中间显示,再到右到中间显示 protected int getChildDrawingOrder( int childCount, int i) { // long t = getSelectedItemId(); // int h = getSelectedItemPosition(); // if (i < childCount / 2) // { // return i; // } // return childCount - i - 1 + childCount / 2; // Reset the last position variable everytime we are starting a new // drawing loop if (i == 0 ) lastPosition = 0 ; int centerPosition = getSelectedItemPosition() - getFirstVisiblePosition(); if (i == childCount - 1 ) { return centerPosition; } else if (i >= centerPosition) { lastPosition++; return childCount - lastPosition; } else { return i; } } 修改后效果: ==============================参考资料=========================================== 1.Gallery重叠效果 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=97392&reltid=186440&pre_pos=8&ext= 2.Modifying Coverflow to use xml file http://stackoverflow.com/questions/16078716/modifying-coverflow-to-use-xml-file 3.使用Android自带Gallery组件实现CoverFlow,源码+解析 http://www.eoeandroid.com/thread-39709-1-1.html 4.Android实现CoverFlow效果 http://blog.csdn.net/jxsmallmouse/article/details/7732341 5.CoverFlow http://www.inter-fuser.com/2010/01/android-coverflow-widget.html http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1290635,如需转载请自行联系原作者

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

Android笔记:音量、AudioManager

相关代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 private AudioManager audioManager; // 音量管理器 private int maxVolume; // 最大音量 private int currentVolume; // 当前音量 //监听音量控制进度条 private void listenVolumeSeekBar() { audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); //音量管理器 maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); // 获得最大音量 currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); // 获得当前音量 mVolumesetting_seekBar.setMax(maxVolume); mVolumesetting_seekBar.setProgress(currentVolume); mVolumesetting_seekBar.setOnSeekBarChangeListener( new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, AudioManager.FLAG_ALLOW_RINGER_MODES); } }); } 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1252250,如需转载请自行联系原作者

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

自学笔记:setTag、getTag

1.设置tag key的唯一性 官方的api文档:“The specified key should be an id declared in the resources of the application to ensure it is unique (see theID resource type). Keys identified as belonging to the Android framework or not associated with any package will cause anIllegalArgumentExceptionto be thrown.” 所以抛出IllegalArgumentException的原因就在于key不唯一,那么如何保证这种唯一性呢?定义一个final类型的int变量和硬编码一个值的方式都是行不通的。 如果只需要设置一个tag,那么直接调用setTag(Object tag)方法就可以轻松搞定,如果一定需要使用多个tag绑定,那么需要先在res/values/strings.xml中添加 <resources> <item type="id" name="tag_first"></item><item type="id" name="tag_second"></item> </resources> 使用的时候写成 imageView.setTag(R.id.tag_first,"Hello");imageView.setTag(R.id.tag_second,"Success"); 就可以了 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1215468,如需转载请自行联系原作者

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

Android菜单(个人笔记)

Android系统提供三种菜单: 1.选项菜单(Option Menu) 1.1图标菜单(Icon Menu) 通过菜单键直接打开的是图标菜单,顾名思义,图标菜单就是能够同时显示文字和图标的菜单,最多支持6个子项,如果子项多于6个,则需要扩展菜单显示其它的子项。。哇哈哈 1.2扩展菜单(Expanded Menu) 扩展菜单是垂直的列表型菜单,仅在图标菜单子项多于6个时才出现,通过点击图标菜单最后的子项More才能打开。扩展菜单不能显示图标,但支持单选框和复选框;相反,图标菜单支持显示图标,但不支持单选框和复选框。 2.子菜单(Submenu) 子菜单是能够显示更加详细信息的菜单子项,Android采用了浮动窗体的形式显示菜单子项。吼吼。。 子期间不支持嵌套,也就是说不能够在子菜单中再使用子菜单。 3.快捷菜单(Context Menu) 为了能够在Android应用程序中使用选项菜单,必须重载Activity的onCreateOptionsMenu()函数,该函数在用户首次使用选项菜单时被调用,一般用来初始化菜单子项的相关内容,包括设置菜单子项自身的子项ID和组ID,菜单子项显示的文字和图片等信息。 如果希望打开菜单时,能够动态的添加、删除菜单子项,或修改菜单的标题、图标和可见性等内容,则需要重载onPrepareOptionsMenu()函数,onPrepareOptionsMenu()函数的返回值的含义与onCreateOptionsMenu()函数相同,返回true则显示菜单,否则不显示 本文转自华华世界 51CTO博客,原文链接:http://blog.51cto.com/mzh3344258/733342,如需转载请自行联系原作者

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

windows auzre 笔记-1

云计算方案特点: 1-按需获取自助式服务 2-广泛的网络访问 3-资源池 4-快速伸缩 5-可度量的服务 云服务类型: SAAS:一套完整的软件解决方案,比如说office 365 PAAS:一种托管自定义解决方案的服务平台 IAAS:一种在完全控制状态下运行虚拟服务器的方法 (提供了基础架构) 私有云(供应商提供): data access --------- 软件服务-----以下由云供应商提供 application ---------平台服务----以下由云供应商提供 runtime opertaion system vitrual machine ----- 基础架构服务---以下由云供应商提供 compute networking sotrage Micorsoft azure分类: 1-计算 :虚拟机,PAAS云服务,网站服务,移动服务 2-数据服务:存储,SQL ,备份,站点恢复 3-网络服务:虚拟网络,流量管理,express route 4-APP服务:媒体服务,活动目录,自动化,service bus,CDN Azure数据中心: 分布在全球(在中国由世纪互联代理) 由微软管理 模块化架构-高速,强冗余和地理复制 电源管理 azure fabric管理 Azure服务: 1-计算和网络 2-web 3-数据分析 4-存储和备份 5-媒体和CDN 6-混合集成 7-身份和访问管理 分组和归置服务 1-资源组,将服务器逻辑分组,在中国是没有资源组的 2-区域---将服务器归置到一个数据中心 3-地缘组----将服务器归置到数据中心中物理位置接近的服务器上 Azure门户http://manage.windowsazure.cn(CN Local)http://manage.windowsazure.com(internaltional) http://account.windowsazure.cn/subscriptions(auzre订阅) 在订阅界面中可以查看编辑订阅信息 流量统计,计费信息,编辑个人资料等 Azure powershell模块:\可以完成很多GUI完成不了的事情 mincorsoft web platform installerhttp://azure.microsoft.com/downloads Azure AD powershell模块\提供更多管理AD命令 需要microsoft在线服务登入助手http://aka.ms/aadposh 本文转自 bilinyee博客,原文链接: http://blog.51cto.com/ericfu/2047630 如需转载请自行联系原作者

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

Android开源:SlidingMenu笔记

SlidingMenu简介: SlidingMenu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面,能方便的进行各种操作.目前有大量的应用都在使用这一效果。如Evernote、Google+、Foursquare等,国内的豌豆夹,人人,360手机助手等都使用SlidingMenu的界面方案。 项目下载地址:https://github.com/jfeinstein10/SlidingMenu注意: SlidingMenu依赖于另一个开源项目ActionBarSherlock,所以需要将ActionBarSherlock添加作为SlidingMenu的库工程,否则会报资源找不到错误。然后再将SlidingMenu添加到自己的工程中去。 SlidingMenu集成常见错误: Jar mismatch! Fix your dependencies:引用的工程和自身工程以来的jar包版本不一致导致的冲突。确保SlidingMenu和ActionBarSherLock所使用的jar包版本一致 如果使用到ActionBarSherLock的相关api,可能报找不到getSupportActionBar等ActionBarSherLock的方法。原因是使用ActionBarSherLock的Activity需继承于SherlockActivity,修改SlidingMenu library中的SlidingFragmentActivity,让它继承于SherlockFragmentActivity,重新编译library导入。SlidingMenu 常用属性介绍: menu.setMode(SlidingMenu.LEFT);//设置左滑菜单 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可以滑动 menu.setShadowDrawable(R.drawable.shadow);//设置阴影图片 menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度 menu.setBehindWidth(400);//设置SlidingMenu菜单的宽度 menu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度 menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上 menu.setMenu(R.layout.menu_layout);//设置menu的布局文件 menu.toggle();//动态判断自动关闭或开启SlidingMenu menu.showMenu();//显示SlidingMenu menu.showContent();//显示内容 menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开 关于关闭menu有两个监听,简单的来说,对于menu close事件,一个是when,一个是after menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭时事件 menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭后事件 左右都可以划出SlidingMenu菜单只需要设置 menu.setMode(SlidingMenu.LEFT_RIGHT);属性,然后设置右侧菜单的布局文件 menu.setSecondaryShadowDrawable(R.drawable.shadowright);//右侧菜单的阴影图片 使用Fragment实现SlidingMenu: 1.首先Activity继承自SlidingMenu包下的SlidingFragmentActivity 2. setContentView(R.layout.content_frame);//该layout为一个全屏的FrameLayout 3. setBehindContentView(R.layout.menu_frame);//设置SlidingMenu使用的布局,同样是一个全屏的FrameLayout 4.设置SlidingMenu左侧菜单的Fragment 1 2 3 4 5 setBehindContentView(R.layout.menu_frame); FragmentTransactiont= this .getSupportFragmentManager().beginTransaction(); leftMenuFragment= new MenuFragment(); t.replace(R.id.menu_frame,leftMenuFragment); t.commit(); MenuFragment其实就是一个Fragment,显示一个ListView然后点击ListView的每一项的时候,通知Activity切换不同的Fragment为了看清效果,我们新建5个Frament,分别是Fragment1, Fragment2, Fragment3, Fragment4, Fragment5在SlidingMenu中用ListView显示。设置主页面显示的Fragment: 1 2 3 4 5 6 7 8 9 10 11 if (savedInstanceState== null ){ //==null的时候新建Fragment1 contentFragment= new Fragment1(); } else { //不等于null,直接get出来 //不等于null,找出之前保存的当前Activity显示的Fragment contentFragment=getSupportFragmentManager().getFragment(savedInstanceState, "contentFragment" ); } //设置内容Fragment getSupportFragmentManager() .beginTransaction() .replace(R.id.content_frame,contentFragment) .commit(); 在Activity的onSaveInstanceState中保存当前显示的FragmentgetSupportFragmentManager().putFragment(outState, "contentFragment", contentFragment);设置SlidingMenu属性sm = getSlidingMenu();//如果只显示左侧菜单就是用LEFT,右侧就RIGHT,左右都支持就LEFT_RIGHTsm.setMode(SlidingMenu.LEFT_RIGHT);//设置菜单滑动模式,菜单是出现在左侧还是右侧,还是左右两侧都有sm.setShadowDrawable(R.drawable.shadow);//设置阴影的图片资源sm.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度//sm.setBehindWidth(200);//设置菜单的宽sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的区域 支持右侧划出菜单: //SlidingMenu可以同时支持划出左右两侧的菜单,互不冲突,而且动画优美,体验良好。 sm.setSecondaryMenu(R.layout.menu_frame2);//设置右侧菜单 sm.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源 //右侧SlidingMenu的Fragment getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame2, new SampleListFragment()).commit(); 设置ActionBar可以被点击: getSupportActionBar().setHomeButtonEnabled(true);//actionbar主按键可以被点击 getSupportActionBar().setDisplayHomeAsUpEnabled(true);//显示向左的图标 setSlidingActionBarEnabled(false);//左右两侧slidingmenu的fragment是否显示标题栏 切换主页面显示的Fragment: public void switchContent(Fragment f) { //给内容Fragment赋值,并在onSaveInstanceState时保存这个Fragment contentFragment = f; FragmentTransaction t = getSupportFragmentManager().beginTransaction(); t.replace(R.id.content_frame, f); t.commit(); sm.showContent(); 使用普通Activity实现SlidingMenu: 1 2 3 4 5 6 7 8 9 10 11 slidingMenumenu= new SlidingMenu( this ); //直接new,而不是getSlidingMenu menu.setMode(SlidingMenu.LEFT); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowDrawable(R.drawable.shadow); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); menu.setBehindWidth( 400 ); //设置SlidingMenu菜单的宽度 menu.setFadeDegree( 0 .35f); menu.attachToActivity( this ,SlidingMenu.SLIDING_CONTENT); //必须调用 menu.setMenu(R.layout.menu_layout_left); //就是普通的layout布局 menu.setBehindCanvasTransformer(mTransformer); 相应SlidingMenu里的点击事件,因为SlidingMenu已经被包含在了Activity中了,所以直接findViewById(id),拿到view之后就可以进行相应的处理。 支持左右两侧都能划出菜单 menu.setSecondaryMenu(R.layout.menu_layout_right); menu.setSecondaryShadowDrawable(R.drawable.shadowright); 右侧菜单一样直接findViewById(id),拿到view之后就可以任意处理了 更换SlidingMenu的动画 SlidingMenu支持左滑或者右滑时定义不同的动画,包括拉伸,缩放,旋转等动画。就是在滑动的过程中,SlidingMenu如何出现的动画。 动画使用也很简单 首先定义CanvasTransformer mTransformer;变量: 1 2 3 4 5 6 7 mTransformer= new CanvasTransformer(){ @Override public void transformCanvas(Canvascanvas, float percentOpen){ float scale=( float )(percentOpen* 0.25 + 0.75 ); canvas.scale(scale,scale,canvas.getWidth()/ 2 ,canvas.getHeight()/ 2 ); } }; 然后将mTransformer对象设置给SlidingMenu即可,这个是缩放动画: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 private void initSlidUpCanvasTransformer(){ mTransformer= new CanvasTransformer(){ @Override public void transformCanvas(Canvascanvas, float percentOpen){ canvas.translate( 0 ,canvas.getHeight()*( 1 -interp.getInterpolation(percentOpen))); } }; } private static Interpolatorinterp= new Interpolator(){ @Override public float getInterpolation( float t){ t-= 1 .0f; return t*t*t+ 1 .0f; } }; 拉伸动画: 1 2 3 4 5 6 mTransformer= new CanvasTransformer(){ @Override public void transformCanvas(Canvascanvas, float percentOpen){ canvas.scale(percentOpen, 1 , 0 , 0 ); } }); 参考资料: 1.Android开源项目SlidingMenu深入剖析 http://blog.csdn.net/t12x3456/article/details/12798157 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1542072,如需转载请自行联系原作者

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

Android笔记:Wake Lock

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 import android.app.Service; import android.content.Context; import android.os.PowerManager; /** *WakeLock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠, *可以被用户态程序和内核获得.这个锁可以是有超时的或者是没有超时的, *超时的锁会在时间过去以后自动解锁.如果没有锁了或者超时了,内核就 *会启动休眠的那套机制来进入休眠. * *一、关于intflags各种锁的类型对CPU、屏幕、键盘的影响: *1.PARTIAL_WAKE_LOCK:保持CPU运转,屏幕和键盘灯有可能是关闭的。 *2.SCREEN_DIM_WAKE_LOCK:保持CPU运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯 *3.SCREEN_BRIGHT_WAKE_LOCK:保持CPU运转,允许保持屏幕高亮显示,允许关闭键盘灯 *4.FULL_WAKE_LOCK:保持CPU运转,保持屏幕高亮显示,键盘灯也保持亮度 *5.ACQUIRE_CAUSES_WAKEUP:Normalwakelocksdon't *actuallyturnontheillumination.Instead,theycausetheilluminationto *remainononceitturnson(e.g.fromuseractivity).Thisflagwillforce *thescreenand/orkeyboardtoturnonimmediately,whentheWakeLockis *acquired.Atypicalusewouldbefornotificationswhichareimportantfor *theusertoseeimmediately. *6.ON_AFTER_RELEASE:fthisflagisset,theuser *activitytimerwillberesetwhentheWakeLockisreleased,causingthe *illuminationtoremainonabitlonger.Thiscanbeusedtoreduceflickerif *youarecyclingbetweenwakelockconditions. * *你能加两个以上的标志,这些仅能影响屏幕的行为。这些标志当组合中有一个PARTIAL_WAKE_LOCK时将没有效果。 * *二、权限获取要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限。 *<uses-permissionandroid:name="android.permission.WAKE_LOCK"/> *你可能还需要 *<uses-permissionandroid:name="android.permission.DEVICE_POWER"/> * *三、WakeLock的设置是Activiy级别的,不是针对整个Application应用的。 * **/ abstract class WakeLockService extends Service { private android.os.PowerManager.WakeLockmWakeLock; WakeLockService() { } /** *获取锁,保持屏幕亮度。Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现。 *一般使用:这个函数在Activity的onResume中被调用。releaseWakeLock()方法则是释放该锁,在Activity的onPause中被调用。 */ protected void acquireWakeLock() { if (mWakeLock== null ) { //通过PowerManager的newWakeLock((intflags,Stringtag)方法来生成WakeLock实例。 //intFlags指示要获取哪种WakeLock,不同的Lock对cpu、屏幕、键盘灯有不同影响。 PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE); mWakeLock=pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,getClass().getCanonicalName()); mWakeLock.setReferenceCounted( false ); mWakeLock.acquire(); } } protected void acquireWakeLock( long timeout) { if (mWakeLock== null ) { PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE); mWakeLock=pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,getClass().getCanonicalName()); mWakeLock.setReferenceCounted( false ); mWakeLock.acquire(timeout); } } /** *释放锁,显示的释放,如果申请的锁不释放系统就不会进入休眠。 */ protected void releaseWakeLock() { if (mWakeLock== null ||!mWakeLock.isHeld()) { mWakeLock.release(); mWakeLock= null ; } } } 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1610983,如需转载请自行联系原作者

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

android151 笔记

13. 14 .什么是Service以及描述下它的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service? 在Service的生命周期中,被回调的方法比Activity少一些,只有onCreate, onStart, onDestroy, onBind和onUnbind。 通常有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。 在Service的生命周期中,被回调的方法比Activity少一些,只有onCreate, onStart, onDestroy, onBind和onUnbind。 通常有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。 1 通过startService Service会经历 onCreate 到onStart,然后处于运行状态,stopService的时候调用onDestroy方法。 如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。 2 通过bindService Service会运行onCreate,然后是调用onBind, 这个时候调用者和Service绑定在一起。调用者退出了,Srevice就会调用onUnbind-> onDestroyed方法。 所谓绑定在一起就共存亡了。调用者也可以通过调用unbindService方法来停止服务,这时候Srevice就会调用onUnbind-> onDestroyed方法。 需要注意的是如果这几个方法交织在一起的话,会出现什么情况呢? 一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。 如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。 如果service运行期间调用了bindService,这时候再调用stopService的话,service是不会调用onDestroy方法的,service就stop不掉了,只能调用UnbindService, service就会被销毁 如果一个service通过startService 被start之后,多次调用startService 的话,service会多次调用onStart方法。多次调用stopService的话,service只会调用一次onDestroyed方法。 如果一个service通过bindService被start之后,多次调用bindService的话,service只会调用一次onBind方法。 多次调用unbindService的话会抛出异常。 15 . 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放? 这个问题问的很山寨.默认不做任何处理,B里面的音乐都能播放. 遇到问题, 可以随机应变,灵活发挥,多考虑些细节,比如说这个题就可以这样说,说说你对startActivityForResult的理解() A开启B的时候,用startActivityForResult()方法, B返回的时候销毁了并且把播放的状态信息返回给A ,A继续播放音乐. 16 . 什么是IntentService?有何优点? 普通的service ,默认运行在ui main 主线程 Sdk给我们提供的方便的,带有异步处理的service类IntentService,里面的 OnHandleIntent()方法可以处理耗时的操作,OnHandleIntent()方法运行在子线城中。 17 .什么时候使用Service?Service是长期运行的,比如QQ就会有一个长期运行的Service来接受服务器的消息。他要一直运行让应用去调用或者保持保持与服务端的连接。Aidl也要经常用到Service,因为他要长期让第三方去调用。用Service经常要去绑定才能与他通信。 startForeground(id, notification) Messager.activity与service之间也可以通过消息进行交互。消息可以跨进程,不用使用aidl了。 拥有service的进程具有较高的优先级 官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。 1 . 如果service正在调用onCreate, onStartCommand或者onDestory方法,那么用于当前service的进程相当于前台进程以避免被killed。 2 . 如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed. 3 . 如果客户端已经连接到service (bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。 4. 如果service可以使用startForeground( int , Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。(流氓软件可以起2个service,当一个service被杀死了另一个service可以把这个service启动,这样这个service就永远不会杀死。) 如果有其他的应用组件作为Service,Activity等运行在相同的进程中,那么将会增加该进程的重要性。 1 .Service的特点可以让他在后台一直运行,可以在service里面创建线程去完成耗时的操作. 2 .Broadcast receiver捕获到一个事件之后,可以起一个service来完成一个耗时的操作. 3 .远程的service如果被启动起来,可以被多次bind, 但不会重新create. 索爱手机X10i的人脸识别的service可以被图库使用,可以被摄像机,照相机等程序使用. 18 . 请描述一下Intent 和 Intent Filter。 Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,消息“目的地”是必须的,而内容则是可选项。 通过Intent 可以实现各种系统组件的调用与激活. Intent filter: 可以理解为邮局或者是一个信笺的分拣系统… 这个分拣系统通过3个参数来识别 Action: 动作 view Data: 数据uri uri Category : 而外的附加信息 Action 匹配 Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 <intent-filter > 节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如: <intent-filter > <action android:name="android.intent.action.MAIN" /> <action android:name="cn.itcast.action" /> …… </intent-filter> 如果我们在启动一个 Activity 时使用这样的 Intent 对象: Intent intent = new Intent(); intent.setAction("cn.itcast.action" ); 那么所有的 Action 列表中包含了“cn.itcast”的 Activity 都将会匹配成功。 Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在 android.content. Intent中,以“ACTION_”开头。我们可以在 Android 提供的文档中找到它们的详细说明。 URI 数据匹配 一个 Intent 可以通过 URI 携带外部数据给目标组件。在 <intent-filter >节点中,通过 <data/> 节点匹配外部数据。 mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下: <data android:mimeType="mimeType" android:scheme="scheme" android:host="host" android:port="port" android:path="path"/> 电话的uri tel: 12345 http: // www.baidu.com 自己定义的uri itcast: // cn.itcast/person/10 如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时 URI 数据匹配才会成功。 Category 类别匹配 <intent-filter > 节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。 默认是DEFAULT 19 . Intent传递数据时,可以传递哪些类型数据? 1 .一般的基本数据类型 Intent .putextra() intent.getextra(); 2 .数据的uri, intent.setData() intent.getData(); 20 . 说说Activity,Intent,Service是什么关系 。 麦当劳和麦当娜的关系是什么关系? 这种问题,就讲下activity,讲一下service,说一下 通过intent去激活组件,传递数据. 说自己项目中有这样一个网络更新的功能,显示界面就用的activity, 后台有个service每隔半小时都去访问下服务器获取更新的数据… 开启服务用的是intent来开启 21 . 请描述一下Broadcast Receiver。 有很多广播接收者 ,系统已经实现了很多广播(开机广播,打电话广播,收短信广播)也可以自定义广播. 广播分两种 有序广播 无序广播,大家一起收到。 指定接收者的广播 . 是不可以被拦截掉的 <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> abortBroadcast(); 用于接收系统的广播通知, 系统会有很多sd卡挂载,手机重启,广播通知,低电量,来电,来短信等…. 手机卫士中自定义一个broadcast receiver <intent-filter android:> <action> sms_received </action> </intent-filter> 来获取短信到来的广播, 根据黑名单来判断是否拦截该短信. 画画板生成图片后,当从网上下载一个图片后要显示在默认的图库中的时候要发送一个sd挂载的通知,通知系统的gallery去获取到新的图片. Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+ Environment.getExternalStorageDirectory())); sendBroadcast(intent); 22 . 在manifest和代码中如何注册和使 用 broadcast receiver 。 设置广播接收者的优先级,设置广播接受者的action名字 等… 详细见工程代码. <intent-filter android:priority="1000"> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver> <receiver android:name=".SmsReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> <receiver android:name=".BootCompleteReceiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 23 . 请介绍下ContentProvider是如何实现数据共享的。 把自己的数据通过uri的形式共享出去,所以不会看到数据库表的字段结构,就会保证数据表的隐私性。 android 系统下 不同程序 数据默认是不能共享访问 需要去实现一个类去继承ContentProvider public class PersonContentProvider extends ContentProvider{ public boolean onCreate(){ // .. } query(Uri, String[], String, String[], String) insert(Uri, ContentValues) update(Uri, ContentValues, String, String[]) delete(Uri, String, String[]) } 24 . 请介绍下Android的数据存储方式。 文件: 访问权限. sdcard <data>/<data> 数据库:也是文件,.db文件, sqlite SharedPreference: <data>/<data>/ shared_preps 网络: socket tcp udp , http httpurlconnection 25 . 为什么要用ContentProvider?它和sql的实现上有什么差别? 屏蔽数据存储的细节,对用户透明,用户只需要关心操作数据的uri就可以了 不同app之间共享,操作数据 Sql也有增删改查的方法. 但是contentprovider 还可以去增删改查本地文件. xml文件的读取,更改, 网络数据读取更改 26 . 请介绍下Android中常用的五种布局。 FrameLayout(帧布局,做游戏做视频,一层层的盖住。底下是视频上面盖上一些快进暂停按钮),LinearLayout (线性布局,控件的层级比较多,绘制的时候耗时),AbsoluteLayout(绝对布局,不用做屏幕适配的时候,),RelativeLayout(相对布局,上下左右,控件之间的层级比较少,绘制的时间短),TableLayout(表格布局) FrameLayout 从屏幕的左上角开始布局,叠加显示, 实际应用 播放器的暂停按钮. LinearLayout 线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局 (android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。 AbsoluteLayout 绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x="20px" android:layout_y="12px" qq斗地主 qq游戏大厅 800*480 800*480.apk fwvga 854*480 指定平板机型的游戏开发中经常用到绝对布局 widget 绝对布局 指定机型的平板游戏开发机顶盒开发。. 2.3 3.0 1 .界面布局 任务管理器 gridview 2 .手机 任务管理 listview lephone lepad RelativeLayout 相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有: 相对于某一个元素 android:layout_below="@id/aaa" 该元素在 id为aaa的下面 android:layout_toLeftOf="@id/bbb" 改元素的左边是bbb 相对于父元素的地方 android:layout_alignParentLeft="true" 在父元素左对齐 android:layout_alignParentRight="true" 在父元素右对齐 TableLayout <table> 表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式 android:gravity="" 。 每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。 oa 自动化 生成报表 ,图标 表示 css div webview 27. 通过eclips的File Exlporer可以看见在data/system/packages.xml这个xml就是安卓应用的注册表,action和service都在里面,每次启动action的时候都会去这个里面找。 本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5164978.html,如需转载请自行联系原作者

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

android150 笔记

1. 什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity,界面的容器。 setContentView() , 四大组件之一,一般的,一个用户交互界面对应一个activity,界面的容器。 setContentView() , // 要显示的布局 button.setOnclickLinstener{ } , activity 是Context的子类,同时实现了window.callback这个接口可以分发事件那么activity就可以处理事件和keyevent.callback这个接口就可以处理按键的事件, 可以处理与窗体用户交互的事件. Service也是Context的子类,没有实现window.callback和keyevent.callback接口就不能与用户交互。 我开发常用的的有FragmentActivitiy,ListActivity , PreferenceActivity ,TabAcitivty等… 如果界面有共同的特点或者功能的时候,还会自己定义一个BaseActivity. 进度对话框的显示与销毁 2 . 请描述一下Activity 生命周期。 生命周期描述的是一个类 从创建(new出来)到死亡(垃圾回收)的过程中会执行的方法..自己不能new因为自己new的自己不会启动。 在这个过程中 会针对不同的生命阶段会调用不同的方法 Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括:oncreate ondestroy, onstop onstart ,onresume onpause 其实这些方法都是两两对应的,onCreate创建与onDestroy销毁; onStart可见与onStop不可见;onResume可编辑(即焦点)与onPause; 这6个方法是相对应的,那么就只剩下一个onRestart方法了,这个方法在什么时候调用呢? 答案就是:在Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用onCreate)方法; 如果被onDestroy了,则是调用onCreate方法。 最后讲自己项目中的经验,比如说手机卫士每次进入某个界面的时候都要看到最新的数据,这个刷新列表的操作 就放在onStart()的方法里面.这样保证每次用户看到的数据都是最新的. 多媒体播放, 播放来电话. onStop() 视频, 视频声音设置为0 , 记录视频播放的位置 mediaplayer.pause(); onStart() 根据保存的状态恢复现场. mediaplayer.start(); 在读文档的时候 还发现 activity还有两个方法 onPostResume() 和 OnPostCreate()这两个生命周期的方法,不过开发的时候没有用到过. 3 . 两个Activity之间跳转时必然会执行的是哪几个方法。 一般情况比如说有两个activity,分别叫A,B ,当在A里面激活B组件的时候, A 会调用 onPause()方法,然后B 调用onCreate() ,onStart(), OnResume() , 这个时候B覆盖了窗体, A会调用onStop()方法. 如果B呢 是个透明的,或者是对话框的样式, 就不会调用A的onStop()方法 4 . 横竖屏切换时候Activity的生命周期。 这个生命周期跟清单文件里的配置有关系 1 、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期 默认首先销毁当前activity,然后重新加载所有数据,加载网络数据。 2、设置Activity的android:configChanges="orientation|keyboardHidden|screenSize" 时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法,不会自己把自己杀死再重新创建, 游戏开发中, 屏幕的朝向都是写死的. 5 . 如何将一个Activity设置成窗口的样式。 可以自定义一个activity的样式 android:theme="@android:style/Theme.Dialog" ,也可以定义一个透明的Activity然后在上面定义一个dialog. 6 . 你后台的Activity被系统 回收怎么办?如果后台的Activity由于某原因被系统回收可了,如何在被系统回收之前保存当前状态? 除了在栈顶的activity,其他的activity都有可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的可能性越大. protected void onSaveInstanceState(Bundle outState) { // outState保存在内存的某个地方,所以可以恢复。Word就是隔一段时间保存一下。 super .onSaveInstanceState(outState); outState.putLong("id", 1234567890 ); } public void onCreate(Bundle savedInstanceState) { // 判断 savedInstanceState是不是空. // 如果不为空就取出来 super .onCreate(savedInstanceState); } 7 .如何退出Activity?如何安全退出已调用多个Activity的Application? Activity是基于栈的,一个应用打开多个Activity都会存放在栈中,退出的时候要从栈中从顶到底一个个的销毁所有的Activity。一般软件都是连续按2次返回键就退出了。 退出activity 直接调用 finish () 方法 . // 用户点击back键 就是退出一个activity 退出activity 会执行 onDestroy()方法 . 1 、抛异常强制退出: 该方法通过抛异常,使程序Force Close。 验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。 100/0 // 安全结束进程 android.os.Process.killProcess(android.os.Process.myPid()); 2 、记录打开的Activity: 每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。 List<Activity> lists ; 在public class MyApplication extend application{} 全集的环境里面 lists = new ArrayList<Activity> (); lists.add( this ); for (Activity activity: lists) { activity.finish(); } ondestory lists.remove( this ); 3 、发送特定广播: 在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。 // 给某个activity 注册接受接受广播的意图 registerReceiver(receiver, filter) // 如果过接受到的是 关闭activity的广播 就调用finish()方法 把当前的activity finish()掉 4 、递归退出 在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。 上面是网上的一些做法. 其实 可以通过 intent的flag 来实现.. intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一个新的activity,然后在新的activity的oncreate方法里面 finish掉所有的Activity。. 讲一讲你对activity的理解 把上面的几点用自己的心得写出来 8. service是否在main thread中执行, service里面是否能执行耗时的操作? 默认情况,如果没有显示的指定service所运行的进程, Service和activity是运行在当前app所在进程的main thread(UI主线程)里面 ,Service运行在主线程所以主线程不能执行耗时操作,Service耗时操作时间是20秒Activity是5秒brodcast是10秒。 service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件 ) 在子线程中执行 new Thread(){}.start(); Thread.currentThread().getName(); 特殊情况 ,可以在清单文件配置 service 执行所在的进程 ,让service在另外的进程中执行 9 . 两个Activity之间怎么传递数据? 基本数据类型可以通过. Intent 传递数据 extras.putDouble(key, value) intent.putExtra(name, value) // 通过intent putExtra 方法 基本数据类型 都传递 intent.getStringExtra("key","value" ); intent.getBooleanExtra("key","value" ) Bundle bundle = new Bundle(); bumdle.putShort(key, value); intent.putExtras(bumdle); intent.putExtras(bundle) 除了基本数据类型还可以传递实现了Serializable 接口的对象,原理是让对象实现 implements Serializable 接口然后把对象存放到文件上来传递. 让类实现Serializable 接口,然后可以通过 ObjectOutputStream // 对象输出流 传递过去。 File file = new File("c:\1.obj" ); FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); Student stu = new Student(); oos.writeObject(stu); // 从文件中把对象读出来 ObjectInputStream ois = new ObjectInputStream(arg0); Student stu1 = (Student) ois.readObject(); 还可以传递实现了Parcelable接口的对象,他的原理是通过内存来传递,Bitmap传递图片的时候就是这么传递的, 文件/ 网络 intent.setData(Uri) Uri.fromFile(); // 大图片的传递不能通过bitmap传递,只能通过图片的uri传递然后他们自己去加载图片。 10 . 怎么让在启动一个Activity是就启动一个service? 在activity的onCreate()方法里面 startService();service没有栈,创建Activity要创建栈。 11 .同一个程序,但不同的Activity是否可以放在不同的Task任务栈中? Singleinstance 运行在另外的单独的任务栈里面 比方说在激活一个新的activity时候, 给intent设置flag Intent的flag添加FLAG_ACTIVITY_NEW_TASK 这个被激活的activity就会在新的task栈里面… Intent intent = new Intent(A. this,B. class ); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 12 . Activity怎么和service绑定,怎么在activity中启动自己对应的service? startService() 一旦被创建 与调用着无关 没法使用service里面的方法,调用Service的oncreat()和onStart()方法, bindService () 把service 与调用者绑定 ,如果调用者被销毁, service会销毁,调用service的onCraet()onBind()方法不会走onStart()方法。 startService()和bindService ()同时调用会调用oncreat(),onStart(),onBind().销毁service的时候会调用StopService()和Unbind()方法。 bindService() 我们可以使用service 里面的方法 bindService(). 让activity能够访问到 service里面的方法 构建一个intent对象, Intent service = new Intent( this,MyService. class ); 通过bindService的方法去启动一个服务, bindService(intent, new MyConn(), BIND_AUTO_CREATE); ServiceConnection 对象(重写onServiceConnected和OnServiceDisconnected方法) 和BIND_AUTO_CREATE. private class myconn implements ServiceConnection { public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub // 可以通过IBinder的对象 去使用service里面的方法 } public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub } } 本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5164594.html,如需转载请自行联系原作者

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

SWIFT学习笔记01

1、Swift。用来推断option是不是nil,相当于OC的 if(option) if let name = option{ greeting = “if=====“ }else{ greeting = "else===" } 2、执行switch中匹配到的子句之后。程序会退出switch语句,并不会继续向下执行,所以不须要在每一个子句结尾写break。 3、//使用..创建的范围不包括上界,假设想包括的话须要使用...,集合上,就是[)与[]的关系 for i in 0..3{ println("i===\(i)")//仅仅经历0,1,2三次循环 } 4、//传入数组參数 func sumOf(numbers:Int...) -> Int{ var sum = 0 for number in numbers{ sum += number } return sum } 5、//函数嵌套,函数里面定义并使用函数 func returnFifteen() -> Int{ var y = 10 func add(){ y+=5 } add() return y } 6、处理变量的可选值时。你能够在操作(比方方法、属性和子脚本)之前加? 。假设?之前的值是nil,? 后面的东西都会被忽略。而且整个表达式返回nil。否则,?之后的东西都会被执行。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5180947.html,如需转载请自行联系原作者

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

学习笔记 十六 : Docker

一 docker简介 docker是一个轻量级的,运行在用户内核的一组进程,与主机系统想隔离。它有自己的进程,文件系统和其它资源,它可以和其它主机共享物理主机内核。 二 安装配置 yum install docker systemctl start docker systemctl enable docker docker pull registry.access.redhat.com/redhat/rhel7 docker load -i rhel-server-docker-7.0.tar.gz docker images docker run -i -t --rm rhel7 cat /etc/hosts docker ps -a docker start -ai silly_fermi3 2.创建docker镜像 docker run -i rhel7 bash -c "yum install -y httpd;" docker ps -l docker commit -m "RHEL7+httpd" dreamy_goodall1 rhel_httpd docker images docker run -p 8080:80 -d rhel_httpd /usr/sbin/httpd -DFOREGROUND yum install docker-registry systemctl start docker-registry systemctl enable docker-registry firewall-cmd --add-port=5000/tcp firewall-cmd --add-port=5000/tcp --permanent docker tag rhel_httpd registry.example.com:5000/usr/httpd docker push registry.example.com:5000/user/httpd 三 案例 3.1 docker 私有仓库搭建 3.2 docker 发布一个web应用 3.3 docker 发布一个mysql服务 3.4 docker高可用 本文转自 woshiwei201 51CTO博客,原文链接:http://blog.51cto.com/chenwei/1841979

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

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

用户登录
用户注册