lemon框架开发笔记
lemon框架开发笔记
JudgeUtils.isBlank() 字符串为 null 或者 "" ----返回true
JudgeUtils.isNotBlankAll() 字符串全部不为 null 或者 "" ----返回true
JudgeUtils.isBlankAll() 字符串全部为 null 或者 "" ----返回true// isBlank 是在isEmpty的基础上进行了为空(字符串都为空格、制表符、tab 的情况)的判断。因此isBlank层次更高。
-
Controller 自定义RequestMapping访问路径
-
注意service 上的分布式事务处理 查询操作开启事务打开事务消耗性能
-
lemon 框架处理 id — MonitorIdGenUtils类定义方法,bootstrap.yml 中配置 id
-
注意static使用场景
-
注意判断 循环 等规范 如下代码:
// 如果 e.getCertificateExpiryTime() 为空 那么会报错 就算你可以前面做了判断保证数据不为空 // 我们也这样书写代码就规范一点 if (e.getCertificateExpiryTime().isAfter(LocalDate.now())) {BusinessException.throwBusinessException("到期时间应大于当前时间); }// 规范书写 LocalDate.now() 获取当前时间 就绝对不会为空 if (LocalDate.now().isAfter(e.getCertificateExpiryTime())) {BusinessException.throwBusinessException("到期时间应大于当前时间); } -
实体类规范
1、lemon 框架对 @dataobject 有单独定义,DO是最好不允许出现@DATA的,都用@dataobject,然后自己set/get/tostring。 2、能用自动生成的DO都不允许修改,需要增加字段,新增DO类继承。 3、BO DTO用 @data 4、BO 中基本不允许出现 逻辑代码(据业务情况而定) 5、DO 中是不允许出现 json 注解的 - Controller DTO Controller 的数据交互 - Service BO Service数据交换 - Dao DO 数据库查出来的都是DO -
注意 lambda 表达式 处理完得到的数据要不要判空
-
git 提交代码的时候 需要注意提交时的注释要与devops需求一致 否则无法push
-
mysql 可以使用 <> 表示不等于
-
大屏的生产数据特别庞大 多表联查会在页面展示的时候造成响应超时。目前最大有700万条数据。
-
id 判断空的时候 返回null 要考虑其他地方会不会被影响 不判断看代码,你前端必传的话,可以不判断
-
特殊情况下拿不到生产的数据、可以打印日志、去日志查询这个数据是什么
-
下拉框选择时、数据库存储英文、前端可以通过查询字典配置渲染数据。
-
正常、异常、等等。数据库存英文,后台使用枚举、前台可以拿到key、value进行数据渲染
// 多个List<String> 拼接成一个List<String> public List<String> ListIntegration (List<String>... list) {return Arrays.stream(list).flatMap(List::stream).collect(Collectors.toList()); } // 只要List中包含一个equals()方法需要比较的值、即返回true 注意:List中不可以存在null 否则会报错 List.stream().anyMatch(list -> list.getInspectionResult().equals(xxx)); -
异步 – 多个线程之前进行一个通信 – 巡检方面
java中的异步是指一种编程模型,它允许程序在某个操作执行期间继续执行其他操作,而不是等待该操作完成再继续执行。Java中实现异步的方式有很多,比如使用回调、Future和CompletableFuture等。 具体来说,Java中的异步操作通常通过多线程实现。在执行异步操作时,程序会创建一个新的线程来执行该操作,而主线程则可以继续执行其他任务,从而提高程序的执行效率和吞吐量。与同步操作相比,异步操作可以避免程序的阻塞等待,从而提高程序的响应速度和用户体验。Java中的线程是指程序并发执行的多个执行线程。Java中创建线程有两种方式:继承Thread类和实现Runnable接口。继承Thread类需要重写run方法,而实现Runnable接口需要实现run方法。使用Runnable接口的方式更加常用,因为它可以避免单继承带来的限制。Java中保证线程安全可以采取多种方式,比如使用synchronized关键字、使用Lock接口、使用volatile关键字等。其中,synchronized关键字是最常用的方式,它可以确保同一时间只有一个线程访问共享资源,从而避免了多线程竞争导致的数据不一致等问题。而volatile关键字则可以确保多个线程之间对于同一变量的修改和读取操作是可见的,从而避免了多线程竞争导致的线程安全问题。 -
使用lemon 框架啊 mq 走异步(当两个进程进行通信的时候)、操作枚举赋值会抛出异常、需要使用枚举反序列器
public class 类名 extends JsonDeserializer<枚举类> {@Overridepublic 枚举类 deserialize(final JsonParser jp,final DeserializationContext ctxt) throws IOException {final JsonNode jsonNode = jp.readValueAsTree();return 枚举类.fromValue(jsonNode);} }-
Mysql 判断一个字段是否等于 null或者空的时候,需要跟据字段类型来做过滤;假设要count(1) 不为空的金额总数。金额字段是decimal类型。那么就不可以用 ! = ‘ ’、<> ‘ ’ 来过滤 ;可以用 is not null ; 用 !=、<> 的话、就不会count(1) 金额为 0的数据、主要需要根据字段类型来使用合适的方法过滤数据
mysql函数 date_format(字段名称,'%Y-%m-%d') datetime 转 date
-
常见错误超出建表最大长度
com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 转换出错
cannot be cast to
-
mybatis 编写sql的时候、需要注意传参是否取别名、字段是否正常、表字段是否正常、映射是否可以取出数据。动态sql拼接时注意and、or 有没有添加
-
设计表字段时,如果有些字段跟尽量根据以前的表来设计。比如现在新表设计用户名字段。这个用户名字段在以前用户表是存在的,那需要注意长度、命名、表是在生产还是测试环境
-
开发代码时新的代码都要往下编写
@Deprecated 可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。 -
涉及优化的时候 改动字段 不要动以前的逻辑
-
定时任务cron表达式
-
大屏 定时任务处理数据、数据校验、手动调用接口
-
写sql的时候用分组查询出数据、方便
-
toDateTime(x) yyyy-MM-dd HH:mm:ss时间函数
clickhouse toDateTime()`时间函数返回的时间格式为`yyyy-MM-dd HH:mm:ss toDateTime(x)`参数x可以是字符串类型也可以是数字类型 -
parseDateTimeBestEffort
cliskhouse 说明:把String类型的时间日期转换为DateTime数据类型 -
当需要返回一个空的集合、减少内存开销
使用 Collections.emptyList();
28.写代码的时候不要太局限于list,map的数据处理。想一想,遇到复杂数据加工的时候,可不可以把map和list相互套着用。
29.RedisTemplate的两种序列化实践方案
方案一:(内存开销较大,会存储多余的字节码)
1.自定义RedisTemplate
2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer(bean注入)
方案二:(节省内存空间、步骤麻烦需要手动处理数据)
1.使用StringRedisTemplate
2.写入Redis时,手动把对象序列化为JSON
3.读取Redis时,手动把读取到的JSON反序列化为对象
30.编写代码时、要注意返回值、返回类型是否包装类;避免自动拆箱的风险。
// 避免
@Overridepublic boolean getLock() {Boolean aBoolean = stringRedisTemplate.opsForValue().setIfAbsent("key", "value", 120, TimeUnit.SECONDS);// 如果直接返回aBoolean有自动拆箱的风险 // 通过下面这种方法返回return Boolean.TRUE.equals(aBoolean);}
31.有关于字符串的操作,频繁的对String对象进行修改,会造成很大的内存开销。此时应该用StringBuffer或StringBuilder来代替String。
而new String()更加不适合,因为每一次创建对象都会调用构造器在堆中产生新的对象,性能低下且内存更加浪费
性能、安全方面存在区别。一般来说,如果在单线程环境下进行字符串操作,建议使用StringBuilder,它的性能更高。而在多线程环境下进行字符串操作时,为了保证线程安全性,应该使用StringBuffer。
32.关于resultType与parameterType 的基本使用的区别 :
1、使用resultType :主要针对于从数据库中提取相应的数据出来(出参)
2、使用parameterType :主要针对于将信息存入到数据库中 如:insert 增加数据到数据库(入参)
33.clickhouse使用函数时,索引失效的问题
1、使用Date()去转换一个代表时候的字符串,会造成索引的失效
2、我们可以使用toStartOfMinute() 精确到分钟的一个函数
3、我们还可以在需要使用函数的列上,加上一个函数索引,这样也可以保障索引不会失效
相关文章:
lemon框架开发笔记
lemon框架开发笔记 JudgeUtils.isBlank() 字符串为 null 或者 "" ----返回true JudgeUtils.isNotBlankAll() 字符串全部不为 null 或者 "" ----返回true JudgeUtils.isBlankAll() 字符串全部为 null 或者 "" ----返回true// isBlank 是在isEmpt…...
Spark SQL快速入门
1. 了解Spark SQL 1.1 什么是Spark SQL Spark SQL是spark的一个模块,用于处理海量的结构化数据。 1.2 Spark SQL有什么特点?优点是什么? 特点: Spark SQL支持读取和写入多种格式的数据源,包括Parquet、JSON、CSV、…...
linux+Jenkins+飞书机器人发送通知(带签名)
文章目录 如何使用在linux 上安装python 环境发送消息python脚本把脚本上传倒linux上 jenkins 上执行脚本 如何使用 自定义机器人使用指南飞书官网https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot 在linux 上安装python 环境 yum install python3 python…...
react hooks
1 useEffect(setup,dependencies) 使用object.is来比较每个依赖项和它先前的值 依赖项为空数组的effect不会在组件任何props和state发生改变时重新运行 当useEffect依赖于外部传入props对象时,容易造成死循环 需要对依赖对象进行深比较 import { isEqual } from…...
一起学数据结构(1)——复杂度
目录 1. 时间复杂度: 1.1 时间复杂度的概念: 1.2 时间复杂度的表示及计算: 1.3 较为复杂的时间复杂度的计算: 2. 空间复杂度: 2.1 空间复杂度的概念: 2.2 空间复杂度的计算: 1. 时间复杂度…...
<el-date-picker>组件选择开始时间,结束时间自动延长30min
背景:选择开始时间,结束时间自动增加30分钟,结束时间也可重新选择,如图: <el-form-item label"预约开始时间" prop"value1"><el-date-pickersize"large"v-model"ruleForm…...
eslint-webpack-plugin
说明:现在eslint已经弃用了eslint-loader,如果要安装来使用的话,会报错,烦死人 大概的报错信息如下: ERROR in ./src/index.js Module build failed (from ./node_modules/eslint-loader/dist/cjs.js): TypeError: Cannot read …...
logback中文一直是乱码,logback中文问号
logback一直是乱码 方案一加上UTF-8 方案二我这边方案一不行 在启动参数加上 -Dfile.encodingutf-8 这个竟然就可以了...
C++之文件操作
1.C文件操作 C中文件操作头文件:fstream。 文件类型:文件文件和二进制文件。 文件操作三大类: ofstream 写操作 ifstream 读操作 fstream:读写操作 文件打开方式: 标志说明ios::in只读ios::out只写,文件不存在则…...
CentOS 7.6安装 MongoDB 5.0.2
https://developer.aliyun.com/article/983777 我遇到的问题:如何以集群的方式启动,使用replSet的方式进行启动: 需要在配置文件上加上replSet的信息 port27017 #端口 bind_ip0.0.0.0 #默认是127.0.0.1 dbpath/usr/local/mongodb/data #数据…...
Windows下安装python3教程
参考:https://blog.csdn.net/kailingr/article/details/128193083 一、安装步骤图解 准备工作: 进官网https://www.python.org/下载Python 安装包,注意:Python 3.9不能在Windows 7或更早版本上使用 安装: 1.下载完之后双击该文…...
opencv-27 阈值处理 cv2.threshold()
怎么理解阈值处理? 阈值处理(Thresholding)是一种常用的图像处理技术,在机器学习和计算机视觉中经常被用于二值化图像或二分类任务。它基于设定一个阈值来将像素值进行分类,将像素值大于或小于阈值的部分分为两个不同的类别&…...
AAOS 音频焦点请求
文章目录 前言基本概念提供给应用来获取音频焦点的apiAAOS中的音频焦点管理交互矩阵duck的实现流程AAOS 测试应用kitchensink焦点相关 前言 本文章的目标是首先了解Android中音频焦点的基本概念,理解代码中相关音频焦点的使用方法。其次理解AAOS 中相关交互矩阵概念…...
订单系统中的幂等实现
一.订单提交的例子 一个订单生成并支付的过程,大致为:用户点击前端页面提交订单->后端根据此次提交信息生成订单->用户确认订单并进行支付操作->支付成功。 主要分为前端层面,后端系统层面,数据库层面。前端层面不详述…...
三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询
目录 1.根据用户名或者token查询用户信息 会员信息实体类 统一状态Result类 controller层 service层及实现类 dao层 测试: 2.链表分页条件查询 会员等级实体类 封装条件类PageVo controller层 service层及实现类 dao层 Mapper.xml层 测试 vue前端参考 1.根据用户名…...
列表、张量、向量和矩阵的关系
在数学和编程中,列表、张量、向量和矩阵之间有一定的关系。这些概念在不同领域和语境中有略微不同的定义和用法,以下是它们之间的一般关系: 列表(List): 列表是编程语言中的一种数据结构,用于存…...
华为数通HCIP-ISIS高级
isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递,到达L1-2路由器时,L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递; 因此L2区域的设备可以学习到L1区域的明细路由,进行访问;…...
CorelDraw怎么做立体字效果?CorelDraw制作漂亮的3d立体字教程
1、打开软件CorelDRAW 2019,用文本工具写上我们所需要的大标题。建议字体选用比较粗的适合做标题的字体。 2、给字填充颜色,此时填充的颜色就是以后立体字正面的颜色。我填充了红色,并加上了灰色的描边。 3、选中文本,单击界面左侧…...
大致了解Redis
为了保证数据的可靠性,Redis 需要在磁盘上读写 AOF 和 RDB,但在高并发场景里,这就会直接带来两个新问题:一个是写 AOF 和RDB 会造成 Redis 性能抖动,另一个是 Redis 集群数据同步和实例恢复时,读 RDB 比较慢…...
javaweb会话技术
cookie的入门使用 package com.hspedu.cookie;import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import …...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
