• java积累


    精彩博文

    一、常用api

    1.查看容器中有没有某个id,有为true

     .contains(long id)

    2.生成随机数值

    Math.random

    3.把a对象数据放进b对象里 字段名称要相同

    BeanUtils.copyProperties(实体类 a,实体类 b)

    4.集合类判空

     CollectionUtils.isNotEmpty(集合)

    5.只能用在单数据源回滚

    @Transactional (rollbackFor = Exception.class)

    6.多数据源 指定数据源

    @DS()

    7.可变参数  A...a(是个数组)

    ArrayUtils.isNotEmpty(a)?a[0]:new A();

    8.截取取字符串

    1. StringUtils.abbreviate(" ",15) 取前15
    2. StringUtils.abbreviate(" ",515) 取,5-15

    9.Date 增加一天

    DateUtils.addDays(date, 1);

    10.获取固定格式时间DATE

    1. public Date getNowTime() {
    2.         Date date = new Date();
    3.         Date nowDate = null;
    4.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    5.         String s = sdf.format(date);
    6.         try {
    7.             nowDate = sdf.parse(s);
    8.         } catch (ParseException e) {
    9.             e.printStackTrace();
    10.         }
    11.         return nowDate;
    12.     }

    11.lambda表达式所在的作用域生命的变量不可以第二次赋值

    12. jsonObject

    1. // string 转 jsonObject
    2. JsonObject.parseObject("string")
    3. // 拿到key下的json数组(jo是jsonObject)
    4. JsonArray as = jo.getJsonArray("key")
    5. // 拿到as下的第二个数组
    6. JsonArray as = as.getJsonArray(2)
    7. // json转string
    8. string properties = a.getJsonObject("jo").toString;
    9. // json转实体类
    10. Entity e = JSON.parseObject(jo, Entity.class);

    14. 向前端传的字段名与数据库字段名无法一致。例:数据库字段‘lBoundary’,前端需要‘lboundary’

    在get,set方法上使用注解@JsonProperty(‘lboundary’)

    15.浮点数比较大小要比较精度(1e-6等于0.000001)

    1. // 18.1 比较相等时,精度要<=1e-6
    2. fabs(a-b)<= 1e-6
    3. // 18.2 比较大于时
    4. if(a>b && fabs(a-b)> 1e-6)
    5. // 18.3 比较小于时
    6. if(a<b && fabs(a-b)> 1e-6)

    16.string拼接“\”符号时,不能写死,因为不同系统分隔符不同,要使用File.separator替换

    File.separator

    17.为某个值赋最小值

    Double.NEGATIVE_INFINITY;

    18.@Autowired 循环依赖时使用懒加载@Lazy

    19.定时任务

    1. @Scheduled(cron = “000**?”)
    2. 方法......

    20.Math.max(a,b) 比较出a,b中的max,比较float性能差

    21.指定字符删除(替换掉_)

    str.replaceAll("_","")

    22.懒汉模式 双检锁模式

    1. /**
    2.      * 懒汉模式
    3.      * volatile 防止指令重排序
    4.      */
    5.     private static volatile AsyncManager instance = null;
    6.     public static synchronized AsyncManager getInstance() {
    7.         //双检锁模式
    8.         if(null == instance){
    9.             synchronized (AsyncManager.class) {
    10.                 if(null == instance) {
    11.                     instance = new AsyncManager();
    12.                 }
    13.             }
    14.         }
    15.         return instance;
    16.     }


    23.用到.in(ids),或者sql中有in(ids)时,要对ids做判空处理

    24.map.putIfAbsent:map的此方法是先检查map中是否有key,没有时候再添加

    25.将大list转换成小list

    List<List<String>> minList = Lists.partition(maxList, 1000);

    26.spring的@value注解是spring初始化bean时候执行的。

    1. 如果用@valuestatic修饰的属性复制(static先于spring之前加载)
    2. 做法:先封装一个bean来初始化相关的配置,然后利用工具类在静态代码块中获取到这个bean对象,用这个bean对象来初始化工具类中的相关属性
    3. //https://www.jianshu.com/p/3daeb8629a56
    4. // https://blog.csdn.net/yrsg666/article/details/111640131
    5. @value使用时默认加载application.yml中的文件,可以再指定别的文件spring.porfiles.active=dev\alpha\beta

    27.sleep的另一种写法

    TimeUnit.MILLISECONDS.sleep(300);

    28.文本框校验先转成Document 

    1. Document document = Jsoup.parse(content);
    2.  // 判空
    3.  ObjectUtil.isEmpty(document.text())

    29.判断集合中某值出现的次数

    1. //Bag继承自Collection接口,定义了一个集合,该集合会记录对象在集合中出现的次数。 
    2.  HashBag<String> bagNo = new HashBag<>("1")

    二、postgre数据

    1. 4326转3857坐标系之前先要配置默认坐标系

     select update Geometry SRID(“表名”,‘geom’,4326

    2. 查询坐标系

     select ST_SRID(geom) from ”表名“ limit 1

    3. 快速创建两个点

    ST_MakePoint(x,y)

    4. 更新坐标系

    ST_setSrid(XX,4326)

    5. 坐标系之间转换

    ST_Transform(4326,3857)

    三、mysql数据库

    1. 数据库全局查询 

    ctrl +F

    2. 全文索引

    1. MATCH (columnName) AGAINST (‘string’)
    2. SELECT * FROM `student` WHERE MATCH(`name`) AGAINST('聪')

    3. concat()函数

    1. 将多个字符串连接成一个字符串,如果有任何一个参数为null,则返回值为null
    2. concat(str1, str2,...)

    4. <![CDATA[ ]]>  防止特殊字符被转义

    <![CDATA[<=]]>

    5. 根据UNIQUE索引或者primary key(主键)是否出现重复,判断执行update语句或者insert语句

    1. INSERT INTO user(id,name) VALUES(8,'c'
    2. ON DUPLICATE KEY
    3. UPDATE name="B";

    6. mybatis-plus中IserviceImpl中的saveOrUpdateBetch()方法也可以批量实现存在 id 时候覆盖,不存在时候添加
     
     7. 校验数据库某列字段是否唯一,使用limit 1可以避免全表查询

    limit 1

    8. 查询时候用到or时候使用union替换,因为or会使索引失效

    9. 如果某个字段为null就从别处拿取字段值

    1. CASE  WHEN tm.createTime IS NULL
    2. THEN
    3. ( SELECT create_time FROM t_merchant_information t WHERE t.id = tm.id )
    4. ELSE 
    5. tm.createTime
    6. END as createTime

    10. sql中当前时间与数据库数据比较

    where date_format(now(), '%Y%m%d%H%i%S') <![CDATA[>=]]> concat(date_format(t1.begin_date, '%Y%m%d'), t1.begin_time)

    11. 数据库一对多,并且要展示某个字段时候可以用GROUP_CONCAT方法拼接字段。

    1. (select GROUP_CONCAT(sys_name separator',') from t_news_module where news_id = tn.news_id)
    2.         SELECT
    3.         tn.*,
    4.         (select GROUP_CONCAT(sys_name separator',') from t_news_module where news_id = tn.news_id) as sys_name
    5.         FROM
    6.         `t_news_notifications` tn
    7.         where
    8.             tn.del_flag = 2

    12. 使用foreach时要记得separator是“,”号

    <foreach collection="list" item="item" index="index" separator=",">

    13. 数据库表中id自增时候普通删除,id会顺序增加,执行truncate table t_name 后数据做删除处理,并且id从1开始自增

    truncate table t_name;

    14. 返回字符串str,使用在开始位置pos和len个字符的的字符串,newstr取代长字符串

    INSERT(str,pos,len,newstr)

    四、idea功能

    1. 快速创建静态常量
    ctrl+alt+c

    2. 快速大小写转换
    ctrl+shift+u

    3. 中英文翻译
    ctrl+shift+o

    4. 快速给实体类添加get,set方法
    alt+ent(在实体类上添加)

    5. 格式化代码
    ctrl+alt+t

    6. idea项目中没有iml文件
    执行mvn idea:module

    五、linux

    1.linux 查看日志常用命令

    1. tail:
    2. -n 是显示行号;相当于nl命令;例子如下:
    3. tail -100f test.log 实时监控100行日志
    4. tail -n 10 test.log 查询日志尾部最后10行的日志;
    5. tail -n +10 test.log 查询10行之后的所有日志;
    6. cat -n test.log |grep "debug" 查询关键字的日志


    2.按行号查看---过滤出关键字附近的日志

    1. 1)cat -n test.log |grep "debug" 得到关键日志的行号
    2. 2)cat -n test.log |tail -n +92|head -n 20 选择关键字所在的中间一行. 然后查看这个关键字前10行和后10行的日志:
    3. tail -n +92表示查询92行之后的日志
    4. head -n 20 则表示在前面的查询结果里再查前20条记录
    1. cat app.log | grep -C 5 '关键字'   (显示日志里匹配字串那行以及前后5行)
    2. cat app.log | grep -B 5 '关键字'   (显示匹配字串及前5行)
    3. cat app.log | grep -A 5 '关键字'   (显示匹配字串及后5行)


    3.根据日期查询日志

    1. sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
    2. 特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效;
    3. 先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该 时间点


    4.进入编辑查找:vi(vim)    

    1.  1、进入vim编辑模式:vi app.log
    2.     2、输入“/关键字”,按enter键查找
    3.     3、查找下一个,按“n”即可( n 查找上一处错误日志  N 查找下一处错误日志)
    4.        4、ctrl+f: 下翻一屏。
    5.           ctrl+b: 上翻一屏。
    6.           ctrl+d: 下翻半屏。
    7.           ctrl+u: 上翻半屏。
    8.           ctrl+e: 向下滚动一行。
    9.           ctrl+y: 向上滚动一行。
    10.        5、ctrl+o回到搜索的地方
    11. :w            - 保存文件,不退出 vim
    12. :w file       -将修改另外保存到 file 中,不退出 vim
    13. :w!           -强制保存,不退出 vim
    14. :wq           -保存文件,退出 vim
    15. :wq!          -强制保存文件,退出 vim
    16. :q            -不保存文件,退出 vim
    17. :q!           -不保存文件,强制退出 vim
    18. :e!           -放弃所有修改,从上次保存文件开始再编辑
    19.     其他情况:
    20.     /关键字    注:正向查找,按n键把光标移动到下一个符合条件的地方
    21.     ?关键字    注:反向查找,按shift+n 键,把光标移动到下一个符合条件的


    5.查看所有关键字相关的日志(more 和vi 类似)

    1.    more app.log 默认打开所有的,从前往后
    2.              常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)
    3.              
    4.           1、more app.log | grep '关键字' 
    5.           2、按Space键:显示文本的下一屏内容
    6.           3、按B键:显示上一屏内容;
    7.           4、按H键:显示帮助屏,该屏上有相关的帮助信息;

    六、SQL

    1. SELECT
    2. tm.merchant_no AS merchantNo,
    3. td.NAME AS deptName,
    4. tm.NAME AS merchantName,
    5. tba.appid AS appId,
    6. CASE
    7. WHEN tm.createTime IS NULL THEN
    8. ( SELECT create_time FROM t_merchant_information t WHERE t.id = tm.id )
    9. ELSE tm.createTime
    10. END as createTime
    11. FROM
    12. (
    13. (
    14. SELECT
    15. tmi.id,
    16. tmi.merchant_no,
    17. tf.update_time as createTime,
    18. tmi.NAME,
    19. tmi.dept_id
    20. FROM
    21. t_merchant_information_pass tmi
    22. LEFT JOIN t_merchant_information_flow tf ON tf.merchant_no = tmi.merchant_no
    23. AND tf.flow_status = 3
    24. WHERE
    25. tmi.del_flag = 1
    26. AND tmi.dept_id != 1
    27. AND tmi.id IN
    28. <foreach collection="ids" item="id" open="(" close=")" separator=",">
    29. #{id}
    30. </foreach>
    31. GROUP BY
    32. tmi.merchant_no
    33. ) UNION
    34. (
    35. SELECT
    36. tmi.id,
    37. tmi.merchant_no,
    38. tmi.create_time as createTime,
    39. tmi.NAME,
    40. tmi.dept_id
    41. FROM
    42. t_merchant_information tmi
    43. LEFT JOIN t_merchant_information_flow tf ON tf.merchant_no = tmi.merchant_no
    44. WHERE
    45. tmi.del_flag = 1
    46. AND tmi.dept_id = 1
    47. AND tmi.id IN
    48. <foreach collection="ids" item="id" open="(" close=")" separator=",">
    49. #{id}
    50. </foreach>
    51. GROUP BY
    52. tmi.merchant_no
    53. )
    54. ) tm
    55. LEFT JOIN t_bank_appid tba ON tba.organ_no = tm.dept_id
    56. AND tba.is_delete = 1
    57. AND tba.STATUS = 1
    58. AND tba.organ_no != 1
    59. LEFT JOIN t_dept td ON td.id = tm.dept_id
    60. order by tm.id desc
    61. </if>

  • 相关阅读:
    如何把视频压缩变小?
    设备安全——防火墙策略实验【NAT、备份】
    树莓派上搭建SVN服务器
    GBase 8c V3.0.0数据类型——下标生成函数
    已解决!nginx+php上传大文件返回502错误
    TCL 学习笔记
    PMP每日一练 | 考试不迷路-8.23(包含敏捷+多选)
    【每日一题】寻找重复数
    面试那些事——Java全栈
    测试域: 流量回放-介绍篇
  • 原文地址:https://blog.csdn.net/m0_53077601/article/details/125408106