摘要:使用场景 数据库密码直接使用明文不太安全,可以用druid对数据库密码进行加密解密。 Maven依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version
阅读全文
摘要:IDEA启动项目报错 Caused by: java.io.FileNotFoundException: class path resource [.properties] cannot be opened because it does not exist 解决方法: 1.检查文件的路径是否正确,
阅读全文
摘要:背景 mysql查出来的时间跟数据库相差13/14小时,写入的时间跟数据库也相差13/14小时。 问题原因 查看时区: 在mysql中执行以下命令: SHOW VARIABLES LIKE '%time_zone%'; 查询结果如下: 可以看到时区使用的是 CST,而 CST 是一种混乱的时区。它可
阅读全文
摘要:背景 有时我们需要在一些不属于Spring的类中,去调用Spring的Service类的方法。 比如,在Util类,或者main()方法中,去调用Service类的方法。 这时,可以使用 ApplicationContextAware接口 和 ApplicationContext接口 . Appli
阅读全文
摘要:PropertyDescriptor 我们在开发的过程中,有时会需要动态地设置属性,也就是动态getter、 setter。 使用传统的反射 Method、Field等类去处理,需要对方法名进行大量拼接,比较麻烦。 可以使用 PropertyDescriptor. 常用方法: 构造方法: Prope
阅读全文
摘要:函数式接口 在java8中,新增了很多函数式接口。在接口上标记了注解**@FunctionalInterface**的都是函数式接口 比如 Function、Supplier、Consumer、Predicate、BiFunction、BiConsumer、BiPredicate。 Function
阅读全文
摘要:java快速熟悉新项目 首先要会用整个系统。亲自用几遍,才能了解业务。 理解项目的架构,多看架构图。 哪些是底层服务?哪些是中间层?哪些是服务提供者,哪些服务消费者? 可以看一下哪些项目调用了哪些服务?比如Rpc包的服务有哪些。 多观察上层服务调用了哪些底层的服务。 可以画流程图,搞清楚业务流程,以
阅读全文
摘要:最近在上传文件时用到了InputStream,每次上传图片时,都没有成功上传完整的图片,只有其中一部分。 于是在上传文件时,查看了参数InputStream的 available()方法,发现上传文件时只有一部分字节,而不是全部的字节总数。 available(): 返回此输入流下一个方法调用可以不
阅读全文
摘要:问题排查思路 这里说的是主要是debug以及线上问题排查的思路. 解决问题的步骤 确认环境、确定问题、复现问题、查看日志、定位问题 、解决问题 确认环境/url/参数 确认是哪个环境。 是开发环境,测试环境,还是生产环境。 如果问题是在测试环境,去开发环境看问题,不一定能复现。 如果采用了微服务架构
阅读全文
摘要:java8使用了LocalDateTime和DateTimeFormatter。比之前的Date和Carlendar有所改进。 DateTimeFormatter是线程安全的。DateTimeFormatter中很多属性使用了final修饰。 LocalDate: 只能设置仅含年月日的格式,表示没有
阅读全文
摘要:使用split的时候,要多注意下标。 split方法 继续往里看: split()方法内部,其实是用Pattern去处理的。 Pattern是一个正则表达式经编译后的表现模式。 Pattern compile(String regex) 表示将给定的正则表达式编译并赋予给Pattern类。 Patt
阅读全文
摘要:String内存模型 示例: 解答如下: 参考资料: https://www.cnblogs.com/aiqiqi/p/10770864.html _label4 https://blog.csdn.net/fenglllle/article/details/81479179 https://jue
阅读全文
摘要:类型转换虽然很简单,但是还是有些小细节要多注意。 ### String转化为int: ``` String test="123"; int number=Integer.parseInt(test); ``` ### String转化为Integer: ``` String test="123";
阅读全文
摘要:大量判空的代码 实际中,对象不判空会导致空指针异常。 为了规避为指针,不得不写出这种非常冗长又丑陋的空指针判断。 public void tooMuchNull(Worker worker) { if (worker != null) { Address address=worker.getAddr
阅读全文
摘要:一、lambda表达式 语法: (parameters) -> expression 或 (parameters) ->{ statements; } parameters是参数,expression是表达式,statements是代码块。 lambda表达式,其实就是匿名函数。 ->左侧是方法参数
阅读全文
摘要:限定符(量词): *表示零次或多次,+表示至少一次,?表示最多一次。{n}表示n次,{n,}表示至少n次。 中括号表达式: []表示或. 如[afg]表示一个为a或者f或者g的字母。 中括号内的-表示范围。[0-9]表示数字0到9中的一个,[0-9]+表示至少一个数字。 [A-Za-z]表示一个任意
阅读全文
摘要:一、ThreadLocal ThreadLocal,线程副本变量。 ThreadLocal,保证了每个线程都有独立的对象副本,保证了对象的唯一性,可以实现线程安全性。 UML图 如下所示: set(T value) 调用ThreadLocal的set(T value)和get()方法时,内部会使用到
阅读全文
摘要:DTO,就是Data Transfer Object,数据传输对象,可以简单理解成请求中的对象。 PO,就是Persistant Object,持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个
阅读全文
摘要:在进行单价、总价相关的计算时,就会用到BigDecimal。 在初始化时,一个不小心,就可能给自己挖坑。 示例如下: 运行之后,结果为: 源码注释 打开BigDecimal的构造方法,可以发现: 大体意思就是,BigDecimal(double val)这个构造方法有时是无法精确预料的, 传入0.1
阅读全文