文章目录
- 在Java中将类作为参数传递(泛型)
- IDEA快捷键:查看该方法调用了哪些方法、被哪些方法调用
- 快捷键:ctrl+alt+h
- IDEA快捷键:快速从controller跳转到serviceImpl
- IDEA快捷键:实现接口的方法
- IDEA 快捷键:快速包裹代码
- IDEA插件EasyYapi安装
- IDEA生成接口文档插件Doc View
- RunApi介绍
- Java方法传参机制(Java只有值传递)
- 实参和形参
- 值传递和引用传递
- 总结
- Java只能值传递实际案例分析
- Java 阻塞队列BlockingQueue提供的四种方法
- Java 7批量关闭流工具类
- Spring @Configuration注解
- YAPI安装
- MySQL所有数据库varchar字段长度不能超过65535
- MySQL SUBSTRING_INDEX函数
- MySQL 字符串截取函数
- left: 从字符串左边开始,截取几位
- right:从字符串右边开始,截取几位
- substring:从字符串某个位置开始截取
- SQLite3数据库相关操作
- MySQL 查询结果为空(或者null)时,返回指定字符串
- 不同种类个税缴纳比例(税率标准+计算公式)
- Linux查看端口被哪个进程被占用的六个方法
- Spring定时任务总结
在Java中将类作为参数传递(泛型)
示例代码如下:
// 示例方法
public <T> void downloadErrorData(Class<T> className){
List<T> downloadList = new ArrayList<>();
}
// 调用示例
importService.downloadErrorData(PropositionExpertImportVo.class);
IDEA快捷键:查看该方法调用了哪些方法、被哪些方法调用
快捷键:ctrl+alt+h
查看该方法被哪些方法调用(即调用链)
查看该方法调用了哪些方法
IDEA快捷键:快速从controller跳转到serviceImpl
快捷键:CTRL+T
IDEA快捷键:实现接口的方法
进入到实现类中,按 ALT+SHIFT+P
IDEA 快捷键:快速包裹代码
实现快速生成if-else、for、try-catch-finally语句。
快捷键:CTRL+ALT+T
IDEA插件EasyYapi安装
参考链接、参考链接
IDEA生成接口文档插件Doc View
- 支持文档预览、文档修改
- 支持批量导出MarkDown文件到本地
- 支持上传文档到YAPI、Show Doc、语雀平台
- 支持Swagger和普通注释,支持多种字段必填配置
官网
RunApi介绍
介绍和下载地址、Github
Java方法传参机制(Java只有值传递)
实参和形参
1、实参:用于传递给方法的参数,必须有确定的值。
2、形参:用于定义方法、接收实参,不需要确定的值。
值传递和引用传递
1、值传递:方法接收的是实参值创建的一个副本,对形参的修改不会影响到实参。
2、引用传递:方法接收的值是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。
总结
- Java只有值传递、Java只有值传递、Java只有值传递。
- Java实参传递给方法实际上是传递了一个副本。基本数据拷贝值,引用类型数据拷贝引用。
- Java实参和形参相当于遥控器,对象相当于电视机。遥控器可以改变电视机的内容,但是不能改变原来的遥控器。
参考链接、
参考链接
Java只能值传递实际案例分析
示例代码如下:
SaveRedisDto saveRedisDto = new SaveRedisDto();
List<ImportErrorVo> errorList = new ArrayList<>();
saveRedisDto.setErrorList(errorList);
saveRedisDto.setErrorList会创建一个errorList的引用副本传递,这个引用副本一直指向最开始的对象。
后续如果改变errorList的引用指向,并不会影响saveRedisDto的getErroList的指向。
Java 阻塞队列BlockingQueue提供的四种方法
抛异常 | 特定值 | 阻塞 | 超时 | |
---|---|---|---|---|
插入 | add(o) | offer(o) | put(o) | offer(o, timeout, timeunit) |
移除 | remove(o) | poll(o)-jdk8不存在了 | take(o) | poll(timeout, timeunit) |
检查 | contains(o) |
Java 7批量关闭流工具类
public static void close(AutoCloseable... t) {
for (AutoCloseable closeable : t) {
if (closeable != null) {
try {
closeable.close();
} catch (Exception e) {
log.error("批量关闭流异常:",e);
}
}
}
}
适用于:不在try里面创建的流,也就是说需要手动关闭的
参考链接
Spring @Configuration注解
- @ComponentScan就相当于spring配置文件中的context:component-scan,主要作用就是去扫描指定包下使用注解的类,然后将使用注解的类注入到spring容器中。
- @Configuration注解的类就相当于spring配置文件,可以在该类中配置使用@bean注解将类注入容器中,相当于xml文件中的标签。 启动spring项目时只需要指定被@configuration标识的配置类就行,而不需要去加载繁琐的xml了。
YAPI安装
官网-部署文档、
Github-源代码
MySQL所有数据库varchar字段长度不能超过65535
MySQL SUBSTRING_INDEX函数
把字符串截取后,返回指定字符串。
如果字符串中没有分割符,会返回整个字符串。
示例:
-- 返回 ZGGX-MT-SH
select SUBSTRING_INDEX('ZGGX-MT-SH-20230013','-',3);
-- 返回 20230013
select SUBSTRING_INDEX('ZGGX-MT-SH-20230013','-',-1);
-- 返回整个字符串 ZGGXMTSH20230013
select SUBSTRING_INDEX('ZGGXMTSH20230013','-',3);
-- 返回整个字符串 ZGGXMTSH2023-0013
select SUBSTRING_INDEX('ZGGXMTSH2023-0013','-',3);
MySQL 字符串截取函数
left: 从字符串左边开始,截取几位
示例:
-- 返回 这是要
select left('这是要截取的内容', 3);
right:从字符串右边开始,截取几位
示例:
-- 返回的内容
select right('这是要截取的内容', 3);
substring:从字符串某个位置开始截取
示例:
-- 从字符串的第 4 个字符位置开始取,只取 2 个字符。
-- 返回 截取
select substring('这是要截取的内容', 4, 2);
-- 从字符串的第 4个字符位置开始取,直到结束。
-- 返回 截取的内容
select substring('这是要截取的内容', 4);
-- 从字符串(倒数)的第 4个字符位置开始取,只取2个字符。
-- 返回 取的
select substring('这是要截取的内容', -4, 2);
-- 从字符串(倒数)的第 4个字符位置开始取,直到结束。
-- 返回 取的内容
select substring('这是要截取的内容', -4);
SQLite3数据库相关操作
参考链接
MySQL 查询结果为空(或者null)时,返回指定字符串
-- sql模板
SELECT IF(ifnull(字段名,'') = '', '返回的字符串', 字段名(或者指定字符)) AS 别名
FROM tableName;
-- 示例sql
SELECT IF(ifnull(introduce,'') = '', '1', '2') AS introduceEmpty
FROM t_achievement_application;
不同种类个税缴纳比例(税率标准+计算公式)
参考链接
公司上班适用于:
所以会出现前几个月税率3%,后几个月税率10%、20%的情况
Linux查看端口被哪个进程被占用的六个方法
参考链接
参考链接
Spring定时任务总结
- 定时任务默认是单线程的。如果任务执行时间超过定时任务间隔时间,不管是同一个定时任务还是不同的定时任务,下一个任务都会被阻塞。
待上一个执行完后,下一个定时任务不是立刻执行,而是需要等待(定时任务cron时间)才会执行。可以理解成是上一个任务执行完,才会开始计时 - 【推荐该方式】实现SchedulingConfigurer接口后,定时任务会变成多线程执行。不同的定时任务之间互不影响,同一个定时任务(方法)依然会有被阻塞的机制。
配置类代码如下:
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(8));
}
}
- 如果定时任务交给线程池处理,则下一个任务也不会被阻塞。
参考链接