首页 文章 精选 留言 我的

精选列表

搜索[保险反欺诈],共7514篇文章
优秀的个人博客,低调大师

Android加密货币欺诈APP泛滥 已窃取用户大量金钱

以比特币为代表的加密货币近年来一直受到投资者的追捧,并让数字资产真正成为主流。即便相较于 4 月的最高峰已损失了一半的价值,但一枚比特币的价值依然超过 32000 美元。这让不少人心动参与到挖矿大潮中,但其中也充斥着各种骗局,成千上万的用户的钱因此被盗。 本周一,网络安全公司 Lookout 发布了一份关于恶意加密货币挖矿应用程序的详细报告。他们的安全研究人员确定了170多个诈骗应用程序,这些应用程序声称提供云加密货币采矿服务,并收取费用。他们实际上没有开采任何东西,但他们会拿你的钱。 在博文中写道:“这些应用程序的全部理由是通过合法的支付程序从用户那里偷钱,但从不提供承诺的服务。根据我们的分析,他们诈骗了超过 93000 人,在用户支付应用程序和购买额外的假升级和服务之间至少盗取了 35 万美元”。 Lookout 将这些应用程序分为两个不同的类别 -- BitScam 和 CloudScam。唯一真正的区别是,BitScam 应用程序接受比特币和以太坊作为支付选项。最可怕的是,Lookout 在 Google Play 商店中发现了 25 个应用程序。随后Google删除了所有的应用程序,但骗子们仍然获利。 首先,许多应用程序都有预付费用,所以即使你从未使用它们,骗子也已经拿到了你的钱。为了让用户继续使用,他们会在其应用程序内出售升级和订阅服务。用户也不允许提取他们的收入,直到他们达到最低余额。即使他们达到了提现余额,这些应用程序也只是显示错误信息或重新设置余额。 Lookout 指出:“与BitScam类似,CloudScam 应用程序为用户提供了以更高速度赚取更多硬币的选项,例如升级到具有较低最低提款余额和较高采矿率的订阅计划,推荐朋友并赚取其朋友收益的20%,以及每日奖励。这些选项都不会为用户赚取金币。相反,它们的结果是为这些应用程序背后的骗子创造更多收入。” 鸿蒙官方战略合作共建――HarmonyOS技术社区 【责任编辑:赵宁宁 TEL:(010)68476606】

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

互联网金融,如何用知识图谱识别欺诈行为

导读 知识图谱 (Knowledge Graph) 是当前的研究热点。自从2012年Google推出自己第一版知识图谱以来,它在学术界和工业界掀起了一股热潮。各大互联网企业在之后的短短一年内纷纷推出了自己的知识图谱产品以作为回应。比如在国内,互联网巨头百度和搜狗分别推出”知心“和”知立方”来改进其搜索质量。那么与这些传统的互联网公司相比,对处于当今风口浪尖上的行业 - 互联网金融, 知识图谱可以有哪方面的应用呢? 目录 1. 什么是知识图谱? 2. 知识图谱的表示 3. 知识图谱的存储 4. 应用 5. 挑战 6. 结语 1. 什么是知识图谱? 知识图谱本质上是语义网络,是一种基于图的数据结构,由节点(Point)和边(Edge)组成。在知识图谱里,每个节点表示现实世界中存在的“实体”,每条边为实体与实体之间的“关系”。知识图

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

iOS使用GPUImage实现实时色相机

1 新建一个singleview工程,导入GPUImage库 2 添加属性 GPUImageVideoCamera *videoCamera; GPUImageOutput *filter; 3 viewDidload里面添加代码: videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack]; videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait; videoCamera.horizontallyMirrorFrontFacingCamera = NO; videoCamera.horizontallyMirrorRearFacingCamera = NO; filter = [[GPUImageColorInvertFilter alloc] init]; [videoCamera addTarget:filter]; GPUImageView *filterView = (GPUImageView *)self.view; [filter addTarget:filterView]; [videoCamera startCameraCapture]; 4 注意,这里要非常地注意!! 在storyboard里面把viewControl的view的类改为GPUImageView!!不然会报错,这也是烦扰了我半天的问题!google到了stackOverFlow才找到的答案。。 如果还报错,看看target-build setting里面,other linker flags 里面是否添加了 -fobjc-arc -ObjC 这两项 本文转自 卓行天下 51CTO博客,原文链接:http://blog.51cto.com/9951038/1772550,如需转载请自行联系原作者

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

人类的伪智能是如何骗钱的?

在中国培养一个孩子的成本,大概是50-100万人民币。在福利制度更加健全的美国,这个数字也稳定在144万人民币左右。当然这都还是在没有特殊开销的前提下。我想这或多或少可以说明,在孩子身上投钱这事上,不遗余力的父母是没有国界的。 一切为了孩子? Dynepic是一家官网上只售卖着两件T恤和三条跳绳的体育用品公司。在跨界成风的时代,Dynepic做智能硬件无可厚非。现在,Dynepic以79美元的价格在为DynePod进行众筹,后者是一款为儿童定制的智能产品。不是手环,不是手表,不是玩具,当然笔者也不是为了卖关子,而是真不知道它到底是什么。 根据官方说法,我们基本上可以理解为这朵奇葩的功能是:控制、防丢。当然,为了显得炫酷,控制的方式是儿童级的编程加传感器。联想起Google在德国小学推出的“Open Roberta”平台,其实做的也

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

大型服务端开发的模式技巧

1. 用线程池执行异步任务 为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。 你可能要惊讶了,这么做不对吗? 首先,我们把异步任务分为两种: 务必成功执行的 不成功就放弃 显然大多数时候都是第一种。那么当你把任务丢给线程池,你知道它完成了没有吗? 如果服务器宕机、升级或重启,那些尚未完成或还在排队的任务就丢了。后果是,用户在促销活动中抢到的优惠券,没有发给用户。更严重的后果是,一个订单在送往仓库系统的途中消失了。 我推荐的做法是把任务投递到消息中间件,让它分发给消息消费者来执行(消费者可能是发送者自身)。 消息中间件可以要求消费者在完成任务后通知中间件,否则就重新分发消息,直到收到任务已完成的通知。 如果中间件没这种功能,可以让应用要求消费者在完成任务后回发一个"任务已完成"的消息,但应用不能同步等待这一消息,否则异步就退化为同步了。 更重要的是,消息中间件有持久化功能,即使宕机也不丢消息,而且可以长期不升级、不重启。消息中间件的缺点是,对失败情况的处理难以定制化——你可能想定制重试间隔、重试次数等细节。 换个角度来看,要解决丢任务的问题,你不一定要用消息中间件。你可以在应用代码中把任务和完成状态保存到数据库中,用线程池执行,在完成后更新状态。这是不是很像作业调度(例如Quartz)呢?是的。 然而,有些任务确实是可有可无的,例如『刷新一个不重要的缓存』的任务,那么就随便丢到线程池吧。 2. 日志采用同步模式 我们知道,性能瓶颈通常都是I/O,尤其是数据库的I/O。因此我们用了缓存,速度蹬的一下窜上来了——不一定哦。 用缓存把I/O变成了内存计算,最大瓶颈消除,速度上升一个数量级。在这个数量级,一些原本不重要的因素开始产生影响了。 日志是一种I/O啊,虽然顺序写磁盘很快,但还是比内存计算要慢啊。更糟的是,一个线程写日志时,另一个线程必须等它写完才能接着写,否则日志会乱,当日志量较大时,就stop the world了。 所以当你的系统性能高到一定程度,就要对日志做性能优化了(有过提高3倍QPS的案例),两个常见办法: 少打日志 异步模式 今天少打日志,明天排查bug就想哭。所以主要靠异步模式。 Logback可以通过配置(网上搜一搜),在RollingFileAppender上套一个AsyncAppender,实际上就是加了个缓冲队列,变成了批量写磁盘。缺点是无法看到最新日志(还没写磁盘)。queueSize默认是256,即使设为16,也有明显的性能提升,还缓和了不能及时看到最新日志的问题。 Log4j 2的异步模式有更深入的优化,是否选用,以测试数据为准。 3. 没有超时设置 网络忘记设超时,系统随时可能挂。 每一个网络操作,都记得设置超时时间,超过这个时间就放弃。访问分布式缓存也如此。 如果不设超时,可能会等到天荒地老。网络,就是这么不确定。 4. 没有统计缓存命中率 一个命中率低下的缓存,不如没有。虽然LRU算法很好用,但未必没有例外情况。频繁作废的数据、大体积数据都可能是负担。 统计缓存命中率的实现办法可以是内存里计数,定期写到数据库或文件;也可以是把命中情况打到日志里,日后汇总统计。也可能有更精巧的实现。 当你的系统进入精耕细作时代,这个问题必然摆上案头。 5. 没有统计缓存响应时间 缓存一定快吗?我真的见过不快的。分布式缓存要经由网络,网络抖一抖,缓存抖三抖;还依赖运维,运维抖一抖,缓存抖三抖。此事之微妙,不可不察也。 留个心,设个超时,记个响应时间。一个简单办法是,当响应时间过长时,打一行日志,正常情况不打日志。这样既留了记录,又不产生过多日志。 6. 单一的缓存模式 分布式缓存是由缓存中间件组成的集群,一致性较好,缓存的很快会同步到所有副本。但是毕竟要经由网络,延迟为亚毫秒级,而且负载聚集到中间件,可能因网络拥塞或机器负载高而出现性能波动。 为了进一步提高部分业务的性能和稳定性,可能要辅以本地缓存。 缓存要有过期策略,如果使用了Guava Cache,可以选择expireAfterAccess(不常用)、expireAfterWrite或refreshAfterWrite策略: expire是先丢弃旧数据,再从数据库加载新数据,期间让数据库承担压力,适用于一般情况。 refresh是在异步加载新数据完成前,一直保留旧数据,能始终为数据库挡住压力,适用于高压情况。 各个应用实例的本地缓存是独立的,旧数据的作废依赖于过期策略。作为改进,可以利用消息队列,一个实例广播消息说某数据作废了,其他实例纷纷自检。这是准实时同步。 缓存的更新方式也影响着性能,@左耳朵耗子 的缓存更新的套路很好地介绍了三种套路,现在我来对比一下: Cache Aside Pattern: 应用程序在数据库和缓存之间周旋,以数据库为准。适合一般情况,因此最常用。 Read/Write Through Pattern: 应用只读写缓存,缓存同步写回数据库(同步是指应用等待着写回完成)。理论性能略高一些。 Write Behind Caching Pattern: 应用只读写缓存,缓存异步写回数据库(应用不等待写回完成,缓存若宕机将丢数据)。理论性能最高,如果有Write Ahead Logging特性,可避免丢数据,但略为降低性能。 7. 分布式缓存加锁 有的系统步入精耕细作时代后,想避免一种情况——缓存作废时,很多应用实例同时访问数据库,加重负载,而且浪费资源。于是有了给缓存加锁的方案。 简单版是每个实例内部设锁,某条数据只许一个线程去数据库取。复杂版是把锁设在分布式缓存中,某条数据只许一个实例去数据库取,然后放入缓存让其他实例用。 复杂版的想法是好的,但注意,锁要设置超时(还记得我上文说的吗),否则万一持有锁的实例发生问题,就全体耽误了。即使设了超时,也可能全体实例一直等待超时,浪费时间。所以这种方案不一定好,需以测试数据为准。 8. 疲于奔命 很多公司经常加班,实际上效率低下、也不持久,只能复制既有经验,靠不停换人来维持,其后果就是:需求混乱、bug巨多、创新乏力。 要把技术搞好,需要有条不紊,遇变不乱,持久输出。疲于奔命的模式,做不好大型服务端开发,也难以做好各种领域的开发。 作者:sorra 来源:51CTO

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

平安保险基于 SPI 机制的 RocketMQ 定制化应用

作者:孙园园|平安人寿资深开发 为什么选用 RocketMQ 首先跟大家聊聊我们为什么会选用 RocketMQ,在做技术选型的过程中,应用场景应该是最先考虑清楚的,只有确定好了应用场景在做技术选型的过程中才有明确的目标和衡量的标准。像异步、解耦、削峰填谷这些消息中间件共有的特性就不一一介绍了,这些特性是决定你的场景需不需要使用消息中间件,这里主要讲述下在确定使用消息中间件后,又是如何去选择哪款消息中间件的。 同步双写,确保业务数据安全可靠不丢失 我们在搭建消息中间件平台时的定位是给业务系统做业务数据的传输使用,对业务数据的很重要的一个要求就是不允许丢数据,所以选用 RocketMQ 的第一点就是他有同步双写机制,数据在主从服务器上都刷盘成功才算发送成功。同步双写条件下,MQ 的写入性能与异步刷盘异步赋值相比肯定会有所下降,与异步条件下大约会有 20% 左右的下降,单主从架构下,1K 的消息写入性能还是能达到 8W+ 的 TPS,对大部分业务场景而言性能是能完全满足要求的,另外对下降的这部分性能可以通过 broker 的横向扩招来弥补,所以在同步双写条件下,性能是能满足业务需求的。 多 topic 应用场景下,性能依旧强悍 第二点,业务系统的使用场景会特别多,使用场景广泛带来的问题就是会创建大量的 topic,所以这时候就得去衡量消息中间件在多 topic 场景下性能是否能满足需求。我自己在测试的时候呢,用 1K 的消息随机往 1 万个 topic 写数据,单 broker 状态下能达到2W左右的 TPS,这一点比 Kafka 要强很多。所以多 topic 应用场景下,性能依旧强悍是我们选用 topic 的第二个原因。这点也是由底层文件存储结构决定的,像 Kafka、RocketMQ 这类消息中间件能做到接近内存的读写能力,主要取决于文件的顺序读写和内存映射。RocketMQ 中的所有 topic 的消息都是写在同一个 commitLog 文件中的,但是 Kafka 中的消息是以 topic 为基本单位组织的,不同的 topic 之间是相互独立的。在多 topic 场景下就造成了大量的小文件,大量的小文件在读写时存在一个寻址的过程,就有点类似随机读写了,影响整体的性能。 支持事务消息、顺序消息、延迟消息、消息消费失败重试等 RocketMQ 支持事务消息、顺序消息、消息消费失败重试、延迟消息等,功能比较丰富,比较适合复杂多变的业务场景使用 社区建设活跃,阿里开源系统 另外,在选用消息中间件时也要考虑下社区的活跃度和源码所使用的开发语言,RocketMQ 使用 Java 开发,对 Java 开发人员就比较友好,不管是阅读源码排查问题还是在 MQ 的基础上做二次开发都比较容易一点。社区里同学大都是国内的小伙伴,对大家参与 RocketMQ 开源贡献也是比较亲近的,这里呢也是希望更多的小伙伴能参与进来,为国内开源项目多做贡献。 SPI 机制简介及应用 介绍完为什么选用 RocketMQ 后,接下来给大家介绍下我们是如何基于 SPI 机制应用 RocketMQ 的。SPI 全称为 (Service Provider Interface) ,是 JDK 内置的一种服务提供发现机制,我个人简单理解就是面向接口编程,留给使用者一个扩展的点,像 springBoot 中的 spring.factories 也是 SPI 机制的一个应用。如图给大家展示的是 RocketMQ 中 SPI 的一个应用。我们基于 SPI 机制的 RocketMQ 客户端的应用的灵感也是来自于 MQ 中 SPI 机制的应用。RocketMQ 在实现 ACL 权限校验的时候,是通过实现 AccessValidator 接口,PlainAccessValidator 是 MQ 中的默认实现。权限校验这一块,可能因为组织架构的不一样会有不同的实现方式,通过 SPI 机制提供一个接口,为开发者定制化开发提供扩展点。在有定制化需求时只需要重新实现 AccessValidator 接口,不需要对源码大动干戈。 接下来先给大家介绍下我们配置文件的一个简单模型,在这个配置文件中除了 sendMsgService、consumeMsgConcurrently、consumeMsgOrderly 这三个配置项外其余的都是 RocketMQ 原生的配置文件,发送消息和消费消息这三个配置项呢就是 SPI 机制的应用,是为具体实现提供的接口。可能有的同学会有疑问,SPI 的配置文件不是应该放在 META-INF.service 路径下么?这里呢我们是为了方便配置文件的管理,索性就跟 MQ 配置文件放在了一起。前面也提到了,META-INF.service 只是一个默认的路径而已,为了方便管理做相应的修改也没有违背SPI机制的思想。 我们再看下这个配置文件模型,这里的配置项呢囊括了使用 MQ 时所要配置的所有选项,proConfigs 支持所有的 MQ 原生配置,这样呢也就实现了配置与应用实现的解耦,应用端只需呀关注的具体的业务逻辑即可,生产者消费者的实现和消费者消费的 topic 都可以通过配置文件来指定。另外该配置文件也支持多 nameserver 的多环境使用,在较复杂的应用中支持往多套 RocketMQ 环境发送消息和消费多套不同环境下的消息。消费者提供了两个接口主要是为了支持 RocketMQ 的并发消费和顺序消费。接下来呢给大家分享下如何根据这个配置文件来初始化生产者消费者。首先给大家先介绍下我们抽象出来的客户端加载的一个核心流程。 客户端核心流程详情 图中大家可以看到,客户端的核心流程我们抽象成了三部分,分别是启动期、运行期和终止期。首先加载配置文件呢就是加载刚刚介绍的那个配置文件模型,在配置与应用完全解耦的状态下,必须先加载完配置文件才能初始化后续的流程。在初始化生产者和消费者之前应当先创建好应用实现的生产者和消费者的业务逻辑对象 供生产者和消费者使用。在运行期监听配置文件的变化,根据变化动态的调整生产者和消费者实例。这里还是要再强调下配置与应用的解耦为动态调整提供了可能。终止期就比较简单了,就是关闭生产者和消费者,并从容器中移除。这里的终止期指的生产者和消费者的终止,并不是整个应用的终止,生产者和消费者的终止可能出现在动态调整的过程中,所以终止了的实例一定要从容器中移除,方便初始化后续的生产者和消费者。介绍完基本流程后,接下来给大家介绍下配置文件的加载过程。 如何加载配置文件 配置文件加载这一块的话,流程是比较简单的。这里主要讲的是如何去兼容比较老的项目。RocketMQ 客户端支持的 JDK 最低版本是 1.6,所以在封装客户端时应该要考虑到新老项目兼容的问题。在这里呢我们客户端的核心包是支持 JDK1.6 的,spring 早期的项目配置文件一般都是放在在 resources 路径下,我们是自己实现了一套读取配置文件的和监听配置文件的方法,具体的大家可以参考 acl 中配置文件的读取和监听。在核心包的基础上用 springBoot 又封装了一套自动加载配置文件的包供微服务项目使用,配置文件的读取和监听都用的 spring 的那一套。配置文件加载完之后, 配置文件中应用实现的生产者和消费者是如何与 RocketMQ 的生产者和消费者相关联的呢?接下来给大家分享下这方面的内容。 如何将生产消费者与业务实现关联 首先先看下消费者是如何实现关联的,上图是 MQ 消费者的消息监听器,需要我们去实现具体的业务逻辑处理。通过将配置文件中实现的消费逻辑关联到这里就能实现配置文件中的消费者与 RocketMQ 消费者的关联。消费者的接口定义也是很简单,就是去消费消息。消费消息的类型可以通过泛型指定,在初始化消费者的时候获取具体实现的参数类型,并将 MQ 接受到的消息转换为具体的业务类型数据。由客户端统一封装好消息类型的转换。对消费消息的返回值大家可以根据需要与 MQ 提供的 status 做一个映射,这里的 demo 只是简单显示了下。在获取具体的应用消费者实例的时候,如果你的消费逻辑里使用了 spring 管理的对象,那么你实现的消费逻辑对象也要交给 spring 管理,通过 spring 上下文获取初始化好的对象;如果你的消费逻辑里没有使用 spring 进行管理,可以通过反射的方式自己创建具体的应用实例。 与消费者不一样的是生产者需要将初始化好的 producer 对象传递到应用代码中去,而消费者是去获取应用中实现的逻辑对象,那如何将 producer 传递到业务应用中去呢? 业务代码中实现的生产者需要继承 SendMessage,这样业务代码就获得了 RmqProducer 对象,这是一个被封装后的生产者对象,该对象对发送消息的方法进行的规范化定义,使之符合公司的相应规范制度,该对象中的方法也会对 topic 的命名规范进行检查,规范 topic 有一个统一的命名规范。 如何动态调整生产消费者 首先谈到动态调整就需要谈一下动态调整发生的场景,如果没有合适的使用场景的话实现动态调整就有点华而不实了。这里我列举了四个配置文件发生变化的场景: nameserver发生变化的时候,需要重新初始化所有的生产者和消费者,这个一般是在 MQ 做迁移或者当前 MQ 集群不可用是需要紧急切换 MQ; 增减实例的场景只要启动或关闭相应的实例即可,增加应用实例的场景一般是在需要增加一个消费者来消费新的 topic 的,减少消费者一般是在某个消费者发生异常时需要紧急关闭这个消费者,及时止损。 调整消费者线程的场景中我们对源码进行了一点修改,让应用端能获取到消费者的线程池对象,以便对线程池的核心线程数进行动态调整。这个的应用场景一般是在当某个消费者消费的数据比较多,占用过多的 CPU 资源时,导致优先级更高的消息得不到及时处理,可以先将该消费者的线程调小一些。 应用的优点 发布云原生技术最新资讯、汇集云原生技术最全内容,定期举办云原生活动、直播,阿里产品及用户最佳实践发布。与你并肩探索云原生技术点滴,分享你需要的云原生内容。 关注【阿里巴巴云原生】公众号,获取更多云原生实时资讯!

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

20180403_调bug_大地保险_jar包冲突

一、异常现象 他们程序在本地通过java形式直接跑起来的时候,是正常的。 但是测试服务器上,程序跑到一半就不继续往下走了,而且,也不报错,日志里面没有任何信息。 二、异常解决 1.核心思想 抽丝剥茧,层层逼近。缩小bug出现的范围。 2.异常解决过程 参考:java根据jar包反编译后修改再打包回jar的做法 2.1 反编译jar包 使用jd-gui反编译jar包(A),复制反编译后的class文件里的内容 2.2 修改java文件 在eclipse中新建一个工程,新建一个java类,类名和class文件名称一致,将class文件的内容粘贴进来 然后再修改java文件的内容。这里主要是增加一些打印语句 2.3 eclipse打jar包 通过eclipse将2.2中的工程打成一个jar包(B),用解压工具(如好压)解压 再将原本的jar包(A),用解压缩工具解压得到文件夹C。 将修改后class文件替换掉文件夹C中的class文件 2.4 命令行打jar包 从命令行进入到文件夹C,执行打包命令: jar -cvf bbb.jar * //将文件夹C中的所有文件打包进bbb.jar 2.5 替换jar 将修改后的jar包替换掉原工程中的jar包。 2.6 得到结果 反复执行以上操作,发现最终出现问题的地方是: MongoClientURI uri = new MongoClientURI(this.mongoUri, new MongoClientOptions.Builder().connectionsPerHost(connectionsPerHost).serverSelectionTimeout(serverSelectionTimeout)); 程序执行到这里就不继续往下执行了,然后可以发现MongoClientURI 这个类是 mongoDB的。那么可能是mongoDB出问题了。 是什么问题呢?为什么本地是正常的,但是测试服务器上就出异常了呢?这两个地方mongoDB 有什么不同吗? 然后去测试服务器上看看,发现测试服务器上mongoDB的驱动有两个。 那么是不是因为jar包冲突导致的呢?删掉一个试试,发现程序正常了 三、参考资料 1.java根据jar包反编译后修改再打包回jar的做法

资源下载

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

用户登录
用户注册