消息队列的前生今世 发表于 2019-08-18 | 分类于 mq | 字数统计: 2.5k 字 | 阅读时长 ≈ 8 分钟什么是消息队列半成品运输案例话说小寰是一家巧克力作坊的老板,生产出美味的巧克力需要三道工序:首先将可可豆磨成可可粉,然后将可可粉加热并加入糖变成巧克力浆,最后将巧克力浆灌入模具,撒上坚果碎,冷却后是成品巧克力了。最开始的时候,每次研磨出一桶可可粉后,工人就会把这桶可可粉送到加工巧克力浆的工人手上,然 ...阅读全文 »
git设置代理模式,仅为github设置代理 发表于 2019-03-20 | 分类于 github | 字数统计: 215 字 | 阅读时长 ≈ 1 分钟这篇文章可能对于经常要使用github的同学很有用,毕竟github访问速度缓慢,设置代理可有加速预先准备设置代理前首先要有一个翻墙的代理ip和端口,这里我用的是ssh里的,相信很多朋友都是用ssh翻墙的。不过其他翻墙的一般也都是会提供有这个代理地址的。全局代理git config –global ...阅读全文 »
Centos7安装Python3.7 发表于 2019-03-12 | 分类于 centos | 字数统计: 164 字 | 阅读时长 ≈ 1 分钟python升级的真快,之前写了3.65的,现在继续安排3.7的。。。安装编译相关工具123yum -y groupinstall "Development tools"yum -y install zlib-devel bzip2-devel openssl-devel ncu ...阅读全文 »
Java Design Patterns —— 软件设计和代码编写几个原则 发表于 2019-02-11 | 分类于 设计模式 | 字数统计: 2.3k 字 | 阅读时长 ≈ 14 分钟Programming PrinciplesEvery programmer benefits from understanding programming principles and patterns. This overview is a reference for myself, and I ...阅读全文 »
数据结构与算法学习(五)—— 链表 发表于 2019-02-10 | 分类于 数据结构与算法 | 字数统计: 765 字 | 阅读时长 ≈ 2 分钟定义链表是一种通过指针将一组零散的内存块串在一起。内存块称为“结点”类型单链表单链表的结构如下图,我们可以看到有一个头结点和一个尾结点,尾节点指向空地址null,每个结点存储了两个值:当前节点数据、指向下个节点的指针。和数组一样,链表也有查询、删除、插入操作,插入和删除操作由于是可以预知的两步操作, ...阅读全文 »
并发编程重新出发(六)—— 用“等待-通知”机制优化循环等待 发表于 2019-02-09 | 字数统计: 1.8k 字 | 阅读时长 ≈ 6 分钟上一篇中,我们看到如何打破死锁,我们通过Allocator的中间类来管理,使用了while的死循环来一直请求拿到两个账号,这里会消耗大量CPU资源,所以这里我们需要通过经典的“等待-通知“的方式优化这个问题。我们先来看现实生活中的一个场景完美的就医流程在介绍 Java 语言如何支持等待 - 通知机制 ...阅读全文 »
并发编程重新出发(五)—— 死锁的处理 发表于 2019-02-07 | 分类于 并发编程 | 字数统计: 3k 字 | 阅读时长 ≈ 11 分钟死锁是很容易理解的,通俗的说就是两个操作同一时间需要拿到对方想要拿到的资源,导致互相等待不释放的情况。然而在细节上是怎么样处理的,需要分析一下。继上节提到的转账问题,我们用 Account.class 作为互斥锁,来解决银行业务里面的转账问题,虽然这个方案不存在并发问题,但是所有账户的转账操作都是串 ...阅读全文 »
并发编程重新出发(四)—— Java解决原子性问题 发表于 2019-02-03 | 分类于 并发编程 | 字数统计: 1.9k 字 | 阅读时长 ≈ 6 分钟上篇文章我们已经看到Java线程模型如何解决有序性和可见性。那么如何解决原子性,而单独拿出来分析原子性,可见原子性的复杂度相对较高。在单核CPU中,我们知道一个时刻只能执行一个线程,是可以保证原子性的,而多核CPU时,我们必须通过限制不同线程对共享变量的修改是互斥的,才能保证既可以提高性能,又能保证 ...阅读全文 »
并发编程重新出发(三)—— Java内存模型如何解决有序性和可见性 发表于 2019-02-02 | 分类于 并发编程 | 字数统计: 1.1k 字 | 阅读时长 ≈ 3 分钟什么是JAVA内存模型Java内存模型涉及的几个关键词Happens-Before的7个规则什么是Java内存模型现代计算机体系大部是采用的对称多处理器的体系架构。每个处理器均有独立的寄存器组和缓存,多个处理器可同时执行同一进程中的不同线程,这里称为处理器的乱序执行。在Java中,不同的线程可能访问 ...阅读全文 »
并发编程重新出发(二)—— 有序性、原子性、可见性 发表于 2019-01-26 | 分类于 并发编程 | 字数统计: 902 字 | 阅读时长 ≈ 3 分钟并发编程bug的源头:有序性原子性可见性1234567并发编程源头故事自从发明出计算机以后,我们知道冯诺依曼的结构,我们一直在解决一个问题:CPU、内存、IO三者之前速度的差异。我们做了这些* 1. CPU增加了缓存* 2. 操作系统增加了线程、进程,来分时复用CPU,进而平衡CPU和IO之前的速度 ...阅读全文 »