日常笔记记录

2021-8-17

在git命令状态下 mvn clean install --settings D:\work_app\apache-maven-3.8.1\conf\settings-gennlife.xml -U -X
依赖拉不下来的解决方式。
-U 强制去远程更新snapshot(快照)的插件或依赖,默认每天只更新一次。
X 显示maven允许的debug信息

2021-8-18

git常用命令:
在这里插入图片描述

2021-8-19

linux 装Dgraph的版本号 docker pull dgraph/dgraph:v20.11.3

2021-8-25

1.用于查看指定端口号的进程情况,netstat -tunlp | grep 端口号

查看程序端口占用情况 netstat -apn | grep 8005

Maven中-DskipTests和-Dmaven.test.skip=true的区别

2.在使用mvn package进行编译、打包时,Maven会执行src/test/java中的JUnit测试用例,有时为了跳过测试,会使用参数-DskipTests和-Dmaven.test.skip=true,这两个参数的主要区别是:

-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

3.用ps 查找进程ps -ef | grep mq

4.nohup /root/runoob.sh > runoob.log 2>&1 &
2>&1 解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。

0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)

5.springboot @CreationTimestamp 自动生成时间戳

2021-8-27

一、在linux环境下配置 jdk、tomcat、maven
1.vi /etc/profile
进入profile 文件
在这里插入图片描述

export JAVA_HOME=/opt/jdk1.8.0_191
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

PATH=/opt/mysql8.0/bin:/opt/mysql8.0/lib:$PATH
export PATH

MAVEN_HOME=/opt/apache-maven-3.8.1
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

2.保存退出
3.进入etc 下 执行

source /etc/profile
保存配置

二、在linux下安装nginx
linux版本:CentOS7 64位

【yum 安装最新版nginx:https://www.cnblogs.com/xxoome/p/7256214.html】

在安装nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel。
安装命令:

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

nginx下载地址:https://nginx.org/download/

下载“nginx-1.9.9.tar.gz”,移动到/opt下。

解压

tar -zxvf nginx-1.9.9.tar.gz

进入nginx目录

cd nginx-1.9.9

配置

./configure --prefix=/usr/local/nginx

make
make install
OK,现在可以执行make 了。

在这里插入图片描述
执行make、make install命令

测试是否安装成功

cd到刚才配置的安装目录/opt/nginx/

./sbin/nginx -t
正常情况的信息输出:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test
is successful

启动nginx
cd /opt/nginx/sbin
./nginx //启动nginx
2、配置nginx开机自启动
vim /etc/rc.d/rc.local
在这里插入图片描述

2021-8-30

1.常用的isNotEmpty和isNotBlank;这两个都是判断string 是否为空,不过isNotBlank要求更严,空格和“制表符、换行符、换页符和回车符”均识为空白符;
具体内容如下:

//判断某字符串是否非空
         System.out.println(StringUtils.isNotEmpty(null));//false
         System.out.println(StringUtils.isNotEmpty(""));// false
         System.out.println(StringUtils.isNotEmpty(" "));// true
         System.out.println(StringUtils.isNotEmpty("\t \n \f \r"));// true
         System.out.println(StringUtils.isNotEmpty("sb"));// true
         
         System.out.println(StringUtils.isNotBlank(null));// false
         System.out.println(StringUtils.isNotBlank(""));// false
         System.out.println(StringUtils.isNotBlank(" "));//false
         //对于制表符、换行符、换页符和回车符StringUtils.isBlank()均识为空白符
         System.out.println(StringUtils.isNotBlank("\t \n \f \r"));// false
         System.out.println(StringUtils.isNotBlank("sb"));// true

2.isEmpty与isBlank区别

isEmpty 判断某字符串是否为空,为空的标准是 str==null或 str.length()==0

StringUtils.isEmpty(null) = true    

StringUtils.isEmpty("") = true   

StringUtils.isEmpty(" ") = false(//注意在 StringUtils 中空格作非空处理(单空格))   

StringUtils.isEmpty("  ") = false (//多空格)    

StringUtils.isEmpty("asd") = false   

StringUtils.isEmpty(" asd ") = false 

isBlank 判断某字符串是否为空或长度为0或由空白符(whitespace) 构成  

StringUtils.isBlank(null) = true    

StringUtils.isBlank("") = true   

StringUtils.isBlank(" ") = true(//注意与isEmpty最大区别,(单空格))   

StringUtils.isBlank(" ") = true (//注意与isEmpty最大区别,(多空格))     

StringUtils.isBlank("\t \n \f \r") = true //对于制表符、换行符、换页符和回车符    StringUtils.isBlank() //均识为空白符   

StringUtils.isBlank("\b") = false //"\b"为单词边界符   

StringUtils.isBlank("asd") = false   

StringUtils.isBlank(" asd ") = false

3.在做删除的时候使用 StringUtils.isNotBlank(id)来判断id是否为空

@ApiOperation(value = "删除")
    @PostMapping("/remove")
    public Result doRemove(@RequestParam String mulitId) {
        if (StringUtils.isNotBlank(mulitId)) {
            apiPermService.deletes(mulitId);
        }
        return Result.buildSuccess();
    }

4.栈溢出的原因
一)、是否有递归调用

二)、是否有大量循环或死循环

三)、全局变量是否过多

四)、 数组、List、map数据是否过大
5.OOM --> java.lang.OutOfMemoryError
5.1 为什么会OOM?
为什么会没有内存了呢?原因不外乎有两点:

1)分配的少了:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。

2)应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。

内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢出。

最常见的OOM情况有以下三种:

1.java.lang.OutOfMemoryError: Java heap space ------>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。对于内存泄露,需要通过内存监控软件查找程序中的泄露代码,而堆大小可以通过虚拟机参数-Xms,-Xmx等修改。

2.java.lang.OutOfMemoryError: PermGen space ------>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。此种情况可以通过更改方法区的大小来解决,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,过多的常量尤其是字符串也会导致方法区溢出。

3.java.lang.StackOverflowError ------> 不会抛OOM error,但也是比较常见的Java内存溢出。JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。

2021-8-31

1.流程:前端使用Ajax发送post 请求到后端SpringBoot,后端接受到数据之后发现多了一个 =

前端使用Ajax发送数据设置数据的传输格式dataType,但是在发送http请求的时候contentType没有设置,默认是为application/x-www-form-urlencoded;charset=UTF-8,这种数据结构是一种 键值对 数据结构,在传输的时候将 json 当成了键 加了一个等号 值为空 所以传输到后端 会多出来一个 等号

var postURL = "你的URL地址";
$.ajax({
    url: postURL,
    data:encodeURIComponent(JSON.stringify(data.field)),//为了防止乱码 将json数据 编码后发送到后端
    type:"post",

    contentType: "application/json;charset=UTF-8", //指定请求头 contentType 即可解决


    dataType:"application/json;charset=UTF-8",//设置数据格式 一定要设置 不然传输json数据 会出问题
    success:function(data){
        //do somethings
    }

在这里插入图片描述
后端也做一些修改 与 前端对应

	//加入 produce 指定接收的数据的格式    
	@PostMapping(value = "/xxx",produces = "application/json;charset=UTF-8")
    @ResponseBody
    public String xxx(@RequestBody String params){
		//do somethings
	}

重启项目 再次发送数据 后端成功拿到正确json 解决了 发送数据 多出=问题。

2.行存储和列存储的区别:

行式数据库的特性如下:

传统的关系型数据库
①数据是按行存储的。
②没有索引的查询使用大量I/O。比如一般的数据库表都会建立索引,通过索引加快查询效率。
③建立索引和物化视图需要花费大量的时间和资源。
④面对查询需求,数据库必须被大量膨胀才能满足需求。

行式存储的适用场景:
 1、适合随机的增删改查操作;
 2、需要在行中选取所有属性的查询操作;
 3、需要频繁插入或更新的操作,其操作与索引和行的大小更为相关。
 
列式数据库的特性如下:
列式存储(Column-based)是相对于行式存储来说的,新兴的 Hbase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列为基础的逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。

①数据按列存储,即每一列单独存放。
②数据即索引。
③只访问查询涉及的列,可以大量降低系统I/O。
④每一列由一个线程来处理,即查询的并发处理性能高。
⑤数据类型一致,数据特征相似,可以高效压缩。比如有增量压缩、前缀压缩算法都是基于列存储的类型定制的,所以可以大幅度提高压缩比,有利于存储和网络输出数据带宽的消耗。

3.List集合转换String,两种比较好用的处理方式
3.1.采用java8 String.join 字符串拼接

public static void main(String[] args) {
        List<String> a = new ArrayList<>();
        a.add("1");
        a.add("2");
        //Optional.of(a).orElseThrow(() -> new RuntimeException("a is null"));

        String join = String.join(",", a);
        System.out.println(join);
    }

在这里插入图片描述
3. 2.采用guava的Joiner字符串拼接
String join = Joiner.on(",").join(list);
 
在这里插入图片描述

2021-9-2

LoggerFactory.getLogger用法
java开发过程中经常需要打印日志信息,往往会在每个类的第一行加上形如以下代码:

protected static final Logger logger = LoggerFactory.getLogger(XXX.class);

目的:使用指定的类XXX初始化日志对象,方便在日志输出的时候,可以打印出日志信息所属的类。

示例:protected static final Logger logger = LoggerFactory.getLogger(abc.class);

      logger.debug("hello world");

      输出:abc:hello world

优点:使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类

logger日志的几个方法
logger.debug、logger.info、logger.warn、logger.error、logger.fatal 的区别:

相同处:
它们的作用都是把错误信息写到文本日志里

不同的是它们表示的日志级别不同:
日志级别由高到底是:fatal -> error -> warn -> info -> debug,低级别的会输出高级别的信息,高级别的不会输出低级别的

信息,如等级设为Error的话,warn,info,debug的信息不会输出

修改日志输出的级别要在log4j文件中进行配置
项目正式发布后,一般会把日志级别设置为fatal或者error

2021-9-27

java类中serialVersionUID的作用

serialVersionUID适用于java序列化机制。

简单来说,JAVA序列化的机制是通过 判断类的serialVersionUID来验证的版本一致的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID于本地相应实体类的serialVersionUID进行比较。如果相同说明是一致的,可以进行反序列化,否则会出现反序列化版本一致的异常,即是InvalidCastException。

具体序列化的过程是这样的:

序列化操作时会把系统当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会自动检测文件中的serialVersionUID,判断它是否与当前类中的serialVersionUID一致。如果一致说明序列化文件的版本与当前类的版本是一样的,可以反序列化成功,否则就失败;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值