java - 在处理大数据时如何确保您的代码按预期工作?

标签 java spring multithreading

我写了一些多线程批处理来处理数据。

当我完成实现并再次测试不同的数据集时,每个数据集大约有 100 行,一切都按预期进行。但是当它真正搬到prd的时候,有些事情就会失败。死锁、空指针异常、数据约束异常、输出错误等。

我的问题是如何确保您的代码有效?我用样本数据做了测试,但我真的不能对数百万数据进行测试,我说的对吗,太费时间了?但如果我不这样做,我测试的代码将由于一些在测试期间未发生的错误而失败。

是否存在人们用来验证的某种实践或它是否普遍?

需要一些指导。

最佳答案

根据我在世界各地(包括硅谷)与大公司和小公司合作的经历,我想说从一开始就使用最佳实践并坚持下去,例如:

  1. 了解并选择适合工作的技术/语言 - 您可以使用 C++03 或 Java、GO 或 Rust,您将获得截然不同的体验
  2. 在该领域拥有费用高且技能娴熟的程序员,并且选择的语言或技能足以在一定的正常运行时间后处理每项技术
  3. 不要对他们施压,否则他们会做出妥协(记住质量-速度-价格三角形)
  4. 在团队中拥有严肃的同行代码审查文化
  5. 运行静态代码分析(如果可用)并修复警告
  6. 编写所有有意义的单元测试(在类/模块级别,在此级别上没有多线程,软件最好基于 SOLID,使用模拟进行测试)
  7. 创建集成测试(多线程、真实文件、真实数据库、真实云、真实可扩展性)
  8. 让 QA 部门在现实生活条件下使用实际硬件设置一遍又一遍地进行回归测试...
  9. 如果可能的话,还让 QA 和开发人员使用内存检查器(例如 valgrind)和/或分析(取决于语言和技术)进行测试

让它在真实条件下运行也很重要(也就是在生产中测试......好吧,我们称之为公开测试版)。用你拥有的一切攻击它。这包括您所有的黑客工具和一群野猴子。

即使是最大的公司在他们的软件上投入大量资金,也总会存在一些隐藏的错误或安全问题(以及可能稍后修复的已知问题)。因此,请确保您有一些事后分析程序,例如堆栈跟踪、应用程序日志、系统日志、屏幕截图等。

在当今的软件复杂性中,正确性和稳定性的代价高得惊人。对于小型项目,稍微少一点努力可能是可以的(取决于伤亡人数,或者今天更重要的金钱损失,我会说在空指针的情况下)

关于java - 在处理大数据时如何确保您的代码按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54936091/

相关文章:

java - Apache Commons 日志记录 - 换行符

java - Spring MessageSource 没有从属性文件中获取消息

android - 无法同步对 notify() 的调用

java - 套接字多线程 - 读取输入流暂停线程

JavaFX ChangeListener 持续时间问题

java - 嵌套 for 循环以创建砖墙

java - 如何在 spring 中的对象内包含的列表上创建 select 语句?

java - 如何在spring jdbc模板中制作流式sql?

c# - 在另一个线程上访问数据

java - Eclipse 4.5 (Mars) 格式 : No white space between generic extends and implements in Class declaration