V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  timethinker  ›  全部回复第 7 页 / 共 19 页
回复总数  374
1 ... 3  4  5  6  7  8  9  10  11  12 ... 19  
问题不在于有哪些解决办法,而在你能承受什么样的成本。
你是想在屎山上继续堆屎还是来个大扫除为将来留下更多的操作空间?

现状就是你有几十张表需要去更新,在不考虑重构的前提下,你能选择的方案并不多:
1 、你想要在一个事务里面进行更新,这也是最简单的办法,但是你会担心说影响性能。
2 、一张表一张表的更新你又会担心无法保证数据的完整性。

如果是我的话,在没有重构的选择情况下,在没有了解业务领域的情况下,我会选 1 ,这也意味着我不会考虑系统的性能,也不会考虑到系统的可用性问题。

如果你是系统的设计人员,如果你有权决定是否应该重构,那么就应该考虑到这些问题(可用性以及可靠性)如何影响业务系统的架构设计,这些问题你应该最了解,如果你还不了解,那么要先去了解,因为只有你先了解以后,你才能够根据规模来决定应该如何重构,重构哪些方面可以解决关键的问题,以及重构的成本是否可以承受。
2022-09-28 17:09:59 +08:00
回复了 MeloForsaken 创建的主题 程序员 菜鸟提问,有关 Threadlocal 的问题
1 、如果你没有及时清理 ThreadLocal 中存放的变量,线程实例也没有销毁,那么当这个线程实例执行下一个任务时,如果任务中有访问到同一个 ThreadLocal 存放的变量,就会造成一些状态依赖问题,可能会破坏依赖这些状态的代码逻辑。

2 、一般线程池有一个缓存队列用来缓存任务,当有可用的线程时,就会取出队列中的请求交给线程执行,取决于线程池的相关设置和策略,这部分在创建线程池的时候都是可以设置的。相关介绍: https://www.baeldung.com/thread-pool-java-and-guava

3 、同上线程池可以是同一个实例(一组线程),也可以是不同的实例(多组线程),取决于配置。

4 、这个跟使用语言的框架有关,比如 Java 通常使用 Spring MVC 或者 WebFlux 等等,现在的框架数不胜数,不过我建议你最好看一下 HTTP 协议相关的内容。

5 、如果是 HTTP 协议相关的,《 HTTP 权威指南》值得一读,其实不一定要买书,很多在线的网站资源都能够系统的学到一些知识,虽然比较零散。
2022-09-22 10:43:51 +08:00
回复了 wangxiaoaer 创建的主题 问与答 工作流是否支持可选的节点分发功能
我已经很久没有关注这一块了,开源的可以选择的不多,基本上都是 Activiti 系的,Flowable 看起来比较活跃,Camunda 是魔改版,提供很多特性,国产的很多工作流引擎更加符合国内的审批流程。

如果是我的话,可能会选择 Flowable 来进行定制,不过最终这一块还是得自己多比较一下才能知道哪一个更适合当前的业务。
2022-09-22 10:17:38 +08:00
回复了 wangxiaoaer 创建的主题 问与答 工作流是否支持可选的节点分发功能
1 、工作流引擎实际上是没有用户这个概念的,工作流说白了只是一个状态机的实现,这个实现帮我们搭建了一个最底层的基本平台。我们所说的用户和审批只是在上面进行了业务封装而已。因此你可以设计一种数据结构来表示用户来自哪里以及他的一些相关的信息,然后将数据存放到流程实例当中。

2 、关于审批签名,这个属于审批流程的概念,比如“会签”与“或签”,还有转交、加减签、回退审批等等,同上,工作流引擎也并不知道这些概念,这些都是上层封装的,只不过审批的场景太过于常见,因此在工作流引擎和最终的应用之间,建立了一套审批的抽象和机制,所有实现这些抽象的数据结构和行为,都是需要预先定义的(自定义封装),然后提供给外部基于这些抽象的编程接口。

3 、工作流引擎的流程实例提供了一个上下文环境,可以存放各种的变量信息,你可以通过设定各种各样的变量和条件判断来执行逻辑以及分支跳转。但是不要忘了,你使用工作流的目的是什么?工作流应该仅仅只处理流程上的某一个环节通过与否,以及下一个环节的状态跳转。其他的完全可以通过外部的 CRUD 管理系统来提供更多的操作内容。因此需要外部应用与工作流进行集成。试想一下,如果没有工作流,没有审批,你如何实现这个功能?答案可能就是自己建几张表,然后提供一些 CRUD 的接口而已。

4 、同我说的第 2 点。

5 、同我说的第 2 点。至于回到申请用户那边,说白了也只是在流程设计里面有一个环节需要发起人来完成而已。
遥远的超新星爆发带来的电磁风暴导致了机房内路由器主板上某个元件电路发生了短路进而引发了短暂的阻塞从而影响了网络。
2022-09-16 13:04:08 +08:00
回复了 kqq19930511 创建的主题 Java jpa update 和 delete 之前都会 select 一次
这是因为框架机制的原因导致的,Hibernate 使用了一种被称之为工作单元模式( Unit of Work ),与数据库的事务进行对应,这样就会对实体的状态进行追踪,在这种机制下就会产生一个问题:如果没有这条数据,会发生什么?程序无法推测你的意图,有的场景下当数据不存在会导致一致性问题,也有的场景下存在“不关心有没有这条数据,如果有的话就删掉”这种逻辑。后者更偏向于面向数据库编程的过程式逻辑。

这种工作机制不适合用于进行批量处理的场景,它更适合用于处理一些小范围的 OLTP 业务,带来的好处也是明显的,一级缓存避免了在接下来的事务范围中对同一个实体进行重复查询,也不需要显式的调用底层的数据操作,你只需要简单的查询对象,修改对象,在工作单元结束时(提交事务),它会根据对象现在的状态自动调用底层的数据操作,执行对应的 SQL 语句。

所以很多人用 JPA 会觉得很别扭,本质上是因为思考的方式跟它的工作机制存在差异,理解工具的处理机制是很重要的,因为这样才能让你更好的使用它。如果你写代码的逻辑思维处于那种过程式的增删改查,那么 MyBatis 或许更简单直观。

我个人认为,Hibernate 与 MyBatis 之间,不存在哪一个工具更好的这种说法,完全取决于你编写代码的模式,选一种你认为适合当下的工具就行,使用工具的目的是为了提升效率,仅此而已。
2022-09-15 12:04:45 +08:00
回复了 guanhui07 创建的主题 Go 编程语言 这个 golang struct 是用的什么生成的
挺有意思,刚才用 JS 手写了一个 DDL 的解析器,可以将这种 CREATE TABLE 转换成 JSON ,然后有了 JSON 以后就可以用来生成代码了,仓促之下只做了 CREATE TABLE 这种 SQL 语句,写的也比较凌乱,可能还有一些 BUG ,不过可以自行拓展。

地址: https://jsfiddle.net/AlexMaho/b6c1utoe/
2022-09-14 09:33:53 +08:00
回复了 PendingOni 创建的主题 程序员 [疑惑]-C#中一个奇怪的现象
C#的 Socket 光是异步的写法目前就有 3 种编程模型:

APM:即 BeginXXX 和 EndXXX 配对使用的异步编程模型。
EAP:即基于事件的异步模式,也就是使用 SocketAsyncEventArgs 配合 Socket 的 XXXAsync 系列方法使用。
TAP:既基于任务的异步模式,最新的使用方法,不再需要 SocketAsyncEventArgs ,直接返回 Task/ValueTask 配合异步上下文使用 await/async 语法。
@K1W1 这个跟 5G 手机壳有异曲同工之妙。
2022-09-05 12:02:27 +08:00
回复了 CodeXx 创建的主题 Java 发现一个 Java 代码耗时统计的问题
建议楼主先把计算的结果缓存到一个数组内,最后再打印出来数组内的结果,看看是否可以得到心中想要的答案,就能确定问题出在什么地方了。
2022-09-05 11:53:11 +08:00
回复了 CodeXx 创建的主题 Java 发现一个 Java 代码耗时统计的问题
@fzdwx 之前的时间都是单纯的计算两个时间差,并没有把每次的输出计算在内,但是最后的输出包含了循环内的 println 语句,所以总时间跟之前的时间存在悬殊。
2022-09-04 19:21:15 +08:00
回复了 edis0n0 创建的主题 游戏开发 游戏里的“AI”是不是都是一堆 if+random 的假 AI?
是的,游戏里面的 AI 简单一点的直接用状态机来做,稍微复杂一点的用行为树,说白了还是状态机。为了达到预期效果,流程的建模都是有意设计的,再加入一些基于权重的概率随机。
2022-09-02 15:25:50 +08:00
回复了 timethinker 创建的主题 Twitter 为啥国外各大互联网公司都在发推说自己?
2022-09-02 13:59:45 +08:00
回复了 erwin985211 创建的主题 问与答 日经,稳定理财选哪家,年华超越招行月月宝的
微众的 [活期+Plus],每天 3 点放量,稳健理财里面的基本上也都能超过 4 个点
2022-09-02 11:09:45 +08:00
回复了 abc0123xyz 创建的主题 Java 求教一个 Java 线程池的问题
这个对象有没有可能创建多个实例,每一个线程使用自己所绑定的那一个?这样线程之间就不用竞争,也无需加锁。

具体的做法就是,在线程池中的其中一个线程执行你的代码的时候:
1 、从 ThreadLocal 取出这个对象。
2 、如果不存在,实例化这个对象并对它进行初始化,然后再保存到 ThreadLocal 里面。
3 、使用这个对象。

这样当下一次这个线程再次执行时,就可以省略掉第二个步骤,对象就可以得到复用。

至于你说的这个对象有可能会损坏,你可以创建一个类来包装并代理委托执行相关的方法,通过封装内部实际对象,就可以对异常进行处理,比如重新构造内部实际对象,这样外部的代码就可以不用关心内部的处理流程。但是如果异常是必须要在业务逻辑中进行处理的,就不能通过代理类对这些异常进行掩盖,以免导致意外的 BUG 。
2022-08-31 14:27:16 +08:00
回复了 wenzaiquan199 创建的主题 问与答 为安全问题,早上公司热烈讨论
看来本楼还有很多人不知道 HTTPS 是用来解决什么问题的。
2022-08-30 14:26:29 +08:00
回复了 SamJaak 创建的主题 问与答 Magic Trackpad 鼠标箭头漂移怎么办
确保触摸板上面没有其他的东西,比如耳机线如果搭在上面了也会出现这种情况。
2022-08-30 11:04:02 +08:00
回复了 shanghai1943 创建的主题 问与答 话说有哪些不粘锅比较持久不粘
我个人只用铁锅,最好开一下锅。注意每次用完以后要擦干水分,然后再开火把水份烧干,不然会生锈。
不沾的秘密在于热锅冷油,也就是先用油过一遍,然后把油倒出来在加点油直接开炒。
铁锅的优点就是便宜,耐用,用钢丝球擦洗也不心疼,铁铲圆勺使劲造。
1 ... 3  4  5  6  7  8  9  10  11  12 ... 19  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2774 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 14:48 · PVG 22:48 · LAX 06:48 · JFK 09:48
Developed with CodeLauncher
♥ Do have faith in what you're doing.