首页 文章 精选 留言 我的

精选列表

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

SpringBoot开发案例之整合mail发送服务

上个月做过这样一篇分享笔记,微服务架构实践之邮件通知系统改造。 当时用的是开源的第三方插件mail和Thymeleaf做发送服务,显然这样子你需要配置一些东西,麻烦!!!接触了Spring Boot以后,显然有更好的解决方案,我们只需要引入spring-boot-starter-mail模块就实现了自动化配置。 好,废话不扯,言归正题(文中大部分是部分代码,详细代码见Git)。 开发环境 JDK1.7、Maven、Eclipse、SpringBoot1.5.2、spring-boot-starter-mail、spring-boot-starter-thymeleaf,spring-boot-starter-freemarker 项目结构 引入依赖 在工程中的pom.xml中引入以下依赖: <!-- email --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- thymeleaf 模版 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- freemarker 模版 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> application.properties中配置以下内容: spring.mail.host=smtp.qq.com spring.mail.username=345849402@qq.com #授权码g,在QQ邮箱客户端生成 修改成自己的 设置-账户-开启服务-获取授权码 spring.mail.password=XXXXXXX spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true #freemarker spring.freemarker.template-loader-path=classpath:/static/template/ spring.freemarker.enabled=true spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.content-type=text/html spring.freemarker.allow-request-override=false spring.freemarker.check-template-location=true spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.expose-spring-macro-helpers=false #thymeleaf spring.thymeleaf.prefix=classpath:/static/template/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML5 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.content-type=text/html spring.thymeleaf.cache=false 封装实体 首先我们,封装一个Email实体Email.java: /** * Email封装类 * 创建者 科帮网 * 创建时间 2017年7月20日 * */ public class Email implements Serializable { private static final long serialVersionUID = 1L; //必填参数 private String email;//接收方邮件 private String subject;//主题 private String content;//邮件内容 //选填 private String template;//模板 private HashMap<String, String> kvMap;// 自定义参数 ... 省略 get set 业务实现 既然用了spring,就按照spring的方式来,先定义一个接口IMailService,接着是实现MailServiceImpl。 以下代码,实现了四种方式:纯文本,富文本(图片,附件),Freemarker模版以及Thymeleaf模版。 这里需要注意的是,springboot 1.4.0以后 Velocity 废弃了,官方建议用freemaker。而thymeleaf是博主自己实现的,显然效率没有freemaker高(评测对比见文章底部)。 @Service public class MailServiceImpl implements IMailService { @Autowired private JavaMailSender mailSender;//执行者 @Autowired public Configuration configuration;//freemarker @Autowired private SpringTemplateEngine templateEngine;//thymeleaf @Value("${spring.mail.username}") public String USER_NAME;//发送者 @Override public void send(Email mail) throws Exception { MailUtil mailUtil = new MailUtil(); SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(USER_NAME); message.setTo(mail.getEmail()); message.setSubject(mail.getSubject()); message.setText(mail.getContent()); mailUtil.start(mailSender, message); } @Override public void sendHtml(Email mail) throws Exception { MailUtil mailUtil = new MailUtil(); MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(USER_NAME); helper.setTo(mail.getEmail()); helper.setSubject(mail.getSubject()); helper.setText( "<html><body><img src=\"cid:springcloud\" ></body></html>", true); // 发送图片 File file = ResourceUtils.getFile("classpath:static" + Constants.SF_FILE_SEPARATOR + "image" + Constants.SF_FILE_SEPARATOR + "springcloud.png"); helper.addInline("springcloud", file); // 发送附件 file = ResourceUtils.getFile("classpath:static" + Constants.SF_FILE_SEPARATOR + "file" + Constants.SF_FILE_SEPARATOR + "关注科帮网获取更多源码.zip"); helper.addAttachment("科帮网", file); mailUtil.startHtml(mailSender, message); } @Override public void sendFreemarker(Email mail) throws Exception { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(USER_NAME); helper.setTo(mail.getEmail()); helper.setSubject(mail.getSubject()); Map<String, Object> model = new HashMap<String, Object>(); model.put("content", mail.getContent()); Template template = configuration.getTemplate(mail.getTemplate()+".flt"); String text = FreeMarkerTemplateUtils.processTemplateIntoString( template, model); helper.setText(text, true); mailSender.send(message); } @Override public void sendThymeleaf(Email mail) throws Exception { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(USER_NAME); helper.setTo(mail.getEmail()); helper.setSubject(mail.getSubject()); Context context = new Context(); context.setVariable("email", mail); String text = templateEngine.process(mail.getTemplate(), context); helper.setText(text, true); mailSender.send(message); } } 测试用例 老司机带你去开车SpringbootMailApplication.java: @SpringBootApplication @ComponentScan(basePackages={"com.itstyle.mail"}) public class SpringbootMailApplication implements CommandLineRunner { @Autowired private IMailService mailService; public static void main(String[] args) { SpringApplication.run(SpringbootMailApplication.class, args); } @Override public void run(String... args) throws Exception { Email mail = new Email(); mail.setEmail("345849402@qq.com"); mail.setSubject("你个小逗比"); mail.setContent("科帮网欢迎您"); mail.setTemplate("welcome"); mailService.sendFreemarker(mail); } } 好了,不出意外,这四种方式应该绝对是没问题的,小伙伴们就等着右下角弹窗窗吧。 最后,做了一个小小的评测,生成模版时间对比(1000次循环) Thymeleaf用时:2686ms Freemarker用时:498ms 对比测试,建议使用Freemarker模版。 项目:http://git.oschina.net/52itstyle/spring-boot-mail 作者: 小柒 出处: https://blog.52itstyle.com 本文版权归作者和云栖社区所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(345849402@qq.com)咨询。

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

戴尔:物联网高速发展 有效整合OT与IT

互联网的快速进步和云计算让物联网发展的更为迅速,戴尔物联网解决方案执行总监兼总经理Andy Rhodes指出,物联网受益于科技成本的降低,而OT(运营技术部门)与IT部门的结合也将受到关注。 “在过去18个月中,无论是传感器、电力成本还是各种设备,价格都在迅速下降。另外,云计算以及5G无线技术的很快出现都使企业开启物联网的旅程更加容易。”Andy Rhodes说。 如今,物联网的应用提升了企业运营效率。我们看到,物联网的应用可以降低楼宇管理的能耗,能够实现智能交通,降低汽油燃料使用量等。 在Andy Rhodes看来,物联网和新商业模式还可以根本性地颠覆原有产业。就像美国Uber颠覆了整个出租行业,Airbnb颠覆了旅馆业一样,物联网也会有更多的颠覆。 目前,戴尔内部有300-400个物联网项目,包括楼宇管理、车队机队管理、智能农业、智能楼宇,甚至还有赛车项目。 对于客户来说,如何让OT与IT部门有效协作是个关注点,这就需要网关的支持。网关相当于物联网的过滤器,能够实时对数据进行过滤,然后在网络边缘来进行分析。 Andy Rhodes表示:“两年前我们谈到物联网的时候,焦点放在了一些垂直行业的应用上。但随着这两年的发展,我们的团队改变了讨论问题的方式,不再去分行业,而是讲具体用户案例。例如楼宇管理在很多行业都是需要的,可以帮助制造业更好地进行楼宇管理来支持生产线,也可以帮助保险公司通过更有效的楼宇管理降低成本,从而降低费用。” 本文转自d1net(转载)

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

YunOS 6 系统发布:软硬整合

昨天,2017年YunOS开发者大会在上海召开,在会上,YunOS官方正式发布了YunOS 6操作系统。 YunOS是是阿里巴巴集团旗下智能操作系统,融合了阿里巴巴在云数据存储、云计算服务以及智能设备操作系统等多领域的技术成果,并且可搭载于智能手机、智能穿戴、互联网汽车、智能家居等多种智能终端设备。 按照官方说法,全新架构的YunOS 6拥有高效的系统内核、基于云的应用框架及先进的安全机制。 新系统实现了15秒闪电开机,应用冷启动时间缩短200%以上,以智能调度实现低功耗省内存,避免系统“越用越慢”。 同时,YunOS 6全新开发框架(CAF)深度结合云能力,基于更强大的Javascript语言,开发无需安装、极简传播,云端一体的CloudApp,并全面支持包括语音识别、图像智能、位置服务在内的机器智能。 在渲染方面,结合手机屏幕越来越高清、尺寸越来越大的趋势,重新思考设计范式,让图标自下而上排列,充分发挥每一个像素的价值,增加新特性同时,内存使用效率提升40%,续航提升25%。 在图像方面,YunOS可以在单镜头下实现双摄效果,降低产业成本;支持可定制的VR素材,让用户充分融入到创作当中。 在位置方面,通过接入千寻位置亚米级高精度定位服务,YunOS 6系统定位精度大幅提升,为用户提供更好的末段导航服务体验,同时,基于位置场景,YunOS主动提供NFC交通卡、会员卡、小区门禁卡等可信服务,并在海外提供eSIM功能。 本文来自开源中国社区 [http://www.oschina.net]

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

“易”在整合 或将“三步登天”

12月20日,百度易的落地到端,终于揭开了“百度云战略”神秘的一角。业内的各种猜测,最终以云战略的诞生而终结。百度这次要造的,绝非换汤不换药的“第三方系统”,而是要“重建”移动生态圈。 笔 者认为这样做的目的有三:一是和其他系统打出差异牌;二是云确实是移动未来趋势;三应该是改变国内错中复杂的移动应用环境。现在市面上越来越多的手机系 统,让开发者、移动终端厂商都耗费着巨额的“重复成本”。要改变现有格局,就得对产业链洗牌,并动用更为有前瞻性的新技术。这是促使百度前瞻性的选择云技 术,并将其纳入到未来移动战略的关键布局中。 根治开发者“移植费用高、脑袋疼”现状 很多开发者都恨不得在做移植事前,多买几包头疼药。这无止境的重复,严重拖延开发进度、耗费额外开发成本的“移植”,似乎成为了开发者最费事最耗时的工作之一。大部分时间里,开发者都需要无奈地左手要给安卓开发一个应用,右手还得忙着给iPhone也移植一个,有空闲的时候甚至还需要得考虑给塞班再弄一个。每一个新的系统诞生,开发者都需要重新调试,甚至重写自己的程序,才能入驻该系统。 然而市面上系统种类繁杂的情况让“移植”频繁出现,因此整个互联网行业急需一个解决方案。百度云战略的出现似乎恰逢其时。百度云战略计划打造一个百度云OS,并通过云的跨平台性彻底根治这一因移植而起的叠加重复开发的麻烦。借助这种简化软硬件适配的系统,将极大减少国内开发者的开发成本、缩短开放周期,并帮助更多的国内开发者参与进入到国内智能手机市场。 另有一点特别的是,作为拥有中国互联网搜索市场80%多份额的百度,借助自身优势,百度云战略还能提供一系列帮助开发者更轻松耕耘、调整自己的应用工具。如:通过百度移动联盟获得更多推广途径,通过嵌入SDK代码,获得更多广告资源和收益。 减少手机厂商成本 提供最懂国人的系统 百度·易的落地到端,标志了百度云战略的第一步成功迈进,并首次展现出对手机厂商实现的快速制定效果。手机厂商仅需在系统上只需在百度云OS上 定制服务,即可自动适配到所有终端。而对于传统系统来说,其不仅需要对为适应一个新系统,招到懂其技术的开发者,并花上几个月的时间,进行一个又一个的 “适应性”调试,甚至二次开发。对于手机厂商来说,来回这一折腾少则几十万,多则上百万上千万的开发成本就折腾出去了。而百度·易的快速制定,不仅仅为手 机厂商降低了单款手机市上所需的开发成本,也大大降低了国内手机厂商入驻门槛,并将为规避风险起到极大作用。 另一方面,百度造云OS也展示出其更懂国人的一面。从国人最喜欢的“百度框”替代其余搜索工具,用易阅(Baidu Yue)替代其余的电子书,甚至到之后易Ting音乐产品逐渐成为用户默认服务等,百度正在一步步使出“更懂中国人”的拳术,一步步的帮助手机厂商获得更多丰厚资源,从而促进手机销量。 对于用户来说,百度云战略的价值,则体现在促使国内移动市场更快进入到全面云端时代上。也就是说,让用户不用下载便可安装任何软件,以及在有网络的地方立马享受到各种应用和服务的美好景象,可以变得更近一步。 百度云战略 实现开放共赢 从 百度云战略来看,多年的搜索经验将会帮助合作伙伴获取更多用户分析、数据统计报告,以便及时吸取民意更新应用功能。多年耕耘广告联盟的经验,将发挥极大用 场,帮助开发者搭建出一套推广和营收环境并通过国内最大移动网盟、移动搜索联盟,可帮助开发者轻松获得多样化的产品分发渠道、品牌曝光途径。而在产品“流 量变现”上,百度透露开发者只需在自己应用中嵌入SDK代码,获得广告资源。从开发支持、运营支持,到变现支持、推广支持,百度云战略将为产业链各环节的合作伙伴提供更多全方位本地化的支持帮助。 从百度易平台,到云生态系统/WebApp,再到百度云操作系统,整个百度云战略三步开放路线图中,笔者看到百度还将从个人云存储开始,为开发者、移动终端厂商提供各种开放性服务。笔者相信,未来百度的云战略将填平所有因不同终端而造成的困难。由此,更为健康、庞大的移动互联网生态环境将行之不远。 本文如需转载,请用以下方式联系,并注明出自科幻星系 QQ:102927545 MSN:wangk1026@hotmail.com

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

OpsPilot 0.3 发布:ChatGPT 与 Jenkins 运维能力整合

OpsPilot 是WeOps 团队开源的一个基于深度学习与LLM 技术的AI 运维领域领航员,让运维预案变得可交互,让本地运维知识变得可泛化、可推理 OpsPilot 支持以ChatBot 的形态与Web 应用集成,主要提供以下能力: * 运维能力沉淀:通过将运维的知识、运维技能、排查动作进行沉淀,在解决问题的时候以领航员的形态,通过对话的方式指引用户解决运维问题 * 本地知识问答:通过对本地知识、互联网知识进行索引,结合LLM 的能力,回复用户的各种运维问题 * LLM 聊天:当问题超出OpsPilot 能够处理的范围的时候,使用LLM 的能力解决各种长尾问题 能力变化 列出流水线 查找流水线 触发流水线构建:支持当流水线构建失败后,使用LLM分析构建失败的原因以及修复方法 触发流水线构建,当流水线构建失败之后,使用GPT的能力,给出原因以及修复建议 版本更新内容 [新增]支持对接Jenkins,提供Jenkins流水线查询、列出Jenkins流水线、构建Jenkins流水线并通知的能力 [新增]支持OpsPilot触发Jenkins流水线失败之后,调用LLM给出修复建议 [新增] ENABLE_JENKINS_SKILL环境变量 [优化]联网问答添加url校验 [优化]优化联网问答的slot,仅在chat_online模式下激活

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

卧槽,被SpringBoot整合原生OpenFegin坑惨了(非SpringCloud)!!

点击上方蓝色“冰河技术”,关注并选择“设为星标” 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址: https://github.com/sunshinelyz/mykit-delay PS: 欢迎各位Star源码,也可以pr你牛逼哄哄的代码。 写在前面 最近,在使用SpringBoot+K8S开发微服务系统,既然使用了K8S,我就不想使用SpringCloud了。为啥,因为K8S本身的就提供了非常6的服务注册与发现、限流、熔断、负载均衡等等微服务需要使用的技术,那我为啥还要接入SpringCloud呢?额,说了这么多,在真正使用SpringBoot+K8S这一套技术栈的时候,也会遇到一些问题,比如我不需要使用SpringCloud时,调用其他服务时,我使用的是原生的OpenFegin,在使用OpenFegin调用其他服务的时候,就遇到了一个大坑。通过OpenFeign请求返回值LocalDateTime发生了异常,今天,我们就来说说这个坑! 项目集成OpenFegin 集成OpenFegin依赖 首先,我先跟大家说下项目的配置,整体项目使用的SpringBoot版本为2.2.6,原生的OpenFegin使用的是11.0,我们通过如下方式在pom.xml中引入OpenFegin。 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><skip_maven_deploy>false</skip_maven_deploy><java.version>1.8</java.version><openfegin.version>11.0</openfegin.version></properties><dependencies><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-core</artifactId><version>${openfegin.version}</version></dependency><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-jackson</artifactId><version>${openfegin.version}</version></dependency></dependencies> 这里,我省略了一些其他的配置项。 接下来,我就开始在我的项目中使用OpenFegin调用远程服务了。具体步骤如下。 实现远程调用 首先,创建OpenFeignConfig类,配置OpenFegin默认使用的Contract。 @ConfigurationpublicclassOpenFeignConfig{@BeanpublicContractuseFeignAnnotations(){returnnewContract.Default();}} 接下来,我们写一个通用的获取OpenFeign客户端的工厂类,这个类也比较简单,本质上就是以一个HashMap来缓存所有的FeginClient,这个的FeginClient本质上就是我们自定义的Fegin接口,缓存中的Key为请求连接的基础URL,缓存的Value就是我们定义的FeginClient接口。 publicclassFeginClientFactory{/***缓存所有的Fegin客户端*/privatevolatilestaticMap<String,Object>feginClientCache=newHashMap<>();/***缓存FeginFegin客户端到Map并从Map中获取数据*@return*/@SuppressWarnings("unchecked")publicstatic<T>TgetFeginClient(Class<T>clazz,StringbaseUrl){if(!feginClientCache.containsKey(baseUrl)){synchronized(FeginClientFactory.class){if(!feginClientCache.containsKey(baseUrl)){TfeginClient=Feign.builder().decoder(newJacksonDecoder()).encoder(newJacksonEncoder()).target(clazz,baseUrl);feginClientCache.put(baseUrl,feginClient);}}}return(T)feginClientCache.get(baseUrl);}} 接下来,我们就定义一个FeginClient接口。 publicinterfaceFeginClientProxy{@Headers("Content-Type:application/json;charset=UTF-8")@RequestLine("POST/user/login")UserLoginVologin(UserLoginVologinVo);} 接下来,我们创建SpringBoot的测试类。 @RunWith(SpringRunner.class)@SpringBootTestpublicclassBingheStarterTest{@TestpublicvoidtestUserLogin(){ResponseMessageresult=FeginClientFactory.getFeginClient(FeginClientProxy.class,"http://127.0.0.1").login(newUserLoginVo("zhangsan","123456"));System.out.println(JsonUtils.bean2Json(result));}} 一切准备就绪,运行测试。麻蛋,出问题了。主要的问题就是通过OpenFeign请求返回值LocalDateTime字段会发生异常!!! 注:此时异常时,我们在LocalDateTime字段上添加的注解如下所示。 importjava.time.LocalDateTime;importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatisplus.annotation.TableField;importcom.fasterxml.jackson.annotation.JsonFormat;@TableField(value="CREATE_TIME",fill=FieldFill.INSERT)@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",locale="zh",timezone="GMT+8")privateLocalDateTimecreateTime; 解决问题 问题描述 SpringBoot通过原生OpenFeign客户端调用HTTP接口,如果返回值中包含LocalDateTime类型(包括其他JSR-310中java.time包的时间类),在客户端可能会出现反序列化失败的错误。错误信息如下: Causedby:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:Cannotconstructinstanceof`java.time.LocalDateTime`(noCreators,likedefaultconstruct,exist):noString-argumentconstructor/factorymethodtodeserializefromStringvalue('2020-10-07T11:04:32') 问题分析 从客户端调用fegin,也是相当于URL传参就相当于经过一次JSON转换,数据库取出‘2020-10-07T11:04:32’数据这时是时间类型,进过JSON之后就变成了String类型,T就变成了字符不再是一个特殊字符,因此String的字符串“2020-10-07T11:04:32”反序列化就会失败。 问题解决 在项目中增加依赖。 <dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId><version>2.9.9</version></dependency> 注:如果是用的是SpringBoot,并且明确指定了SpringBoot版本,引入jackson-datatype-jsr310时,可以不用指定版本号。 接下来,在POJO类的LocalDateTime类型字段增加如下注解。 importcom.fasterxml.jackson.databind.annotation.JsonDeserialize;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; 添加后的效果如下所示。 importjava.time.LocalDateTime;importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatisplus.annotation.TableField;importcom.fasterxml.jackson.annotation.JsonFormat;importcom.fasterxml.jackson.databind.annotation.JsonDeserialize;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;@TableField(value="CREATE_TIME",fill=FieldFill.INSERT)@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",locale="zh",timezone="GMT+8")@JsonDeserialize(using=LocalDateTimeDeserializer.class)privateLocalDateTimecreateTime; 此时,再次调用远程接口,问题解决。 重磅福利 微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天阅读超硬核技术干货,公众号内回复【PDF】有我准备的一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套简历模板(不断更新中),希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见! 另外,我开源的各个PDF,后续我都会持续更新和维护,感谢大家长期以来对冰河的支持!! 写在最后 如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫! 留言区 本文分享自微信公众号 - 冰河技术(hacker-binghe)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
Mario

Mario

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

Oracle

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text

Sublime Text

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