编程笔记

lifelong learning & practice makes perfect

3ds-max

文件格式

.dxf格式是什么文件

一种CAD(计算机辅助设计)文件格式,常用于存储二维和三维设计数据。它是由AutoCAD开发的,
可以被许多CAD软件读取和编辑。.dxf文件包含设计元素,如直线、圆、弧线、多边形、文本等,也包括图层信息、颜色、线型、线宽等属性。这些文件通常用于建筑、机械、电子工程等领域的设计和制造

阅读全文 »

当配置文件中有中文时,springboot服务读取nacos配置启动报错:

1
2
3
4
5
6
7
8
ERROR 9740 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : parse data from Nacos error,dataId:xxxxxxxxxxxxxx.yaml,data:server:


.....



org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
阅读全文 »

Maven

Maven如何管理依赖

Maven维护了一个中央仓库repo1.maven.org
所有第三方库将jar包以及相关信息上传至中央仓库,Maven就可以从中央仓库把所需依赖下载到本地.
被下载过的jar包会被Maven自动缓存在本地目录(用户主目录的.m2目录,~/.m2),
除了第一次编译时因为下载需要时间会比较慢,后续过程有本地缓存则不会重复下载相同的jar包

jar包的唯一id

  • groupId:属于组织的名称,类似Java的包名
  • artifactId:该jar包自身的名称,类似Java的类名
  • version:版本号

镜像

在用户主目录下进入.m2目录,创建一个settings.xml配置文件

1
2
3
4
5
6
7
8
9
10
11
<settings>
<mirrors>
<mirror>
<id>aliyun</id>
<name>aliyun</name>
<mirrorOf>central</mirrorOf>
<!-- 阿里云 Maven镜像 -->
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
</settings>

vscode不使用maven等工具手动导入jar包

步骤

  1. 下载相应的jar包
  2. 加入Referenced Libraries中
    比如下面日志用了Commons Logging(一个第三方日志库)
阅读全文 »

刚开始使用vscode+java时遇到这个问题,Could not find or load main class x,
将源文件加入”Java source paths”并修改文件名与主类名相同后解决了.
这样就能方便地调试运行单个java文件了

新的问题

  1. 但是由于”Run|Debug”这两个快捷按钮每次会根据类名生成配置并写入launch.json,
    且当主类名相同时调试运行的程序会出错(不是当前文件),还是很不方便,
    这要求运行的主类名与已在”Java source paths”的类不同才能正常调试运行
  2. 每次自动根据类名生成配置也会导致配置文件中的配置越来越多
阅读全文 »

建立ssl/tls连接需要若干步骤,协议结合使用了对称加密和非对称加密,客户机和服务端需要协商所使用的算法并交换密钥信息.
下面以TLS 1.2为例介绍下流程(TlS1.3做了很多优化)

阅读全文 »

This function returns a string result with the concatenated non-NULL values from a group. It returns NULL if there are no non-NULL values

group_concat将非NULL的值拼接返回字符串,当没有非NULL的值时返回NULL.
有长度限制,遇到过一个由于长度限制数据截断导致的bug,sql如下

1
2
3
4
5
-- 这里id,price都是int,4字节
SELECT id,SUBSTRING_INDEX(GROUP_CONCAT(price order by id), ',', -1) AS price
FROM xxx
where xxxx=xxx
GROUP BY id;

这里将price拼接,再通过SUBSTRING_INDEX取最后一个price,由于数据截断,GROUP_CONCAT返回的字符串最后一个是”,”而不是price,导致SUBSTRING_INDEX取到的是””(字符串),在业务逻辑里直接转为int报错了,由此产生bug.
且只有当数据量足够多时才会触发(超过171行时,1024=1714+1702,引擎为InnnoDB,MySQL8.0,字符集为utf8mb4_0900_ai_ci)

1
2
3
4
5
-- 有兴趣的可以复现下,查一个int类型的数据就行
SELECT GROUP_CONCAT(price) FROM (
SELECT `price`
FROM xxx
where `xxx` = "xxx" limit 171 ) as t;
阅读全文 »

下标访问

1
2
3
4
5
func TestStr(t *testing.T) {
str := `中\a`
log.Println(unsafe.Sizeof(rune('中')), unsafe.Sizeof(str[0]), str[0], string(str[0]))
}
// 输出: 2022/09/15 19:55:27 4 1 228 ä

range

1
2
3
4
5
6
7
8
const nihongo = "日本語"
for i, v := range nihongo {
fmt.Printf("%#U starts at byte position %d\n", v, i)
}
// 输出:
// U+65E5 '日' starts at byte position 0
// U+672C '本' starts at byte position 3
// U+8A9E '語' starts at byte position 6
阅读全文 »