Springboot工程MAVEN配置成打WAR包方式

修改pom文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!--修改打包方式为war包-->
<packaging>war</packaging>

...

<!--排查tomcat依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--引入本地启动所需的内嵌tomcat依赖,scope为provided,不会打进包里-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>

...

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding><!-- 字符集编码 -->
</configuration>
</plugin>

<!--不要使用spring-boot-maven-plugin插件,否则打出来的war包会有boot-inf文件夹,war包会有两倍大小-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>

Java程序线上问题排查

Java程序线上问题排查

ps命令查看进程id

1
2
3
4
5
6
7
8
# 普通使用方法
ps -ef | grep {应用关键字}

# 过滤掉grep进程的记录
ps -ef | grep {应用关键字} | grep -v "grep"

# 只取进程id
ps -ef | grep {应用关键字} | grep -v "grep" | awk '{print $2}'

Java基础笔记(二):JMM内存模型

Java基础笔记(二):JMM内存模型

先抛出问题:JMM内存模型是什么,cas实现原理( CPU Lock前缀指令),它是如何保证其他cpu core的cache失效的,然后会问你volatile的实现原理,要结合java内存模型来讲,可见性是如何实现的(内存屏障),synchronized锁和reentrantlock的区别以及内部怎么实现的:常用的gc算法及优缺点,如何判断对象的存活性

高性能mysql笔记——第四章

Schema与数据类型优化

数据类型的选择

  1. 更小的通常更好
  2. 简单就好,应该使用Mysql内建的类型而不是字符串来存储日期和时间;应该用整形存储IP地址。
  3. 尽量避免NULL;难优化,占用更多存储空间,特殊处理,索引记录需要额外的字节。

Java基础笔记(一):Collection、Map

Java基础笔记(一):Collection、Map

先抛出问题:collection接口下面有哪些集合,hashmap的实现原理,要把1.7和1.8的区别(红黑树)讲出来,map有哪些实现类以及使用场景,hashmap, hashtable, linkedhashmap,weakHashMap, treemap, concurrentmap,linkedhashmap和treemap排序的区别,concurrenthashmap如何实现线程安全,这里也要把1.7和1.8实现差异说出来(分段加锁和cas技术),说到这里以后就会问你cas实现原理( CPU Lock前缀指令),它是如何保证其他cpu core的cache失效的,然后会问你volatile的实现原理,要结合java内存模型来讲,可见性是如何实现的(内存屏障),synchronized锁和reentrantlock的区别以及内部怎么实现的:常用的gc算法及优缺点,如何判断对象的存活性

JVM读书笔记之第十一章

晚期(运行期)优化

概述

当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT)。