V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ljzxloaf  ›  全部回复第 3 页 / 共 12 页
回复总数  228
1  2  3  4  5  6  7  8  9  10 ... 12  
2021-08-24 05:46:41 +08:00
回复了 pocarisweat 创建的主题 程序员 看到「学什么新语言」这个问题,推荐这本书
有用 C 写 crud 的吗
2021-08-24 05:22:24 +08:00
回复了 byzf 创建的主题 程序员 闲来无事,求推荐点三个月左右能入门的兴趣爱好、技术方向
写小说 /homelab/厨艺 /vlog/播客 /blog/github
2021-08-23 10:46:07 +08:00
回复了 golangLover 创建的主题 Java Spring 应对 IO 密集 的 web 业务系统有什么成熟的做法
2021-08-16 23:26:37 +08:00
回复了 1sm23 创建的主题 信息安全 中了 crpytowall 勒索病毒
@ljzxloaf #26 好吧,是节点的原因。。
2021-08-16 23:25:13 +08:00
回复了 1sm23 创建的主题 信息安全 中了 crpytowall 勒索病毒
2021-08-16 23:04:11 +08:00
回复了 beryl 创建的主题 程序员 代码优雅实现讨论
需要换个角度去思考问题。

打个比方,产品需求描述一般是用户场景和交互流程,而这些变化是非常快的,我们不可能给每个场景、每个流程写一套代码,所以需要从业务模型的角度去思考,而不能从业务流程的角度去思考。比如你这种就可以看做是几种业务模型组合起来的流程,其中的业务模型有第三方业务、缓存、日志等,我认为你这种写法没啥问题。如果有些逻辑重复读较高,可以根据业务更为细致的封装。比如 A 业务与 B 业务组合起来形成一个业务。这种组合就看具体需求了。

流程与对象是相对的,流程的每个节点都是对象,对象的内部逻辑也是流程。

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

比如搜索,我可以同时提供:返回 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 加和)个接口(感觉像科里化过程...),所以还是要根据实际情况具体问题具体分析,只提供那些用户普遍需要的组合。
2021-08-14 22:37:25 +08:00
回复了 ljzxloaf 创建的主题 问与答 怎么在 x86 机器上调试 arm 架构的安卓 app
@marczhao #9 谷歌咋了
2021-08-14 21:59:12 +08:00
回复了 ljzxloaf 创建的主题 问与答 怎么在 x86 机器上调试 arm 架构的安卓 app
@marczhao #6 对的,我直接用的 11 的 image,按官方的说法是兼容 arm 的,但是我用下来大部分都不行。我是想看看一些 app 的设备指纹是怎么取的
2021-08-11 15:24:54 +08:00
回复了 waiaan 创建的主题 程序员 要多健壮的代码才能支撑起千变万化的需求?
ddd,如果業務模型發生顛覆性變化的話不能算是程序設計的問題。另外,這不叫健壯,這叫可擴展性。有個原則叫做 ETL ( easy to change )
2021-08-11 15:20:26 +08:00
回复了 ljzxloaf 创建的主题 问与答 Itellij idea 有这种功能吗
@sytnishizuiai #4 這個命令叫啥,我用的 Ubuntu
2021-08-09 18:31:24 +08:00
回复了 zshineee 创建的主题 生活 迫于减脂,中午带饭靠谱吗
每天少吃一点,渐渐的胃口就小了,别老想着一蹴而就。该吃啥还吃啥,但是要“浅尝辄止”,其实食物第一口是最美味的不是吗,尝到了前面的美味,没必要一直重复个没完。“光盘行动”已经不适合时代了,是要把国民吃成美国那种体型吗?我简直要怀疑这是医疗行业的阴谋了。
2021-08-09 00:08:43 +08:00
回复了 ljzxloaf 创建的主题 问与答 这种效果是 markdown 语法吗
结贴了,感谢
@yitingbai #4
@IgniteWhite #5
2021-08-08 15:07:30 +08:00
回复了 EscYezi 创建的主题 Java 关于 Java 类加载和 Springboot Bean 动态加载的一点想法
@ljzxloaf #13 正常的业务需求走开发测试部署流程,不正常的需求也尽量走正常流程,除非你 100%能 hold 住。你这么玩是否定了测试的价值。
2021-08-08 15:02:47 +08:00
回复了 EscYezi 创建的主题 Java 关于 Java 类加载和 Springboot Bean 动态加载的一点想法
动态加载 class 不是什么难事,但是你这样不是等于直接上生产调试?理论上你可以把所以的业务逻辑都弄成动态的,问题是必要性在哪? OSGI 发展这么久为什么被 JPMS 干掉了,因为它所谓的热部署 /热替换根本没啥必要。Web 服务都是集群,无损上下线简单得很,要啥热部署 /热替换。

“但是这样做要发布到正式环境,调试也是非常不方便,每次发布要等好久” 这是啥理由,造点数据调试不就行了。

如果只是偶尔手动修改数据,直接用 sql 。如果经常需要手动修改数据,那应该反思的是,为啥要手动修改数据,用户的数据我们没有权限修改,除非是 bug 。
2021-08-08 14:33:48 +08:00
回复了 join 创建的主题 Linux 逃离到 Linux 两周的感受
完全不知道大佬们在讨论啥,我转到 Ubuntu 只是希望在潜移默化中熟悉 linux,相比 windows,除了游戏没有发现哪里有比较明显的短板。桌面是啥?
2021-08-08 14:19:13 +08:00
回复了 TellMeWHY 创建的主题 奇思妙想 创办一家程序员公寓,这个想法如何?
挺好的,价格合适的愿意尝试一下
2021-07-29 10:41:59 +08:00
回复了 GreatEscape 创建的主题 程序员 求教各位彦祖,点赞系统设计的最佳实践?
@ljzxloaf #18 etcd 好像没有相关的 api,还是用 redis 吧。。注意下可用性
2021-07-29 10:10:08 +08:00
回复了 GreatEscape 创建的主题 程序员 求教各位彦祖,点赞系统设计的最佳实践?
先更新计数(建议用可持久化的 kv 数据库如 etcd,redis 是用来做缓存的),具体请求先写到消息队列,异步更新到数据库。还有评论啊点赞啊这些东西都是要做频率控制的
1  2  3  4  5  6  7  8  9  10 ... 12  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5332 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 39ms · UTC 06:48 · PVG 14:48 · LAX 23:48 · JFK 02:48
Developed with CodeLauncher
♥ Do have faith in what you're doing.