提交 25e51f42 编写于 作者: 梦境迷离's avatar 梦境迷离

update and add article

上级 e15938f1
......@@ -49,8 +49,8 @@ For details, please see [CONTRIBUTING](./CONTRIBUTING-en.md)
### Language environment of this repository
- Scala 2.12.8+
- Java 1.8+
- Scala 2.12.12
- Java 1.8
- Python 3.0+
- Rust 1.4+
- Kotlin 1.3+
......
......@@ -49,8 +49,8 @@
### 环境
- Scala 2.12.8+
- Java 1.8+
- Scala 2.12.12
- Java 1.8
- Python 3.0+
- Rust 1.4+
- Kotlin 1.3+
......
......@@ -88,23 +88,23 @@
[虚拟机相关使用测试代码](./docs/_posts/Java虚拟机/2018-11-11-Java虚拟机-虚拟机相关使用测试代码.md)
[Java内存模型2](./docs/_posts/Java虚拟机/2020-10-14-复习整理-Java内存模型2.md)
[Java内存模型2](./docs/_posts/Java虚拟机/2020-10-14-Java虚拟机-Java内存模型2.md)
[Java对象的内存布局](./docs/_posts/Java虚拟机/2020-10-14-复习整理-Java对象的内存布局.md)
[Java对象的内存布局](./docs/_posts/Java虚拟机/2020-10-14-Java虚拟机-Java对象的内存布局.md)
[DVM和JVM有什么区别](./docs/_posts/Java虚拟机/2020-10-16-复习整理-DVM和JVM有什么区别.md)
[DVM和JVM有什么区别](./docs/_posts/Java虚拟机/2020-10-16-Java虚拟机-DVM和JVM有什么区别.md)
[JVM中的方法内联](./docs/_posts/Java虚拟机/2020-10-16-复习整理-JVM中的方法内联.md)
[JVM中的方法内联](./docs/_posts/Java虚拟机/2020-10-16-Java虚拟机-JVM中的方法内联.md)
[ZGC简介](./docs/_posts/Java虚拟机/2020-10-16-复习整理-ZGC简介.md)
[ZGC简介](./docs/_posts/Java虚拟机/2020-10-16-Java虚拟机-ZGC简介.md)
[最重要的JVM参数指南](./docs/_posts/Java虚拟机/2020-10-16-复习整理-最重要的JVM参数指南.md)
[最重要的JVM参数指南](./docs/_posts/Java虚拟机/2020-10-16-Java虚拟机-最重要的JVM参数指南.md)
[Java中的永久代与元空间](./docs/_posts/Java虚拟机/2020-10-19-复习整理-Java中的永久代与元空间.md)
[Java中的永久代与元空间](./docs/_posts/Java虚拟机/2020-10-19-Java虚拟机-Java中的永久代与元空间.md)
[Java垃圾收集中如何使用Verbose](./docs/_posts/Java虚拟机/2020-10-19-复习整理-Java垃圾收集中如何使用Verbose.md)
[Java垃圾收集中如何使用Verbose](./docs/_posts/Java虚拟机/2020-10-19-Java虚拟机-Java垃圾收集中如何使用Verbose.md)
[常见的垃圾收集器](./docs/_posts/Java虚拟机/2020-10-26-复习整理-常见的垃圾收集器.md)
[常见的垃圾收集器](./docs/_posts/Java虚拟机/2020-10-26-Java虚拟机-常见的垃圾收集器.md)
## Rust
......@@ -140,9 +140,9 @@
[Scala的类型系统和泛型](./docs/_posts/Scala/2020-06-17-Scala-Scala的类型系统和泛型.md)
[](./docs/_posts/Scala/2020-07-05-Scala的implicit和implicitly.md)
[Scala的implicit和implicitly](./docs/_posts/Scala/2020-07-05-Scala-Scala的implicit和implicitly.md)
[Scala所有集合对比](./docs/_posts/Scala/2020-10-17-复习整理-Scala所有集合对比.md)
[Scala所有集合对比](./docs/_posts/Scala/2020-10-17-Scala-Scala所有集合对比.md)
## Shapeless
......@@ -180,11 +180,11 @@
[javap和ASM](./docs/_posts/其他/2020-09-03-其他-javap和ASM.md)
[Consul和Raft介绍](./docs/_posts/其他/2020-10-27-复习整理-Consul和Raft介绍.md)
[Consul和Raft介绍](./docs/_posts/其他/2020-10-27-其他-Consul和Raft介绍.md)
[Consul领导选举](./docs/_posts/其他/2020-10-27-复习整理-Consul领导选举.md)
[Consul领导选举](./docs/_posts/其他/2020-10-27-其他-Consul领导选举.md)
[ProtocolBuffer的原理](./docs/_posts/其他/2020-10-28-复习整理-ProtocolBuffer的原理.md)
[ProtocolBuffer的原理](./docs/_posts/其他/2020-10-28-其他-ProtocolBuffer的原理.md)
## 常用命令
......@@ -214,13 +214,13 @@
[StampedLock的实现分析](./docs/_posts/并发/2018-11-11-并发-StampedLock的实现分析.md)
[Volatile](./docs/_posts/并发/2020-10-12-复习整理-Volatile.md)
[Volatile](./docs/_posts/并发/2020-10-12-并发-Volatile.md)
[线程池](./docs/_posts/并发/2020-10-13-复习整理-线程池.md)
[线程池](./docs/_posts/并发/2020-10-13-并发-线程池.md)
[ReentrantReadWriteLock](./docs/_posts/并发/2020-10-20-复习整理-ReentrantReadWriteLock.md)
[ReentrantReadWriteLock](./docs/_posts/并发/2020-10-20-并发-ReentrantReadWriteLock.md)
[并发中的ABA问题](./docs/_posts/并发/2020-11-05-复习整理-并发中的ABA问题.md)
[并发中的ABA问题](./docs/_posts/并发/2020-11-05-并发-并发中的ABA问题.md)
## 操作系统
......@@ -258,6 +258,8 @@
[SQL优化记录](./docs/_posts/随笔/2020-11-13-随笔-SQL优化记录.md)
[快速动态切换JDK版本](./docs/_posts/随笔/2020-11-14-随笔-快速动态切换JDK版本.md)
## 面试
[杭州邦盛科技面试](./docs/_posts/面试/2018-06-01-面试-杭州邦盛科技面试.md)
......
......@@ -22,7 +22,12 @@ subprojects {
maven {
url "https://plugins.gradle.org/m2/"
}
maven { url "https://repo.maven.apache.org/maven2" }
mavenLocal()
maven {
name "aliyunmaven"
url "https://maven.aliyun.com/nexus/content/groups/public/"
}
mavenCentral()
}
sourceSets {
......@@ -57,8 +62,8 @@ subprojects {
//because some test write in src/main/java
compile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'
compile group: 'org.scala-lang', name: 'scala-library', version: '2.12.8'
compile group: 'org.scala-lang', name: 'scala-reflect', version: '2.12.8'
compile group: 'org.scala-lang', name: 'scala-library', version: '2.12.12'
compile group: 'org.scala-lang', name: 'scala-reflect', version: '2.12.12'
compile group: 'com.diffplug.spotless', name: 'spotless-plugin-gradle', version: '4.5.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
}
......
......@@ -17,7 +17,7 @@ wkk:=> 37
dreamylost:=> 93
#### 4.Kotlin
dreamylost:=> 38
dreamylost:=> 39
#### 5.Python
laozhang:=> 59
......
---
title: Java内存模型2
categories:
- 复习整理
- Java虚拟机
tags: [Java底层]
description: 主要介绍为编译器开发人员提供关于JSR-133的一些描述以及一些自己的总结和补充。
---
......
---
title: Java对象的内存布局
categories:
- 复习整理
- Java虚拟机
tags: [Java底层]
description: 最新的jdk15中Java对象的内存布局。
---
......
---
title: ZGC简介
categories:
- 复习整理
- Java虚拟机
tags: [Java底层]
description: 可扩展的、实验性的低延迟JVM垃圾收集器
---
......
---
title: Consul和Raft介绍
categories:
- 复习整理
- 其他
tags: [consul]
description: 介绍Consul与Raft以及Consul和其他常见软件的对比。
---
......
---
title: Consul领导选举
categories:
- 复习整理
- 其他
tags: [consul]
description: 介绍Consul领导选举和基本原理。
---
......
---
title: 并发中的ABA问题
categories:
- 复习整理
- 并发
tags: [Java并发]
description: 在本教程中,我们将在并发编程中介绍ABA问题的理论背景和它的根本原因以及解决方案。
---
......
---
title: 快速动态切换JDK版本
categories: 随笔
tags: [随笔]
---
如果已经使用pkg方式安装过了jdk(这种方式安装后直接可用,可执行 `java -version` ),默认会将jdk安装到系统目录,这样java_home就能直接识别出所有已经安装过的jdk,但是如果使用brew等工具,下载的是二进制/压缩包,则需要配置一些环境变量。
比如,brew安装open jdk11时,安装完后就会提醒是否添加软链到系统目录: `sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk`
如果不添加软链则 `/usr/libexec/java_home -v11` 是无效的,会提示找不到jdk11(因为系统的Library目录没有),此时虽然能使用 `java` 命令( `java -version` 版本为11),但是并不方便我们动态切换jdk版本,并且会覆盖 `/Library/Java/JavaVirtualMachines` 中的其他jdk。
如果不使用软链,则需要找到原始安装位置,时间久了可能就会忘记,放到系统默认的管理位置,不容易出问题。 `/usr/libexec/java_home` 展示的是安装目录,而不是 `whereis java` 找到的java可执行命令的目录( `/usr/bin/java`
下面是流程:
1. 当我们已经使用pkg安装了一个jdk8时,执行 `/usr/libexec/java_home -v1.8` ,会输出 `/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home` ,这表明pkg的jdk会默认被安装到此目录。
2. 使用brew安装open jdk11,执行 `brew install openjdk@11`
3. 安装成功后,依照提示添加软链, `sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk`
4. 检查是否成功,执行 `/usr/libexec/java_home -v11` ,此时输出 `/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home`
5. 为两个jdk设置环境变量:
```
# 计算当前版本JDK的安装位置,因为在上面我们已经将2个JDK都放在了 /Library/Java/JavaVirtualMachines/
export JAVA_8_HOME= `/usr/libexec/java_home -v 1.8`
export JAVA_11_HOME= `/usr/libexec/java_home -v 11`
# 设置默认的环境是JDK8
export JAVA_HOME=$JAVA_8_HOME
# 添加两个别名,用来快速更好JDK环境
alias JDK8="export JAVA_HOME=$JAVA_8_HOME"
alias JDK11="export JAVA_HOME=$JAVA_11_HOME"
```
测试:
执行 `JDK8` ,输出:
```
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
```
执行 `JDK11` ,输出:
```
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10)
OpenJDK 64-Bit Server VM (build 11.0.7+10, mixed mode)
```
> 如果是IDEA环境,切换JDK后,terminal需要关闭然后再打开。
\ No newline at end of file
/* Licensed under Apache-2.0 @梦境迷离 */
package io.github.dreamylost
/**
* 1122. 数组的相对排序
* 给你两个数组,arr1 和 arr2,
* 1.arr2 中的元素各不相同
* 2.arr2 中的每个元素都出现在 arr1 中
* 对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
* @see [[https://github.com/jxnu-liguobin]]
* @author 梦境迷离
* @since 2020-11-14
* @version 1.0
*/
class Leetcode_1122 {
companion object {
/**
* 188 ms,100.00%
* 34.3 MB,57.14%
* 计数排序
* 1.记录arr1的元素的次数
* 2.恢复arr2中存在的arr1的元素
* 3.恢复arr2中不存在的arr1的元素
*/
fun relativeSortArray(arr1: IntArray, arr2: IntArray): IntArray {
val valuesCount = Array(1001) { 0 }
arr1.forEach { valuesCount[it] += 1 }
var idx = 0
arr2.forEach { e ->
while (valuesCount[e] > 0) {
valuesCount[e] -= 1
arr1[idx++] = e
}
}
for (i in 0 until valuesCount.size)
while (valuesCount[i] > 0) {
valuesCount[i] -= 1
arr1[idx++] = i
}
return arr1
}
@JvmStatic
fun main(args: Array<String>) {
val arr1 = arrayOf(2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 19)
val arr2 = arrayOf(2, 1, 4, 3, 9, 6)
val ret = relativeSortArray(arr1.toIntArray(), arr2.toIntArray())
ret.forEach { print(it) }
}
}
}
......@@ -37,4 +37,8 @@
* [971. 翻转二叉树以匹配先序遍历](./Leetcode_971.kt) Medium
* [1372. 二叉树中的最长交错路径](./Leetcode_1372.kt) Medium
* [1466. 重新规划路线](./Leetcode_1466.kt) Medium
* [1609. 奇偶树](./Leetcode_1609.kt) Medium
\ No newline at end of file
* [1609. 奇偶树](./Leetcode_1609.kt) Medium
### 每日一题
* [1122. 数组的相对排序](./Leetcode_1122.kt) Easy
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册