当前位置: 首页 > news >正文

建设将网站加入受信网站再试网站找到后台了 如何破解账号 密码

建设将网站加入受信网站再试,网站找到后台了 如何破解账号 密码,浙江标力建设集团网站,菏泽网站建设网站lombok var介绍 在本文中#xff0c;我将结合使用Lombok和Fluxtion这两种产品#xff0c;以展示工具如何在减少代码编写和交付时间的同时提高代码的可读性。 使用Java 10中的var可以进一步改善这种情况。 产品和var都在构建时使用推断来加速开发。 Fluxtion的精神是最大程度… lombok var 介绍 在本文中我将结合使用Lombok和Fluxtion这两种产品以展示工具如何在减少代码编写和交付时间的同时提高代码的可读性。 使用Java 10中的var可以进一步改善这种情况。 产品和var都在构建时使用推断来加速开发。 Fluxtion的精神是最大程度地减少浪费我们这里的目标是删除样板代码减少代码噪声并简化集成任务。 我们希望花费尽可能少的开发时间同时仍提供能够每秒处理数百万条消息的高效且高性能的解决方案。 使用所描述的技术我将Fluxtion / Lombok实现与使用Akka流的scala示例进行了比较Java版本需要较少的代码并且更易于构建。 家政服务对未承认Richard Warburton的道歉 Opsian 在我的第一个博客中 。 代码信噪比 在编写代码时我们要解决两个主要任务 将业务需求转换为程序逻辑 将逻辑与部署环境接口 理想情况下我们希望将所有时间都花在第一个而不是第二个上。 另外应减少编写的代码总量。 平衡抽象同时又要赋予开发人员权力并不容易抽象太大了我们就失去了表现力。 我希望能够与本文采用的方法取得良好的平衡。 想象一下编写一些占用50行的税收计算逻辑但是编写数据库Web服务器编组日志记录等代码需要1000行。 尽管演示了技术能力但是在纯粹的技术实施细节中没有商业价值。 从另一个角度来看我们可以将业务逻辑视为一种信号将基础架构代码视为一种噪声。 我们编写的解决方案可以相对于有用的业务逻辑用信噪比来衡量。 维基百科将信噪比定义为 信噪比缩写为SNR或S / N是用于 将所需信号的电平与背景噪声的电平进行比较的科学和工程学 。 SNR定义为信号功率与噪声功率之比通常以分贝表示。 比率大于11大于0 dB表示信号多于噪声。 在大多数系统中希望以高SNR比为目标从编程的角度来看高SNR的一些优点是 减少编写代码 易于理解和维护的业务逻辑 学习曲线更短 更简单的调试/故障查找更少出错 更有效的发展 在Java中多年来从重量级的j2ee容器到更简单的框架如spark和spring boot 我们一直感受到提高代码SNR的压力。 语言本身通过引入诸如lambda流方法引用和var变量声明之类的更改来适应了这一转变。 结合通量和Lombok 在该示例之前先快速入门有关通量和Lombok。 助焊剂 Fluxtion是用Java编写的可嵌入流事件处理引擎。 开发人员以声明式和命令式的混合形式描述处理过程以便Fluxtion可以生成决策引擎。 该引擎已序列化为Java代码并且可以嵌入任何Java应用程序中。 该应用程序将事件输入引擎以进行流处理。 引擎生成可以在应用程序中以内联方式进行也可以通过maven插件在生成过程中进行。 Lombok底漆 Lombok是一个实用程序可以自动为Java类编写样板代码从而节省开发人员时间并减少代码噪音。 作为注释处理工具执行时Lombok会生成表示已注释类的样板代码的字节代码。 Lombok功能集不完整包括 属性的自动bean样式获取器和设置器 哈希代码和为属性生成的等于 自动toString方法 所有类属性的自动构造函数 只需将Lombok添加到您的Maven构建中您的ide应该就可以使用或者与netbeans和intellij一起使用。 流最大温度示例 让我们看一下常见的Fluxtion使用模式。 订阅事件流从事件中提取值对该值执行计算过滤并将结果推入用户对象。 在这个简单的示例中我们满足以下要求 倾听温度事件 提取温度 保持最高温度 当出现新的最高温度时将温度推入用户定义的实例中 克隆的回购从GitHub和使用本文的标记版本。 该项目在这里 。 git clone --branch  article_lombok_july2019 https://github.com/gregv12/articles.gitcd articles/2019/june/lombok/ 满足处理要求的助焊剂代码 select(TempEvent::getTemp).map(max()).notifyOnChange(true).push(new MyTempProcessor()::setMaxTemp); 这提供了较高的代码SNR和较低的行数所有代码都是针对业务逻辑的。 要实现此功能需要使用方法引用和类型推断。 方法引用允许Fluxtion推断所需的行为要构建的功能源和目标类型以及如何在执行图中将数据从一个节点传递到另一个节点。 方法参考为我们提供了一种表达任意逻辑的令人愉快的类型安全方式。 该工具采用的推论消除了开发人员的负担以明确表达每个处理步骤从而为我们提供了一个低代码工作环境。 在生成Fluxtion之后序列化的流事件处理器为 在此 以Java代码表示。 示例的测试在这里 。 Testpublic void testTemp() throws Exception{EventHandler handler new InlineLombok().handler();((Lifecycle)handler).init();handler.onEvent(new InlineLombok.TempEvent(10));handler.onEvent(new InlineLombok.TempEvent(9));handler.onEvent(new InlineLombok.TempEvent(17));handler.onEvent(new InlineLombok.TempEvent(16));handler.onEvent(new InlineLombok.TempEvent(14));handler.onEvent(new InlineLombok.TempEvent(24));Assert.assertEquals(3, MyTempProcessor.count);} 输出 08:08:42.921 [main] INFO c.f.generator.compiler.SepCompiler - generated sep: D:\projects\fluxtion\articles\2019\june\lombok\target\generated-sources\fluxtion\com\fluxtion\articles\lombok\temperature\generated\lombok\TempMonitor.java new max temp:10.0 new max temp:17.0 new max temp:24.0 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.79 sec 处理图形图像 仔细查看上面示例中的第一行selectTempEvent :: getTemp 我们可以检查Fluxtion所做的推断。 这里暗示的逻辑是 为TempEvent类型的事件创建订阅 添加一个从传入事件中提取getTemp值的节点 使临时值可用作节点的Number属性 收到输入温度事件时通知孩子温度值的变化。 映射notifyOnChange和push函数是添加到执行链中的步骤。 有关详细信息请参见Fluxtion流模块的包装器接口。 由于SNR高因此很容易理解它们的目的和效果但出于完整性考虑 mapmax从上一个节点温度提取number属性。 当接收到新值时将该值应用于有状态max函数。 将当前最大值存储在具有Number属性的节点中。 接收事件时通知任何子节点当前最大值。 notifyOnChange一个有状态函数在所监视的值已更新且与先前的值不同时触发。 仅新的最大值传播到子节点。 pushnew MyTempProcessor:: setMaxTemp将用户节点MyTempProcessor添加到执行链中。 当由新的最大温度触发时将节点的值推入MyTempProcessor的setMaxTemp中。 对原始类型执行所有类型转换而不会产生垃圾。 要在TempEvent上使用方法引用我们首先需要定义一个getter / setter样式访问器方法对。 当然ide可以生成所需的方法但是SNR在生成后仍然会下降。 将其扩展到更大的域问题成倍增加。 Lombok可以在这里为我们提供帮助删除不必要的代码并恢复SNR。 在Lombok之前 public class InlineNoLombok {public EventHandler handler() throws Exception {return sepInstance(c- select(TempEvent::getTemp).map(max()).notifyOnChange(true).push(new MyTempProcessor()::setMaxTemp),com.fluxtion.articles.lombok.temperature.generated.nolombok, TempMonitor);}public static class TempEvent extends Event {private double temp;public TempEvent(double temp) {this.temp temp;}public double getTemp() {return temp;}public void setTemp(double temp) {this.temp temp;}}}Lombok之后 添加单个Data注释将删除getter / setter而AllArgsConstructor会删除构造函数 public class InlineLombok {public EventHandler handler() throws Exception {return sepInstance(c- select(TempEvent::getTemp).map(max()).notifyOnChange(true).push(new MyTempProcessor()::setMaxTemp),com.fluxtion.articles.lombok.temperature.generated.nolombok, TempMonitor);}DataAllArgsConstructorpublic static class TempEvent extends Event {private double temp;} } 即使使用Lombok和Fluxtion的最小示例实际的业务逻辑也更易于阅读。 更好的代码SNR使应用程序的构建效率更高更易于理解。 航班资料示例 让我们将其扩展到一个更复杂的示例其中高SNR的值变得显而易见。 在此示例中我们正在处理整个一年的航班数据。 该示例受此博客的启发而akka流解决方案的代码在此处 。 要求摘要 处理以CSV格式存储的一年的所有美国航班着陆记录的价值 在这里 。 按名称分组运营商 筛选延迟 0的记录 运营商名称第8列延迟时间第14列 对于运营商分组请计算 总延迟累积 计算航班总数不考虑延误 我们需要定义数据类型和处理逻辑来解决该问题。 解决方案中的噪声很容易使您不知所措。 但是Fluxtion允许我们专注于业务逻辑而Lombok使数据类型易于使用两种工具都使用推理来减少编写代码 public class FlightAnalyser {SepBuilder(name FlightDelayAnalyser,packageName com.fluxtion.articles.lombok.flight.generated)public void buildFlightProcessor(SEPConfig cfg) {var flightDetails csvMarshaller(FlightDetails.class, 1).map(14, FlightDetails::setDelay).converter(14, defaultInt(-1)).map(8, FlightDetails::setCarrier).converter(8, Converters::intern).build();//filter and group byvar delayedFlight flightDetails.filter(FlightDetails::getDelay, positive());var carrierDelay groupBy(delayedFlight, FlightDetails::getCarrier, CarrierDelay.class);//derived values for a groupcarrierDelay.init(FlightDetails::getCarrier, CarrierDelay::setCarrierId);carrierDelay.avg(FlightDetails::getDelay, CarrierDelay::setAvgDelay);carrierDelay.count(CarrierDelay::setTotalFlights);carrierDelay.sum(FlightDetails::getDelay, CarrierDelay::setTotalDelayMins);//make public for testingvar delayByGroup cfg.addPublicNode(carrierDelay.build(), delayMap);//dump to console, triggers on EofEventprintValues(\nFlight delay analysis\n,delayByGroup, eofTrigger());}Data //input data from CSVpublic static class FlightDetails {private String carrier;private int delay;}Data //derived datapublic static class CarrierDelay {private String carrierId;private int avgDelay;private int totalFlights;private int totalDelayMins;}}实施分析 Lombok使我们能够处理数据类和字段类型而无需使用getter / setter方法。 我们定义输入记录FlightDetails和分组摘要记录CarrierDelay。 使用var关键字进行中间实例分配可简化代码的读写。 第8行 Fluxtion将csv映射到FlightDetails类型该数字1表示要忽略的初始标题行。 第9行将第 14列映射到延迟值。 可选的转换器函数将丢失的或非数字的延迟映射到值-1。 通过Fluxtion进行类型推断可确保从零gc到char到int的转换 第10行将第 8列映射到运营商名称。 可以使用载体名称以减少不必要的String对象分配因为我们希望相同的载体名称会多次出现。 请记住有700万条记录将大大降低gc压力。 第12行将过滤器函数positive应用于字段FlightDetails :: getDelay。 只有延迟的航班由子节点处理。 第13行的已过滤记录delayFlight由关键字FlightDetails :: getCarrier分组该组的目标是CarrierDelay。 第15行定义了新载波进入组的初始化函数仅当在组中分配了新密钥时才调用。 第16行将平均值函数应用于延迟并设置值CarrierDelaysetAvgDelay 第17行将 count函数应用于延迟并设置值CarrierDelaysetTotalFlights 第18行将求和函数应用于延迟并设置值CarrierDelaysetTotalDelayMinutes 计算是有状态的并且对于每个承运人都有唯一的值每当收到FlightDelay记录时相关承运人的计算就会更新。 第21行将delayMap分配为公共最终变量以帮助测试 第22行在收到文件结束事件时打印映射值 性能 执行2008年的航班分析解压缩Flight Csv数据并将文件位置传递到分发中的可执行jar。 java.exe -jar dist\flightanalyser.jar [FLIGHT_CSV_DATA]Flight delay analysisFlightAnalyser.CarrierDelay(carrierIdOO, avgDelay31, totalFlights219367, totalDelayMins6884487) FlightAnalyser.CarrierDelay(carrierIdAA, avgDelay35, totalFlights293277, totalDelayMins10414936) FlightAnalyser.CarrierDelay(carrierIdMQ, avgDelay35, totalFlights205765, totalDelayMins7255602) FlightAnalyser.CarrierDelay(carrierIdFL, avgDelay31, totalFlights117632, totalDelayMins3661868) FlightAnalyser.CarrierDelay(carrierIdDL, avgDelay27, totalFlights209018, totalDelayMins5839658) FlightAnalyser.CarrierDelay(carrierIdNW, avgDelay28, totalFlights158797, totalDelayMins4482112) FlightAnalyser.CarrierDelay(carrierIdUA, avgDelay38, totalFlights200470, totalDelayMins7763908) FlightAnalyser.CarrierDelay(carrierId9E, avgDelay32, totalFlights90601, totalDelayMins2907848) FlightAnalyser.CarrierDelay(carrierIdCO, avgDelay34, totalFlights141680, totalDelayMins4818397) FlightAnalyser.CarrierDelay(carrierIdXE, avgDelay36, totalFlights162602, totalDelayMins5989016) FlightAnalyser.CarrierDelay(carrierIdAQ, avgDelay12, totalFlights1908, totalDelayMins23174) FlightAnalyser.CarrierDelay(carrierIdEV, avgDelay35, totalFlights122751, totalDelayMins4402397) FlightAnalyser.CarrierDelay(carrierIdAS, avgDelay27, totalFlights62241, totalDelayMins1714954) FlightAnalyser.CarrierDelay(carrierIdF9, avgDelay21, totalFlights46836, totalDelayMins992044) FlightAnalyser.CarrierDelay(carrierIdB6, avgDelay42, totalFlights83202, totalDelayMins3559212) FlightAnalyser.CarrierDelay(carrierIdWN, avgDelay26, totalFlights469518, totalDelayMins12633319) FlightAnalyser.CarrierDelay(carrierIdOH, avgDelay34, totalFlights96154, totalDelayMins3291908) FlightAnalyser.CarrierDelay(carrierIdHA, avgDelay18, totalFlights18736, totalDelayMins342715) FlightAnalyser.CarrierDelay(carrierIdYV, avgDelay37, totalFlights111004, totalDelayMins4159465) FlightAnalyser.CarrierDelay(carrierIdUS, avgDelay28, totalFlights167945, totalDelayMins4715728)millis:2682 加工性能分析 file size            673 Mbrecord count        7,009,728 比较这两种解决方案我们观察到以下几点 Java版本使用的代码少于scala版本 通量消除了定义图的需要而不仅仅是业务逻辑 手动建立图形是错误的根源 Lombok使数据类型像scala case类一样简洁 var减少代码膨胀 信噪比高使代码更易于维护和理解 Fluxtion易于运行不需要安装服务器只需编译即可运行。 比较性能数字很困难Akka版本谈论了运行示例的一分钟但是我没有足够的Akka经验来验证这一点。 此外这是一个古老的博客因此情况可能会继续发展。 结论 我们着手证明如果选择了一套不错的工具那么Java可以成为事件流的简洁语言。 Lombok和Fluxtion完美地结合在一起使处理逻辑的声明式定义既简单又安全。 var的使用使代码更具可读性更易于编写。 所有这些的关键是推论每个工具都推论出不同类型的行为并且所有这些都使编码人员不必显式地指定行为 var –类型推断 Lombok–推断锅炉板的实施 通量–推断加工图 对于Fluxtion我们比较Akka版本如何要求开发人员明确定义处理图。 这不适用于更大更复杂的情况并且将成为错误的来源。 更糟糕的是业务逻辑被技术基础架构所掩盖从而使维护成本在未来更加昂贵。 最后要指出的是该解决方案的性能非常出色每秒处理260万条记录且gc为零。 我希望您喜欢这份工作并很想尝试Fluxtion和Lombok。 致谢 AllSimon在github上 他对Fluxtion的贡献使我开始尝试Lombok 翻译自: https://www.javacodegeeks.com/2019/07/easy-event-processing-with-var-lombok-and-fluxtion.htmllombok var
http://www.yutouwan.com/news/39316/

相关文章:

  • 网站建设分金手指专业二七专业的网页设计流程
  • 服装行业网站模板wordpress admin theme 下载
  • 国内投资咨询网站 html模板网站流量50g
  • o2o免费网站建设集团门户网站建设
  • 潍坊公司网站建设郑州营销型网站制作运营
  • 电子厂网站建设方案书怎么写广州网页设计模板
  • 做食品网站有哪些东西你需要网站建设
  • 贵阳能做网站的公司有哪些珠海新盈科技有限公司 网站建设
  • 建个人网站一般多少钱seo 网站文案模板
  • 安阳那里可以制作网站手游开服网
  • 一个阿里云怎么做两个网站吗淘宝网页设计代码
  • 北京seo网站诊断张家界企业网站制作
  • 创建网站的好处微信公众号开发需要多少钱
  • 最佳外贸建站平台网站设计企
  • 公路投资建设有限公司网站做铝材哪些网站招聘
  • 绿色农产品网站上海网站排名优化价格
  • 网站建设的主要观点安阳做网站的费用
  • 你认为当前最流行的网络营销是什么杭州seo招聘
  • 下载宝硬盘做网站做娱乐网站需要哪些
  • 有谁帮做网站的美了一站式变美共享平台
  • 临汾外贸网站建设价格怎么学好网页设计
  • 网站服务理念建设银行网站查余额查询
  • 电视剧在线观看免费影视网站网站配色设计
  • 成都智能建站模板A00网站建设
  • 专门做外贸的网站有哪些美术馆网站页面设计
  • 深圳网站设计公司电重庆网站建设方案书
  • 两学一做 网站源码濮阳网络电视台直播
  • 网站架构图网站做后台教程
  • 书画展示网站模板html门户网站
  • 网站备案公司孝感英文网站建设