避坑:提交的任务内部不处理异常,异常信息会丢失,任务不再继续被调度 ---- 提交的延迟任务被封装为ScheduledFutureTask,此类继承FutureTask,在任务处理过程中发生的异常会保存在 java.util.concurrent.FutureTask#outcome中: java.util.concurrent.FutureTask#run 如果我们不调用方法: java.util.concurrent.FutureTask Java避坑指南:ThreadPoolExecutor提交任务出现异常,异常是否吞掉,线程是否退出的不同影响 由于是调度任务,此方法大多不会被开发者调用,所以提交的任务内部需要处理异常。 正确处理任务调度的异常案例: org.apache.rocketmq.broker.BrokerController#initializeBrokerScheduledTasks 避坑:被周期性调度的任务 避坑:不要初始化corePoolSize过小,或设置allowCoreThreadTimeOut ---- 设置线程池数目过小或者核心线程池超时,可能导致任务不能及时被调度执行。
---- 坑一:java.util.Arrays#asList的参数不要传入基本类型数组 ---- 示例:基本类型数组作为参数 package com.example.demo; import <Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6); System.out.println(integers); } } 坑二 因为java.util.Arrays#asList返回的list对象是java.util.Arrays类中的一个私有的静态内部类: java.util.Arrays.ArrayList 此类没有实现父类 坑三、java.util.Arrays#asList传入数组对象返回的list并不是原数组对象的copy,修改会反映到原数组对象 ---- 示例: /** * @author 认知科技技术团队 * 小结 ---- java.util.Arrays工具类避坑记: 【】java.util.Arrays#asList的参数不要传入基本类型数组; 【】java.util.Arrays#asList返回的
但是BigDecimal的有些方法是有坑的,稍不注意也会产生精度计算的问题。 BigDecimal坑一: 禁止使用java.math.BigDecimal#BigDecimal(double)构造函数方法 ---- 示例: /** * @author 认知科技技术团队 * 这和坑一情况一致。 BigDecimal坑三:禁止使用java.math.BigDecimal#equals比较 ---- 示例: /** * @author 认知科技技术团队 * 微信公众号:认知科技技术团队 */ BigDecimal坑四:禁止使用java.math.BigDecimal#round 进行舍入运算 ---- 示例: /** * @author 认知科技技术团队 * 微信公众号:认知科技技术团队
7. 组件没以大写字母开头命名 在JSX中,以小写开头的组件会向下编译为HTML元素。 DemoComponentName extends React.Component { } 后话 上面的内容提取自Top 10 mistakes to avoid when using React,采用了意译的方式,提取了7条比较实用的内容
小结 ---- AsyncAppender配置避坑指南: 1、OOM问题; 2、丢失日志问题; 3、阻塞问题; ----
---- BigDecimal构造函数使用java.math.BigDecimal#BigDecimal(java.lang.String) ---- 浮点数转换为BigDecimal类型时,如果使用 java.math.BigDecimal#BigDecimal(double)方法,会造成精度丢失。 java.math.BigDecimal#BigDecimal(java.lang.String) 使用compareTo方法比较BigDecimal,而不是equals方法 ---- 与上一篇博文一样 = xDec.scale) return false; 方法java.math.BigDecimal#compareTo会忽略精度,必须使用此方法比较java.math.BigDecimal 小结 ---- 考虑到精度问题,java.math.BigDecimal必须使用带字符串的构造函数,以及使用方法java.math.BigDecimal#compareTo比较。
这里所讨论的Java踩坑Optional误用,以及之后的Rust避坑空指针异常,并不是暗示Java不如Rust好,而仅仅是为了提升自学者入门Rust的动力而已。 这是 Java 8 及以后版本中函数式编程特性的一个很好的例子。2.2 Rust编译器对误用Option不修复不罢休Rust如何避坑类似上面的”Java编译器无视对Optional的误用“的情况? Option<T>能帮程序员避的最大的坑,是空指针解引用(null pointer dereference)。许多编程语言允许将null赋值给任何引用类型。 String能帮程序员避的最大的坑,是内存安全问题。它通过所有权系统和自动内存管理,有效防止了悬垂指针、缓冲区溢出等常见的内存相关bug。 Rust的编译器能帮助程序员避坑类似Java空指针异常那样的bug,那程序员在用Rust编程时,对于变量的使用,会踩什么坑?如果喜欢这篇文章,别忘了给文章点个“在看”,好鼓励小吾继续写哦~
墨墨导读:expdp/impdp是一个非常简单的操作,但是简单的操作中往往蕴藏了很多原理性的东西,如果稍不注意,则可能会才到很多坑。 这里总结整个过程中遇到的问题和经验,供大家参考,希望大家遇到同类情况可以规避这7种错误。 问题7 :如何提高效率 通过一条impdp语句导入时候,如果没有Lob字段,仅有数据,导入还是非常的快,比如500G的数据,大概20分钟就导入了。而创建索引的过程是非常慢的。
很容易使用自定义的线程池去异步执行,而且CompletableFuture为我们提高了强大的任务编排和异常处理方法。
事务失效的坑:AOP技术限制引起的 ---- Spring中的事务是AOP实现的,Srping AOP使用JDK动态代理或CGLIB来创建代理对象。 图片来源:https://javadevcentral.com/checked-and-unchecked-exception-in-java 事务回滚源码: org.springframework.transaction.interceptor.TransactionAspectSupport 4、事务多个业务有异步执行,异常不抛出,事务不会回滚 事务的实现涉及到java的ThreadLocal特性,如果异步执行,事务信息丢失或异常丢失,导致事务执行或回滚。 spring-framework/docs/current/reference/html/data-access.html#transaction-local 6、事务所在的类不是spring容器管理的 7、 事务的坑:数据库引起的 ---- 1、数据库引擎不支持事务 事务的坑:大事务引发问题 ---- 1、锁定数据太多,容易造成大量阻塞或死锁问题和锁等待时间长而引发的锁超时问题; 2、回滚记录占用大量存储空间
本文将介绍 Golang 初学者容易菜的坑,希望广告 Gopher 避而远之。 1. fmt.Println("i is nil") return } fmt.Println("i isn't nil") } fmt.Println("i is nil") } 7. i := 0; i < 10; i++ { intMap[i] = i } for _, v := range intMap { fmt.Println(v) } //9 //3 //7 //读取是有序的 参考文献 Go 神坑 1 —— interface{} 与 nil 的比较 - CSDN 50 Shades of Go: Traps, Gotchas, and Common Mistakes
React的useState钩子是开发人员在处理函数组件状态时不可或缺的工具。尽管它看起来似乎很简单,但即使是经验丰富的开发人员也可能犯一些常见的错误,导致意外行为和错误。在本文中,我们将探讨八个常见的useState错误,并提供详细的解释和示例,以帮助你避免这些陷阱。
修改以下参数把美国中部时区修改成中国标准时区(CST) 1、中国标准时区(CST)和美国中部时区(CST)重名 2、GP默认会将CST识别为美国中部时区 3、导致国内时区为CST的服务器在事件计算时出现意外结果 4、解决方法 4.1 修改GP安装目录下/share/postgresql/timezonesets/Default 4.2 找到CST - 21600这行,修改为CST 28800 4.3 所有Segment和Master服务器全部修改 4
make([]int, 2) copy(slice, arr1[98:100]) return slice } // 调用方拿到notGCSample返回值后,[100]int所占内存会释放 7. func copy(dst, src []Type)第一个参数是dst,第二个参数是src,和Java的一般方法参数设计相反 8.
今天使用torchvision进行学习 导入torchvision的时候报错了 C:\Users\Administrator>python Python 3.7.6 (tags/v3.7.6:43364a7ae0 faster_rcnn import * File "D:\python\lib\site-packages\torchvision\models\detection\faster_rcnn.py", line 7,
今天借助本文,总结下在开发过程中,使用CRTP遇到的坑。 容器存储 CRTP技术因为其性能优越,实现简单,在工程应用中非常广泛。实际上,相对于普通的虚函数,其具有一定的局限性。 ) at crtp.cc:11 #125 0x00000000004006c4 in Base<Derived>::PrintType (this=0x7fffffffe38f) at in Base<Derived>::PrintType (this=0x7fffffffe38f) at crtp.cc:11 #129 0x00000000004006c4 in Base< Derived>::PrintType (this=0x7fffffffe38f) at crtp.cc:11 #130 0x00000000004006c4 in Base<Derived>: (this=0x7fffffffe38f) at crtp.cc:11 从上述gdb的分析结果看出,重复执行crtp.cc中第11,即递归调用t.PrintType()。
下面介绍几种工作中可能不经意中写出的,花式踩坑空指针异常的姿势。 二、踩坑姿势 2.1 自动拆箱空指针异常 如调用类似下面这种格式的二方服务接口, 如果不进行判空而直接使用,则很容易碰到空指针: 正确的使用姿势应该是: 2.2 RPC接口返回null 二方服务的批量查询接口如果数据量大容易超时 三、预防 3.1 手册 《阿里巴巴 Java编程规范》 给出了空指针的一些常见场景: 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE 数据库查询结果可能为null NPE 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE 3.2 源码 Java
存在内存的区域: Java堆溢出 虚拟机栈和本地方法栈溢出 方法区和运行时常量池溢出 本机内存溢出 1、Java堆溢出 Java堆用于储存对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象 如果虚拟机的栈内存允许动态扩展,当扩展栈容量无法申请到足够的内存时,将抛出OutOfMemoryError异常 《Java虚拟机规范》明确允许Java虚拟机实现自行选择是否支持栈的动态扩展,而HotSpot throw e; } } } 这里可以通过指定参数-Xss128k,用来测试栈溢出的情况 3、方法区和运行时常量池溢出 HotSpot从JDK 7开始逐步 ; import java.lang.management.ClassLoadingMXBean; import java.lang.management.ManagementFactory; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.List;
inline内联 5 名称查找 5.1 受限名称查找 5.2 非受限名称查找 6 智能指针 6.1 std::auto_ptr 6.2 std::shared_ptr 6.3 std::unique_ptr 7 private: T *m_ptr;};AutoPtr<int> ptr(new int(10));if(ptr){ //do something} 隐式类型转换在带来便利性的同时也带来了一些坑, &rhs);};Array<int> arr1(10);Array<int> arr2(10);if(arr1 == arr2[0]){ //do something} 构造函数隐式转换带来的坑。 str1, const char *str2){ String str(str1); str.append(str2); return str;} operator type()带来的坑。 "w"), ::fclose);unique_ptr<FILE, std::function<int(FILE *)>> pf(fopen("data.txt", "w"), ::fclose); 7
,输入”cmd“ 点击确定,调出cmd命令行,键入“python”,查看安装状态; 出现上面的字符就说明python安装好了,我们接着下一步; 02 安装ipython的坑一 03 安装ipython的坑二 我们打出退出命令后继续执行上面的安装命令: 一看到红字就感觉哪里出错了,果不其然,又是一个错误,度娘真不靠谱,还是得自己来 ,查阅了下资料