摘要:
概述 多个线程操作共享变量(Java堆内存上的数据)会带来bug,Java提供了锁机制(Lock)来管理多线程并发,比如synchronized,但是会带来额外的性能开销(线程阻塞,上下文切换等)。为了提升性能,Java引入了原子变量,通过无锁算法(lock free)实现多线程安全,比如CAS。 阅读全文
摘要:
在提供图片上传的接口时,我们可能会需要知道上传来的图片是什么格式,比如 jpg,png,gif等等。图片的格式信息会存放到图片文件的头信息中,Java提供了ImageIO类来处理图片,代码片段如下: 阅读全文
摘要:
概述 JMM规范指出,每一个线程都有自己的工作内存(working memory),当变量的值发生变化时,先更新自己的工作内存,然后再拷贝到主存(main memory),这样其他线程就能读取到更新后的值了。 注意:工作内存和主存是JMM规范里抽象的概念,在JVM的内存模型下,可以将CPU缓存对应作 阅读全文
摘要:
结论 当有二进制数据传输时,使用 multipart/form data,否则使用 x www form urlencoded。 区别 x www form urlencoded 和 multipart/form data 是HTTP协议中,向服务器发送POST请求时的两种编码方案,对应form表单 阅读全文
摘要:
当我们在本地仓库的分支上做开发时,对于一个功能进行了多次提交,在push到远程仓库之前我们希望把这几个相关的commit合并为一个,这样更加简洁,也方便review。 如果想把 featureB 相关的三次提交合并为一个,可以执行如下命令 此时使用 git log 查看日志 三次提交合并为了一次提交 阅读全文
摘要:
使用可选依赖 将依赖坐标的元素的值设置为true,则代表这是一个可选依赖。 使用optional依赖可以节省空间和内存 使用场景 当编写一个类库时,比如projectX,可能会包含很多功能,但是依赖projectX的项目projectA只会使用其中一部分功能,对于没有用到的功能,projectA不希 阅读全文
摘要:
选择一:项目级配置(推荐) 找到项目中的如下文件: build.gradle 在项目的根目录下找到如下文件: build.gradle ,打开编辑,在下图红色箭头处添加阿里云的镜像。 添加如下代码: 在 apply 上面,添加如下代码: 选择二:全局配置(操作系统的当前用户) 在操作系统当前用户的 阅读全文
摘要:
当使用命令 docker pull mysql 拉取镜像时,其实等价于如下命令 latest是默认的标签,字面上理解为最新版本的镜像,实质上latest只是镜像的标签名称,跟具体某个版本号地位一样,有latest标签的镜像不一定是最新版本,镜像作者可以任意指定标签。 一般来说,我们会使用latest 阅读全文