Chuenhung的个人网站

chuenhung.github.io

synchronized锁定的对象

synchronized修饰的作用:
让多个线程排队依次获取某个资源,保证数据不会出错(原子性)。
synchronized锁定的元素:

  • 修饰方法
    • 静态方法,锁定的是类
    • 普通方法,锁定的时方法的调用者
  • 修饰代码块,锁定的时传入的对象

Java线程内存模型(JMM)定义的8中原子操作

  • read(读取):从主内存中读取数据
  • load(载入):将主内存读取到的数据写入工作内存
  • use(使用):从工作内存读取数据来计算
  • assgin(赋值):将计算好的值重新赋值到工作内存中
  • store(存储):将工作内存数据写入主内存,会经过总线,到总线后就开始广播其他线程
  • write(写入):将store过去的变量值赋值给主内存中的变量
  • lock(锁定):将主内存变量加锁,标识为线程独占状态
  • unlock(解锁):将主内存变量解锁,解锁后其他线程可以锁定该变量
    MESI缓存一致性协议:
    多个cpu从主内存读取同一个数据到各自的高速缓存,当其中某个cpu修改了缓存里的数据,该数据会马上同步回主内存,其他cpu通过总线嗅探机制可以感知到数据的变化从而将自己缓存里的数据失效。
    一般lock锁加在线程的赋值之后,存储之前,这样的锁的粒度不大。volatile保证数据可见性、synchronized保证原子性。
阅读全文 »

VirtualBox的7种网络接入模式详解

参考链接参考链接

各网络模式的默认情况下,网络连接情况

NAT模式 桥接模式 Host-Only模式
虚拟机 -> 宿主机 默认不能,需要设置
宿主机 ——> 虚拟机 x 默认不能,需要设置
虚拟机 ——> 虚拟机 x
虚拟机 ——> 同局域网下其他主机 默认不能,需要设置
同局域网下其他主机 ——> 虚拟机 x 默认不能,需要设置

参考链接

阅读全文 »

Jenkins构建项目的几种方式

参考简书很有用的一篇文章

Jenkins简单的PipeLine流水线脚本

Windows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pipeline {
agent any
stages {
stage('Pull code') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '4f77bfb0-49cc-4359-9b4a-99b190e5c92b', url: 'https://gitee.com/chuenhung/export-java-bean.git']]])
}
}
stage('Build project') {
steps {
bat "mvn clean package"
archiveArtifacts '**/target/*.jar'
}
}
}
}

Linux

1
把bat改为sh

注意:pipeline、stages、stage、steps、checkout…这些词不能改

构建遇到问题:java.lang.NoSuchMethodError: No such DSL method ‘pipeline’ found among steps [bat, build, checkout, container, containerLog, input, junit, library, libraryResource, load, milestone, node, parallel, podTemplate, powershell, properties
解决方法:成功安装PipeLine插件。

阅读全文 »

作为码农平时搜集一些小知识点个人认为是个不错的习惯,书上说

好记性不如烂笔头

我想即使是以前忽略或者新get的很简单的东西,自己动手记下来不管如何印象也会更深刻。

阅读全文 »

数据结构

在这里插入图片描述

实体类

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
@Data
public class AchievementRepetitionVo {
@ApiModelProperty(value = "成果编号")
private String code;
@ApiModelProperty(value = "成果名称")
private String name;
@ApiModelProperty(value = "成果介绍")
private String introduce;
@ApiModelProperty(value = "查重范围文档数")
private Integer checkNum;
@ApiModelProperty(value = "最高相似度")
private BigDecimal maxRate;
@ApiModelProperty(value = "成果对比明细")
private List<RepetitionDetailVo> detailList;
}

@Data
public class RepetitionDetailVo {
@ApiModelProperty(value = "对比成果名称")
private String contractName;
@ApiModelProperty(value = "对比成果介绍")
private String contractIntroduce;
@ApiModelProperty(value = "对比明细")
private List<RepetitionContractVo> contractList;
}

@Data
public class RepetitionContractVo {
@ApiModelProperty(value = "检测成果句子")
private String s1;
@ApiModelProperty(value = "对比成果库句子")
private String s2;
@ApiModelProperty(value = "相似度")
private BigDecimal rate;
}
阅读全文 »
0%