在实际开发过程中我踩到了mybatis的一个坑,我觉得值得记录、分享一下。 先说说这个坑是什么吧。如果你踩过这个坑,并且知道具体的原因,那这篇文章可以加深你的印象。...为什么在mybatis中数字0和空字符串""比返回的是true呢?...是的,我无脑的使用了CV大法。导致我在欢声笑语中写出了bug。我orderStatus传入的类型是一个Byte,和""做判断有任何意义吗?...最后说一句 在解决这个问题之后,我还是在网上查了一圈,发现也有人遇到了这样的问题,但是我点开搜索出来的第一篇就是一个错误的描述,他说在mybatis中会把0当做null来处理?哥们你看源码了吗?...后来我把这个问题分享在群里之后,群里一个朋友也给我分享了一篇文章,肥朝大佬写的《还有这种操作?浅析为什么要看源码》。文中给出了另一种解决方案,有理有据,简明扼要,是一篇很好的文章,大家可以看看。 ?
这是why技术的第14篇原创文章 在实际开发过程中我踩到了mybatis的一个坑,我觉得值得记录、分享一下。 先说说这个坑是什么吧。...为什么在mybatis中数字0和空字符串""比返回的是true呢?...是的,我无脑的使用了CV大法。导致我在欢声笑语中写出了bug。我orderStatus传入的类型是一个Byte,和""做判断有任何意义吗?...最后说几句 在解决这个问题之后,我还是在网上查了一圈,发现也有人遇到了这样的问题,但是我点开搜索出来的第一篇就是一个错误的描述,他说在mybatis中会把0当做null来处理?哥们你看源码了吗?...后来我把这个问题分享在群里之后,群里一个朋友也给我分享了一篇文章,肥朝大佬写的《还有这种操作?浅析为什么要看源码》。文中给出了另一种解决方案,有理有据,简明扼要,是一篇很好的文章,大家可以看看。 ?
这句话的含义可以再延伸一下,即只要在被测物中存在一个恒定已知量,就可以采用它作为参考进行半定量分析。 ? 问题2:举例说明哪些指标是典型的半定量分析?...有一些情况下,初学者经常犯错误,即拍摄是在不同的伽马值下采集荧光照片,或通过调整伽马值γ来呈现不同的荧光强度。...变量这么多,你还敢对免疫荧光染色进行半定量分析吗? ? 问题4:为什么WB蛋白条带可以半定量分析,而蛋白免疫荧光却不行呢?...答:在理论上,得到一张蛋白条带所涉及的操作是相同的,后面对蛋白进行发光和拍照,这些也是在同一时刻进行的操作。不涉及时间差的问题。即你是在同一条件、同一时间对此条带上的不同孔进行检测。...TUNEL荧光染色分析的本质是一个计数问题,即通过计数凋亡细胞核的数量,来分析该张组织切片或细胞爬片上的凋亡指数。这个过程,我们的计数不会受到荧光衰减的强烈影响。
由于大部分硬盘在出厂时已经格式化过,所以只有在硬盘介质产生错误时才需要进行格式化。...RAID 1和RAID 10使用的就是镜像。 Parity:奇偶校验位 在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。...Spare(热备用),当一个磁盘出现故障时,准备使用的加电待用磁盘;Failed(故障),磁盘发生错误导致失效或用户利用 NetRAID控制器使用程序使驱动器脱机的状态;Rebuilding(重建),...Stripe Size:条带容量 在每个磁盘上连续写入数据的总量,也称作“条带深度”。你可以指定每个逻辑驱动器的条带容量从2KB,4KB,8KB一直到128KB。...此技术非常有用,它比单个磁盘所能提供的读写速度要快的 多,当数据从第一个磁盘上传输完后,第二个磁盘就能确定下一段数据。数据条带化正在一些现代数据库和某些RAID硬件设备中得到广泛应用。
在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。...在RAID0(条带化)中数据将使用切片的方式被写入到磁盘。一半的内容放在一个磁盘上,另一半内容将被写入到另一个磁盘。...当我们保存数据时,它将同时写入这两个2TB驱动器中。创建 RAID 1(镜像化)最少需要两个驱动器。如果发生磁盘故障,我们可以通过更换一个新的磁盘恢复RAID 。...同样采用奇偶校验来检查错误,但没有独立的校验盘,而是使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。...当我逻辑卷上写数据时,它会使用镜像和条带的方式将数据保存到4个驱动器上。 如果我在 RAID 10 上写入数据“TECMINT”,数据将使用如下方式保存。
但是有两个例外,一个是用户头像,一直是热数据;另外一个普通图片,使用三个月作为阈值。 热数据总是那些头部数据,相对来说增长较慢。...这是从 UNIX 以来就一直在强调的一个原则。...同一条带上的任意两个块互称为兄弟块(companion block)。正常读取时,可以直接从数据块中读(我猜是那n个块,不用额外进行计算还原,有待考证,还得看里所码原理以及具体实现)。...然而,在经过故障,重建和替换后,肯定会有一些不符合上述原则的情况,比如两个同条带上的数据块被放在了同一个数据容错区域中。协调节点会运行一个平衡摆放位置的进程去检查一个数据单元中的数据块分布。...但是论文说的有点啰嗦,同一个点在不同地方说了好几遍,但同时一个模块有时又分散在不同模块中,不好连成一个整体,在这里,我简单总结一下。 一个数据单元(cell)存在一个数据中心中,包含 14 个机架。
毕竟标准库里也这样用了: for 循环加指针,老司机也会掉的坑 在 for range 循环里保存迭代变量的指针是一个非常容易犯的错误,Go 老手也会犯。...原因是迭代变量至始至终都是同一个值,对它取地址得到的值也是相同的: rune 代表一个“字”,等于 Unicode 中的 code point。...使用 strings.Builder 时,可以用 Grow 方法来预分配内存,我自己之前一直忽略了预分配。因为它的底层是一个 slice,所以预分配 slice 是有必要的。...转 string 的做法在标准库中是这么做的,见 strings.Clone 方法: 当我们需要取出一个 slice 里的小部分元素时,为了防止取字符串子串时内存泄漏,下面这种做法可能会在编译器中“误伤...我问chatGPT关于data race有什么坏处,得到的回答: sync.WaitGroup 的正确用法是:在父 goroutine 中调用 Add 方法,在子 goroutine 中调用 Done
我想要黄金运输时不被别人抢走就得用一些安全手段。 对称加密就是把我的黄金放到保险箱里,然后设置一个密码,这个密码可以用来给保险箱上锁和解锁。...大小银行在需要进行黄金运输的时候,我先叫一个小弟把你的密码纸条带回来,当我把保险箱给你的时候,我按照你的密码来上锁,再把写了我的密码的纸条和保险箱一起给你。...那如果说我第一次给你运黄金的时候,先用密码来加密保险箱,再把密码的纸条放进去,你那边拿到保险箱了用钥匙解开,拿出里面的黄金和写有密码的纸条。这时候密码咱们可以确定别人是不知道的,因为一直在保险箱里。...证明公开密钥正确性的证书 公开密钥加密还是存在一些问题的,继续使用上面的例子,如果我想要给大银行运黄金,大银行得先告诉我他的密码是啥,不然我没法上锁,于是我派了一个小弟过去问,但是在问的路上给劫匪绑架了...总结 以上内容是我自己在学习过程中一环一环脑补出来的例子,最初自己也很绕,希望大家看完上述内容在更加深入的学习时能够减少难度。如果有什么理解上的偏颇望大家能够在评论区指正。
在下一个练习中,您将看到细节。 11.1 练习 9 在MyHashMap.java中,我提供了哈希表的大纲,它会按需增长。...当我运行这个代码时,我感到惊讶:斜率大约为1.7,这表明这个实现不是一直都是常数的。它包含一个“性能错误”。 在阅读下一节之前,您应该跟踪错误,修复错误,并确认现在put是常数时间,符合预期。...幸运的是,有一个简单的解决方案,我们以前看过:我们必须维护实例变量中的条目数,并且每当我们调用一个改变它的方法时更新它。 你会在这本书的仓库中找到我的解决方案MyFixedHashMap.java。...:当我们在子地图上调用put时,我们不知道是否添加了一个新的条目。...当我测量这个解决方案时,我发现放入n个键的总时间正比于n,也就是说,每个put是常数时间的,符合预期。 11.6 UML 类图 在本章中使用代码的一个挑战是,我们有几个互相依赖的类。
当我终于走进满是竞争对手的房间时,我的腋窝下冒着大圈汗水,而我的脸像一个肿胀的西红柿,教授似乎被逗乐了。 就在那时,他邀请我到显微镜前,我帮他「脱了衣服」,就像你开头看到的那样。...多年后,我问我的导师为什么录取了我,尽管我的成绩单很差,而且我在面试上大出洋相。 「原因很简单,我一直在寻找一位不会在危机时刻惊慌失措的故障排除者。你在面试中完全表现出了这些素质」,他说道。...在那一刻,我意识到:也许面试中的挫折不是发生在我身上,而是降临在我身上,否则,我就没有机会脱颖而出。 回想起来,我的一生都充满了这样的经历。 当我祖国的机构崩溃时,我被取消了博士奖学金。...在花时间学习检验假设所需的实验室方法后,他们开始着手进行第一个实验。 在数据分析当天,我将蛋白质条带图交给他们,让他们查看图像并讨论他们的发现。...我开始发现实验室任务单调,而且我在限速步骤中变得不耐烦,比如当我等待细胞生长。 相比之下,当我处理编码问题或数据可视化挑战时,我的创造力源源不断。我还以更快的速度产生了结果,这让我感到很有效率。
我一直认为学习新语言特性的最好方法就是使用它,所以我尝试在 IDLE 中实例化 NoneType:>>> n = NoneType()这产生了一个错误:Traceback (most recent call...好啊,我想,我可以通过将 None 的类型存储在一个变量中来解决这个问题,因为在 Python 中类是对象。...这似乎可行:>>> NoneType = type(None)>>> n = NoneType()当我打印 n 时,我得到了我预期的结果:>>> print(n)None但是然后发生了以下情况:>>>...这并不是我预期的结果。我尝试使用 dis 来获取有关 NoneType 的更多信息,但是当我调用以下代码时:>>> dis.dis(type(None))它没有产生任何输出。...当你尝试创建一个新的 None 实例时,你得到的只是一个指向已存在的 _Py_NoneStruct 的引用。这就是为什么无论你做什么,对 None 的每个引用都是完全相同的原因。
当我们处理这个问题时,我们通常假设它处在空闲列表状态时被标记为断开(但是当时它为什么没有从这个列表上撤下?) 没考虑到事情有时发生过早是由于我们没有想到。 3....而且,如果你在If语句的一个分支中设置了一个变量,你也许应该在其他分支也设置该变量。与此相关的是标志(flag)被设定的情况。仅仅添加设定标志的条件很容易,但是容易忘了添加应该重新设定标志的条件。...另一个例子:在发送任何数据(零字节)之前,测试 TCP 连接的断开。没有使用这些组合来测试是 bug 悄然出现的头号原因,我在测试时是原本可以发现这些 bug 的。 9....从小的开始,逐渐添加一些需要的功能,我最终有许多有用的工具,写自己的小工具的优势是我得到我想要的功能。 在测试中要发现所有的bug几乎不可能。...我在处理最棘手的 bug 时,与同事讨论特别有效。 15. 密切注意 往往是当调试一个问题很长时间时,是因为我做了错误的假设。
在过去的12年时间里,我主要使用Eclipse,但是在某些情况下,我使用IDEA——在我编写Scala的时候,编写Android的时候,以及最近——由于Eclipse未能为Java 9发行版做好准备,所以经过半天的努力之后...我总是很快地回到Eclipse。我仍然更偏爱它。不仅仅是因为我已经内化了所有的关键字组合(你可以在IDEA中重用这些组合),也是因为在IDEA中还有一些我觉得更糟糕的东西。...我没有这方面的代表性基准,但是我知道现在我家里的8 GB RAM对于开发来说太小了,不过一直没换。 4、它感觉没有那么响应和笨重。 有一点小小的延迟,不好说,但是“我感觉得到”。...这是可配置的,但又是一个奇怪的默认值。几乎大家总是希望能够逐个单词(在驼峰式大小写情况下)地遍历变量,而不是跳过整个变量(方法/类)名称。...9、几年前,当我将它用于Scala时,那个项目从未真正编译过。但是我猜那更多的是Scala的错,而不是IDE。 如果你说,除了前两个,其余都不是重大问题,那我也同意。
当我们处理这个问题时,我们通常假设它处在空闲列表状态时被标记为断开(但是当时它为什么没有从这个列表上撤下?) 没考虑到事情有时发生过早是由于我们没有想到。...而且,如果你在If语句的一个分支中设置了一个变量,你也许应该在其他分支也设置该变量。与此相关的是标志(flag)被设定的情况。仅仅添加设定标志的条件很容易,但是容易忘了添加应该重新设定标志的条件。...从小的开始,逐渐添加一些需要的功能,我最终有许多有用的工具,写自己的小工具的优势是我得到我想要的功能。 在测试中要发现所有的 bug 几乎不可能。...问题是,当查找相关性时,动态分配的数字的第一个数字在查找之前被错误地删除。所以,不是寻找 637 之类的号码,你寻找的是 37,而这个号码不在表中。...我在处理最棘手的 bug 时,与同事讨论特别有效。 15.密切注意 往往是当调试一个问题很长时间时,是因为我做了错误的假设。
当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化 那为什么还要继承Serializable。...那是存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。...或许你会问,我在开发过程中,实体并没有实现序列化,但我同样可以将数据保存到mysql、Oracle数据库中,为什么非要序列化才能存储呢?...在Java中的这个Serializable接口其实是给jvm看的,通知jvm,我不对这个类做序列化了,你(jvm)帮我序列化就好了。...是否跟当前的文件的serialVersionUID是否一致,如果一直则反序列化成功,否则就说明当前类跟序列化后的类发生了变化,比如是成员变量的数量或者是类型发生了变化,那么在反序列化时就会发生crash
过去的几年里,我一直对那些科学领域研究人类是如何进行图像感知的事情充满好奇,于是开始到处收集资料。...柱状图和折线图 在同一项研究的两个独立实验中,Zacks和Tversky发现,当参与者被要求描述柱状图中的数据时,他们倾向于使用坐标轴进行对比(例如,A比B在X中的数量更大)。...但我们也倾向于认为斜率代表速度、高度或数量。这两个约定可能相互冲突。 Gattis和Holyoak 设计了一个实验,其中斜率代表高度或海拔,但这意味着自变量和因变量在错误的轴上。...颜色 最后,在我最喜欢的另一项研究中,Lin创造了一个算法来识别“语义共振颜色”。例如,我想谈论海洋,我就使用蓝色。如果我想谈谈爱情,我就用粉色或红色。...因为当我们查看图形框架和对象时, 不同的人会有不同的认知, 有一些认知是先天形成的,而有一些是通过后天学习得到的。 我不认为在这些研究中的发现应该完全和不加区别地应用于可视化。
从视觉上看,我们的新节点是这样的: ? 当我们增加输入的数量时,我们的方程开始在越来越高的维度上建模线性关系。...到目前为止,我们所概述的函数仅适用于神经网络一层中的单个节点。每个节点的输出vₖ,成为下一层中每个节点的输入。 然后这个过程在神经网络的每一层中的每一个节点上重复!...但是当我们开始处理越来越多的变量并进入越来越高的维度时,神经网络变得非常有用。我的意思是,我们怎么会想出一个能精确映射上千个变量的模型呢? 答案是——我们没有。这就是神经网络的作用!...让我重申: 当加权输入被加在一起并在每个节点上通过一个激活函数时,神经网络获得了建模复杂非线性i维关系的能力。 这就是为什么神经网络如此有用。...开始训练网络 考虑到这一切,我们开始在每个节点上用随机的一组权重和偏差来训练我们的神经网络。 当我们向网络提供大量包含输入和正确输出的数据和训练示例时,网络尝试将输入映射到相应的输出。
今天我就跟大家分享一个我工作当中的4031案例,解读一下4031的前世今生,希望通过今天晚上的交流,当我们再次遇见4031错误时不再像之前那么恐惧。...以我这几年的工作经验来说,当我们遇到 Oracle 报错时,通常都会从数据库的 alert 日志看起,结合与错误相关的 trace 文件以及发生错误时的一些系统状态、数据库状态等获取相关信息,综合上面的信息来判断该报错...换句话说,就是跨越多子池的条带化使用内存。这极少有文档记录,一般来说,内存请求会以轮转的方式,从一个“随机”的子池中找到它需要的内存块。...到这里,我们本案例的4031错误基本上已经阐述清楚了。 下面我简单的总结一下发生4031错误的原因以及应对措施: (1) 极高的硬解析,例如没有使用绑定变量。...遇见这种情况我们就应该尽量减少硬解析的数量,例如使用绑定变量,使用 cursor_sharing=FORCE 参数(不建议使用)。 (2) open_cursor 设置的过大。
• 问:创建 VSAN 虚拟机存储策略时,何时应使用“允许的故障数目”,何时应使用“条带宽度”呢?...“条带宽度”与性能有关(即,不在缓存中时的读取性能以及取消写入暂存)。设置为 2 或更高的值,会使数据在多个磁盘之间进行条带化。...• 问:VSAN必须要使用 10GbE 吗? 答:VSAN 并不强制要求使用 10GbE。VSAN也可以在较小的环境中(比如在实验室中)使用 1GbE 很好地运行。请注意,10GbE 是一个建议值。...• 问:创建 VSAN 虚拟机存储策略时,何时应使用“允许的故障数目”,何时应使用“条带宽度”呢?...“条带宽度”与性能有关(即,不在缓存中时的读取性能以及取消写入暂存)。设置为 2 或更高的值,会使数据在多个磁盘之间进行条带化。
领取专属 10元无门槛券
手把手带您无忧上云