Java相关介绍:
– Java 语言的三大特性:封装、继承和多态
隐藏内部状态并要求通过对象的方法执行所有交互被称为数据封装
类调用时需要实例化,开销比较大,比较消耗资源
–接口和类的区别
接口(interface)在java语言中就是一个抽象类型,但接口并不是一个抽象类,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。使用方法为:

implement 接口名

类是描述对象的属性和方法。可以被继承,继承方法为:

extends 父类名

JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

抽象类
抽象类必须被继承,且继承后子类必须重写父类的所有抽象方法
抽象方法
如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。
枚举类
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割,结尾使用分号;结束

public enum NodeType {
    SOURCE(1, "source"),
    PROPAGATOR(2, "propagator"),
    FILTER(3, "filter"),
    SINK(4, "sink"),
    ;
}

values() 返回枚举类中所有的值。

静态方法和动态方法的区别
静态的方法在整个应用程序其间存储在内存中,速度快,但占用内存。

A.a();

动态的方法在先声明类实例才能调用类中的方法,调用完后,立即释放类,可以节省内存。

A  b  =  new  A();    
b.a();

final关键字
把一整个类声明为final,被声明为final的类不能被继承
使用final关键字声明一个方法表示这个方法不能够被子类重写。
final修饰符表示:属性的值不能被改变
finally代码块
try 关键字最后可以定义 finally 代码块。 finally 块中定义的代码,总是在 try 和任何 catch 块之后、方法完成之前运行。 正常情况下,不管是否抛出或捕获异常 finally 块都会执行。

try {
    System.out.println("尝试");
} catch (NumberFormatException e) {
    System.out.println("捕捉");
} finally {
    System.out.println("最终执行");
}

JVM指令
invokeinterface 用以调用接口方法,在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用。
invokestatic 用以调用类方法

1.要获取Java中的当前时间戳; 获取当前年月日时;

import java.sql.Timestamp;
Timestamp timestamp = new Timestamp(System.currentTimeMillis());

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)+1);
calendar.set(Calendar.DATE,1);
calendar.set(Calendar.HOUR,1);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
Date time = calendar.getTime();

2.通过 System.getProperty(“user.dir”) 方式获取到项目根目录

String projectRootDirectoryPath = System.getProperty("user.dir");

3.通过标点符号切割字符串 / 去掉字符串前后空格 / 遍历字符串 / 判断单个字符相等

String[] str_list = str.split(",");
str.replace(" ","");
for(int i=0; i<s.length(); i++){
    System.out.print(s.charAt(i));
}
if(s.chrAt(i)==';'){
}

4.java.util.concurrent.Callable
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
运行Callable任务可拿到一个Future对象,可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。

java初始化列表,map

public List<Integer> hashPool = new ArrayList<>();
public Map<Integer, MethodEvent> track_map = new HashMap<Integer, MethodEvent>();

6.提取字符串中的所有数字

String str = "ddd123456";
	//用正则表达式
	String reg = "[^0-9]";
	//Pattern类的作用在于编译正则表达式后创建一个匹配模式.
	Pattern p = Pattern.compile(reg);
	//Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配
	Matcher m = p.matcher(str);
	System.out.println(m.replaceAll("").trim());

7.json.loads(json_data) 报错json.decoder.JSONDecodeError: Invalid control character at: line 25 column 18 (char 18) 原因:json默认使用的是严谨格式,json_data键值中有非法控制符号如\n\t, 当跨语言传递数据时,就容易报出这个错误。(python)
解决方法:加上参数 strict

json.loads(json_data, strict=False)

8. Java对⽇期Date类进⾏加减运算⼀⼆三

Calendar rightNow = Calendar.getInstance();
rightNow.setTime(item.getTime());
rightNow.add(Calendar.DAY_OF_YEAR,3);//⽇期加3天
Date dt = rightNow.getTime();

9. 对象运算符(instanceof)
用来判断一个对象是否属于某个指定的类或其子类的实例,如果是,返回真(true),否则返回假(false)。

10.@SuppressWarnings注解
可以消除这些警告的产生

unchecked   	to suppress warnings relative to unchecked operations ( 抑制没有进行类型检查操作的警告)
unused	        to suppress warnings relative to unused code ( 抑制没被使用过的代码的警告)
all	            to suppress all warnings (抑制所有警告)

11.字符串转数字类型

转化为整型数字   Integer.parseInt(String s) ;
转化为浮点型数字  Float.parseFloat(String s)。

12. 数据结构判空

(map、list、set)
CollectionUtils.isEmpty() 为空
CollectionUtils.isNotEmpty() 不为空

13. 字符串截取 substring 字符串查找 indexOf
substring 该子字符串始于指定索引处的字符,一直到此字符串索引末尾。
indexOf 它可以在给定字符串中查找字符,并返回字符所对应的下标,如果找不到,则返回-1

14. 打jar包方式

15. intellij idea 左上角"File"菜单  Project Structure
16. Artifacts    绿色"+"   "JAR"    Empty
17. Name栏填入自定义名字 
    Output ditectory 选择jar包目标目录
    Available Elements 双击需要添加jar包的文件 即可添加到左边的jar包目录下
18. 点击Create Manifeat 选择放置MANIFEAT.MF的文件路径  

$ javac Hello.java                # 编译成.class 文件
$ jar -cvf hello.jar Hello.class  # 打包
已添加清单
正在添加: Hello.class(输入 = 401) (输出 = 275)(压缩了 31%)
$ jar -xvf hello.jar              # 解压
  已创建: META-INF/
  已解压: META-INF/MANIFEST.MF
  已解压: Hello.class

13.JAVA读写文件

读文件:
InputStream fileInputStream = new FileInputStream(filePath);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuffer sb = new StringBuffer();
String text = null;
 while((text = bufferedReader.readLine()) != null){
      sb.append(text);
}
System.out.println(sb.toString());

写文件:
FileOutputStream fileOutputStream = null;
File file = new File(filePath);
fileOutputStream = new FileOutputStream(file, true);
fileOutputStream.write(content.getBytes());
fileOutputStream.flush();
fileOutputStream.close();

14.ThreadLocal
ThreadLocal是Thread的局部变量,用于编多线程程序。
它主要由四个方法组成initialValue(),get(),set(T),remove()

//1、获取当前线程
Thread t = Thread.currentThread();
//2、获取当前线程的ThreadLocalMap
ThreadLocalMap map = getMap(t);

StackTrace用栈的形式保存了方法的调用信息
可用Thread.currentThread().getStackTrace()方法得到当前线程的StackTrace信息.
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
该方法返回的是一个StackTraceElement数组
遍历该StackTraceElement数组.就可以看到方法间的调用流程

15. AtomicInteger
类是系统底层保护的int类型,通过提供执行方法的控制进行值的原子操作。

getAndIncrement() - 以原子方式递增当前值并返回旧值。它相当于++ i操作。
什么情况下使用AtomicInteger?
1. 作为多个线程同时使用的原子计数器。
2. 在比较和交换操作中实现非阻塞算法。

16.提取富文本文字部分

String regx = "(<.+?>)|(</.+?>)";
Matcher matcher = Pattern.compile(regx).matcher(richText);
while (matcher.find()) {
    // 替换图片
    richText = matcher.replaceAll("").replace(" ", "");
}

17.SQL相关
①sql获取百分比函数,对结果保留两位小数

CONCAT( ROUND( vcr.number_vote / ct.number_vote * 100, 2 ), '', '%' )

②分组统计满足情况

select group_name as groupName,
       COUNT(*) AS total,
       sum(case when compliance='满足' then 1 else 0 end) as allComplete,
       concat(sum(case when compliance='全部满足' then 1 else 0 end)*100/COUNT(*),'','%') as allCompleteRate,
       sum(case when compliance='不满足' then 1 else 0 end) as noComplete,
       concat(sum(case when compliance='不满足' then 1 else 0 end)*100/COUNT(*),'','%') as noCompleteRate
    from xxx.xx
    group by group_name
语法“CASE 字段 WHEN 条件1 THEN 操作1 WHEN 条件2 THEN 操作2...ELSE 操作n END;”

③mybatis配置动态sql
不支持单引号,改为双引号

/' /'       -->    /"    /"

④按某字段xxx分组 只取每个分组最新时间的一个条目

with t as (select *, row_number() over (partition by xxx order by create_time desc) as rn
from table) select * from t where rn=1

⑤ 按照多字段排序

如果不显示指出是升序还是降序,则默认为是升序
ORDER BY column1,column2;

6 多表连接

Left join:左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。
Right join:右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种。
Inner join:内连接,同时将两表作为参考对象,根据ON后给出的两表的条件将两表连接起来。结果则是两表同时满足ON后的条件的部分才会列出。

平移代码 – 选中代码 按tab键向右平移。 按tab + shift向左平移

IDEA问题汇总
报错:

Error running 'Application': Command line is too long. Shorten command line for Application or also for Spring Boot default configuration?

解决:

  1. 点击项目启动配置项
  2. shorten command line 选项选择 JAR manifest 或者 classpath file 选项
  3. 重新启动工程运行即可

spring boot报错
解决 Could not resolve placeholder ‘xxx‘ in string value “${xxx}“
配置 yml文件 — 缺少对应值