Tuesday, August 17, 2021

V2EX - 技术

V2EX - 技术


如何优雅的保存网页到本地,就算原网页失效了,依然不影响我查看这个网页

Posted: 17 Aug 2021 04:14 AM PDT

目前知道印象笔记可以, 但是我不想用印象笔记 因为它很卡,有没有更好的方案呢?最好有成品,安装即用的,可以是插件 也可以是软件

最好能方便整理

请教大家,关于 string 的 immutable

Posted: 17 Aug 2021 04:13 AM PDT

大多数语言的 string 类型是 immutable 不可变的,这个不可变是单纯地由编译器类型检查保证,还是 string 所在的内存是 read-only 呢?
换句话来讲,是否可以在运行时,分配只读内存中的空间,创建不可变的变量呢?

如何获取 windows 应用程序界面数据,非简单的使用句柄!

Posted: 17 Aug 2021 04:07 AM PDT

场景:目前公司开发了一款 windows 桌面应用程序,界面 UI 为自定义的 UI,目前使用 spy++与 inspect 等均无法抓取到界面上的文字内容,也无法复制修改这些业务数据,这些业务数据均是从服务器实时获取到的。

需求:现在有没有什么办法可以获取到这些数据,内存方法已经使用 ce 测试过,无法获取到。使用 ollydbg 同样无法获取到。

反思:即使是自定义的 UI,上面的静态文本数据是有的(该数据是以列表的形式显示在程序界面上),应该是有办法获取到的,windows 去熏染也要有数据才能熏染!也可能是使用 ce 与 ollydbg 方法不对。

恳请有懂的大哥指点一二

搞了个 Java 交流

Posted: 17 Aug 2021 04:05 AM PDT

在小公司,可交流的人几乎没有。

所以搞了个 Java 交流的群,避免闭门造车。聊聊各自生产环境的技术栈,碰到的问题,解决方案、薪资等等。

https://t.me/joinchat/xyS43npyxeo5MTI1

大家来推荐一本对你思想观念影响最大的一本书

Posted: 17 Aug 2021 04:04 AM PDT

哲学: 西方哲学简史

现在做新的 Java 项目用什么 jdk 版本比较好?

Posted: 17 Aug 2021 04:00 AM PDT

一直都用的是 java8,后面的 jdk 版本都没怎么了解过,听说有的以后还可能要收费,大家一般都用什么 jdk 版本,是不是越新的版本越好用呢

小米手机在误触广告时候, 如何禁自动安装 APP?

Posted: 17 Aug 2021 03:35 AM PDT

红米 Note10 作为副手机, 体验有一个不好的地方是:

在某些软件下,比如 51 虚拟机, 开屏广告的关闭按钮特别小而且不好找, 并且全面屏手掌经常蹭到屏幕边缘, 会误触广告(pdd/抖音极速版等广告).. 误触广告后直接跳转应用商店下载安装. 没反应过来就直接给我安装好了.

有没有简单的设置可以禁止这种跳转, 或者跳转后不要下载, 再或者下载后不要自动安装.

点击广告后返回原来 APP 会出现一个全屏的 web 广告页面(pdd 的网页,不是倒计时广告), 体验真的差.

请问有没有好用的 clash for Linux GUI 客户端阿,求推荐一下

Posted: 17 Aug 2021 03:12 AM PDT

最近需求变化,要换 Linux 。但是魔法必须要有

没有桌面环境的情况下 有没有那种 web gui 的客户端,类似 openwrt 上面的 openclash 那种的,能很方便管理订阅链接的那种

谢谢各位

Golang 有没有同时支持 HTTP2、TLS、JA3 指纹的 HTTP 客户端?

Posted: 17 Aug 2021 03:01 AM PDT

目前,https://github.com/CUCyber/ja3transport 可以解决 TLS 、JA3 指纹,但是它不支持 HTTP2

net/http 支持 HTTP2,但是配置 JA3 很麻烦。

一个 webview 中包 video 标签的问题,在一个页面中 上下都有间隔 全屏播放正常的会铺满上下间隔之间;

Posted: 17 Aug 2021 02:50 AM PDT

但是,如果我页面中用了 viewpager+fragment,把 webview 放在 fragment 中,点击全屏的时候就白屏了。

请教安卓 11 的系统字体如何调粗

Posted: 17 Aug 2021 02:32 AM PDT

请教各位安卓 11 的系统字体如何调粗

  • 先说一下我的手机情况,手机型号是小米 10 Pro,ROM 是基于 AOSP 的第三方安卓 11ROM ( Evolution X ),目前已经安装 Magisk 。
  • 目前的想请教大家的问题是:安卓 11 的系统字体如何调粗?
  • 我的系统语言设置的是中文,我发现系统设置里只有更改字体大小和显示大小两个字体选项,可是调整后发现都是改变字体大小而不是字体的粗细。
  • 我尝试过谷歌看有什么解决方法,大概就是刷 Magisk 字体模块和修改 system/etc/fonts.xml 这两种方法。修改 system/etc/fonts.xml 然后把想要的字体放到 system/fonts,这个方法需要 system 的写权限,所以没有成功,安装 Magisk 字体模块倒是成功了,但是 Magisk 字体模块安装完重启只是改变了字体样式,粗细并没有改变(参考 https://sspai.com/post/53808 )。
  • 目前我看到的都是些针对安卓 10 或者更早之前的方法,所以请教一下,安卓 11 有什么可行的方法,我只不需要换什么稀奇古改的字体,我只是想要达到类似 iOS 那种字体加粗的效果。

有没有什么开源好用的 Java 报表、电子单证 PDF 生成、设计工具啊

Posted: 17 Aug 2021 02:30 AM PDT

现在调研的只有 Jasper Report(Studio)这一个,但想看看这块有没有更好用的、开源的工具。需要带 GUI 设计工具的

现在带公司内 Go 的开发工具中 VSC 和 Goland 哪个更流行呢?

Posted: 17 Aug 2021 01:48 AM PDT

RT 1.17 发布后我想换个工具试试口味和"新思维",所以各位也可以说说自己的小偏好。hhh

想组建一个小群、6 到 10 人的 golang 小群

Posted: 17 Aug 2021 01:24 AM PDT

关于我

待过北京、去过广州、现在长期都会在深圳了

自己最早是做 PHP 的

对于 java spring boot 、spring cloud 有一点一点了解、一般维护可以

现在正在整 golang 、最近在搞 kratos 秒杀的接口(但是遇到好多问题)、github 地址就不放出来了、现在还没搞好

为什么想建立一个小群

自己进了很多的群、群里人也很多、但是讨论的东西总是一下就会被刷走了

理想状态下组建这个群想达到的效果

  • 讨论技术问题
  • 交流职业问题
  • 技术笔记分享

加入

有比较多的时间在学 golang 或工作正在用 golang 的

喜欢做笔记、有博客的、github

地点最好在深圳或广州、其他城市也可以

如果有想加入的话、

把你的 wx-id 和 github 地址还有 blog 地址发至邮箱 cGV0ZXItd293QGZveG1haWwuY29t 后面会加你的

你们的 iPhone 是如何备份照片到 Google Photos 的?

Posted: 17 Aug 2021 01:10 AM PDT

如题。本人有梯子,测速显示下载 60Mbps,上传 32Mbps 。
但是上传速度贼慢,照片还好,视频上传几乎都是失败的。
并且 VPN 还总自动断( Potatso Lite ),这是为什么?

目前安卓各个 ui 的应用抽屉好用吗

Posted: 17 Aug 2021 12:36 AM PDT

  • oppo 和小米都没办法使用第三方桌面,oppo 第三方桌面没法设为默认总是自动退出,小米设置第三方为默认后就禁用全面屏手势。
  • oppo 自带桌面没有分类,所有应用包括系统应用全堆在一起。小米自带桌面虽然有分类但是但是始终有一栏全部是囊括了所有应用的。
  • 之前用了大半年的氢 os,可以完美设置 nova launcher,所有不常用的应用都可以分门别类的放进抽屉的不同页面,想用的时候也不难找,真的非常舒服。
  • 因此比较好奇三星华为 vivo 魅族或者 pixel 的自带应用抽屉好用吗,以及现在是不是基本都不支持第三方桌面了?

Excelize 发布 2.4.1 版本,新增并发安全支持

Posted: 17 Aug 2021 12:15 AM PDT

Excelize 发布 2.4.1 版本,新增并发安全支持

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。入选 2020 Gopher China - Go 领域明星开源项目(GSP)、2018 年开源中国码云最有价值开源项目 GVP (Gitee Most Valuable Project),目前已成为 Go 语言最受欢迎的 Excel 文档基础库。

开源代码

GitHub: github.com/xuri/excelize

中文文档: xuri.me/excelize/zh-hans

2021 年 8 月 2 日,社区正式发布了 2.4.1 版本,该版本包含了多项新增功能、错误修复和兼容性提升优化。下面是有关该版本更新内容的摘要,完整的更改列表可查看 changelog

此版本中最显著的变化包括:

兼容性提示

Go Modules 包引用地址调整为 github.com/xuri/excelize/v2

新增功能

  • 新增流式设置工作表列宽度支持,相关 issue #625
  • 新增流式创建合并单元格支持,相关 issue #826
  • 公式计算引擎新增 2 项公式函数支持: BESSELK, BESSELY
  • 公式计算引擎支持自定义名称引用,相关 issue #856
  • 添加图表时支持设置不显示主要横纵坐标轴
  • 通过 AddPivotTable 创建数据透视表支持通过自定义名称动态引用数据源
  • 以下函数新增支持并发安全调用,相关 issue #861
    • AddPictureGetPicture 并发插入 /获取图片
    • RowsCols 并发行 /列迭代
    • SetSheetRow 并发按行赋值
    • SetCellStyle 并发设置单元格样式
    • NewStyle 并发创建样式
  • 导出 24 个内部异常消息

兼容性提升

  • 提升内部默认 XML 命名空间兼容性,修复部分情况下生成文档损坏的问题
  • 兼容带有非标准页面布局属性数据类型的电子表格文档,避免打开失败的问题
  • 增加内部共享字符表计数
  • 解除通过给定的时间设置单元格的值时,需要协调世界时 (UTC) 的限制,相关 issue #409
  • 增加对内部 XML 控制字符的兼容
  • 重命名导出字段 File.XLSXFile.Pkg
  • 修改 NewSheet, GetSheetIndex, DeleteSheet 对工作表名称大小写不敏感,相关 issue #873
  • 修复条件格式与数据透视表的兼容性问题,解决 issue #883
  • 改进与页面布局中无效的首页编号属性的兼容性
  • SetCellRichText 增加字符数上限检查并修复保留字符丢失问题

问题修复

  • 修复部分情况下 12/24 制小时时间格式解析异常的问题,解决 issue #823 和 issue #841
  • 修复部分情况下无法通过 GetComments 获取批注的问题,解决 issue #825
  • 修复设置和获取批注时支持多个批注作者,解决 issue #829 和 #830
  • 修复命名空间地址解析异常而产生重复命名空间,导致删除再创建同名工作表后的生成文档损坏问题,解决 issue #834
  • 修复当设置工作表分组默认属性 showOutlineSymbolssummaryBelowsummaryRightfalse 时,设置失效的问题
  • 修复部分情况下 GetRows 返回冗余工作表尾部空行的问题,解决 issue #842
  • 修复部分情况下获取获取单元格的值时,未返回带有公式的空单元格的问题,解决 issue #855
  • 修复部分情况下 IF 公式条件运算错误问题,解决 issue #858
  • 修复通过 GetRowHeight 获取行高度错误的问题
  • 修复部分情况下因范围解析异常导致获取和删除自定义名称错误的问题,解决 issue #879
  • 修复设置自定义名称时关联工作表索引错误的问题
  • 修复设置列样式时已有单元格样式未被更新的问题,解决 issue #467
  • 修复使用非法数据引用范围创建数据透视表时导致的潜在 panic 的问题
  • 修复部分情况下读取数字精度异常的问题,解决 issue #848 和 #852
  • 修复设置数据验证规则时,部分情况下因未进行 XML 字符转义处理导致生成文档损坏的问题,解决 issue #971
  • 修复设置数据验证规则长度校验不准确问题,解决 issue #972
  • 修复由时间解析异常导致的,部分情况下读取带有时间或日期数字格式单元格时 CPU 资源占用率过高问题,解决 issue #974
  • 修复部分情况下,当自定义数字格式为日期时,月份解析失败的问题

性能优化

  • 通过 Save 保存或 SaveAs 另存文档时的内占用降低约 19%

其他

  • 修复潜在的代码安全问题 CWE-190 和 CWE-681
  • Go Modules 依赖模块更新
  • 单元测试与文档更新
  • 持续集成服务改用 GitHub Action
  • 包含简体中文、英语、法语、俄语、日语、韩语、阿拉伯语、德语和西班牙语的多国语言文档网站更新
  • 欢迎加入 Slack 频道、Telegram 群组 或技术交流群
    • DingTalk Group ID: 30047129
    • QQ Group ID: 207895940

什么样的国际化改造实现算是优雅的呢?

Posted: 17 Aug 2021 12:10 AM PDT

举个栗子( java 码农没正经学过 C 艹,dalao 们轻点喷)

这个项目

原项目

语言支持这方面,原项目仅支持日语,资源文件 code_page(932)+少量代码内嵌的日语,我维护的 mod 版本改为 utf-8 的 code_page(65001)资源文件,默认英语,文本全部通过控件 id 和文本 id 读取对应配置语种的语言文件(比如简中)获取。

感觉目前实现做的很恶心,比如说没法保证 id 在所有的窗口不出现意外的重复(虽然目前还没问题),把%s 这种要命的玩意儿放到配置文件里感觉是在玩火,语言地区标准码手动维护很不清蒸等等。如果按照 MFC 的那套好像应该是对不同地区准备不同的资源文件,感觉更恶心,可能我只是想加个无文字的按钮,结果要改一大堆的资源文件

这个项目下一步的改动大概是

  1. 语言文件增加窗口识别,key 改为窗口+控件的组合
  2. 切分含有格式控制符的控件(反正都是语言无关的内容比如版本号啥的),仅将常量的部分通过语言文件填充
  3. 换个更好使的 GUI 库代替 MFC 重写

那么一个优雅的国际化改造实现是什么样的呢?有没有什么案例可以直接进行一个习的学

GoogleDoc 没有好一点的 Add-on 用于对 markdown 进行 Preview 么?

Posted: 16 Aug 2021 11:40 PM PDT

StackEdit 有两个不方便:

  • 需要在新的页面(域名下)打开 Google Drive 的文档;
  • 我只是预览一下,它也要在我的 Markdown 文档中添加一些标签;

如果能够在 Google Drive 中用 Google Doc 打开,然后提供一个 SideBar 实时 render 这个 markdown 内容就好了。

有这样的插件工具推荐么?

局域网缓存的方案

Posted: 16 Aug 2021 11:40 PM PDT

在阿里 oss 上放了一些视频和 apk 安装包,然后软件部分写的也是阿里云的 oss 下载地址,想知道有什么方案,我可以在局域网环境下。通过类似 nginx 的方式,拦截这些 oss 请求到一个地方,并且反代缓存下载的资源以供请求使用。一直请求 oss 下载东西,感觉流量费 hold 不住啊。

想问一下,在大陆有没有人能够搞定微信的 fcm 推送

Posted: 16 Aug 2021 10:37 PM PDT

研究了好几天都弄不了

[C#外包] 用 C#写一个 GUI 数据处理工具, 限深圳(需求之前发帖讨论过的)

Posted: 16 Aug 2021 10:30 PM PDT

  1. 有旧版本的软件可以参考(改动小), 需求明确. (我自己是 Golang 开发)
  2. 初略需求参考帖子 /t/633910, 数据量 y 的点数改成 1w~10w.
  3. 为了方便交流, 限深圳吧

联系方式, 微信扫码:

image.png

如何选择最适合你的分布式事务方案

Posted: 16 Aug 2021 08:32 PM PDT

之前我有一篇文章,介绍了分布式事务最经典的七种解决方案,这里我们从业务需求的角度,根据不同的业务场景,给出最适合的解决方案。

当我们采用服务 /微服务架构,对业务进行分拆解耦后,原先在一个单体内,使用本地数据库保证 ACID 的数据修改,因为跨了多个服务,就不再适用了,就需要引入分布式事务来保证新的原子性。

由于分布式事务方案,无法做到 ACID 的保证,没有一种完美的方案,能够解决掉所有业务问题。因此在实际应用中,会根据业务的不同特性,选择最适合的分布式事务方案。

业务分类

下面是常见的几种业务分类,以及适合的解决方案介绍

多个微服务组合成原子操作

有一类业务场景是需要把多个微服务组合成原子操作:假设您有一个活动业务,用户点击领取按钮后,会领取一张优惠券,和一个月的会员。优惠券和会员分别属于不同的服务,需要都被调用,不希望出现一个服务调用成功,另一个因为网络或者其他故障导致没有成功。

这个场景适合可靠消息方案,可以使用 rocketmq 、rabbitmq 等,发送给消息队列的消息,一定要等收到队列接收确认,再返回应用程序。

本地事务+多个微服务组合为原子操作

有一类业务与前一种业务情况类似,但有一些差别:假设您有一个新用户注册成功后,领取一张优惠券和一个月会员。如果注册不成功,不希望调用领取;只有注册成功才领取。

这种情况,适合本地消息方案,或者事务消息方案。这两种方案都能保证本地事务和消息的原子性。

订单类对一致性要求较高的业务

订单交易类业务,涉及资金、库存、优惠券等多个服务,完成一个订单,需要相关的各个服务组合成一个整体可回滚的事务。如果订单进行过程中金额先扣减,后续因为库存不够只能退款,把金额补偿加回来。在这个过程中用户看到了金额减少,又金额变回来,体验很差。一般这类业务都会先冻结资金,如果订单能成功,再扣减资金;不能成功,则解冻资金,这样能够让资金信息对用户更友好。

这种场景适合 TCC 方案,可以在 TCC 的 Try 中冻结资金,Confirm 中扣减资金,Cancel 中解冻资金

一致性要求不高的可回滚业务

如果业务对事务中的一致性要求不高,允许用户看到中间状态,例如用户的积分数据等。

这种模式适用 SAGA 模式,SAGA 对比与 TCC,只有正向操作和逆向补偿操作,会更加简单

耗时较久的全局事务

耗时较旧的全局事务适合可靠消息和 SAGA,不适合 TCC 和 XA,因为大多数的 XA 和 TCC 实现,为了方便用户灵活的定义事务,通常把事务的进度保存在应用程序,一旦事务进行中应用程序崩溃,无法往前进行下一步,只能回滚。

SAGA 和可靠消息,把事务进度保存在数据库或消息系统中,任何一个组件临时的失败,如果重试成功,能够让事务继续。

其中如果整个事务是需要回滚的,那么适合 SAGA,不需要回滚的,适合可靠消息

并发度较低的业务

如果业务并发度不高,事务又需要支持回滚,那么适合 XA 方案。XA 方案,除了并发不高,也还需要本地数据库能支持 XA 接口。这个方案的优点是,使用上较简单,比较接近本地事务

实践

上面介绍完各种业务类型,以及适合的事务方案,通常情况下,您需要选择合适的开源项目来实施技术方案。在分布式事务领域,应用比较广泛的有DTMSEATARocketMq

其中 seata 用 Java 开发,支持 Java 语言的接入,支持 TCC 、SAGA 、XA 、AT(类似 XA,性能更高,但有脏回滚)

RocketMq 用 Java 开发,支持各类语言的接入,仅支持可靠消息、事务消息模式

这里重点介绍 DTM,它用 GO 开发,基于 HTTP 协议,支持多种语言接入,支持 TCC 、SAGA 、XA 、可靠消息、事务消息模式。

可靠消息例子

我们拿第一个最简单的业务场景"多个微服务组合成原子操作"来看 DTM 是如何解决问题的

假设领取优惠券和会员的处理函数分别是:ObtainCoupon 和 ObtainVip,那么处理领取逻辑的处理函数(用 Go 做示例)只用这么写:

	msg := dtmcli.NewMsg(DtmServer,gid). 		Add(Busi+"/ObtainCoupon", req). 		Add(Busi+"/ObtainVip", req) 	err := msg.Submit() 

dtm 收到客户端提交的消息后,会保证 ObtainCoupon 和 ObtainVip 被调用,如果任何一个出现失败,会不断重试,直到成功。

假如您采用的是 rocketmq 方案,那么您需要做以下几个步骤:

  1. 发送"领取"的消息给队列
  2. 消费"领取"的消息,然后调用 ObtainCoupon 和 ObtainVip,然后确认消息已成功消费

对比 dtm 和 rocketmq 的方案,dtm 仅需要简单的几行代码即可( dtm 也提供 http 的接口,可以用任何语言直接发 http 请求),清晰简单。而 rocketmq 方案,涉及较多队列的知识,要做的工作较多

SAGA 例子

假设我们有一个积分兑换课程的业务,一方面积分不属于非常核心的资产,中间状态允许用户看到,另一方面兑换课程可能出现课程已拥有权限,则需要回滚,因此该业务属于"一致性要求不高的可回滚业务"。

我们采用 SAGA 方案来解决这个问题,来看看 DTM 的解决方式,代码大致如下:

	saga := dtmcli.NewSaga(DtmServer, gid). 		Add(Busi+"/AdjustIntegral", Busi+"/AdjustIntegralRevert", req). 		Add(Busi+"/AuthCourse", Busi+"/AuthCourseRevert", req) 	saga.WaitResult = true 	err := saga.Submit() 

dtm 收到客户端提交的 saga 事务之后,会按顺序调用 AdjustIntegral,AuthCourse,如果函数返回错误要求回滚,dtm 则会调用 AuthCourseRevert,AdjustIntegralRevert 进行回滚。

如果您没有采用 dtm 方案,那么您可以采用 SEATA 的 SAGA,涉及比较多的背景知识,接入较复杂。

更多的例子

您可以访问https://github.com/yedf/dtm ,里面有很多的分布式事务例子

多种模式并存

如果您的实际项目,涉及分布式事务的场景较多,一种事务模式,可能并不满足需求,可能需要使用 SEATA+Rocketmq,接入以及维护成本较高。而 DTM 提供了一站式的解决方案,对常见的各种业务场景都提供了便捷的支持。

小结

dtm 作为一个新兴起的分布式事务框架,提供了强大的功能,以及简单易用的接口,极大的简化了微服务架构下,分布式事务的使用。

下面是 dtm 与 seata 的主要特性对比:

特性 DTM SEATA 备注
支持语言 Golang 、python 、php 、c# 及其他 Java dtm 可轻松接入一门新语言
异常处理 子事务屏障自动处理 手动处理 dtm 解决了幂等、悬挂、空补偿
TCC 事务
XA 事务
AT 事务 AT 与 XA 类似,性能更好,但有脏回滚
SAGA 事务 简单模式 状态机复杂模式 dtm 的状态机模式在规划中
事务消息 dtm 提供类似 rocketmq 的事务消息
通信协议 HTTP 、GRPC dubbo 等协议,无 HTTP dtm 对云原生友好

dtm 的项目地址为https://github.com/yedf/dtm ,欢迎大家访问、试用、点亮 star

看了代码优雅实现的帖子想到的实践思路

Posted: 16 Aug 2021 12:12 PM PDT

前情提要:https://www.v2ex.com/t/796126?p=1#r_10794970

实践中,我们一般可以同时提供两种接口:一种是不依赖其他业务的"原子"接口;另一种是依赖其他业务的"组合"接口。

比如搜索,我可以同时提供:返回 id 集合的接口和返回 item 集合的接口。item 信息是我从 item 服务拿到的,这样我等于组合了 item 服务和搜索。反过来也类似,比如敏感内容过滤,我也可以提供两种接口:传参 id 集合和传参 item 集合,如果只传 id 我需要去 item 服务查 item 信息,就是组合接口;如果传给我 item 集合,我就不需要去依赖 item 服务。

这种做法有什么好处呢?我们可以先考虑这样一个问题,我们有底层服务 A ( atom ),有两个上层服务 C1 、C2 ( combination ),现在有个需求要调用 C1 的接口 C1.I1 和 C2 的接口 C2.I1 ,这两个接口都要调用 A 的接口 A1.I1 ,这样我们为何不先调 A1.I1 ,然后把返回的信息传给 C1 和 C2 呢?当然当我们没有这种冗余调用的时候,还是用原来的接口,这样更方便。

我分析下来这样做从性能方面应该是有利无害的。从 IO 方面来看,虽然直接传递 item 信息增加了传递参数的网络开销,但是由于不需要去查 item 服务,减少了一次 item 服务返回 item 信息的网络开销,这两者已经抵消了。而后者还减少了查 item 的请求网络开销,item 服务的计算开销,和依赖服务或 db 的计算和网络开销。所以性能无疑是提高了很多。

上面只讨论了最简单的情况,其实实践中远比这复杂。上层服务会依赖多个下层服务,组合是千变万化的,不可能为每种组合都开个接口。比如 C 依赖 A1 和 A2,那就要四个接口,依赖 A1 的接口( A2 信息通过传参);依赖 A2 的接口( A1 信息通过传参);都不依赖(全部信息通过传参);都依赖。假设依赖 n 个服务,就需要(排列组合 n 选 n 、n-1...1,0 加和)个接口(科里化?),所以还是要根据实际情况具体问题具体分析,只提供那些用户普遍需要的组合,必要的时候可以另起服务以维护业务模型的清晰性( message passing -> multiple dispatch?)。

XDM 觉得这种实践靠不靠谱,欢迎分享讨论

码农故事会

Posted: 16 Aug 2021 10:52 AM PDT

欢迎 PR,说出你的故事

https://github.com/gaodeng/CoderStory

有什么 Markdown 编辑器支持 github markdown 的折叠功能?

Posted: 16 Aug 2021 08:11 AM PDT

Windows 设置文件夹共享怎么这么慢

Posted: 16 Aug 2021 06:50 AM PDT

这个目录里有很多子目录和小文件。
设置共享后点确定,一直在读硬盘。

默认是把所有子目录和文件遍历一遍吗?

想问问大家平时都是怎么学习的

Posted: 16 Aug 2021 05:25 AM PDT

原因

最近比较焦虑,然后发现缓解焦虑的办法就是去学习..

我自己学习的方式

6 点下班,墨迹到 6 点 40 下楼吃个饭,吃完饭回家,到家 8 点多,躺尸一会儿,洗个澡,一般 9 点半-10 点开始学习,一般都是看到 12 点-1 点之间。 之前因为比较焦虑买了一堆课,也没怎么看(买了等于我看了.. ),现在捡起来一点一点的看.. 感觉自己看书看不进去.. 视频之类的稍微好一点.. (我不是一个人吧.. )

想问

  1. 大家平时都是怎么学习的?怎么规划工作,学习,生活的时间?
  2. 学习方式是怎么样的? (我自己是觉得偶尔看别人博客,论坛,公众号知识点太碎了。买课能系统一点.. )
  3. 有什么建议么..

感谢~

springboot 返回的字符串被自动转义怎么处理啊?

Posted: 16 Aug 2021 03:16 AM PDT

"data":{"id":1,"description":"测试啊测试!\\n\\n 期待测试!"}}

数据库的数据是测试啊测试!\n\n 期待测试!

返回 json 后变成了\\n\\n 导致解析失败。

这种情况怎么处理啊

No comments:

Post a Comment