分类: 学习笔记

18 篇文章

面向对象设计模式与Go语言实现 – 创建型模式
创建型模式(Creational Patterns) 设计模式概览 创建型模式(Creational Patterns): 单例模式(Singleton) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 建造者模式(Builder) 原型模式(Prototype) 结构型模式(Structural Patterns): 适配器模式(Adapter) …
面向对象设计模式与Go语言实现 – 面向对象设计原则
本系列文章是针对设计模式的系列文章,网上的很多设计模式的文章只讲了个大概和一部分纯理论,示例代码也是实际场景中根本遇不到,往往只会出现在课本中的无生产意义的代码模型。本系列文章则希望在讲述设计模式的同时,采用更贴合生产实践中的代码,在实战中学习设计模式的相关概念,理解设计模式的精髓。 面向对象设计原则 关于面向对象设计原则众说纷纭,有人说是6种有人说是7种,但无论有几种实际上内容都是一致的。 本文…
LazySkiplist: A Simple Optimistic skip-list Algorithm论文翻译与实现
最近在研究无锁跳表,无意间发现了这篇论文,虽然是有锁的实现,但是采用了乐观同步的机制,是一个理论上简单且高效的并发安全的跳表实现。苦于国内网上少有针对此篇论文的翻译与解读,本篇博客致力于翻译此篇论文,并基于 zhangyunhao116/skipmap 的开源代码逻辑,深入理解篇论文的思想。 论文原文: https://people.csail.mit.edu/shanir/publication…
速通HDD与SSD基本原理
速通HDD与SSD基本原理 作为MIS专业的小弱鸡,对硬件组成的了解并不深入,而本人正在学习LSM-T结构的存储引擎,发现有些内容一定是要对硬件有所了解之后才能又更好的认知,比如在阅读了LSM-T的经典开山论文后,有了解到LSM-T结构化随机写为顺序写的特性,可以契合HDD的特点可以极大的加快磁盘写入的速度。而在Wiskey论文中,又提出了对SSD友好的KV分离式存储结构,并通过并行读取最大化发挥…
速通WebSocket协议 – 建立在HTTP之上的应用层”TCP”协议
由于最近在看一些IM系统相关的内容,学习到了webSocket协议,感觉很有意思,但是感觉感觉网上没有找到很清晰描述webSocket的文章,故有此篇,文章整理了网络上的一些资料并加上我的个人理解,如有错误,欢迎指出 WebSocket WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推…
《Java并发编程的艺术》学习笔记(四) – Volatile 全解读
Volatile 全解读 Volatile 的定义 在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,…
《Java并发编程的艺术》学习笔记(三) – Java内存模型 – JMM
Java内存模型 - JMM Java内存模型技术 Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明。 在Java中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享(“共享变量”这个术语代指实例域,静态域和数组元素)。局部变量(Local Variables),方法定义参数(Java语言规范称之为Formal Method P…
《Java并发编程的艺术》学习笔记(二) – synchronized 全解读
synchronized 全解读 Synchronized的特性 有序性 读读、写写、写读、读写 都是互斥的,只有一条线程拿到当前的锁,当前锁不释放,其他线程只能处于BLOCK状态,等待锁的释放,然后加入下一步的竞争 可见性 完全排他 原子性 本质上是线程互斥保证的原子性 可重入性 Synchronized锁升级 - Mark Word(32bit) Synchronized锁升级 - 偏向锁 至…
《Java并发编程的艺术》学习笔记(一) – 并发编程初探
并发编程初探 Java天生的多线程 一个main函数就是一个JVM进程,在IDEA中可以看到共有6条线程 查看线程信息:jps(拿到线程的tid) + jstack(查看线程日志) prio是进程中的优先级,os_prio是操作系统给线程定义的优先级,prio前加上deamo则为守护线程 [6] Monitor Ctrl-Break (跟JVM 关系不大,他是 IDEA 通过反射的方式,开启一个随…
Redis学习笔记(一)–基础命令
Redis 基础 第一节 基本命令 通用命令 select 示例: select 0 # 选择0号数据库 keys 示例: keys he* keys he[h-l]* keys ph? # 根据Pattern表达式查询符合条件的Key # 注意:不要在生产环境中使用,会阻塞线程 dbsize 示例: dbsize # 返回key的总数 exists 示例: exists a # 查询key=a是…