技术细枝未节 CV工程师的自我修养
Chrome为什么不能打开端口为6000的WEB服务
Chrome会禁用一些网络浏览以外的端口——非安全端口.
Chrome浏览器默认非安全端口
一文读懂log4j logback log4j2 logback slf4j关系 - 含源码 有更新!
本文将详细举例说明每一种日志的具体用法,以及他们之间的关系. 最后再统一阐述了slf4j 的概念以及其常见的实现的特性. 最后总结这些框架的特点,以及注意事项.
源代码: https://github.com/jianhong-li/java-log-explore ,欢迎star , 欢迎fork.
Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 冲突解决 有更新!
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 差异 有更新!
本文记录了一个由于HttpservletInputstream的读取0字节和FileInpustStream之间的差异导致的一个bug. 原因是因为Tomcat的 org.apache.catalina.connector.CoyoteInputStream 实现会优先判定是否已经关闭了流. 从而在流无效的时候返回EOF (-1) , 而对于FileInputStream的流的读取会先判定读取的大小. 从而导致了差异. 文中还介绍到了如何使用chatGPT来完成bug的排查. 其中chatGPT的能力非常优秀.不过如果你问得不好,可能达不到你想要效果. 具体情况如何, 请看原文吧.
为Msql数据库编码UTF8过滤emoj表情 有更新!
由于mysql的历史原因.其UTF-8是一个残缺品.最多支持3字节编码的UTF-8编码. 而要支持4字节的UTF-8编码,实际要把字符集编码修改为
utf8mb4
. 如果表已经通过存在,修改风险比较大. 那我们该怎么办呢.
再说一说汉字的UTF8编码的问题 - 一个汉字UTF8编码占用多少个字节 有更新!
虽然这个问题一直在接受新知识,同时不断更正自己对字符集的理解. 但是时间久了,难免自己的知识理解又模糊了. 在此把一些常用的知识点做一个简单的梳理.
首先回答一下如下问题:
- 汉字的GBK编码占用几个字节.
- 一个汉字的UTF-8编码占用几个字节.
- UTF-8与UNICODE或者UTF-16的关系是什么.
- 一个UNICODE编码怎么转换成UTF-8编码.
- Java的char内部到底存储的是什么.
回答完如上几个问题基本日常的问题都解决了.
定位 alias 定义的文件
有时候我们为了方便会定义一些命令的别名,alias,但是定义后的别名很难找出来是什么时候,哪个文件定义的,所以可以用这个方法
GDB 调试技巧备忘 有更新!
初一看, GDB调试是真的难用. 简单说是功能很原始. 很多东西调试起来不是特别的方便. 然后
Clion
提供的调试功能也极其原始. 因此最终还是要把GBD
用好才能完成JVM
的调试学习.
使用GCC实现一个没有main方法的程序. 有更新!
常识中main方法是万物的开始. 真的是这样的吗.
GNU GCC C调用约定(cdecl)和栈帧结构浅析 有更新!
这篇文章不是为了完整的描述各种调用约定的细节. 主要是为了解决实际开发中遇到的基本问题的一个原理性的总结.
通过这篇文章,你会对C语言的栈帧结构有一个基础的认识. 但是更多的细节可能没有提供.注: 你也可以在我的知乎阅读此文: https://zhuanlan.zhihu.com/p/522729238
X86汇编语言风格比较: AT&T 和 Intel 风格 有更新!
大家使用Windows平台的研究较多. 基本接触的程序是Win平台的. IDE用Visual C++ , 自然一般也只会接触到$MS的编译器. 而微软家使用的是Intel 风格的汇编语言. 而在开源界,特别是基于GCC
的编译器是使用的是AT&T
风格的汇编 . 这里简单记录下两者的区别. 以备查. Linux小白. 如有纰漏, 大家请轻拍.
注: 这里是为了研究语言底层的实现机制,同时研究一些JVM的底层实现逻辑需要. 所以需要对栈帧的结构进行较细致的研究. 因此需要了解编译后的语言的反汇编.
Hotspot调试环境搭建-基于Ubuntu16.04.7-OpenJDK8u-Clion 有更新!
本文简单记录一下自己搭建HotSpot调试环境的步骤,希望对初学者有所帮助.
深入学习JVM之Class文件二进制解析 有更新!
JVM调优之预热和JIT优化
这是一篇没有太明确结论的文摘. 大概会记录些服务调优的过程与相关的细节. 然后所做过的尝试.
记于此,是为方便大家有共同的问题时方便查阅参考.
使用mvn deploy把jar包上传到私有仓库 有更新!
Mysql 时间戳与DATE相互转换. 有更新!
公司的数据库早期的规范是所有的时间字段都使用
long
进行存储. 导致在查询与数据查看时特别不方便. 因此需要在查询与展示时, 方便的转换long
和datetime
类型
sed 中的正则表达式 有更新!
简单介绍 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语法风格的正则. 因此支持这样处理.