工作时候遇到过的问题及解决方式记录
数据库相关
默认值问题
mybatis-plus在查询不到值时返回为空集不是null
使用mybatis-plus查询列表,如果查询不到数据,会返回空集,而不是null的源码探讨
oracle中查询一个字段是什么时候添加的
SELECT t.last_ddl_time, t.* FROM dba_objects t WHERE t.owner = '' AND t.object_name = ''"
mysql在排序列值相等时排序不可靠
使用limit x offset x
分页时会查出来重复数据。
mysql limit 格式
mybatis占位符的区别
check the manual that corresponds to your MySQL server version for the right syntax to use near
sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项
- 使用in的时候,忽略为null的,不会查询出comm为null的数据
因为:
select * from table_a as a where a.id in ( 2, null );
等价于select * from table_a as a where a.id=2 or a.id=null;
当a.id=2判断为true时,那么整个or语句就为ture,判定条件成立,
而当a.id是null时,a.id=2判断为false,判断式“null=null”结果为null,整个or语句就为null,所以null记录并不会被返回。 - 使用not in的时候,如果 not in后面的选项中没有null,只会查询从comm列不为空的列中过滤,会过滤掉comm为null的数据
- 使用not in 的时候,如果not in后面的选项中有null,不会查询出来任何数据。sql语句本身直接返回false
select * from table_a as a where a.id not in ( 2, null );
等同于select * from table_a as a where a.id<>2 and a.id<>null;
null值不能使用比较运算符进行运算,a.id <> null
的结果为null,判定条件不成立
如果想要把null查出来,可以使用nvl函数替代。
select * from table_a as a where a.id in ( 2, 3 ) or a.id is null;
select * from table_a as a where nvl(a.id,'空') not in ( '2', '3', '空');
sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项
为什么sql语句中not in后面的结果集如果有null,主查询就查不到记录?
Java相关
日期为什么用LocalDateTime
为什么建议使用你 LocalDateTime ,而不是 Date?
Spring相关
启动报错 Caused by: java.nio.charset.MalformedInputException: Input length = 1
启动报错:
Caused by: java.nio.charset.MalformedInputException: Input length = 1
原因:
application.yml文件编码格式有问题,可能直接改文件后缀名导致文件有问题
解决:
复制application.yml的内容,删除application.yml文件,重新新建application.yml文件,粘贴到新的application.yml文件
框架相关
nacos
nacos寻址机制
nacos寻址机制指的是nacos内部如何去管理集群内的Nacos成员节点信息,即获取当前最新的成员列表信息。
它的核心成员有两个:ServerMemberManager
存储本节点所知道的所有成员节点信息,MemberLookup
接口提供了两个操作,一个是injectMemberManager
它将ServerMemberManager
注入到MemberLookup
中,便于利用ServerMemberManager
的存储和查询。另一个是afterLookup
,它在需要进行成员节点信息更新的时候,将当前最新的成员节点列表信息通过该函数通知给ServerMemberManager
。
目前nacos内部实现的几种寻址机制是:
- 单机寻址:找到自己的ip:port组合信息,将其格式化为一个节点,调用
afterLookup
接口将信息存储到ServerMemberManager
中 - 文件寻址:它是Nacos集群模式下的默认寻址实现,每个节点维护一个
cluster.conf
的文件,默认填写每个成员节点的ip信息,端口自动选择默认端口8848。当Nacos节点启动时,读取该文件的内容,将文件内的IP解析为节点列表,调用afterLookup
接口将信息存储到ServerMemberManager
中。这种方式下,如果发现集群扩缩容,需要修改每个节点下的cluster.conf
文件,这导致集群运维成本较大,且易产生不一致性。 - 地址服务器寻址:Nacos官方推荐的集群成员节点信息管理,它利用了一个简易的web服务器,用于管理
cluster.conf
下的文件内容,每个Nacos节点只需要向这个web节点定时请求当前最新的成员信息即可。
工具相关
git
- 查看分支:
git branch
- 本地新建分支并切换:
git checkout -b 分支名
- 推送至远程:
git push origin 分支名
- 查看所有分支:
git branch -a
- 推送一个空分支到远程分支,其实就相当于删除远程分支:
git push origin :localbranch
- 删除远程分支:
git push origin --delete localbranch
maven
- 强制刷新依赖:
mvn clean install -e -U -Dmaven.test.skip=true
- 开启多线程编译:
-T 线程数
前端相关
- 函数只要是要调用它进行执行的,都必须加括号。此时,函数()实际上等于函数的返回值。当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码。
不加括号的,都是把函数名称作为函数的指针,用于传参,此时不是得到函数的结果,因为不会运行函数体代码。它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行。
react生命周期
其他
- windows命令行翻页: 右击左上角图标,找到编辑页面的滚动可以切换至滚动模式,即可向上查看。