技术细枝未节 CV工程师的自我修养

Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 冲突解决 有更新!

  |   0 评论   |   1,255 浏览

Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 此冲突是由于此两包不兼容,不能同时存在. 原因是 log4j-over-slf4j.jar 只是一个桥接包. 而 bound (粘合)的slf4j-log4j12.jar 中既包含了桥接包,也包含了log4j2的实现.因此桥接部分有冲突. 所以需要选其一使用.

让chatGPT帮我找bug 一个MultiPart文件流读取bug记录 - 内存池 - 减少内存使用 - java.io.FileInputStream和Tomcat ServletInputStream 差异 有更新!

  |   0 评论   |   816 浏览

image.png

本文记录了一个由于HttpservletInputstream的读取0字节和FileInpustStream之间的差异导致的一个bug. 原因是因为Tomcat的 org.apache.catalina.connector.CoyoteInputStream 实现会优先判定是否已经关闭了流. 从而在流无效的时候返回EOF (-1) , 而对于FileInputStream的流的读取会先判定读取的大小. 从而导致了差异. 文中还介绍到了如何使用chatGPT来完成bug的排查. 其中chatGPT的能力非常优秀.不过如果你问得不好,可能达不到你想要效果. 具体情况如何, 请看原文吧.

再说一说汉字的UTF8编码的问题 - 一个汉字UTF8编码占用多少个字节 有更新!

  |   0 评论   |   1,368 浏览

虽然这个问题一直在接受新知识,同时不断更正自己对字符集的理解. 但是时间久了,难免自己的知识理解又模糊了. 在此把一些常用的知识点做一个简单的梳理.
首先回答一下如下问题:

  1. 汉字的GBK编码占用几个字节.
  2. 一个汉字的UTF-8编码占用几个字节.
  3. UTF-8与UNICODE或者UTF-16的关系是什么.
  4. 一个UNICODE编码怎么转换成UTF-8编码.
  5. Java的char内部到底存储的是什么.
    回答完如上几个问题基本日常的问题都解决了.

GNU GCC C调用约定(cdecl)和栈帧结构浅析 有更新!

  |   0 评论   |   1,255 浏览

这篇文章不是为了完整的描述各种调用约定的细节. 主要是为了解决实际开发中遇到的基本问题的一个原理性的总结.
通过这篇文章,你会对C语言的栈帧结构有一个基础的认识. 但是更多的细节可能没有提供.

注: 你也可以在我的知乎阅读此文: https://zhuanlan.zhihu.com/p/522729238

X86汇编语言风格比较: AT&T 和 Intel 风格 有更新!

  |   0 评论   |   1,484 浏览

大家使用Windows平台的研究较多. 基本接触的程序是Win平台的. IDE用Visual C++ , 自然一般也只会接触到$MS的编译器. 而微软家使用的是Intel 风格的汇编语言. 而在开源界,特别是基于GCC的编译器是使用的是AT&T风格的汇编 . 这里简单记录下两者的区别. 以备查. Linux小白. 如有纰漏, 大家请轻拍.
注: 这里是为了研究语言底层的实现机制,同时研究一些JVM的底层实现逻辑需要. 所以需要对栈帧的结构进行较细致的研究. 因此需要了解编译后的语言的反汇编.

sed 中的正则表达式 有更新!

  |   0 评论   |   3,296 浏览

简单介绍 sed 的正则表达式的使用注意事项.可以看如下的几个case:

一个case:

输入: echo "abcwwwdc456" | gsed -E 's/(abc)([\w]+)(.*456)/\1替换后的字符\3/g'
输出:  abc替换后的字符dc456 
解释: [\w]+只匹配到了所有的`w`.没有匹配后面的`dc`,所以dc没有被替换. 
原因: 实际上字符集是`\`和`w`两者的集合.并不是 **匹配数字和字母下划线** , `\`在 `[ ]`中没有特殊的含义.所以也就无法构建出`\w`

第二个case:

输入: echo "abcwwwdc456" | gsed -E 's/(abc)(\w+)(.*456)/\1替换后的字符\3/g'
输出: abc替换后的字符456
解释: `\w`被识别为了字符集. **数字和字母下划线** , 因此匹配到了w以及后面的dc
原因: 在sed的普通的`s语句`中.是支持如 `\w`,`\b`此类的字符集的.

第三个case:

输入: echo "abcwwwdc456" | ggrep -o -P --color=auto  '(abc)([\w]+)'
输出: abcwwwdc456
解释: `grep`的正则的字符集的定义支持把`\w`放到`[]`中定义新的字符集. 这个更倾向于更常见的正则语法. 写起来也更自然一些
原因: 这个grep使用的是perl语法风格的正则. 因此支持这样处理.