2020年 12月 08日 - 泛型

    java中的泛型

    泛型是jdk1.5引入的特性,本质是参数化类型,可以很好的降低代码重复度,安全又简单.

    泛型解决了编码过程中需要显式强制转换的情况,可以在编译期间进行类型检查,通过自动且隐式的强制转换,降低代码复杂度.

    泛型的实现原理:类型擦除.编译时会将泛型擦除,使用其限定类型(未限定的则用Object)的第一个边界类型代替(如T extends Comparable & Serializable则会是Comparable).

    基本语法:泛型类在类名后,泛型方法/接口在返回值前通过尖括号标记

    2020年 12月 07日 - 线程wait与notify的使用

    线程wait与notify的使用

    1. wait 释放当前锁,让出cpu资源,使当前线程等待.使用场景为先通过synchronized获取锁之后,在该同步代码块中使用wait()方法.
    2. notify与notifyAll 在一个同步代码段中唤醒一个或多个处于等待的线程,在同步代码结束或遇到wait()释放当前锁

      区别:

       notify: 唤醒一个等待的线程,若存在多个则取决于操作系统的多线程管理(会唤醒其中一个)
      	
       notifyAll: 唤醒所有的等待线程,优先级同样取决于操作系统
      
    3. 当线程被唤醒时,wait()方法之后的逻辑继续开始执行

    4. 若未加锁进行wait()notify()/notifyAll()的调用,会抛出IllegalMonitorStateException

    2020年 07月 24日 - mysql查看所有表名与字段名

    mysql查看所有表名与字段名

    @的为变量

    -- 查询数据库中所有表名
    select table_name from information_schema.tables where table_schema='@dbname' and table_type='base table';
    -- 查询指定数据库中指定表的所有字段名column_name
    select column_name from information_schema.columns where table_schema='@dbname' and table_name='@tableName'
    

    2020年 04月 24日 - SpringBoot打包jar与war的运行方式区别

    简述

    主要区别

    jar: 打包时会依赖tomcat,与直接运行main方法一样运行,运行过程:

    SpringApplication.run()
    	-> spring ioc
    		->(嵌入式) Servlet容器
    

    war: 上述的启动方法需要覆盖SpringBootServletInitializerconfigure方法,先调用该方法,最终调用SpringApplicationrun(),运行过程:

    Servlet容器
    	-> SpringBootServletInitializer
    		-> SpringApplication.run()
    			-> spring ioc
    

    注: SpringBootServletInitializer的作用是替代web.xml的配置

    2020年 04月 08日 - 部分JVM参数备忘

    内存溢出时导出堆内存快照

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=~/dump/dump.hprof
    

    堆大小

    -Xms1024M -Xmx2048M 
    

    方法区大小

    典型报错java.lang.OutOfMemoryError: PermGen space

    -XX:PermSize=128M -XX:MaxPermSize=256M