首页 文章 精选 留言 我的

精选列表

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

支持泛型、性能优化...

距离 Go 1.17 发布七个月后,Go 1.18 正式发布了!Go 1.18 是一个包含大量新功能的版本,包括对语言本身做了有史以来最大的改变(泛型)、工具链的实现、运行时和库的更改,还改善了性能。 与往常一样,该版本保持了 Go 1的兼容性承诺:几乎所有 Go 程序都能像以前一样继续编译和运行。下面来看一下新版本的一些重大特性: 泛型 以下是关于 Go 1.18 泛型的最明显变化的列表,如需更全面的概述请参阅泛型提案,更详细信息请参阅语言规范。 函数和类型声明的语法,现在接受类型参数。 参数化函数和类型可以通过在方括号中列出类型参数来实例化。 新标记~已添加到操作符和标点符号中。 接口类型的语法现在允许嵌入任意类型(不仅仅是接口的类型名称)以及 union 和 ~T 类型元素。,这样的接口只能用作类型约束。 新的预声明标识符any是空接口的别名,可以用来代替interface{}. 新的预声明标识符comparable是一个接口,表示可以使用==或者!= 比较的所有类型的集合,它只能用作(或嵌入)类型约束。 有三个使用泛型的实验包可能有用,这些包在 x/exp 存储库中;但它们的 API 不在 Go 1 兼容性承诺的保证范围内: golang.org/x/exp/constraints:对通用代码有用的约束,例如constraints.Ordered. golang.org/x/exp/slices:对任何元素类型的切片进行操作的通用函数集合。 golang.org/x/exp/maps:对任何键或元素类型的映射进行操作的通用函数集合。 当前的泛型实现具有以下已知限制: Go 编译器无法处理泛型函数或方法中的类型声明,计划在 Go 1.19 中取消这个限制。 Go 编译器不接受具有预声明函数 real、imag 和 complex 的参数类型的参数,计划在 Go 1.19 中取消这个限制。 如果 m 由 P 的约束接口显式声明,Go 编译器仅支持在类型参数类型 P 的值 x 上调用方法 m。 类似地,方法值 x.m 和方法表达式 P.m 也仅在 m 由 P 显式声明时才受支持,即使 m 可能在 P 的方法集中,因为 P 中的所有类型都实现了 m,计划在 Go 1.19 中取消这个限制。 Go 编译器不支持访问结构字段 x.f,其中 x 是类型参数类型,即使类型参数的类型集中的所有类型都具有字段 f,计划在 Go 1.19 中取消这个限制。 不允许将类型参数或指向类型参数的指针作为结构类型中的未命名字段嵌入,同样地,也不允许在接口类型中嵌入类型参数。 具有多个 term的 union 元素可能不包含具有非空方法集的接口类型。 泛型代表 Go 生态系统的巨大变化,虽然官方更新了几个支持泛型的核心工具,但还有很多工作要做。剩余的工具、文档和库需要一些时间才能赶上这些语言变化。此外,官方公告中还有这么一段话: 可能会有一些使用泛型的代码可以在 1.18 版本中使用,但在以后的版本中会中断。 我们不计划或期望做出任何此类更改,但是,由于我们今天无法预见的原因,可能需要在未来版本中破坏 1.18 的程序。 我们鼓励在有意义的地方使用泛型,但在生产环境中部署泛型代码时,请谨慎行事。 (虽然泛型是搞出来了,但很可能有 Bug,不建议在生产中使用) 模糊测试 Go 1.18 包括 fuzzing(模糊测试) 的实现,如fuzzing 提案所述,详情请参阅fuzzing 教程以开始使用。 注意,模糊测试会消耗大量内存,并且可能会影响机器运行时的性能。 另请注意,模糊引擎在运行时会将扩展测试覆盖率的值写入模糊缓存目录$GOCACHE/fuzz。目前对可以写入模糊缓存的文件数量或总字节数没有限制,因此可能会占用大量存储空间(可能为 GB 级别)。 编译器 现在编译器可以内联包含范围循环或标记为循环的函数。 编译器的类型检查器被完全替换以支持泛型,一些错误消息可能使用与以前不同的措辞(提供更多详细信息,或以更有用的方式表述)。 由于与支持泛型相关的编译器的更改,Go 1.18 的编译速度可能比 Go 1.17 的编译速度慢大约 15%,代码的执行时间不受影响,目前计划在 Go 1.19 中提高编译器的速度。 Bug fixes Go 1.18 编译器可以正确地报告在函数文本中设置但从未使用过的变量的错误(已声明但未使用),解决了一个老问题issue#8560。 Go 1.18 编译器现在在将如 '1' << 32 之类的符文常量表达式作为参数传递给预声明函数 print 和 println 时会报告溢出。 端口 AMD64 Go 1.18 引入了新的GOAMD64环境变量,它在编译时选择 AMD64 架构的最低目标版本,允许的值为v1、v2、v3或v4,默认是v1。 RISC-V Linux 上的 64 位 RISC-V 架构(linux/riscv64 端口)现在支持 c-archive 和 c-shared 构建模式。 Linux Go 1.18 需要 Linux 内核版本 2.6.32 或更高版本。 Windows windows/arm 和 windows/arm64 端在支持非合作抢占,有希望解决在调用 Win32 函数时遇到的一些细微的 bug,这些bug在很长一段时间内会阻塞。 iOS 在 iOS(ios/arm64 端口)和在基于 AMD64 的 macOS(ios/amd64 端口)上运行的 iOS 模拟器上,Go 1.18 现在需要 iOS 12 或更高版本; 已停止支持以前的版本。 FreeBSD Go 1.18 是支持 FreeBSD 11.x 的最后一个版本,Go 1.19 需要 FreeBSD 12.2+ 或 FreeBSD 13.0+。 性能提升 由于 Go1.17 中寄存器 ABI 调用约定扩展到了RM64 / Apple M1 / PowerPC 64架构,因此 Go1.18 对这几个架构包含了高达 20% 的 CPU 性能提升。 该 Go 1.18 版本还包含其他大量更新项,完整更新列表请在发行公告中查看。 相关链接 下载:https ://go.dev/dl/ 发行说明:https ://go.dev/doc/go1.18 博客:https ://go.dev/blog/go1.18 关于新教程的博文:https ://go.dev/blog/tutorials-go1.18

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

Mozi.Network 1.3.7 发布:优化 IoT 调试工具

Mozi.Network是基于.Net开发的网络应用组件套装。所有的模块在实现时均以应用场景为出发点进行开发,保证模块精巧,功能完备,调用简单,可扩展性强,且调用不破坏宿主程序的逻辑结构。 [解决] 解决CoAP.exe的一些问题,并增加一些参数 修正BlockOptionValue,UnSignedIntegerValue赋值错误的问题 [新增] 进一步实现分块传输,增加文件上传功能

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

Firefox 95 发布,新增 RLBox 并优化速度与功耗

Firefox 95.0 今天正式发布,这是 Firefox 在 2021 年的最后一个主要稳定版本。Firefox 95 包含多项新功能和改进: 新功能 RLBox:新的沙盒技术,可以加固 Firefox 浏览器以防止第三方库中的潜在安全漏洞。现在已在所有平台上启用。(技术详情可查看这篇报道:链接) 现在可以在 Windows 10 和 Windows 11 平台上从微软商店下载 Firefox。 减少了事件处理过程中 Firefox 和 WindowServer 在 macOS 上的 CPU 使用率。 减少了 macOS 上软件解码视频的功耗,特别是在全屏状态下。这包括如 Netflix 和 Amazon Prime Video 这样的流媒体网站。 你现在可以把画中画切换按钮移到视频的另一侧。 为了更好地保护 Firefox 用户免受 Spectre 等攻击,现在所有 Firefox 95 都启用了站点隔离。 修复 启动 Firefox 后,使用 JAWS 屏幕阅读器和 ZoomText 放大镜的用户将不再需要切换应用程序以访问 Firefox。 macOS 上的内容进程启动更快。 对内存分配器进行了改进。 通过推测性地提前编译 JavaScript 来提高页面加载性能。 安全问题的修复 更多详情可查看:https://www.mozilla.org/en-US/firefox/95.0/releasenotes/

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

TDengine在同花顺组合管理业务中的优化实践

前言 同花顺每天需要接收海量交易所行情数据,确保行情数据的数据准确。但由于该部分数据过于庞大,而且使用场景颇多,每天会产生很多的加工数据,而组合管理(PMS)还会使用到历史行情数据。之前虽然采用了Postgres+LevelDB作为数据的存储方案,但仍然有不少痛点,所以必须对存储方案进行改造。 通过对ClickHouse、InfluxDB、TDengine等时序数据存储方案的调研,最终我们选择了TDengine。大数据监控平台采用TDengine后,在稳定性、查询性能等方面都有较大的提升。 项目背景与问题 同花顺私募之家组合管理是一个集多资产管理、实时监控、绩效分析、风险分析、舆情分控、报表输出等功能于一体的智能投资组合管理平台。为券商、基金、私募等机构客户提供实时准确的投研服务。 数据层面主要依赖实时数据及历史日级别数据,为所支持的股票、基金、债券、美股、港股、期权、期货资产类别的监控和分析提供支持。 其中,实时数据主要用于资产监控,由于使用场景会对数百个不同的标的进行资产监控,数据刷新频率在1秒左右。因此,整个系统对实时数据的读写性能及延时有着比较高的要求。 此外,历史日级别数据主要用于投资组合的各种分析。历史分析所涉及的标的数量,相较实时资产监控更多,在时间上的跨度会长至10数年。此外在输出分析报告时,还会叠加多种分析指标和分析模型。在整个分析过程中,涉及巨量的数据集。这对历史数据库的读写性能又提出了更高的要求。 由上述架构图可以看到,该服务内需要大量的基础数据支撑,像实时行情、历史行情。 针对历史行情数据支撑,涉及多个证券品种的数据,包括股票、债券、基金、港股、美股、期货、期权。数据跨度周期从数天到数年不等。页面返回的数据是计算结果,而计算依赖的数据是业务层数据和大量历史行情数据。这个计算过程包含了历史行情数据请求。尤其是在展示结果包含多证券标的和长周期的情况下,产生一个分析报告可能达到 5s,而行情获取耗时占比达到80%以上。而且,输出报告服务面临并发情况,这种情况带来的拥堵会进一步恶化用户的使用体验。 通过对改造前的数据流进行分析,当前行情获取模块的分析, 当前存在以下2个需要解决的问题: 依赖多,稳定性较差:PMS作为多品种的投后分析服务, 需要使用到各种日线数据、当天实时行情数据、当天分钟数据等,在数据获取方面需要依赖Http以及Postgres、LevelDB等数据库。过于多的数据获取链路会导致平台可靠性降低,同时依赖于其他各个服务,导致查询问题过于复杂。 性能不能满足需求: PMS作为多品种投后分析,在算法分析层面需要大量的行情获取,而且对行情获取的性能也有较大的要求,当前所有行情会占据大量分析的性能。 技术选型 为解决上述问题,我们有必要对现有行情模块进行升级改造。在数据库选型方面,我们对如下数据库做了预研和分析: ClickHouse:运维成本太高,扩展过于复杂,使用的资源较多。 InfluxDB: 可以高性能地查询与存储时序型数据,被广泛应用于存储系统的监控数据、IoT行业的实时数据等场景;但是集群功能没有开源。 TDengine:性能、成本、运维难度都满足,支持横向扩展,且支持高可用。 通过综合对比,我们初步选定TDengine作为行情模块的数据库。 主要由于行情数据是绑定时间戳的形式,所以时序数据库更适用于这个业务场景。而且在同等数据集和硬件环境下,涛思官方的测试结果显示,TDengine的写入速度远高于InfluxDB。同时TDengine支持多种数据接口,包含C/C++、Java、Python、Go和RESTful等。 数据接入过程需要进行如下操作: 数据清洗,剔除格式不对的数据; 由于历史数据过于杂乱,采取脚本生成csv形式并直接导入,后续增量数据由Python实现脚本导入数据。 数据库建模以及应用场景 TDengine在接入数据前需要根据数据的特性设计schema,以达到最好的性能表现。 同花顺行情根据时间频度的不同,数据特性分别如下。 通用特性: 数据格式固定,自带时间戳; 数据极少需要更新或删除; 数据标签列不多,而且比较固定; 单条数据数据量较小,字段较少。 tick快照数据特性如下: 每天数据量大,超过2000W; 需保留近几年数据。 daily数据特性如下: 子表很多,约20W张表; 每天数据20W; 需保留近30年数据。 根据上述特点,我们构建了如下的数据模型。 按照TDengine建议的数据模型,将每个特性的数据单独创建数据库,根据不同特性数据设置不同的参数,在各个数据库内根据品种去创建超级表,例如股票、指数、债券、基金等,结合我们的数据特点和使用场景,创建数据模型如下: 以品种类型作为超级表,方便对同一类型的数据进行聚合分析计算; 标的本身包括标的信息,直接将标签信息作为超级表的标签列,每个品种作为子表。 库结构如下: 超级表结构: 落地实施 组合管理主要是需要可以稳定高效地获取到数据,所以在实施的过程中需要考虑查询的性能、线上数据的更新以及运维情况。 实施难点如下。 数据写入:由于历史行情数据会存在大量的历史数据,不是只接收当前新增的数据,这对历史数据的迁移有很大的挑战。当前TDengine数据库对于现有数据的导入,通过insert语句达到批量更新,会导致历史数据迁移耗时很大。为了解决该问题,我们在本地建立缓存,将现有csv文件修改为可执行导入的形式,直接通过csv导入,大大提升了写入速度。在这个过程中,我们还发现了一个问题:通过csv导入的时候,如果采用自动创建表的方式,会在几个版本内出现崩溃。通过询问官方,他们不建议在导入csv的时候创建表,后来我们就拆解为先创建表结构再进行csv导入,问题得到了解决。 查询问题:查询单点问题。TDengine原生HTTP查询是直接查询特定服务端完成的。这个在生产环境是存在风险的。首先,所有的查询都集中在一台服务端,容易导致单台机器过载;另外,无法保证查询服务的高可用。基于以上两点,我们在TDengine集群使用过程中,在应用使用创建链接的时候会配置多台Http的接口来解决单点问题。 容量规划:数据类型、数据规模对TDengine的性能影响比较大,每个场景最好根据自己的特性进行容量规划,影响因素包括表数量、数据长度、副本数和表活跃度等。根据这些因素调整配置参数,确保最佳性能,例如blocks、caches和ratioOfQueryCores等。根据与涛思数据工程师的沟通,我们确定了TDengine的容量规划计算模型。TDengine容量规划的难点在于内存的规划。 改造效果 完成改造后,线上的行情获取性能可以达到预期,目前运行稳定。 改造后性能对比情况,可以看到性能提升明显。 Restful-JDBC JNI-JDBC 改造前 单股票 单天 9ms 5ms 117ms 单股票 段时间1年,5年 32ms,83ms 9ms,29ms 258ms,700ms 多股票 单天(8只股) 11ms 7ms 116ms 多股票 段时间(8只股)1年,5年 120ms,532ms 60ms,225ms 1081ms,2492ms 改造后稳定性对比情况:改造前调用数据情况共40W次,共出现异常0.01%的异常,改造后出现异常降低至0.001%。 在使用TDengine的过程中,我们遇到了一些小问题。比如在通过Restful接口使用TDengine的时候,获取数据超过10240行会有限制。经过沟通,我们了解到在启动服务端时,参数restfulRowLimit 可以控制返回结果集的最大条数。 其他一些在使用过程中不清楚的地方,在涛思数据的物联网大数据微信交流群都能很快得到反馈和解答。一些小bug也可以通过版本升级解决。 总结 目前从大数据监控这个场景看,TDengine在成本、性能和使用便利性方面都有非常大的优势,尤其是在节省成本方面给我们带来了很大惊喜。 在预研和项目落地过程中,涛思数据的工程师提供了专业、及时的帮助,在此表示感谢。 希望TDengine能够不断提升性能和稳定性,开发新特性,我们也会根据自身需求进行二次开发,向社区贡献代码。祝TDengine越来越好。对于TDengine,我们也有一些期待改进的功能点: 支持更加丰富的SQL语句; 灰度平滑升级; 可实现自定义聚合方法; 更快的数据迁移。 后续我们也将在同花顺的更多场景中尝试应用TDengine,包括: tick、minute行情数据的迁移以及线上应用; 采取自定义聚合方法实现分钟行情、日线行情的聚合计算; 当天实时行情的数据的管理。

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

Jeepay 1.8.0 发布:商户系统增加退款,优化转账功能

Jeepay是一套适合互联网企业使用的开源支付系统,支持多渠道服务商和普通商户模式。已对接微信支付,支付宝,云闪付官方接口,支持聚合码支付。 v1.8.0版本升级内容: 商户系统添加退款操作并支持功能权限配置; 解决URL拼接问题,不再使用hutool拼接函数,改为自行拼接方式;#I484PM:StringKit的appendUrlQuery使用了UrlBuilder,不支持vue的虚拟路径 微信企业付款到零钱产品不支持服务商模式,在转账时候做限制,避免转出服务商资金#I483FJ:jeepay里,只要商户是特约商户,发起转账其实走的是服务商转账 更多升级日志:https://www.jeequan.com/dev/update/category_1016.html 项目特点 支持多渠道对接,支付网关自动路由 已对接微信服务商和普通商户接口,支持V2和V3接口 已对接支付宝服务商和普通商户接口,支持RSA和RSA2签名 已对接云闪付服务商接口,可选择多家支付机构 提供http形式接口,提供各语言的sdk实现,方便对接 接口请求和响应数据采用签名机制,保证交易安全可靠 系统安全,支持分布式部署,高并发 管理端包括运营平台和商户系统 管理平台操作界面简洁、易用 支付平台到商户系统的订单通知使用MQ实现,保证了高可用,消息可达 支付渠道的接口参数配置界面自动化生成 使用spring security实现权限管理 前后端分离架构,方便二次开发 由原XxPay团队开发,有着多年支付系统开发经验 Jeepay运营平台功能 Jeepay商户系统功能 🍯 系统截图 以下截图是从实际已完成功能界面截取,截图时间为:2021-07-06 08:59

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Spring

Spring

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

用户登录
用户注册