背景

这是一个开发问题记事本,脑容量有限,全网搜索又太费劲,还是开一个记事本记录开发工具及各类小问题吧。

日常开发宝典

  1. 发包前复测 Bug,多半会有所获;有问题改问题,没问题更安心。
  2. 初始项目代码提交,注意添加忽略文件,无关无用代码不提交,如 target,logs ,impl,idea 等。
  3. 代码提交比对,不要怕麻烦,比对就是目测、检查、梳理功能,可能发现意外的错误。更新代码和提交代码,都可以随手比对一下,可以发现不少低级错误的Bug。
  4. 代码提交之前,本地先编译一下,保证提交的代码不会报错。
  5. 搜索代码中的 e.printStack() ,全部换成 logger.error ,线上代码都会只打印文件日志,淹没控制台日志的,一旦遇到异常,排错就毫无头绪了。
  6. 代码生成初期,可以不管质量;完成后必须经过代码检查和整理,代码格式化、规范检查。

系统运维几个简单的排查方向

  1. 异常日志堆栈被淹没了,使用原生命令查看。
  2. 服务器的时间不准确时,会话实效性中校验时间失效。
  3. 磁盘空间不足导致服务停止。
  4. 进程OOM 或者 GC 导致服务不可用。
  5. 帐号密码不匹配。

Quartz 框架的 Job 实例化需注意

使用 Quartz 内置的 SimpleJobFactory 时,它默认通过反射的方式 newInstance ,任务执行时通过反射方式实例化 Job ,报异常:

org.quartz.SchedulerException: Problem instantiating class '外部类$内部类'at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:58)at org.quartz.simpl.PropertySettingJobFactory.newJob(PropertySettingJobFactory.java:69)at org.quartz.core.JobRunShell.initialize(JobRunShell.java:127)

所以 Job 实现类不能是内部类。

如果需要传递内部类,或者使用有参构造函数的 Job 实现类,需要自定义 JobFacotry ,自己实现 newJob 的方法,对 Job 实例化。

MyBatis xml test 表达式语法

记录一个低级错误,MyBatis 表达式语法有一个判断业务主键是否重复的语句,里面需要区分修改和新增操作,编辑时排除自身记录,使用 test 判断参数:

<if test="id != null AND id != ''">AND ID <![CDATA[<>]]> #{id}
</if>

这里 if 判断表达式里面的 AND 写成 SQL 语句的条件符号的大写了,然后就出现了 SQL 解析 ognl 表达式错误的问题。

记录这个这个低级错误,避免再犯。

序列化问题

@JsonIgnore 不光对序列化有影响,也对反序列化有影响的。

难怪前端传递了属性,后端控制器收到的对象属性是空的。

Oracle 死锁排除方法

-- select b.owner,b.object_name,a.session_id,a.locked_mode
-- from v$locked_object a,dba_objects b
-- where b.object_id = a.object_id;-- 查找死锁的会话
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time;-- 删除对应会话 sid,serial# 两列的值
-- alter system kill session '631,26940';

Vue watch

watch 中的 this 如果需要指向当前的 vm 对象,则必须使用 function() 来定义,不能用箭头函数,因为箭头函数的 this 执向外层函数对象的。

错误


watch:{data: (newVal, oldVal) => {newVal && this.updateData()}
}

正确:

watch:{data: function(newVal, oldVal) {newVal && this.updateData()}
},

Vue 的 v-show 在 el-tab-pane 中无效

el-tab-pane 中 v-show 不生效,所以用 v-if 。

Oracle 操作命令集合

  1. 管理员帐号切换:su - oracle
  2. 管理员登录:sqlplus "/as sysdba"
  3. 查询账户状态:select username, account_status from dba_users;
  4. 解锁帐号:alter user 帐号名称 account unlock;
  5. 改密码:alter user 帐号名称 identified by "密码" ; 密码需要用双引号,单引号无效。

常用打包命令

  1. 压缩:tar -czvf xxx.tar.gz xxx(create gzip verbos file=archive)
  2. 解压:tar -xvf xxx.tar.gz (extract verbose file=archive)
  3. 压缩:zip -r xxx.zip xxx
  4. 解压:unzip xxx.zip -d xxx
  5. 删除 ZIP 下某文件夹:zip -d nacos_config.zip "__MACOSX*"

打包依赖时排除 test 包

项目引入测试包后,虽然设置了 scope=test,但打包时还是会把测试相关的依赖文件都加入到依赖包路径下,而测试包有一些大文件且对生产环境无用,所以必须排除。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

该依赖相关的包有:

  1. assertj-core
  2. mockito-core
  3. objenesis
  4. xmlunit-core
  5. hamcrest
  6. byte-buddy
  7. byte-buddy-agent
  8. spring-test
  9. jsonassert

一起的还有:

  1. mockito-junit-jupiter
  2. junit-jupiter
  3. json-path
  4. spring-boot-test-autoconfigure
  5. spring-boot-test

所有相关依赖都必须删除,尤其不能保存 json-path 和 json-smart,否则会影响 spring-boot-autoconfiguration 的启动。

关闭 Swagger

Swagger 对开发阶段的测试非常有用,但是也会导致信息泄漏,生产环境中,应该关闭 Swagger UI ,有两个技术点:

  1. Swagger 配置注入添加一个开关。
  2. 删除 Swagger Ui 的依赖包 springfox-swagger-ui-2.7.0.jar 和 swagger-bootstrap-ui-1.9.2.jar ,就无法访问 Swagger 界面了。

el-tree 初始化选中节点回显

1、el-tree 初始化选中节点如果是 ajax 动态查询,需要动态通过标签控制查询结果回来后再回显,否则不生效。

2、el-table 分页查询如果初始化的 page 页码值需要改动,也是不生效的,可以通过控制 pagination 属性,在设置值之后再显示分页插件。

有些组件核心:解决初始化分页页码 非 1时。分页插件 current-page 不生效问题,先隐藏,等有数据后再显示;根源是必须在组件生成之前完成数据初始化。

CronExpression 校验结果

RuntimeException: CronExpression '0 0 10/25 * * ? ' is invalid.

这个正则,使用 org.springframework.scheduling.support.CronExpression.isValidExpression 校验结果为 true ,但是 org.quartz.CronExpression.isValidExpression 校验结果为 false,如果调度框架使用 Quartz 的话,应该使用后者,否则会报调度异常。

ES 检索空值条件的语法

ES 检索空值的条件,需要区分是否存在字段,完整的逻辑应该是:

BoolQueryBuilder lastResult = new BoolQueryBuilder();// 字段存在且为空串的情况
BoolQueryBuilder blankQuery = QueryBuilders.boolQuery();
blankQuery.must(QueryBuilders.existsQuery(fieldName));
blankQuery.must(QueryBuilders.termQuery(fieldName, ""));// 不存在某个属性
BoolQueryBuilder notExists = QueryBuilders.boolQuery();
notExists.mustNot(QueryBuilders.existsQuery(fieldName))// 二者取或
lastResult.should(notExists);
lastResult.should(blankQuery);

有价值的问题

  1. MyBatisPlus 的 DAO 充血 Mapper 接口的方法后,以 xml 中提供的 SQL 为主,没提供的以 Mapper 父类实现为主。一个应用场景是,批量 SQL 插入方法 InertBatchSomeColumn,只对 MySQL 有效,对 Oracle无效。如果要适配两种数据库,只需要单独对 Oracle 的映射 SQL 特殊实现该方法:
开启该方法:
public class AddInsertBatchSomeColumn extends DefaultSqlInjector {@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {List<AbstractMethod> methodList = super.getMethodList(mapperClass);methodList.add(new InsertBatchSomeColumn());return methodList;}
}实现映射操作 SQL:
<insert id="insertBatchSomeColumn" parameterType="java.util.List">begin<foreach collection="list" item="tempData" index="index" separator =";">INSERT INTO XXX(a,b,c)VALUES (#{tempData.a,jdbcType=VARCHAR},#{tempData.b,jdbcType=VARCHAR},#{tempData.c,jdbcType=VARCHAR})</foreach>;end;</insert>
  1. MyBatisPlus 的 Wrapper.like 方法对特色字符进行转义的语法为:QueryWrapper.apply("fieldName like CONCAT(CONCAT('%','"+value +"'),'%') ESCAPE '/'");
  2. Linux 不打日志的语法:命令 >/dev/null 2>&1 & 注意重定向符号间没有空格的,2 是错误输出,1是标准输出。
  3. 对 Web 请求路径和参数进行签名以防止篡改时,要注意表单参数的转义问题,在真正发送网络请求时URL参数中的特殊字符会被转义。因此,后端进行签名计算时,需要先解码 URLDecoder.decode(urlQuery, "UTF-8") 特殊字符在算签名才能与前端的签名一致。此外,前端 axios 发送请求时,值为 undefined 的参数自动被过滤掉了,后台完全收不到这个参数的。
  4. kill -15 pid 有时结束不了进程的,还需要再用 kill -9 补充一下。
  5. pom.xml 中的 build 节点定义中,pluginspluginManagement 的区别是,前者是真正的插件定义,后者只是一种声明不会生效,真正用的还是 plugins 定义的插件。
  6. 枚举类的 equals 是对象的对比,不能直接与字符串进行操作,否则只会得到 false ,正确的用法是转化为字符串对比。
  7. 要不到手也是一种重要的教育,求不得与失败是人类成长过程中需要学的重要课题。「蒋勋说红楼梦中对薛潘的解读」
  8. 我们不能站在后来的角度去责备当时无望甚至怯懦和犹豫的自己。「某演讲上听到的一句」

启示录

今年有两个感悟,对应对有点复杂或者麻烦的事情时很有指导作用。

感悟一:
生活中没有不麻烦的事情,即使是幸福和快乐也是建立在琐碎和麻烦之上的。
旅行很令人向往,但是去旅行的路上少不了琐碎和繁杂。
去餐厅吃饭很好,但是美食上桌之前的等待是少不了的。
就拿吃饭最简单的事情来说,还需要动嘴咀嚼呢!

感悟二:

如果——
我想喝水时,就有水喝/
想吃饭时,就有饭吃/
孩子自己成长,不用我管/
工作上,完全不费脑子/
生活中,没有任何需要操心的事情/
钱也用不完,啥事都不用做/
那我,不就成了废人了吗?
我的存在,还有什么意义呢?

所以,一切皆有意义。孩子的学习需要你引导,偶尔的鸡飞狗跳是有意义的;生活中有未预料的麻烦和问题,是有意义的;工作中有些冲突和难度,是有意义的。正常的一切安排,皆有成长。

一个人如果什么都不需要解决,想想也挺可怕的!
寻常生活、寻常烦恼,对人来说,存在的意义重大。

开发技术问题记事本 20230428 持续更新相关推荐

  1. 前端开发技术栈(插件篇):400+常用前端开发插件总结清单(持续更新......)

    常用前端开发插件总结清单,日常前端开发的时候,尤其在使用一些常用的功能的时候,例如:表单,,动画效果,时间选择,文件上传,下拉框等功能.直接用插件可以让自己节省更多的开发时间,更多的去关心业务,自己封 ...

  2. 汽车环境感知技术详解【 持续更新ing 】— 超声波传感器原理及应用

    专栏解读: 本专栏针对自动驾驶技术(智能网联汽车技术)中的感知技术进行详细介绍. 包含: 汽车感知技术概念 多传感器融合原理 各传感器原理及应用(超声波,毫米波,激光雷达,视觉传感器,全球定位系统) ...

  3. 汽车环境感知技术详解【 持续更新ing 】— 传感器概述与基本特性

    专栏解读: 本专栏针对自动驾驶技术(智能网联汽车技术)中的感知技术进行详细介绍. 包含: 汽车感知技术概念 多传感器融合原理 各传感器原理及应用(超声波,毫米波,激光雷达,视觉传感器,全球定位系统) ...

  4. 汽车环境感知技术详解【 持续更新ing 】— 激光雷达原理及应用

    专栏解读: 本专栏针对自动驾驶技术(智能网联汽车技术)中的感知技术进行详细介绍. 包含: 汽车感知技术概念 多传感器融合原理 各传感器原理及应用(超声波,毫米波,激光雷达,视觉传感器,全球定位系统) ...

  5. Android开发样式问题总结【持续更新】

    目录 Android控件/框架开源库收集 配置国内仓库 1. Java中设置控件的大小需要把dp先转换为像素(转换如下) 2. Java中设置GridLayout布局的layout_columnWei ...

  6. 车载传感器技术详解【 持续更新ing 】— 自动驾驶技术概述

    一.智能网联汽车定义: 1.定义: 智能网联汽车(Intelligent Connected Vehicle,ICV)是指车联网与智能车的有机联合,是搭载先进的车载传感器.控制器.执行器等装置,并融合 ...

  7. 快应用开发常见问题以及解决方案【持续更新】

    接触快应用也有一段时间了,踩过了大大小小的坑,让我活到了今天.准备在此立贴持续更新,记录遇到的问题以及解决方案,造福大众. css 方面 1.文字竖排不支持 目前官方还不支持writing-mode, ...

  8. AutoCAD2019+vs2019+C# 二次开发学习笔记day01(持续更新)

    目录 一.新建项目 1.应用程序 目标框架 选择 4.7.2版 2.生成 目标平台选择x64 3.调试 启动外部程序 选择 acad.exe 二.添加autocad类库 三.如何运用命名空间 1.[C ...

  9. ②⭐全网首发☀️数据有道之数据库技术❤️干货大全【持续更新】❗❗❗

    目录 2.1 需求分析 考点1 需求分析的概念与意义 考点2 需求获取的方法 考点3 需求分析过程 2.2 需求分析方法 考点1 需求分析方法概述 考点2 DFD需求建模方法 考点3 其他需求建模方法 ...

最新文章

  1. 在Linux上利用python获取本机ip
  2. 工作经验总结201606
  3. mysql删除有外链索引数据,Cannot delete or update a parent row: a foreign key constraint fails 问题的解决办法
  4. 高考计算机如何检索投档,2021年高考平行志愿如何投档?
  5. java dbcp_Java dbcp连接池基本使用方法详解
  6. GDCM:显示有关输入DICOM文件的meta元信息的测试程序
  7. alert文件位置 oracle,Oracle11gAlertlog文件位置的问题
  8. iptables for循环
  9. Gdb 调试core文件详解
  10. 【剑指offer】面试题39:数组中出现次数超过一半的数字
  11. 【Java】使用Switch语句实现成绩等级判断
  12. (转)淘淘商城系列——前台系统工程搭建
  13. 23. 从上往下打印二叉树[层序遍历](C++版本)
  14. [RK3399][Android7.1] HDMI Debug
  15. 4G网络起源及发展历程
  16. 百度地图实现定位功能及城市选择
  17. WSO2 Micro Integrator环境安装及部署
  18. 复数fft的时间复杂度_DFT算法与FFT算法的优劣分析
  19. 【NLP】自然语言处理的中间序列建模
  20. GIST 空间包络特征 推荐论文 简介

热门文章

  1. 4g内存可以用linux系统吗,Ubuntu Linux系统支持4G及以上大内存解决方案
  2. Yamale Python 包受高危的代码执行漏洞影响
  3. 2023第十六届“认证杯”数学建模网络挑战赛第一阶段比赛经历分享
  4. 汇龙安卓豆瓣顶贴软件的注意事项
  5. [视频处理] 使用copy命令合并视频
  6. GetFileInfo
  7. 题解 P5035 【金坷垃】
  8. S32K1xx 固件更新
  9. 带负荷测试要求二次最小电流_互感器二次负荷在线测试方法与流程
  10. 怎样防止App在后台运行,点击应用桌面图标重新启动