首页 文章 精选 留言 我的

精选列表

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

Cursor 发布编程模型 Composer 1.5:强化学习规模扩大 20 倍驱动性能飞跃

AI编程工具Cursor今日正式发布其新一代智能编码模型Composer 1.5。新模型强化学习训练规模,实现了20倍的巨大提升,在性能上取得跨越式增长,在代码生成、逻辑推理等关键任务上表现显著增强。 Composer 1.5 能根据问题复杂度动态调整响应方式:面对简单问题快速作答以保证实时性,应对复杂任务时则进入深度思考模式以规划最佳解决方案。模型还引入了自摘要功能,能在上下文信息耗尽时自动生成任务摘要,确保在超大规模代码探索中保持逻辑连贯与准确性。 Cursor团队表示,这一升级旨在从根本上提升开发者的生产力与创造力。通过让模型更深入地理解代码库上下文并进行复杂规划,Composer 1.5致力于成为更强大的编程合作伙伴,协助开发者应对更具挑战性的开发工作。

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

5G与制造业:驱动工业4.0缺失的一环?

5G可以帮助改变制造业。 通过升级现有4G基础设施来开发5G连接的移动网络运营商在英国正处于发展之中,带来了超快的连接速度。升级后的网络所带来的好处远远不只是为移动电话客户提供连接速度的提升,5G真正具有改变人们生活和工作方式的潜力,并且每年都会开发出许多新的用例。 夏季,DLA Piper根据对欧洲范围内350位从事技术、金融服务和公共部门工作的高级商业主管的调查,发布了《欧洲技术指数》报告。五分之一(22%)的人认为5G在智慧城市应用中的增长潜力最大,只有3%的受访者认为制造业提供了最大的机会。 令人惊讶的是,技术指数的受访者没有在制造业中了解更多的5G机会,因为我们认为这是利用技术的最令人兴奋的领域之一。制造业应被视为5G投资的增长行业之一,因为它有潜力创造最大价值,拥有健康的ROI和可实现的利益,从而刺激需求。这是我们认为确实如此的一些原因。 巨大增长潜力 易观梅森(Analysys Mason)通过爱立信(Ericsson)和量子技术(Quantum Technologies)于2020年11月委托撰写的报告估计,与在其他行业和地区使用5G连接相比,通过5G连接推动的智能制造在英国具有最大的增长潜力。在该报告中,据估计,到2025年工厂中所有独立5G部署的基础上,到2025年将额外产生52亿英镑的GDP,占全球部署的所有5G基础设施预计额外经济增长总额的四分之三。 在华为关于5G对制造业的影响的另一项研究中,基于对制造业高层管理人员进行100多次访谈所得出的模型,发现5G连通性到2030年可在全球范围内释放7400亿美元的制造业价值。主要国家包括中国、美国和日本,它们是全球制造业中心。 制造业中的5G支持具有实际工业效益的用例,以刺激需求并覆盖部署成本 制造商处于最佳位置,可以利用独立5G部署所提供的关键功能(即超低延迟和高容量)并从中获得最大的回报。工厂中的5G连通性可以支持将彻底改变制造业的技术和用例,包括自动化和机器人技术、人工智能以及设备的增强现实操作。相连的工厂还可以支持人与机器之间更大的数据流,从而增强监控功能。这样可以减少停机时间,并增加进行预测性维护的潜力-两者都可以提高生产率并降低成本。 除了这些经济和生产力优势外,易观梅森报告还认识到了环境优势。由于能够增强信息共享和实时监控的能力,制造中的5G可以减少能源消耗并提高设备的使用效率,从而延长设备的使用寿命。这不仅有益于环境,而且降低了成本并提高了生产率。 欧洲也进行了数项试验,以证明5G互联设施的实际生活优势以及如何实现用例。例如,沃彻斯特·博世(Worchester Bosch)尝试使用5G连接来支持在工厂内部使用传感器来提高工厂产量(通过预测性维护和机器人技术),从而使工厂产量增加2%。 5G独立部署将涉及大量的前期投资这一事实无可避免,但是很明显,成本可以由随后产生的价值来覆盖。爱立信报告称,在利用5G连接的工厂中应用技术可能会通过节省成本为工厂所有者带来10到20倍的投资回报。 5G在制造业中的重要性已经在英国政府的关注中 考虑到英国是世界上最大的制造国之一,英国政府非常重视5G在制造业中的机会和重要性。但是,它也认识到,现成的采用方式存在障碍,包括对5G可能带来的价值缺乏了解。为了解决这个问题,政府已于今年早些时候承诺提供380万英镑的DCMS资金用于5G ENCODE项目,该项目涉及建设5G供电的智能工厂,以向其他人明确展示其利益。 制造业本身认识到有必要进行“重置”以提高竞争力和生产力 英国制造商的代表机构Make UK已经意识到,由于COVID-19,制造业受到了打击,要等到2022年才能恢复到COVID-19之前的水平。在其“响应,重设和重塑英国制造业在COVID-19之后的报告”中,该报告指出:“制造商需要在创新,研发上投入时间和资源,以提高该行业的生产率并增强我们的国际竞争力。”对于投资者而言,现在是与该行业合作以通过5G实现这种重置的绝佳机会。 考虑到以上所有因素,最可能的独立5G基础设施部署很可能是通过创建专用网络而不是依靠公共移动网络来商业提供资金的。除了部署网络之外,还需要在工厂级别进行进一步的工作才能升级到利用5G的技术。作为制造商,您可以寻求资金支持,以投资于这些专用网络和新技术,但是对于投资者和电信运营商而言,与制造商合作以帮助他们了解其业务机会和收益也很重要。鉴于电信运营商可能会继续建立私有网络,电信业也显然有机会与投资者或工厂所有者合作,以建设,部署和管理独立的5G私有网络,这可以代表长期的发展收入来源。 尽管越来越多的证据表明5G可以为制造商带来收益和回报,但当前采用率仍然令人失望地低。需要的是政府,电信公司和投资者共同努力并共同努力,对制造商进行教育并与他们合作,以鼓励在这一激动人心的领域进行投资。一旦头几个早期采用者证明了这些好处的现实,水闸便会打开。

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

【Spring注解驱动开发】AOP核心类源码解析,这是最全的一篇了!!

点击上方蓝色“冰河技术”,关注并选择“设为星标” 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址: https://github.com/sunshinelyz/mykit-delay PS: 欢迎各位Star源码,也可以pr你牛逼哄哄的代码。 写在前面 昨天二狗子让我给他讲@EnableAspectJAutoProxy注解,讲到AnnotationAwareAspectJAutoProxyCreator类的源码时,二狗子消化不了了。这不,今天又来让我给他讲讲AOP的核心类。那我们就开始吧! 关于 冰河技术 微信公众号,后台回复 “Spring注解”领取源码工程。 如果文章对你有点帮助,麻烦点个赞,给个在看和转发,大家的三连是对我持续创作最大的动力!! 类结构图 我们先来看下AnnotationAwareAspectJAutoProxyCreator类的结构图。 上图中一些 类/接口 的介绍: AspectJAwareAdvisorAutoProxyCreator : 公开了AspectJ的调用上下文,并弄清楚来自同一切面的多个Advisor在AspectJ中的优先级规则。 AbstractAdvisorAutoProxyCreator : 通用自动代理创建器,它基于检测到的每个顾问程序为特定bean构建AOP代理。 AbstractAutoProxyCreator : 扩展了 ProxyProcessorSupport,实现了SmartInstantiationAwareBeanPostProcessor、BeanFactoryAware 接口,是BeanPostProcessor 实现,该实现使用AOP代理包装每个合格的bean,并在调用bean本身之前委派给指定的拦截器。 BeanFactoryAware : 实现了该接口的Bean可以知道它属于那个 BeanFactory,Bean可以通过Spring容器查找它的协同者(依赖查找),但大多数的Bean是通过构造器参数和Bean方法(依赖注入)来获取它的协同者。 BeanPostProcessor :工厂钩子,允许自定义修改新的bean实例。例如,检查标记接口或使用代理包装bean。如果我们需要在Spring容器中完成Bean的实例化,配置和其初始化前后添加一些自己的逻辑处理,我们就可以定义一个或多个BeanPostProcessor接口的实现,然后注册到容器中。 InstantiationAwareBeanPostProcessor : BeanPostProcessor 的子接口,它添加了实例化之前的回调,以及实例化之后但设置了显式属性或自动装配之前的回调。它内部提供了3个方法,再加上BeanPostProcessor接口内部的2个方法,实现这个接口需要实现5个方法。InstantiationAwareBeanPostProcessor 接口的主要作用在于目标对象的实例化过程中需要处理的事情,包括实例化对象的前后过程以及实例的属性设置。 SmartInstantiationAwareBeanPostProcessor : InstantiationAwareBeanPostProcessor 接口的扩展,多出了3个方法,添加了用于预测已处理bean的最终类型的回调,再加上父接口的5个方法,所以实现这个接口需要实现8个方法,主要作用也是在于目标对象的实例化过程中需要处理的事情。 总之: AspectJAwareAdvisorAutoProxyCreator为 AspectJ 切面类创建自动代理。 核心类解析 BeanPostProcessor 接口中的两个方法 postProcessBeforeInitialization 和 postProcessAfterInitialization,作用是对Bean初始化前后添加一些自己的逻辑。 @NullabledefaultObjectpostProcessBeforeInitialization(Objectbean,StringbeanName)throwsBeansException{returnbean;}@NullabledefaultObjectpostProcessAfterInitialization(Objectbean,StringbeanName)throwsBeansException{returnbean;} InstantiationAwareBeanPostProcessor 是 BeanPostProcessor 的子接口,它额外增加了3个新的方法:postProcessBeforeInstantiation( 目标对象被实例化之前调用的方法,可以返回目标实例的一个代理用来代替目标实例 )、postProcessAfterInstantiation(该方法在Bean实例化之后执行,返回false,会忽略属性值的设置;如果返回true,会按照正常流程设置属性值) 和 postProcessPropertyValues(对属性值进行修改,未来版本将会删除) @NullabledefaultObjectpostProcessBeforeInstantiation(Class<?>beanClass,StringbeanName)throwsBeansException{returnnull;}defaultbooleanpostProcessAfterInstantiation(Objectbean,StringbeanName)throwsBeansException{returntrue;}@NullabledefaultPropertyValuespostProcessPropertyValues(PropertyValuespvs,PropertyDescriptor[]pds,Objectbean,StringbeanName)throwsBeansException{returnpvs;} SmartInstantiationAwareBeanPostProcessor接口继承InstantiationAwareBeanPostProcessor接口,里面定义了3个方法:predictBeanType(预测Bean的类型)、determineCandidateConstructors(选择合适的构造器)、getEarlyBeanReference(解决循环引用问题)。 @NullabledefaultClass<?>predictBeanType(Class<?>beanClass,StringbeanName)throwsBeansException{returnnull;}@NullabledefaultConstructor<?>[]determineCandidateConstructors(Class<?>beanClass,StringbeanName)throwsBeansException{returnnull;}defaultObjectgetEarlyBeanReference(Objectbean,StringbeanName)throwsBeansException{returnbean;} AbstractAutoProxyCreator 是AOP的一个核心类,它实现了SmartInstantiationAwareBeanPostProcessor、BeanFactoryAware 接口,实现了代理创建的逻辑,使用AOP代理包装每个合格的bean,并在调用bean本身之前委派给指定的拦截器。 AbstractAdvisorAutoProxyCreator 通用自动代理创建器,它基于检测每个bean的增强器,为特殊的bean构建AOP代理。子类可以重写此findCandidateAdvisors()方法,以返回适用于任何对象的advisor的自定义列表,子类还可以重写继承的AbstractAutoProxyCreator.shouldSkip()方法,以将某些对象排除在自动代理之外。 protectedList<Advisor>findCandidateAdvisors(){Assert.state(this.advisorRetrievalHelper!=null,"NoBeanFactoryAdvisorRetrievalHelperavailable");returnthis.advisorRetrievalHelper.findAdvisorBeans();} AspectJAwareAdvisorAutoProxyCreator 扩展 AbstractAdvisorAutoProxyCreator,公开了AspectJ的调用上下文,并在多个增强器来自同一切面时搞清楚AspectJ的建议优先级顺序。按AspectJ优先级排序其余部分: @Override@SuppressWarnings("unchecked")protectedList<Advisor>sortAdvisors(List<Advisor>advisors){List<PartiallyComparableAdvisorHolder>partiallyComparableAdvisors=newArrayList<>(advisors.size());for(Advisorelement:advisors){partiallyComparableAdvisors.add(newPartiallyComparableAdvisorHolder(element,DEFAULT_PRECEDENCE_COMPARATOR));}List<PartiallyComparableAdvisorHolder>sorted=PartialOrder.sort(partiallyComparableAdvisors);if(sorted!=null){List<Advisor>result=newArrayList<>(advisors.size());for(PartiallyComparableAdvisorHolderpcAdvisor:sorted){result.add(pcAdvisor.getAdvisor());}returnresult;}else{returnsuper.sortAdvisors(advisors);}} 在增强链头部增加一个ExposeInvocationInterceptor,使用AspectJ表达式切入点和使用AspectJ样式的advisor时,需要这些附加advisor。 protectedvoidextendAdvisors(List<Advisor>candidateAdvisors){AspectJProxyUtils.makeAdvisorChainAspectJCapableIfNecessary(candidateAdvisors);} 如果此后处理器不应该考虑将给定的bean用于自动代理,子类应重写此方法以返回true @OverrideprotectedbooleanshouldSkip(Class<?>beanClass,StringbeanName){//TODO:ConsideroptimizationbycachingthelistoftheaspectnamesList<Advisor>candidateAdvisors=findCandidateAdvisors();for(Advisoradvisor:candidateAdvisors){if(advisorinstanceofAspectJPointcutAdvisor&&((AspectJPointcutAdvisor)advisor).getAspectName().equals(beanName)){returntrue;}}returnsuper.shouldSkip(beanClass,beanName);} AspectJAwareAdvisorAutoProxyCreator 还有一个子类叫 AnnotationAwareAspectJAutoProxyCreator,子类AnnotationAwareAspectJAutoProxyCreator是用于处理当前应用程序上下文中的所有AspectJ注释方面以及Spring Advisor。如果Spring AOP的基于代理的模型能够应用任何AspectJ注释的类,它们的advisor将被自动识别,这涵盖了方法执行连接点,Spring Advisor的处理遵循AbstractAdvisorAutoProxyCreator中建立的规则。 生成代理对象 从使用aop:xxx标签来自动生成代理的话,先看看AopNamespaceHandler,使用aop:config标签则使用 ConfigBeanDefinitionParser 解析,使用了aop:aspectj-autoproxy标签则使用 AspectJAutoProxyBeanDefinitionParser 解析,依次类推。 @Overridepublicvoidinit(){//In2.0XSDaswellasin2.1XSD.registerBeanDefinitionParser("config",newConfigBeanDefinitionParser());registerBeanDefinitionParser("aspectj-autoproxy",newAspectJAutoProxyBeanDefinitionParser());registerBeanDefinitionDecorator("scoped-proxy",newScopedProxyBeanDefinitionDecorator());//Onlyin2.0XSD:movedtocontextnamespaceasof2.1registerBeanDefinitionParser("spring-configured",newSpringConfiguredBeanDefinitionParser());} aop:config方式使用 AspectJAwareAdvisorAutoProxyCreator 创建代理 aop:aspectj-autoproxy使用 AnnotationAwareAspectJAutoProxyCreator 创建代理 ConfigBeanDefinitionParser.java @Override@NullablepublicBeanDefinitionparse(Elementelement,ParserContextparserContext){CompositeComponentDefinitioncompositeDef=newCompositeComponentDefinition(element.getTagName(),parserContext.extractSource(element));parserContext.pushContainingComponent(compositeDef);configureAutoProxyCreator(parserContext,element);//注册AspectJAwareAdvisorAutoProxyCreatorList<Element>childElts=DomUtils.getChildElements(element);for(Elementelt:childElts){StringlocalName=parserContext.getDelegate().getLocalName(elt);if(POINTCUT.equals(localName)){parsePointcut(elt,parserContext);}elseif(ADVISOR.equals(localName)){parseAdvisor(elt,parserContext);}elseif(ASPECT.equals(localName)){parseAspect(elt,parserContext);}}parserContext.popAndRegisterContainingComponent();returnnull;}privatevoidconfigureAutoProxyCreator(ParserContextparserContext,Elementelement){AopNamespaceUtils.registerAspectJAutoProxyCreatorIfNecessary(parserContext,element);} AopConfigUtils.java @Override@NullablepublicBeanDefinitionparse(Elementelement,ParserContextparserContext){CompositeComponentDefinitioncompositeDef=newCompositeComponentDefinition(element.getTagName(),parserContext.extractSource(element));parserContext.pushContainingComponent(compositeDef);configureAutoProxyCreator(parserContext,element);//注册AspectJAwareAdvisorAutoProxyCreatorList<Element>childElts=DomUtils.getChildElements(element);for(Elementelt:childElts){StringlocalName=parserContext.getDelegate().getLocalName(elt);if(POINTCUT.equals(localName)){parsePointcut(elt,parserContext);}elseif(ADVISOR.equals(localName)){parseAdvisor(elt,parserContext);}elseif(ASPECT.equals(localName)){parseAspect(elt,parserContext);}}parserContext.popAndRegisterContainingComponent();returnnull;}privatevoidconfigureAutoProxyCreator(ParserContextparserContext,Elementelement){AopNamespaceUtils.registerAspectJAutoProxyCreatorIfNecessary(parserContext,element);} AopConfigUtils.java publicstaticvoidregisterAspectJAutoProxyCreatorIfNecessary(ParserContextparserContext,ElementsourceElement){//在这里注册的是AspectJAwareAdvisorAutoProxyCreatorBeanDefinitionbeanDefinition=AopConfigUtils.registerAspectJAutoProxyCreatorIfNecessary(parserContext.getRegistry(),parserContext.extractSource(sourceElement));useClassProxyingIfNecessary(parserContext.getRegistry(),sourceElement);registerComponentIfNecessary(beanDefinition,parserContext);//注册组件} @NullablepublicstaticBeanDefinitionregisterAspectJAutoProxyCreatorIfNecessary(BeanDefinitionRegistryregistry,@NullableObjectsource){returnregisterOrEscalateApcAsRequired(AspectJAwareAdvisorAutoProxyCreator.class,registry,source);} AspectJAwareAdvisorAutoProxyCreator 实现了 BeanPostProcessor 等上面介绍的接口,主要作用于Bean初始化前后,实例化前后,所有的Bean都被作用到。InstantiationAwareBeanPostProcessor 是 BeanPostProcessor的子接口,但它的调用时间点发生在Bean实例化前,在真正调用doCreateBean()创建bean实例之前执行postProcessBeforeInstantiation()。 AbstractAutoProxyCreator.java @OverridepublicObjectpostProcessBeforeInstantiation(Class<?>beanClass,StringbeanName)throwsBeansException{ObjectcacheKey=getCacheKey(beanClass,beanName);//得到一个缓存的唯一key(根据beanClass和beanName生成唯一key)//如果当前targetSourcedBeans(通过自定义TargetSourceCreator创建的TargetSource)不包含cacheKeyif(!StringUtils.hasLength(beanName)||!this.targetSourcedBeans.contains(beanName)){if(this.advisedBeans.containsKey(cacheKey)){//advisedBeans(已经被增强的Bean,即AOP代理对象)中包含当前cacheKey,返回null,即走Spring默认流程returnnull;}if(isInfrastructureClass(beanClass)||shouldSkip(beanClass,beanName)){//如果是基础设施类(如Advisor、Advice、AopInfrastructureBean的实现)不进行处理;(略)this.advisedBeans.put(cacheKey,Boolean.FALSE);returnnull;}}//如果有自定义的TargetSource,在此处创建代理//禁止目标Bean的不必要的默认实例化:// TargetSource将以自定义方式处理目标实例。TargetSourcetargetSource=getCustomTargetSource(beanClass,beanName);if(targetSource!=null){if(StringUtils.hasLength(beanName)){this.targetSourcedBeans.add(beanName);}Object[]specificInterceptors=getAdvicesAndAdvisorsForBean(beanClass,beanName,targetSource);Objectproxy=createProxy(beanClass,beanName,specificInterceptors,targetSource);this.proxyTypes.put(cacheKey,proxy.getClass());returnproxy;}returnnull;} 通过 AbstractAutoProxyCreator 中的 postProcessAfterInitialization() 创建AOP代理。 @OverridepublicObjectpostProcessAfterInitialization(@NullableObjectbean,StringbeanName)throwsBeansException{if(bean!=null){ObjectcacheKey=getCacheKey(bean.getClass(),beanName);if(!this.earlyProxyReferences.contains(cacheKey)){//如果之前调用过getEarlyBeanReference获取包装目标对象到AOP代理对象(如果需要),则不再执行returnwrapIfNecessary(bean,beanName,cacheKey);//包装目标对象到AOP代理对象(如果需要)}}returnbean;}protectedObjectwrapIfNecessary(Objectbean,StringbeanName,ObjectcacheKey){if(StringUtils.hasLength(beanName)&&this.targetSourcedBeans.contains(beanName)){//通过TargetSourceCreator进行自定义TargetSource不需要包装returnbean;}if(Boolean.FALSE.equals(this.advisedBeans.get(cacheKey))){//不应该被增强对象不需要包装returnbean;}if(isInfrastructureClass(bean.getClass())||shouldSkip(bean.getClass(),beanName)){//基础设施或应该skip的不需要保证this.advisedBeans.put(cacheKey,Boolean.FALSE);returnbean;}//如果有advise则创建代理。Object[]specificInterceptors=getAdvicesAndAdvisorsForBean(bean.getClass(),beanName,null);if(specificInterceptors!=DO_NOT_PROXY){this.advisedBeans.put(cacheKey,Boolean.TRUE);Objectproxy=createProxy(bean.getClass(),beanName,specificInterceptors,newSingletonTargetSource(bean));//创建代理对象this.proxyTypes.put(cacheKey,proxy.getClass());returnproxy;}this.advisedBeans.put(cacheKey,Boolean.FALSE);returnbean;} 重磅福利 关注「 冰河技术 」微信公众号,后台回复 “设计模式” 关键字领取《深入浅出Java 23种设计模式》PDF文档。回复“Java8”关键字领取《Java8新特性教程》PDF文档。回复“限流”关键字获取《亿级流量下的分布式限流解决方案》PDF文档,三本PDF均是由冰河原创并整理的超硬核教程,面试必备!! 好了,今天就聊到这儿吧!别忘了点个赞,给个在看和转发,让更多的人看到,一起学习,一起进步!! 写在最后 如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫! 如果你喜欢这篇文章,欢迎点赞和转发。 生活很美好,明天见(。・ω・。)ノ♡ 写留言 本文分享自微信公众号 - 冰河技术(hacker-binghe)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

BTA | 吴萌野:区块链中间件驱动应用生态规模化落地

如果说互联网解决信息不对称,移动互联网解决沟通不及时,那么区块链解决的是信任难建立和价值难共享。比特币3.0时代已经到来,3.0时代意味着“随处可用的区块链“。如何实现随处可用?吴萌野老师认为,一是基础链,二是中间件。有关基础链的技术问题和解决方案,吴萌野老师给出的答案是从计算层的改进方向:一是采用更快速的智能合约容器和运行时,并优化共识节点规模。谈到中间件,他希望通过中间件搭建连接互联网云服务和区块链智能合约的中间桥梁,推动区块链应用生态规模化落地。 吴萌野1999年毕业于是清华大学电子工程系,是国内顶尖区块链专家和架构师,首次提出链中间件理论,现任丝链SilkChain首席架构师。同时担任多家区块链项目的技术咨询专家,澳洲CSIROData61国家研究所中国专家。连续创业者,曾任水滴互助CTO、新东方乐词CTO、音悦台CTO、

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

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

Sublime Text

Sublime Text

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

用户登录
用户注册