Java程序猿搬砖笔记(十五)
在Java中将类作为参数传递(泛型)
1 | 示例代码如下: |
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介绍
Java方法传参机制(Java只有值传递)
实参和形参
1、实参:用于传递给方法的参数,必须有确定的值。
2、形参:用于定义方法、接收实参,不需要确定的值。
值传递和引用传递
1、值传递:方法接收的是实参值创建的一个副本,对形参的修改不会影响到实参。
2、引用传递:方法接收的值是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。
总结
- Java只有值传递、Java只有值传递、Java只有值传递。
- Java实参传递给方法实际上是传递了一个副本。基本数据拷贝值,引用类型数据拷贝引用。
- Java实参和形参相当于遥控器,对象相当于电视机。遥控器可以改变电视机的内容,但是不能改变原来的遥控器。
Java只能值传递实际案例分析
示例代码如下:
1 | SaveRedisDto saveRedisDto = new SaveRedisDto(); |
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批量关闭流工具类
1 | public static void close(AutoCloseable... t) { |
适用于:不在try里面创建的流,也就是说需要手动关闭的
参考链接
Spring @Configuration注解
- @ComponentScan就相当于spring配置文件中的context:component-scan,主要作用就是去扫描指定包下使用注解的类,然后将使用注解的类注入到spring容器中。
- @Configuration注解的类就相当于spring配置文件,可以在该类中配置使用@bean注解将类注入容器中,相当于xml文件中的
标签。 启动spring项目时只需要指定被@configuration标识的配置类就行,而不需要去加载繁琐的xml了。
YAPI安装
MySQL所有数据库varchar字段长度不能超过65535
MySQL SUBSTRING_INDEX函数
把字符串截取后,返回指定字符串。
如果字符串中没有分割符,会返回整个字符串。
示例:
1 | -- 返回 ZGGX-MT-SH |
MySQL 字符串截取函数
left: 从字符串左边开始,截取几位
示例:
1 | -- 返回 这是要 |
right:从字符串右边开始,截取几位
示例:
1 | -- 返回的内容 |
substring:从字符串某个位置开始截取
示例:
1 | -- 从字符串的第 4 个字符位置开始取,只取 2 个字符。 |
SQLite3数据库相关操作
MySQL 查询结果为空(或者null)时,返回指定字符串
1 | -- sql模板 |
不同种类个税缴纳比例(税率标准+计算公式)
参考链接
公司上班适用于:
所以会出现前几个月税率3%,后几个月税率10%、20%的情况
Linux查看端口被哪个进程被占用的六个方法
Spring定时任务总结
- 定时任务默认是单线程的。如果任务执行时间超过定时任务间隔时间,不管是同一个定时任务还是不同的定时任务,下一个任务都会被阻塞。
待上一个执行完后,下一个定时任务不是立刻执行,而是需要等待(定时任务cron时间)才会执行。可以理解成是上一个任务执行完,才会开始计时 - 【推荐该方式】实现SchedulingConfigurer接口后,定时任务会变成多线程执行。不同的定时任务之间互不影响,同一个定时任务(方法)依然会有被阻塞的机制。
配置类代码如下:
1 |
|
- 如果定时任务交给线程池处理,则下一个任务也不会被阻塞。