首页 文章 精选 留言 我的

精选列表

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

还能手动改细节(附论文、代码)

输入一张语义地图—— 就能为你还原整个世界: 输入一张亲妈都认不出来的语义标注图—— 为你合成一张真实的人脸。 聪明的你可能已经发现,这个名为pix2pixHD的神奇算法,可以用条件生成式对抗网络(conditionalGAN),将一张语义标注的图像还原成现实世界的样子。pix2pixHD合成的图像分辨率可高达2048x1024,和CRN、pix2pix等其他图像合成工具相比可以发现,pix2pixHD的效果显然领先了好几条街! △pix2pixHD与pix2pix、CRN对比图 有趣的是,连李飞飞高徒、现特斯拉人工智能与自动驾驶视觉部门主管Andrej Karpathy也在Twitter上大呼“非常鹅妹子嘤!” 到底是怎么一回事?上车,我们前去看看论文。 效果惊人 有一个官方演示视频—— pix2pixHD具有通过语义标注的图像还原到现实世界的

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

iOS-《编写高质量代码》笔记 第三章-内存管理

建议17:理解内存和Objective-C内存管理规则 OC 内存管理模式基于对象的“所有权”上。任何对象都会被一个或多个使用者引用,只要对象还有一个使用者,该对象就应该继续存在。如果一个对象没有使用者了,系统将自动销毁它。 建议18:内存管理讲究“好借好还,再借不难” 在返回一个新创建的(拥有的)对象时,应该使用autorelease而不是release来释放所有权。 建议19:区别开alloc 、init、retain、release、和dealloc 之间的差异 OC 中没有new和delete 两个关键字,new可以作为一个函数,也就是alloc + init 。 alloc分配过程不仅进行对象的内存分配,而且还初始化对象的两个非常重要属性,即它的isa实例变量和保持数(引用计数) 。它还将所有的剩下的实例变量设置为0。但是分配完成的对象还是不可用,还需要调用像init这样的初始化方法来进行对象自有的初始化,才能返回一个可用的对象。 建议20:优先使用存取方法来简化内存管理 使用存取方法(getter ,setter)管理内存,可大大降低管理方面出现的问题。 建议21:对象销毁或者移除一定考虑所有权的释放 从集合中移除对象,集合要释放对被移除对象的所有权。(自动释放) 建议22:明智而审慎地使用dealloc dealloc 的角色就是释放对象占用的内存并处理自己所拥有的资源,包括本身变量的释放。 不要尝试用dealloc管理系统资源。应用程序终止时,对象的dealloc可能不会被调用。因为进程的内存是自动清除退出,让操作系统清理资源比调用所有的内存管理方法更有效率。

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

Android应用程序组件Content Provider的启动过程源代码分析(2)

Step 5.ActivityThread.getProvider 这个函数定义在frameworks/base/core/java/android/app/ActivityThread.java文件中: publicfinalclassActivityThread{ ...... privatefinalIContentProvidergetExistingProvider(Contextcontext,Stringname){ synchronized(mProviderMap){ finalProviderClientRecordpr=mProviderMap.get(name); if(pr!=null){ returnpr.mProvider; } returnnull; } } ...... privatefinalIContentProvidergetProvider(Contextcontext,Stringname){ IContentProviderexisting=getExistingProvider(context,name); if(existing!=null){ returnexisting; } IActivityManager.ContentProviderHolderholder=null; try{ holder=ActivityManagerNative.getDefault().getContentProvider( getApplicationThread(),name); }catch(RemoteExceptionex){ } IContentProviderprov=installProvider(context,holder.provider, holder.info,true); ...... returnprov; } ...... } 这个函数首先会通过getExistingProvider函数来检查本地是否已经存在这个要获取的ContentProvider接口,如果存在,就直接返回了。本地已经存在的ContextProvider接口保存在ActivityThread类的mProviderMap成员变量中,以ContentProvider对应的URI的authority为键值保存。在我们这个情景中,因为是第一次调用ArticlesProvider接口,因此,这时候通过getExistingProvider函数得到的IContentProvider接口为null,于是下面就会调用ActivityManagerService服务的getContentProvider接口来获取一个ContentProviderHolder对象holder,这个对象就包含了我们所要获取的ArticlesProvider接口,在将这个接口返回给调用者之后,还会调用installProvider函数来把这个接口保存在本地中,以便下次要使用这个ContentProvider接口时,直接就可以通过getExistingProvider函数获取了。 我们先进入到ActivityManagerService服务的getContentProvider函数中看看它是如何获取我们所需要的ArticlesProvider接口的,然后再返回来看看installProvider函数的实现。 Step 6.ActivityManagerService.getContentProvider 这个函数定义在frameworks/base/services/java/com/android/server/am/ActivityManagerService.java文件中: publicfinalclassActivityManagerServiceextendsActivityManagerNative implementsWatchdog.Monitor,BatteryStatsImpl.BatteryCallback{ ...... publicfinalContentProviderHoldergetContentProvider( IApplicationThreadcaller,Stringname){ ...... returngetContentProviderImpl(caller,name); } ...... } 它调用getContentProviderImpl函数来进一步执行操作。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/966982,如需转载请自行联系原作者

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

Hapdoop的一个Mapreduce示例代码--统计单词个数有排序功能

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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 package com.mzsx.hadoop; import java.io.IOException; import java.util.Random; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.WritableComparable; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class MySortWordCount { public static class MyMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable( 1 ); // 类似于int类型 private Text word = new Text(); // 可以理解成String类型 public void map(Object key, Text value, Context context) throws IOException, InterruptedException { System.err.println(key + "," + value); // 默认情况下即根据空格分隔字符串 String tmp=value.toString(); tmp=tmp.replace( '\'' , ' ' ); tmp=tmp.replace( '.' , ' ' ); tmp=tmp.replace( ',' , ' ' ); tmp=tmp.replace( ':' , ' ' ); tmp=tmp.replace( '!' , ' ' ); tmp=tmp.replace( ';' , ' ' ); tmp=tmp.replace( '?' , ' ' ); tmp=tmp.replace( '`' , ' ' ); tmp=tmp.replace( '"' , ' ' ); tmp=tmp.replace( '&' , ' ' ); tmp=tmp.replace( '(' , ' ' ); tmp=tmp.replace( ')' , ' ' ); tmp=tmp.replace( '-' , ' ' ); StringTokenizer itr = new StringTokenizer(tmp); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } }; } // Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT> public static class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { System.err.println(key + "," + values); int sum = 0 ; for (IntWritable val : values) { sum += val.get(); } result.set(sum); ; context.write(key, result); // 这是最后结果 }; } public static class SortMapper extends Mapper<Object, Text, IntWritable,Text>{ public void map(Object key, Text value, Context context) throws IOException, InterruptedException { IntWritable times = new IntWritable( 1 ); Text password = new Text(); String eachline=value.toString(); String[] eachterm =eachline.split( "\t" ); password.set(eachterm[ 0 ]); times.set(Integer.parseInt(eachterm[ 1 ])); context.write(times,password); } } public static class SortReducer extends Reducer<IntWritable,Text,IntWritable,Text> { private Text password = new Text(); public void reduce(IntWritable key,Iterable<Text> values, Context context) throws IOException, InterruptedException { for (Text val : values) { password.set(val); context.write(key,password); } } } private static class IntDecreasingComparator extends IntWritable.Comparator { public int compare(WritableComparable a, WritableComparable b) { //return -super.compare(a, b); return super .compare(a, b); } public int compare( byte [] b1, int s1, int l1, byte [] b2, int s2, int l2) { //return -super.compare(b1, s1, l1, b2, s2, l2); return super .compare(b1, s1, l1, b2, s2, l2); } } public static void main(String[] args) throws Exception { // 声明配置信息 Configuration conf = new Configuration(); // 声明Job Job job = new Job(conf, "Word Count" ); // 设置工作类 job.setJarByClass(MySortWordCount. class ); // 设置mapper类 job.setMapperClass(MyMapper. class ); // 可选 job.setCombinerClass(MyReducer. class ); // 设置合并计算类 job.setReducerClass(MyReducer. class ); // 设置key为String类型 job.setOutputKeyClass(Text. class ); // 设置value为int类型 job.setOutputValueClass(IntWritable. class ); //job.setInputFormatClass(KeyValueTextInputFormat.class); // 设置或是接收输入输出 /*FileInputFormat.setInputPaths(job, new Path("/user/root/aoman.txt")); FileOutputFormat.setOutputPath(job, new Path("/user/root/r3")); // 执行 System.exit(job.waitForCompletion(true) ? 0 : 1);*/ //定义一个临时目录,先将词频统计任务的输出结果写到临时目录中, 下一个排序任务以临时目录为输入目录。 FileInputFormat.addInputPath(job, new Path( "/user/root/aoman.txt" )); Path tempDir = new Path( "MySortWordCount-temp-" + Integer.toString( new Random().nextInt(Integer.MAX_VALUE))); FileOutputFormat.setOutputPath(job, tempDir); if (job.waitForCompletion( true )) { Job sortJob = new Job(conf, "csdnsort" ); sortJob.setJarByClass(MySortWordCount. class ); FileInputFormat.addInputPath(sortJob, tempDir); sortJob.setMapperClass(SortMapper. class ); FileOutputFormat.setOutputPath(sortJob, new Path( "/user/root/sort1" )); sortJob.setOutputKeyClass(IntWritable. class ); sortJob.setOutputValueClass(Text. class ); sortJob.setSortComparatorClass(IntDecreasingComparator. class ); FileSystem.get(conf).deleteOnExit(tempDir); System.exit(sortJob.waitForCompletion( true ) ? 0 : 1 ); } System.exit(job.waitForCompletion( true ) ? 0 : 1 ); } } 版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任 本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/1404661

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

Android应用程序组件Content Provider的启动过程源代码分析(7)

函数installProvider执行完成以后,返回到Step 16中的instalContentProviders函数中,执行下面语句: try{ ActivityManagerNative.getDefault().publishContentProviders( getApplicationThread(),results); }catch(RemoteExceptionex){ } 前面已经提到,这个函数调用的作用就是通知ActivityMangerService,需要在这个进程中加载的Content Provider已经完加载完成了,参数results就包含了这些已经加载好的Content Provider接口。 Step 21. ActivityMangerService.publishContentProviders 这个函数定义在frameworks/base/services/java/com/android/server/am/ActivityManagerService.java文件中: publicfinalclassActivityManagerServiceextendsActivityManagerNative implementsWatchdog.Monitor,BatteryStatsImpl.BatteryCallback{ ...... publicfinalvoidpublishContentProviders(IApplicationThreadcaller, List<ContentProviderHolder>providers){ ...... synchronized(this){ finalProcessRecordr=getRecordForAppLocked(caller); ...... finalintN=providers.size(); for(inti=0;i<N;i++){ ContentProviderHoldersrc=providers.get(i); if(src==null||src.info==null||src.provider==null){ continue; } ContentProviderRecorddst=r.pubProviders.get(src.info.name); if(dst!=null){ mProvidersByClass.put(dst.info.name,dst); Stringnames[]=dst.info.authority.split(";"); for(intj=0;j<names.length;j++){ mProvidersByName.put(names[j],dst); } intNL=mLaunchingProviders.size(); intj; for(j=0;j<NL;j++){ if(mLaunchingProviders.get(j)==dst){ mLaunchingProviders.remove(j); j--; NL--; } } synchronized(dst){ dst.provider=src.provider; dst.app=r; dst.notifyAll(); } ...... } } } } ...... } 在我们这个情景中,只有一个Content Provider,因此,这里的N等待1。在中间的for循环里面,最重要的是下面这个语句: ContentProviderRecorddst=r.pubProviders.get(src.info.name); 从这里得到的ContentProviderRecord对象dst,就是在前面Step 7中创建的ContentProviderRecord对象cpr了。在for循环中,首先是把这个Content Provider信息保存好在mProvidersByClass和mProvidersByName中: mProvidersByClass.put(dst.info.name,dst); Stringnames[]=dst.info.authority.split(";"); for(intj=0;j<names.length;j++){ mProvidersByName.put(names[j],dst); } 前面已经说过,这两个Map中,一个是以类名为键值保存Content Provider信息,一个是以authority为键值保存Content Provider信息。 因为这个Content Provider已经加载好了,因此,把它从mLaunchingProviders列表中删除: intNL=mLaunchingProviders.size(); intj; for(j=0;j<NL;j++){ if(mLaunchingProviders.get(j)==dst){ mLaunchingProviders.remove(j); j--; NL--; } } 最后,设置这个ContentProviderRecord对象dst的provider域为从参数传进来的Content Provider远程接口: synchronized(dst){ dst.provider=src.provider; dst.app=r; dst.notifyAll(); } 执行了dst.notiryAll语句后,在Step 7中等待要获取的Content Provider接口加载完毕的线程就被唤醒了。唤醒之后,它检查本地ContentProviderRecord变量cpr的provider域不为null,于是就返回了。它最终返回到Step 5中的ActivityThread类的getProvider函数中,继续往下执行: IContentProviderprov=installProvider(context,holder.provider, holder.info,true); 注意,这里是在Article应用程序中进程中执行installProvider函数的,而前面的Step 17的installProvider函数是在ArticlesProvider应用程序进程中执行的。 Step 22. ActivityThread.installProvider 这个函数定义在frameworks/base/core/java/android/app/ActivityThread.java文件中: publicfinalclassActivityThread{ ...... privatefinalIContentProviderinstallProvider(Contextcontext, IContentProviderprovider,ProviderInfoinfo,booleannoisy){ ...... if(provider==null){ ...... }elseif(localLOGV){ ...... } synchronized(mProviderMap){ //Cachethepointerfortheremoteprovider. Stringnames[]=PATTERN_SEMICOLON.split(info.authority); for(inti=0;i<names.length;i++){ ProviderClientRecordpr=newProviderClientRecord(names[i],provider, localProvider); try{ provider.asBinder().linkToDeath(pr,0); mProviderMap.put(names[i],pr); }catch(RemoteExceptione){ returnnull; } } ...... } returnprovider; } ...... } 同样是执行installProvider函数,与Step 17不同,这里传进来的参数provider是不为null的,因此,它不需要执行在本地加载Content Provider的工作,只需要把从ActivityMangerService中获得的Content Provider接口保存在成员变量mProviderMap中就可以了。 这样,获取与"shy.luo.providers.artilces"这个uri对应的Content Provider(shy.luo.providers.articles.ArticlesProvider)就完成了,它同时也是启动Content Provider的完整过程。第三方应用程序获得了这个Content Provider的接口之后,就可以访问它里面的共享数据了。在下面一篇文章中,我们将重点分析Android应用程序组件Content Provider在不同进程中传输数据的过程,即Content Provider在不同应用程序中共享数据的原理,敬请关注。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/966990,如需转载请自行联系原作者

资源下载

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

用户登录
用户注册