Skip to content

Commit

Permalink
update burningmyself blog
Browse files Browse the repository at this point in the history
Signed-off-by: yangfubing <1928881525@qq.com>
  • Loading branch information
yangfubing committed Jan 19, 2020
1 parent 1fc3a2f commit ba927a3
Show file tree
Hide file tree
Showing 15 changed files with 637 additions and 88 deletions.
27 changes: 21 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
* [README.md](README.md)
* [Docker]
* * [Docker介绍使用](blog/zh-cn/docker/docker.md)
* * [docker和docker-compose配置常用环境](blog/zh-cn/docker/docker-compose.md)
* * [Docker部署Jenkins](blog/zh-cn/docker/docker-jenkins.md)
* [经验]
* * [集群和负载均衡](blog/zh-cn/exp/cl.md)
* * [DevOps是什么](blog/zh-cn/exp/devops.md)
Expand All @@ -33,13 +35,16 @@
* * [产品与技术](blog/zh-cn/exp/pt.md)
* * [深度学习框架](blog/zh-cn/exp/four_deep_learning.md)
* * [在阿里做了5年技术Leader,我总结出这些套路!](blog/zh-cn/exp/tl.md)
* * [CTO 技能图谱](blog/zh-cn/exp/cto.md)
* [Img]
* [Java]
* * [Java 新特性](blog/zh-cn/java/feature.md)
* * [Java 类加载机制](blog/zh-cn/java/load-class.md)
* * [Orm的优缺点](blog/zh-cn/java/orm.md)
* * [BIO与NIO](blog/zh-cn/java/bio-nio.md)
* * [RocketMq下载与安装](blog/zh-cn/java/rocketmq/rmq-1.md)
* * [Spring常用注解](blog/zh-cn/java/springAnnotation.md)
* * [Java 虚拟机](blog/zh-cn/java/javavm.md)
* [Linux]
* * [Linux常用命令](blog/zh-cn/linux/often.md)
* * [实用的Linux 命令](blog/zh-cn/linux/ope.md)
Expand All @@ -51,8 +56,8 @@
* * [基于DDD的微服务设计和开发实战](blog/zh-cn/micro/ddd.md)
* [.NET]
* * [C#语法新特性](blog/zh-cn/net/c_sharp.md)
* * [.Ner Core Docker 部署](blog/zh-cn/net/c_docker.md)
* * [使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx](blog/zh-cn/net/c_mysql_nginx.md)
* * [.Net Core Docker 部署](blog/zh-cn/net/c_docker.md)
* * [Docker容器化部署ASP.NET Core](blog/zh-cn/net/c_sqlserver_nginx.md)
* * [让你的ASP.NET Core应用程序更安全](blog/zh-cn/net/c_core_safety.md)
* * [ASP.NET Core开发者指南](blog/zh-cn/net/c_core_study_route.md)
* [PHP]
Expand All @@ -69,8 +74,10 @@
* * [MySQL 索引](blog/zh-cn/sql/mysql_index.md)
* * [MySQL PXC集群](blog/zh-cn/sql/mysql_pxc.md)
* * [MySQL MySQL数据库应用](blog/zh-cn/sql/mysql_use.md)
* * [MySql 备份](blog/zh-cn/sql/mysql_backs.md)
* * [Sql Server 主从备份](blog/zh-cn/sql/sql_server_master.md)
* * [数据库之互联网常用分库分表方案](blog/zh-cn/sql/data_split.md)
* * [Mybatis使用心德](blog/zh-cn/sql/mybatis.md)
* [TOOL]
* * [Git命令](blog/zh-cn/tool/git.md)
* * [GitBook](blog/zh-cn/tool/gitbook.md)
Expand All @@ -79,16 +86,24 @@
* * [Git提交日志规范](blog/zh-cn/tool/gitcmr.md)
* * [MarkDown](blog/zh-cn/tool/markdown.md)
* * [CI/CD](blog/zh-cn/tool/cicd.md)
* * [mkdocs简单使用](blog/zh-cn/tool/mkdocs.md)
* * [Git的黑魔法](blog/zh-cn/tool/gitsutdy.md)
* * [mkblog/zh-cn简单使用](blog/zh-cn/tool/mkblog/zh-cn.md)
* * [Git的黑魔法](blog/zh-cn/tool/gitstudy.md)
* * [MinIO 搭建使用](blog/zh-cn/tool/minio.md)
* [前端]
* * [阿里js样式](blog/zh-cn/web/ali_js_style.md)
* * [ES6语法](blog/zh-cn/web/es6.md)
* * [Node.js](blog/zh-cn/web/node.js.md)
* * [React 开发者指南](blog/zh-cn/web/react.md)
* * [Dart语法学习](blog/zh-cn/dart/syntax.md)
* * [React 面试](blog/zh-cn/web/react_interview.md)
* * [Js 工具函数](blog/zh-cn/web/js_tool_method.md)
* * [vue与react比较](blog/zh-cn/web/vue_cp_react.md)
* * [JavaScript 基础](blog/zh-cn/web/javascript.md)
* [构架]
* * [构架拆分](blog/zh-cn/framework/split.md)
* * [分布式、高并发、多线程](blog/zh-cn/framework/fgb.md)
* * [如何理解敏捷开发](blog/zh-cn/framework/agility.md)
* * [走向架构师必备的技能](blog/zh-cn/framework/fwork.md)
* [医学]
* * [脑炎](blog/zh-cn/doctor/ae.md)
* [情感]
Expand All @@ -110,7 +125,7 @@
* * [所有的失去,都会以另一种方式归来](blog/zh-cn/emotion/losecome.md)
* * [人生有这三种好心态](blog/zh-cn/emotion/threeheart.md)
* * [一个感情真相](blog/zh-cn/emotion/onelike.md)
* * [情商与道理](blog/zh-cn/emotion/notruch.md)
* * [情商与道理](blog/zh-cn/emotion/notruth.md)
* * [六种男人远离](blog/zh-cn/emotion/smf.md)
* * [决定接下来人生归属的,不是努力,而是选择](blog/zh-cn/emotion/select.md)
* * [被你拉黑的那个人,你一定很喜欢吧](blog/zh-cn/emotion/nolike.md)
Expand All @@ -119,4 +134,4 @@
* * [心态好的人,一辈子都好](blog/zh-cn/emotion/lifetime.md)
* * [将心比心,方得人心](blog/zh-cn/emotion/hearttoheart.md)
* * [别睡太晚,别爱太满,别要太多](blog/zh-cn/emotion/ttt.md)
* * [程序员表白必备神器](blog/zh-cn/emotion/profess.md)
* * [程序员表白必备神器](blog/zh-cn/emotion/profess.md)
75 changes: 74 additions & 1 deletion blog/en-us/docker/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -453,4 +453,77 @@ docker container cp命令用于从正在运行的 Docker 容器里面,将文

``` s
$ docker container cp [containID]:[/path/to/file] .
```
```

## Docker命令详解(run篇)

命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Usage: Run a command in a new container
中文意思为:通过run命令创建一个新的容器(container)

### 常用选项说明
-d, --detach=false, 指定容器运行于前台还是后台,默认为false
-i, --interactive=false, 打开STDIN,用于控制台交互
-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
-u, --user="", 指定容器的用户
-a, --attach=[], 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="", 指定容器的工作目录
-c, --cpu-shares=0, 设置容器CPU权重,在CPU共享场景使用
-e, --env=[], 指定环境变量,容器中可以使用该环境变量
-m, --memory="", 指定容器的内存上限
-P, --publish-all=false, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主机名
-v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[], 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[], 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="", 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="", 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[], 添加主机设备给容器,相当于设备直通
--dns=[], 指定容器的dns服务器
--dns-search=[], 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="", 覆盖image的入口点
--env-file=[], 指定环境变量文件,文件格式为每行一个环境变量
--expose=[], 指定容器暴露的端口,即修改镜像的暴露端口
--link=[], 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[], 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge", 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false, 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no", 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
--rm=false, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true, 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
### 示例

* 运行一个在后台执行的容器,同时,还能用控制台管理:
``` shell
docker run -i -t -d ubuntu:latest
```
* 运行一个带命令在后台不断执行的容器,不直接展示容器内部信息:
``` shell
docker run -d ubuntu:latest ping www.docker.com
```
* 运行一个在后台不断执行的容器,同时带有命令,程序被终止后还能重启继续跑,还能用控制台管理,
``` shell
docker run -d --restart=always ubuntu:latest ping www.docker.com
```
* 为容器指定一个名字,
``` shell
docker run -d --name=ubuntu_server ubuntu:latest
```
* 容器暴露80端口,并指定宿主机80端口与其通信(: 之前是宿主机端口,之后是容器需暴露的端口),
``` shell
docker run -d --name=ubuntu_server -p 80:80 ubuntu:latest
```
* 指定容器内目录与宿主机目录共享(: 之前是宿主机文件夹,之后是容器需共享的文件夹),
```shell
docker run -d --name=ubuntu_server -v /etc/www:/var/www ubuntu:latest
```
104 changes: 104 additions & 0 deletions blog/en-us/java/feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
* JAVA7: <>符号、ARM支持、支持多catch
* JAVA8:Lamda表达式,类型注解等
* JAVA9: 模块化、接口中的私有方法等
* JAVA10: 局部变量推断、整个JDK代码仓库、统一的垃圾回收接口、并行垃圾回收器G1、线程局部管控

## Java5 新特性总结

Expand Down Expand Up @@ -1873,3 +1874,106 @@ Java 8引入了 <U> CompletableFuture<U> completedFuture(U value) 工厂方法
* <U> CompletionStage<U> completedStage(U value): 返回一个新的以指定 value 完成的CompletionStage ,并且只支持 CompletionStage 里的接口。
* <U> CompletionStage<U> failedStage(Throwable ex): 返回一个新的以指定异常完成的CompletionStage ,并且只支持 CompletionStage 里的接口。
```
## Java 10 新特性
1. 局部变量推断
2. 整个JDK代码仓库
3. 统一的垃圾回收接口
4. 并行垃圾回收器G1
5. 线程局部管控

### 局部变量推断

它向 Java 中引入在其他语言中很常见的 var ,比如 JavaScript 。只要编译器可以推断此种类型,你不再需要专门声明一个局部变量的类型。

开发者将能够声明变量而不必指定关联的类型。比如:

``` java
List <String> list = new ArrayList <String>();
Stream <String> stream = getStream();
```
它可以简化为:
``` java
var list = new ArrayList();
var stream = getStream();
```

局部变量类型推断将引入“ var ”关键字的使用,而不是要求明确指定变量的类型,我们俗称“语法糖”。

这就消除了我们之前必须执行的 ArrayList<String> 类型定义的重复。

其实我们在JDK7,我们需要:
``` java
List <String> list = new ArrayList <String>();
```
但是在JDK8,我们只需要:
``` java
List <String> list = new ArrayList <>();
```

所以这是一个逐步的升级。也是人性化的表现与提升。

有趣的是,需要注意 var 不能成为一个关键字,而是一个保留字。这意味着你仍然可以使用 var 作为一个变量,方法或包名,但是现在(尽管我确定你绝不会)你不能再有一个类被调用。

局部变量类型推荐仅限于如下使用场景:
* 局部变量初始化
* for循环内部索引变量
* 传统的for循环声明变量
Java官方表示,它不能用于以下几个地方:
* 方法参数
* 构造函数参数
* 方法返回类型
* 字段
* 捕获表达式(或任何其他类型的变量声明)

注意:

JavavarJavaScript的完全不同,不要这样去类比。Javavar是用于局部类型推断的,而不是JS那样的动态类型,所以下面这个样子是不行的:

``` java
var a = 10;
a = "abc"; //error!
```

其次,这个var只能用于局部变量声明,在其他地方使用都是错误的。

``` java
class C {
    public var a = 10; //error
    public var f() { //error
        return 10;
    }
}
```

### 整合 JDK 代码仓库

为了简化开发流程,Java 10 中会将多个代码库合并到一个代码仓库中。

在已发布的 Java 版本中,JDK 的整套代码根据不同功能已被分别存储在多个 Mercurial 存储库,这八个 Mercurial 存储库分别是:root、corba、hotspot、jaxp、jaxws、jdk、langtools、nashorn。

虽然以上八个存储库之间相互独立以保持各组件代码清晰分离,但同时管理这些存储库存在许多缺点,并且无法进行相关联源代码的管理操作。其中最重要的一点是,涉及多个存储库的变更集无法进行原子提交 (atomic commit)。例如,如果一个 bug 修复时需要对独立存储两个不同代码库的代码进行更改,那么必须创建两个提交:每个存储库中各一个。这种不连续性很容易降低项目和源代码管理工具的可跟踪性和加大复杂性。特别是,不可能跨越相互依赖的变更集的存储库执行原子提交这种多次跨仓库的变化是常见现象。

为了解决这个问题,JDK 10 中将所有现有存储库合并到一个 Mercurial 存储库中。这种合并的一次生效应,单一的 Mercurial 存储库比现有的八个存储库要更容易地被镜像(作为一个 Git 存储库),并且使得跨越相互依赖的变更集的存储库运行原子提交成为可能,从而简化开发和管理过程。虽然在整合过程中,外部开发人员有一些阻力,但是 JDK 开发团队已经使这一更改成为 JDK 10 的一部分。

### 统一的垃圾回收接口

在当前的 Java 结构中,组成垃圾回收器(GC)实现的组件分散在代码库的各个部分。尽管这些惯例对于使用 GC 计划的 JDK 开发者来说比较熟悉,但对新的开发人员来说,对于在哪里查找特定 GC 的源代码,或者实现一个新的垃圾收集器常常会感到困惑。更重要的是,随着 Java modules 的出现,我们希望在构建过程中排除不需要的 GC,但是当前 GC 接口的横向结构会给排除、定位问题带来困难。

为解决此问题,需要整合并清理 GC 接口,以便更容易地实现新的 GC,并更好地维护现有的 GCJava 10 中,hotspot/gc 代码实现方面,引入一个干净的 GC 接口,改进不同 GC 源代码的隔离性,多个 GC 之间共享的实现细节代码应该存在于辅助类中。这种方式提供了足够的灵活性来实现全新 GC 接口,同时允许以混合搭配方式重复使用现有代码,并且能够保持代码更加干净、整洁,便于排查收集器问题。

### 并行垃圾回收器 G1

大家如果接触过 Java 性能调优工作,应该会知道,调优的最终目标是通过参数设置来达到快速、低延时的内存垃圾回收以提高应用吞吐量,尽可能的避免因内存回收不及时而触发的完整 GCFull GC 会带来应用出现卡顿)。

G1 垃圾回收器是 Java 9Hotspot 的默认垃圾回收器,是以一种低延时的垃圾回收器来设计的,旨在避免进行 Full GC,但是当并发收集无法快速回收内存时,会触发垃圾回收器回退进行 Full GC。之前 Java 版本中的 G1 垃圾回收器执行 GC 时采用的是基于单线程标记扫描压缩算法(mark-sweep-compact)。为了最大限度地减少 Full GC 造成的应用停顿的影响,Java 10 中将为 G1 引入多线程并行 GC,同时会使用与年轻代回收和混合回收相同的并行工作线程数量,从而减少了 Full GC 的发生,以带来更好的性能提升、更大的吞吐量。

Java 10 中将采用并行化 mark-sweep-compact 算法,并使用与年轻代回收和混合回收相同数量的线程。具体并行 GC 线程数量可以通过:-XXParallelGCThreads 参数来调节,但这也会影响用于年轻代和混合收集的工作线程数。


### 线程局部管控

在已有的 Java 版本中,JVM 线程只能全部启用或者停止,没法做到对单独某个线程的操作。为了能够对单独的某个线程进行操作,Java 10 中线程管控引入 JVM 安全点的概念,将允许在不运行全局 JVM 安全点的情况下实现线程回调,由线程本身或者 JVM 线程来执行,同时保持线程处于阻塞状态,这种方式使得停止单个线程变成可能,而不是只能启用或停止所有线程。通过这种方式显著地提高了现有 JVM 功能的性能开销,并且改变了到达 JVM 全局安全点的现有时间语义。

增加的参数为:-XX:ThreadLocalHandshakes (默认为开启),将允许用户在支持的平台上选择安全点。

[参考]("https://segmentfault.com/a/1190000018588495")
Loading

0 comments on commit ba927a3

Please sign in to comment.