Docker基础介绍

Docker基础

基本概念

  • 镜像(Image):相当于一个root文件系统,是创建Docker容器的模板;
  • 容器(Container):镜像是静态文件,容器是运行镜像的实体;
  • 仓库(Repository):用于保存镜像;
  • 客户端(Client):用于执行docker命令;
  • 服务端(Docker Deamon):实际上是一个守护进程。负责监听客户端请求,并且管理镜像、容器、网络、磁盘。
阅读全文

Java 内存模型

前言

在并发编程中,当多个线程同时访问同一个共享的可变变量时,会产生不确定的结果,所以要编写线程安全的代码,其本质上是对这些可变的共享变量的访问操作进行管理。导致这种不确定结果的原因就是可见性有序性原子性问题,Java 为解决可见性和有序性问题引入了 Java 内存模型,使用互斥方案(其核心实现技术是)来解决原子性问题。这篇先来看看解决可见性、有序性问题的 Java 内存模型(JMM)。

阅读全文

教程:Go入门

在本教程中,将获得Go 编程的简要介绍 。在此过程中,你将:

  • 安装 Go(如果你还没有的话)。
  • 编写一些简单的“Hello, world”代码。
  • 使用 go 命令运行您的代码。
  • 使用 Go 包发现工具查找可以在您自己的代码中使用的包。
  • 调用外部模块的函数。

阅读全文

Java 并发之 Fork/Join 框架

什么是 Fork/Join 框架

Fork/Join 框架是一种在 JDK 7 引入的线程池,用于并行执行把一个大任务拆成多个小任务并行执行,最终汇总每个小任务结果得到大任务结果的特殊任务。通过其命名也很容易看出框架主要分为 Fork 和 Join 两个阶段,第一阶段 Fork 是把一个大任务拆分为多个子任务并行的执行,第二阶段 Join 是合并这些子任务的所有执行结果,最后得到大任务的结果。

这里不难发现其执行主要流程:首先判断一个任务是否足够小,如果任务足够小,则直接计算,否则,就拆分成几个更小的小任务分别计算,这个过程可以反复的拆分成一系列小任务。Fork/Join 框架是一种基于 分治 的算法,通过拆分大任务成多个独立的小任务,然后并行执行这些小任务,最后合并小任务的结果得到大任务的最终结果,通过并行计算以提高效率。

阅读全文

Spring Cloud 整合 Feign 的原理

前言

在 上篇 介绍了 Feign 的核心实现原理,在文末也提到了会再介绍其和 Spring Cloud 的整合原理,Spring 具有很强的扩展性,会把一些常用的解决方案通过 starter 的方式开放给开发者使用,在引入官方提供的 starter 后通常只需要添加一些注解即可使用相关功能(通常是 @EnableXXX)。下面就一起来看看 Spring Cloud 到底是如何整合 Feign 的。

阅读全文

看山聊并发:Java 中 Vector 和 SynchronizedList 的区别

Java 中 Vector 和 SynchronizedList 的区别

你好,我是看山。

本文还是折腾 Java 中的队列,上次比较了 Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList,当时感觉挺明白,后来想想又有些不理解的地方,所以今天在重新翻出来研究一下,我承认我钻了牛角尖了。

阅读全文

看山聊并发:认识 Java 中的队列:Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList

认识 Java 中的队列:Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList

你好,我是看山。

书接上文,上次聊了聊 在多线程中使用 ArrayList 会发生什么,这次我们说说平时常用的列表:Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList。

阅读全文

看山聊并发:如果非要在多线程中使用 ArrayList 会发生什么?(第二篇)

如果非要在多线程中使用 ArrayList 会发生什么?(第二篇)

你好,我是看山。

前面写过一篇文章 《如果非要在多线程中使用 ArrayList 会发生什么?》,有读者反馈,Java 11 代码已经修复,还会出现 null 元素。

为了便于理解,当时只是通过代码执行顺序说明了异常原因。其实多线程中还会涉及 Java 内存模型,本文就从这方面说明一下。

阅读全文

看山聊并发:如果非要在多线程中使用ArrayList会发生什么?

如果非要在多线程中使用ArrayList会发生什么?

你好,我是看山。

我们都知道,Java中的ArrayList是非线程安全的,这个知识点太熟了,甚至面试的时候都很少问了。

但是我们真的清楚原理吗?或者知道多线程情况下使用ArrayList会发生什么?

前段时间,我们就踩坑了,而且直接踩了两个坑,今天就来扒一扒。

阅读全文

《Go开发指南》翻译邀请

The Go Gopher

7月并发网组织翻译GO官网教程https://golang.google.cn/doc/相关技术文章,欢迎大家踊跃参加。

如何领取

通过评论领取想要翻译的文章,每次领取一章或一节(根据内容长短),翻译完后再领取其他章节。领取完成之后,译文最好在一个星期内翻译完成,如果不能完成翻译,也欢迎你邀请其他同学和你一起完成翻译。请谨慎领取,很多文章领取了没有翻译,导致文章很长时间没人翻译。

阅读全文

聊聊 Feign 的实现原理

What is Feign

Feign 是⼀个 HTTP 请求的轻量级客户端框架。通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java 中通过封装 HTTP 请求报文的方式直接调用。服务消费方拿到服务提供方的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。让我们更加便捷和优雅的去调⽤基于 HTTP 的 API,被⼴泛应⽤在 Spring Cloud 的解决⽅案中。开源项目地址:Feign,官方描述如下:

Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign’s first goal was reducing the complexity of binding Denominator uniformly to HTTP APIs regardless of ReSTfulness.

阅读全文

还在用Text类型? Mysql8.0增强的JSON类型,它不香?

一、前言

MySQL 支持由 RFC 7159 定义的原生JSON 数据类型,该数据类型可以有效访问 JSON(JavaScript Object Notation)中的元素数据。与将JSON 格式的字符串存储为单个字符串类型相比,JSON 数据类型具有以下优势:

  • 自动验证存储在JSON列中的JSON数据格式。无效格式会报错。
  • 优化的存储格式。存储在JSON列中的JSON文档被转换为允许快速读取访问文档元素的内部格式。内部是以二进制格式存储JSON数据。
  • 对JSON文档元素的快速读取访问。当服务器读取JSON文档时,不需要重新解析文本获取该值。通过key或数组索引直接查找子对象或嵌套值,而不需要读取整个JSON文档。
  • 存储JSON文档所需的空间,大致与LONGBLOB或LONGTEXT相同
  • 存储在JSON列中的任何JSON文档的大小都仅限于设置的系统变量max_allowed_packet的值
  • MySQL 8.0.13之前,JSON列不能有非null的默认值。
  • 在 MySQL 8.0 中,优化器可以对 JSON 列执行部分就地更新,而不是删除旧JSON串并将新串完整地写入列。

MYSQL 8.0,除了提供JSON 数据类型,还有一组 SQL 函数可用于操作 JSON 的值,例如创建JSON对象、增删改查JSON数据中的某个元素。

阅读全文

如何实现一个简易版的 Spring – 如何实现 AOP(中)

前言

在上篇「如何实现 AOP(上)」介绍了 AOP 技术出现的原因和一些重要的概念,在我们自己实现之前有必要先了解一下 AOP 底层到底是如何运作的,所以这篇再来看看 AOP 实现所依赖的一些核心基础技术。AOP 是使用动态代理字节码生成技术来实现的,在运行期(注意:不是编译期!)为目标对象生成代理对象,然后将横切逻辑织入到生成的代理对象中,最后系统使用的是带有横切逻辑的代理对象,而不是被代理对象,由代理对象转发到被代理对象。

阅读全文

如何实现一个简易版的 Spring – 如何实现 AOP(上)

前言

本文是「如何实现一个简易版的 Spring 系列」的第五篇,在之前介绍了 Spring 中的核心技术之一 IoC,从这篇开始我们再来看看 Spring 的另一个重要的技术——AOP。用过 Spring 框架进行开发的朋友们相信或多或少应该接触过 AOP,用中文描述就是面向切面编程。学习一个新技术了解其产生的背景是至关重要的,在刚开始接触 AOP 时不知道你有没有想过这个问题,既然在面向对象的语言中已经有了 OOP 了,为什么还需要 AOP 呢?换个问法也就是说在 OOP 中有哪些场景其实处理得并不优雅,需要重新寻找一种新的技术去解决处理?(P.S. 这里建议暂停十秒钟,自己先想一想…)

阅读全文

The JSR-133 Cookbook 中英对照版


The JSR-133 Cookbook

适用于编译器开发的 JSR-133 指南

“The JSR-133 Cookbook for Compiler Writers”

original website is http://g.oswego.edu/dl/jmm/cookbook.html. by Doug Lea, with help from members of the JMM mailing list.

dl@cs.oswego.edu.


Chinese edition is translated by 崔新, And website is https://yellowstar5.cn/direct/The%20JSR-133%20Cookbook-chinese.html

阅读全文

return top