-
数组创建
String[] list = {"1","2"} new Class<?>[] { xxx.class }
-
通过反射创建实例(spring)
BeanUtils.instantiateClass(constructor, args);
-
main方法的入参有什么用
在运行java程序时,可以传参,使用方法如下:
- 启动命令:
main方法中能接收到启动参数, 打印如下java -jar xxx.jar -Dspring.profiles.active=prod
public static void main(String[] args) { System.out.println(JSON.toJSONString(args)); }
["-Dspring.profiles.active=prod"]
- 启动命令:
-
函数型接口的使用
https://blog.csdn.net/Lucifer_Warlock/article/details/120074097
-
如何理解tcp的三次握手建立连接和四次挥手断开连接
可以想象一下 当两个人如何通过 网络延迟为0-1h的微信聊天
-
controller中出入参类型转换
枚举类等的自动转换
@PostMapping("test") public void test(@RequestBody UserEntity entity){ System.out.println(JSON.toJSONString(entity)); System.out.println(entity.getGender().getCode()); } @Data public class UserEntity { private String username; private String password; private SexEnum gender; private StatusEnum status; } public enum SexEnum { Man(1,"男"), Woman(0,"女"); }
{“username”:“73586”,“password”:“123456”,“gender”: “Man”,“status”: null} 此时能自动转换成对应的枚举类
原因: springboot 加载时,会加载一些内置的类型转换器//加载一些类型转换器,其中就有枚举类和字符串互转的 DefaultConversionService.addDefaultConverters(registry);
final class StringToEnumConverterFactory implements ConverterFactory<String, Enum> { //创建StringToEnum<T extends Enum>的类型转换器 @Override public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) { return new StringToEnum(ConversionUtils.getEnumType(targetType)); } private static class StringToEnum<T extends Enum> implements Converter<String, T> { private final Class<T> enumType; public StringToEnum(Class<T> enumType) {this.enumType = enumType;} //字符串转成目标类型T的具体方法 @Override public T convert(String source) { if (source.isEmpty()) { // It's an empty enum identifier: reset the enum value to null. return null; } return (T) Enum.valueOf(this.enumType, source.trim()); } } }
//出参转换 枚举类转string final class EnumToStringConverter extends AbstractConditionalEnumConverter implements Converter<Enum<?>, String> { public EnumToStringConverter(ConversionService conversionService) { super(conversionService); } //会根据枚举类的name进行转换 @Override public String convert(Enum<?> source) { return source.name(); } }
自定义类型转换器,待续…
-
时区问题
开发过程中时区问题主要存在于两个地方:
- jvm和宿主机之间时区不一致
- jvm和mysql的jdbc连接中serverTimeZone不一致
注意: LocalDateTIme和mysql中的DateTime 都是和时区无关的
mysql中函数的时区问题
UNIX_TIMESTAMP( ‘2021-09-08’ )
应该是和LocalDateTime一样,先转成带时区的时间,然后再转成时间戳
字符串’2021-09-09’ => 本次session的时区的 2021-09-08(如果是UTC,就是UTC的2021年9月8日) => 其对应的时间戳 (如果这时候你拿着这个时间戳去网站转时间的话,会得到东八区的2021-09-08 08:00) -
延迟消息:
redis 实现延迟任务(两种方式): 1. 开启redis过期事件(notify-keyspace-events Ex (x key过期并删除时触发事件)), 此种情况依赖redis的删除策略, 2.权重集合,将过期时间作为权重,通过定时任务获取判断
java小技巧
最新推荐文章于 2024-07-13 13:55:40 发布