Sonar简介

sonar是一个用于代码质量管理的开发平台。通过插件机制,sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(Jenkins等)不同,sonar并不是简单地把不同的代码检查工具结果直接显示在web页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便对不同规模和种类的工程进行代码质量管理。

eclipse代码质量检查插件SonarLint的正确配置以及使用

参考博客

sonarlint是eclipse的一个代码质量检查的。

img

如何搭建sonar进行代码管理

参考博客

基本概念

Bits 意为 “位”或比特,是计算机运算的基础,属于二进制的范畴。

Bytes意为字节,是计算机文件大小的基本计算单位。

这两者应用场合不同。通常用bit来做数据传输的单位,因为在物理层,数据链路层的传输对用户是透明的,而这种通信传输是基于二进制的传输。在应用层通常使用byte来作单位,表示文件的大小,在用户看来就是可见的数据大小。比如一个字符就是1byte,如果是汉字则是2byte。

实际应用

字节是内存的基本单位,也是编址单位,例如,某计算机的内存是4GB,指的是该计算机内存中共有4×1024×1024×1024个字节

Bps即是Byte per second 的简称。而电脑一般都以Bps 显示速度,如1MBps 大约等同 128 KBps。
bps 是 bits per second 的简称。一般数据机及网络通讯的传输速率都是以「bps」为单位。如56Kbps、100.0Mbps 等等。

即宽带运营商以bps作为单位,而实际下载速度则是Bps,所以100.0Mbps百兆宽带的下载速度约为10MBps,(通常的十兆每秒,在这里运营商用的小单位,而用户实际看的网速为大单位)约八分之一。

usb2.0标准接口传输速率。许多人都将“480Mbps”误解为480兆/秒。其实,这是错误的,事实上“480Mbps”应为“480兆比特/秒”或“480兆位/秒”,它等于“60兆字节/秒”。

换算

1 Byte = 8 Bits
1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB
另外,Byte通常简写为B(大写),而bit通常简写为b(小写)。可以这么记忆,大写的为大单位,实际数值小,小写的为小单位,实际数值较大,1B=8b。

int tinyint与bigint的比较

它们都是(精确)数据类型,但是占用字节数和表达的范围不同

Type Storage Minimum Value Maximum Value
(Bytes) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615
遇到比较多的是tinyint和bigint,tinyint一般用于存放status,type这种数值小的数据,不够用时可能会用smallint。bigint一般用于自增主键. 为了避免数据库被过度设计,布尔、枚举类型也采用tinyint。

还有一点也是经常被提到的关于 int(M) 中M的理解,int型数据无论是int(4)还是int(11),都已经占用了 4 bytes 存储空间,M表示的只是显示宽度(display width, max value 255),并不是定义int的长度。

float和decimal

MYSQL使用DECIMAL类型去存储对精度要求比较高的数值,比如金额,也叫定点数,decimal在mysql内存是以字符串二进制存储的。声明DECIMAL(M,D),M是数字最大位数(精度precision),范围1-65;D是小数点右侧数字个数(标度scale),范围0-30,但不得超过M。

比如DECIMAL(18,9),整数部分和小数部分各9位,所以各占4字节,共8bytes
再比如DECIMAL(20,6),整数14位,需要4字节存9位,还需3字节存5位;小数6位,需3字节。共10bytes
(感谢 consatan 在评论区提出文中错误)

比如定义DECIMAL(7,3)

  • 能存的数值范围是 -9999.999 ~ 9999.999,占用4个字节
  • 123.12 -> 123.120,因为小数点后未满3位,补0
  • 123.1245 -> 123.125,小数点只留3位,多余的自动四舍五入截断
  • 12345.12 -> 保存失败,因为小数点未满3位,补0变成12345.120,超过了7位。严格模式下报错,非严格模式存成9999.999

MySQL使用FLOATDOUBLE来表示近似数值类型,这是因为十进制0.1在电脑里用二进制是无法精确表示的,只能尽可能的接近

单精度浮点数float占4字节,float标准语法允许通过FLOAT(M)的形式指定精度,但是这个精度值M只是决定存储大小: 0-23与默认不指定效果相同,24-53就变成双精度的DOUBLE了。

float还有非MySQL自己实现的非标准语法FLOAT(M,D),代表最多存储M个数字长度,其中小数点后数字个数为D。效果与 DECIMAL(M,D)很相似。

double 和 float 的区别是double精度高,有效数字16位(float精度7位)。但double消耗内存是float的两倍,占8字节,double的运算速度比float慢得多。

msyql> create table tc_float(fid int primary key auto_increment,f_float float, f_float10 float(10), f_float25 float(25), f_float7_3 float(7,3), f_float9_2 float(9,2), f_float30_3 float(30,3), f_decimal9_2 decimal(9,2)); mysql> insert into tc_float(f_float,f_float10,f_float25) values(123456,123456,123456);mysql> insert into tc_float(f_float,f_float10,f_float25) values(1234567.89,12345.67,1234567.89);mysql> select * from tc_float;+—–+———-+———–+————+————+————+————-+————–+| fid | f_float | f_float10 | f_float25 | f_float7_3 | f_float9_2 | f_float30_3 | f_decimal9_2 |+—–+———-+———–+————+————+————+————-+————–+| 1 | 123456 | 123456 | 123456 | NULL | NULL | NULL | NULL || 2 | 1234570 | 12345.7 | 1234567.89 | NULL | NULL | NULL | NULL |+—–+———-+———–+————+————+————+————-+————–+

  • 可以看到float与float(10)是没区别的,float默认能精确到6位有效数字

mysql> insert into tc_float(f_float9_2,f_decimal9_2) values(123456.78,123456.78);mysql> insert into tc_float(f_float9_2,f_decimal9_2) values(1234567.1,1234567.125);Query OK, 1 row affected, 1 warning (0.00 sec) mysql> show warnings;+——-+——+—————————————————+| Level | Code | Message |+——-+——+—————————————————+| Note | 1265 | Data truncated for column ‘f_decimal9_2’ at row 1 |+——-+——+—————————————————+1 row in set (0.00 sec) mysql> select * from tc_float;+—–+———-+———–+————+————+————+————-+————–+| fid | f_float | f_float10 | f_float25 | f_float7_3 | f_float9_2 | f_float30_3 | f_decimal9_2 |+—–+———-+———–+————+————+————+————-+————–+| 6 | NULL | NULL | NULL | NULL | 123456.78 | NULL | 123456.78 || 9 | NULL | NULL | NULL | NULL | 1234567.12 | NULL | 1234567.13 |+—–+———-+———–+————+————+————+————-+————–+ mysql> insert into tc_float(f_float7_3) values(12345.1);ERROR 1264 (22003): Out of range value for column ‘f_float7_3’ at row 1

  • float(9,2)与decimal(9,2)是很像的,并没有前面提到24位一下6位有效数字的限制
  • 他们俩之间的差别就在精度上,f_float9_2本应该是 1234567.10,结果小数点变成 .12 。f_decimal9_2因为标度为2,所以 .125 四舍五入成 .13
  • 将 12345.1 插入f_float7_3列,因为转成标度3时 12345.100,整个位数大于7,所以 out of range 了

另外在编程中应尽量避免做浮点数的比较,否则可能会导致一些潜在的问题。

坚决不允许使用float去存money,使用decimal更加稳妥,但使用decimal做除法依旧会产生浮点型,所以特殊情况请考虑使用整型,货币单位使用 分 ,或者除法在最后进行。

多模块的项目 maven命令打包

般情况都是在父级pom中配置打包的插件,其他module的pom不需要特别的配置,当配置完成后,点击idea中maven工具的package,就能执行一系列打包操作;

要对多个module的项目做打包,一般情况都是在父级pom中配置打包的插件,其他module的pom不需要特别的配置,当配置完成后,点击idea中maven工具的package,就能执行一系列打包操作;

img

这里先使用maven-jar-plugin插件,在父级pom中添加配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 1 <!--通过maven-jar-plugin插件打jar包-->
2 <plugin>
3 <groupId>org.apache.maven.plugins</groupId>
4 <artifactId>maven-jar-plugin</artifactId>
5 <version>2.4</version>
6 <configuration>
7 <archive>
8 <manifest>
9 <addClasspath>true</addClasspath>
10 <classpathPrefix>lib/</classpathPrefix>
11 <!--main入口-->
12 <mainClass>com.platform.WebApplication</mainClass>
13 </manifest>
14 </archive>
15 <!--包含的配置文件-->
16 <includes>
17 </includes>
18 <excludes>
19 </excludes>
20 </configuration>
21 </plugin>

上面的配置我们需要注意以下几个节点:

  • mainClass:我们需要指定main入口,当然这不是必须的,如果同一个project中有多个main入口,那打包的时候才需要,仅仅就一个main入口这个其实忽略;
  • classpathPrefix:指定加入classpath中依赖包所在的前缀文件夹名
  • addClasspath:依赖包放加入到classpath中,默认true
  • includes:需要包含在jar中的文件,一般不配置(注意:如果配置路径不合适,可能会吧class排除掉)
  • excludes:如果是要做jar包外部配置文件的话,这里需要用excludes排除这些配置文件一起打包在jar中

使用maven-jar-plugin插件针对项目工程来打包,这个时候通过maven的package命令打包,能看到jar中有一个lib文件夹(默认),其中包含了工程项目中所引入的第三方依赖包,通过java -jar xxx.jar能看到jar成功启动:

img

在规范的项目中,一般有dev,test,uat,pro等环境,针对这些个环境需要有不同的配置,springboot中可以通过application-dev|test|…yml来区分不同的配置,仅仅需要在默认的application.yml中加入spring.profiles.active=dev|test…就行了;

这种方式有个不便的地方,比如本地调试或发布上线都需要来回修改active的值(当然通过jar启动时,设置命令行active参数也可以),不是很方便;下面采用在pom中配置profiles,然后通过在idea界面上鼠标点击选择启动所用的配置;首先,在main层创建配置文件目录如下结构:

img

为了区分测试,这里对不同环境配置文件设置了server.port来指定不同端口(dev:3082,pro:3182)
然后,在父级pom中配置如下profiles信息:

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
 1     <profiles>
2 <profile>
3 <id>dev</id>
4 <!--默认运行配置-->
5 <activation>
6 <activeByDefault>true</activeByDefault>
7 </activation>
8 <properties>
9 <activeProfile>dev</activeProfile>
10 </properties>
11 </profile>
12 <profile>
13 <id>test</id>
14 <properties>
15 <activeProfile>test</activeProfile>
16 </properties>
17 </profile>
18 <profile>
19 <id>uat</id>
20 <properties>
21 <activeProfile>uat</activeProfile>
22 </properties>
23 </profile>
24 <profile>
25 <id>pro</id>
26 <properties>
27 <activeProfile>pro</activeProfile>
28 </properties>
29 </profile>
30 </profiles>

节点说明:

  • activeByDefault:设置为默认运行配置
  • activeProfile:所选择的启动配置,它的值对应上面创建profiles下面的dev|test|pro文件夹

然后,在pom中的build增加resources节点配置:

1
2
3
4
5
6
1 <resources>
2 <!--指定所使用的配置文件目录-->
3 <resource>
4 <directory>src/main/profiles/${activeProfile}</directory>
5 </resource>
6 </resources>

此刻我们的配置就完成了,正常情况下idea上maven模块能看到这样的图面:

img

这个时候仅仅只需要我们勾选这些个按钮就行了,不管是调试还是最后打包,都按照这个来获取所需的配置文件。

maven打包命令

mvn clean package -P dev|pro|test

idea快捷键:
1:方法类局部变量赋值(类似于eclipse的 Ctrl + 2)
Ctrl + ALT + V

2: 抽取方法(类似于eclipse的 Alt + Shift + M)
Ctrl + Alt + M

3: 查看类中的所有函数(类似于eclipse中的 Ctrl + O)
Ctrl + F12

4: 跳转到方法实现(类似于eclipse中的F3)
Ctrl + Alt + B

5: 查找文件, 包含页面和java类(类似于eclipse中的 Ctrl + Shift + R 或者 Ctrl + Shift + T)
Ctrl + Shift + N

6: 查找所有文件, 包含jar包和java自带的包中的文件(类似于eclipse中的 Ctrl + Shift + R)
双击 Shift

7: 创建类、包、接口等(类似于eclipse中的 Ctrl + N)
Ctrl + Alt + Insert

8: 编辑面板放大(类似于eclipse的 Ctrl + M)
Ctrl + Shift + F12

9: 回到上一次编辑的地方(类似于eclipse的 Alt + <- 或者="" alt="" +="" -="">)
Ctrl + Alt + <- 或者="" ctrl="" +="" alt="" -="">

10: 光标所在行上空出一行,光标跳上(类似于eclipse的 Ctrl + Shift + Enter)
Ctrl + Alt + Enter

11: 捕获异常(类似于eclipse的 Ctrl + Shift + Z)
Ctrl + Alt + T

12:去除无用的import(类似于eclipse中的 Ctrl + Shift + O)
Ctrl + Alt + O

13: (类似于eclipse中的 Ctrl + 1)
Alt + Enter

14: IDEA智能提示忽略大小写
ctrl+alt+s打开设置对话框
输入:sensitive
将右侧的 case sensitive completion 修改为NONE

15: IDEA 导入多模块maven项目
​ 1:选中项目 File -> New -> Module from Exists Sources 然后选中当前的项目, 导入就行了.

16: IDEA 全局搜索(类似于 eclipse Ctrl + H)
Ctrl + Shift + R

17: 跳转到指定的行(类似于eclipse中的 Ctrl + L)
Ctrl + G

clean: 清除target目录;

install: 将工程打包到本地仓库,这时本地项目可以依赖,别人是依赖不了的;

package:将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包;

deploy: 将打包的jar文件上传到私服(如果有私服),此时连接私服的人才可以下载依赖。

1,maven的install最大的作用就是将项目本身编译并打包,并且其他项目引用本项目的jar包时不用去私服上下载jar包,直接从本地就可以拿到刚刚编译打包好的项目的jar包,很灵活,避免每次都需要重新往私服发布jar包的痛苦;

2,修改服务端比如manage层和dao层的项目的时候如果eclipse没有自动编译,则在调试的时候容易出很奇怪的错误,就是明明代码已经改好了,但是debug的时候还是在报错,这就是没有项目没有编译完成造成的,看到的改好的代码没有变成class,因此,服务端的文件改动之后如果发现没有效果的时候要记得问题可能是没有编译,这时候可以使用maven的install命令编译一下;

3,install有时候会报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin…,这种情况下可以检查项目里有没有出现编译错误,如果没有,就检查一下pom文件中surefire的配置;参考如下

clean: 清除target目录;

install: 将工程打包到本地仓库,这时本地项目可以依赖,别人是依赖不了的;

package:将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包;

deploy: 将打包的jar文件上传到私服(如果有私服),此时连接私服的人才可以下载依赖。

作者:卢子墨
来源:CSDN
原文:https://blog.csdn.net/lukabruce/article/details/80569789
版权声明:本文为博主原创文章,转载请附上博文链接!

step1: git rm “文件名” git rm -r “文件夹名称/”

step2: git commint -m 提交内容

step3: git push pushgit服务器上

有时候会想把github上的文件删除,但是本地仓库里的文件想保留下来该怎么办,只要用三条命令就能完成了

git rm –cached filename/-r directory
git commit “xxxx”
git push
1.删除github文件,本地保留

git rm –cached test.
txt
git commit -m “delete file”
git push
此时github上已经不存在了

2.删除远程code 文件夹,本地保留
一定要注意,删除文件夹要使用-r 参数

git rm –cached -r code
git commit -m “delete directory”
git pus

因为仓库地址不对

  • $ git remote -v
  • $ git remote set-url origin XXX
    就可以push了。

服务器上的 Git - 生成 SSH 公钥

生成 SSH 公钥

大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。 首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看:
生成钥匙

  • $ ssh-keygen
  • 查看公钥
  • $cat ~/.ssh/id_rsa.pub
  • 若想在github中使用的话需要将公钥复制到github>setting>SSH and GPG keys中添加ssh keys