自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

加多的博客

关注并发编程,开源框架,架构设计,微信公众号:技术原始积累

  • 博客(118)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java并发编程之美

一、前言并发编程相比 Java 中其他知识点学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/高流量的系统的实现,却都离不开并发编程,于是能够真正掌握并发编程的人成为了市场迫切需求的人才。本书将通过图文结合、通俗易懂的方式帮助大家完成多线程并发编程从入门到实践的飞跃!本书分为三部分: - 第一部分Java并发编程基础篇主要讲解Java并发编程的基础知识,主要讲解线程有关...

2018-09-01 15:21:57 5535 6

原创 Docker的架构设计

Docker客户端是为开发者提供的操作docker镜像和容器的客户端,比如我们最常使用的是docker 命令,使用docker build命令构建镜像,使用docker pull命令拉取镜像,使用docker run命令运行容器等。Docker 容器,即docker镜像在运行时的产物,我们可以使用docker run来基于镜像运行一个容器,使用docker stop 命令来终止一个运行时的容器。前面我们研究了Docker容器的本质是一个特殊的进程,那么这个特殊进程是如何创建、如何终止的那?

2023-01-25 18:19:00 172

原创 Docker镜像里面到底有啥东西?

Docker镜像里面其实并不包含linux内核文件,而仅仅是包含用户空间的文件系统rootfs,另外Docker镜像里面还包含开发者自己的应用文件,仅此而已。最后所有的Docker容器运行时是复用主机操作系统的内核的,但是每个Docker容器有自己独立的用户空间的文件系统。

2023-01-24 14:26:51 3460

原创 Docker容器的本质

Docker容器的本质是一个特殊的进程

2023-01-23 10:41:12 167

原创 架构整洁之道-核心笔记

架构”这个词往往使用于“高层级”的讨论中。这类讨论一般都把“底层”的实现细节排除在外。而“设计”一词,往往用来指代具体的系统代码组织结构和实现细节。但是,从一个真正的系统架构师的日常工作来看,这样的区分是根本不成立的。底层设计细节和高层架构信息是不可分割的。只考虑高层架构,而不考虑设计细节会导致架构师脱离一线,导致架构师永远不了解具体开发代码时会遇到什么问题。而只考虑设计细节而不考虑架构会导致视野的局限性,没有全局观,设计出来的系统可能边界不清楚,组件划分不明确,系统最终成为一团谁也理不清的乱麻。

2023-01-21 10:25:28 1238

原创 容器VS虚拟机

容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方运行。比如我们在自己本地的电脑上开发好应用后,把应用打包到容器内。然后就可以在不做任何改动的情况下在生产系统的虚拟机、物理服务器、云主机上运行。

2023-01-21 10:23:44 153

原创 飞书开放平台-批量发送消息示例

本文我们基于飞书开放平台提供的服务端SDK,展示下如何批量发送消息。

2023-01-21 10:21:13 321

原创 增强版的ThreadLocal-TransmittableThreadLocal

一、前言ThreadLocal是JDK里面提供的一个thread-local(线程局部)的变量,当一个变量被声明为ThreadLocal时候,每个线程会持有该变量的一个独有副本;但是ThreadLocal不支持继承性,虽然JDK里面提供了InheritableThreadLocal来解决继承性问题,但是其也是不彻底的,本节我们谈谈增强的TransmittableThreadLocal,其可以很好...

2019-08-30 09:53:54 1321

原创 谈谈Go并发编程

一、前言Go语言在设计时,Java和C ++是编写服务器程序最常用的语言(至少在Google是这样),这是因为使用这些语言可以高效的开发。但是Go设计者们觉得像Java和C++这些语言需要开发者记忆太多的语法和规则,并且需要重复做的事情太多,这导致一些程序员开始转向更加动态,流畅的语言,如Python,但是付出的是损失开发效率和对类型安全检查的缺失。Go设计者们认为应该可以发明一种语言,这种语言...

2019-07-21 10:04:36 753

原创 高性能可扩展分布式RPC框架Dubbo-内核原理揭秘

一、前言整体来说,一个公司业务系统的演进流程基本都是从单体应用到多体应用。在单体应用时,不同业务模块相互调用直接在本地 JVM 进程内就可以完成;而变为多个应用时,相互之间进行通信的方式就不能简单的进行本地调用了,因为不同业务模块部署到了不同的 JVM 进程里面,更常见的是部署到了不同的机器,这时候一个高效、稳定的 RPC 远程调用框架就变得非常重要。Dubbo作为阿里巴巴开发的一个开源的高性...

2019-06-29 10:37:46 665

原创 Java并发编程视频分享-第一期

一、主讲人:加多(阿里集团-淘宝技术部-高级开发工程师)**本名:**翟陆续目前在阿里巴巴淘宝移动中间件消息服务组工作,热衷并发编程,开源框架,架构设计。著作:《Java并发编程之美》二、本次课程内容:什么是线程?并发与并行区别?为何并发编程那么难?1.数据竞争的存在 2.原子性 3.指令重排序存在 4.死锁的存在 5.内存可见性问题的存在三、直播时间:2019年3月1...

2019-03-17 09:59:12 1566

原创 GoLang内存模型

一、前言Go语言的内存模型规定了一个goroutine可以看到另外一个goroutine修改同一个变量的值的条件,这类似java内存模型中内存可见性问题(Java内存可见性问题可以参考拙作:Java并发编程之美一书)。当多个goroutine并发同时存取同一个数据时候必须把并发的存取的操作顺序化,在go中可以实现操作顺序化的工具有高级的通道(channel)通信和同步原语比如sync包中的Mu...

2019-03-03 11:14:39 5159

原创 Go并发编程之美-读写锁

一、前言go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中读写锁二、读写锁go中读写锁,在没有线程获取写锁情况下多个线程可以同时获取读锁,读锁是可重入锁,写锁则是互斥锁(不可重入)。package mainimport ( "fmt" ...

2019-02-13 09:05:50 251

原创 Go并发编程之美-互斥锁

一、前言go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中互斥锁二、互斥锁互斥锁是独占锁,同时只有一个线程可以获取该锁,其他线程则会被阻塞挂起,等获取锁的线程释放锁后,阻塞的线程中的一个才可以被唤醒并获取锁。本节我们使用独占锁来实现一个线程安全...

2019-02-12 13:47:01 216

原创 go并发编程之美(一)

一、前言在Java中多线程之间是通过共享内存进行通信的,在go中多线程之间通信是基于消息的,go中的通道是go中多线程通信的基石。在java中创建的线程是与OS线程一一对应的,而在go中多个协程(goroutine)对应一个逻辑处理器,每个逻辑处理器与OS线程一一对应。每个线程要运行必须要在就绪状态情况下获取cpu,而操作系统是基于时间片轮转算法来调度线程占用cpu来执行任务的,每个OS线程...

2019-02-07 11:27:24 234

原创 JUC包中的分而治之策略-为提高性能而生

一、前言本次分享我们来共同探讨JUC包中一些有意思的类,包含AtomicLong & LongAdder,ThreadLocalRandom原理。二、AtomicLong & LongAdder2.1 AtomicLong 类AtomicLong是JUC包提供的原子性操作类,其内部通过CAS保证了对计数的原子性更新操作。大家可以翻看源码发现内部是通过UnSafe(rt.j...

2019-01-12 09:28:15 948

原创 Java并发编程之美-双11限时五折优惠

一、内容二、买家秀三、购买地址天猫链接:https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.61.59a73c85cVE3Sk&id=579705310959&user_id=1932014659&cat_id=2&is_b=1&rn=8030c6abc3a06ef8b8e6...

2018-11-11 17:27:28 495 1

原创 Spring之配置项管理

一、前言正如webx框架文档里面所说,在一个应用中我们总是会遇到一些参数,例如:数据库服务器IP地址、端口、用户名;这些参数有一个共性,那就是:它们和应用的逻辑无关,只和当前环境、当前系统用户相关。以下场景很常见:在开发、测试、发布阶段,使用不同的数据库服务器;在开发阶段,使用Windows的A开发者将用户上传的文件存放在d:\my_upload目录中,而使用Linux的B开发者将同样的文...

2018-10-31 18:54:39 682

原创 实战Jmeter压测Dubbo服务接口

一、前言最近在做一些业务上云的项目,其中远程Rpc调用方式我们选择了Dubbo,为便于收集压测信息,我们选择了使用Jmeter来做压测工具,本文就来简单介绍如何使用Jmeter压测Dubbo服务接口,以及需要注意的事情。二、Jmeter使用2.1 下载Jmeter在 https://jmeter.apache.org/download_jmeter.cgi 下载二进制包下载后解压缩后...

2018-10-30 15:48:31 2755 1

原创 你真的了解Netty中@Sharable?

一、前言Netty 是一个可以快速开发网络应用程序的基于事件驱动的异步 网络通讯 框架,它大大简化了 TCP 或者 UDP 服务器的网络编程。Netty 的应用还是比较广泛的,比如阿里巴巴开源的 Dubbo 和 Sofa-Bolt等 框架底层网络通讯都是基于 Netty 来实现的。Netty的设计是精妙的,其中每个设计点都值得我们去深思,本节我们来看看Netty中@Sharable的设计哲学二...

2018-10-28 10:42:38 8703 7

原创 Java 并发编程之美-千呼万唤始出来

一、内容二、买家秀三、购买地址京东链接: https://item.jd.com/12450812.html天猫链接:https://detail.tmall.com/item.htm?spm=a230r.1.14.1.606745bbXzjEyK&id=578523567332&ns=1&abbucket=17...

2018-10-20 11:15:22 1008

原创 Java网络编程基础篇

一、前言网络通讯在系统交互中是必不可少的一部分,无论是面试还是工作中都是绕不过去的一部分,本节我们来谈谈Java网络编程中的一些知识,本chat内容如下:网络通讯基础知识,剖析网络通讯的本质和需要注意的点使用Java BIO阻塞套接字 实现简单TCP网络通讯使用Java NIO 非阻塞套接字实现简单非阻塞TCP网络通讯JavaIO模型与Java NIO中ByteBuffer二、 网...

2018-09-25 17:48:29 333

原创 Java并发编程之美-勘误

Java并发编程之美-勘误汇总

2018-09-17 10:27:10 2156

原创 微服务核心组件 Zuul 网关原理剖析

一、前言Zuul 网关是具体核心业务服务的看门神,相比具体实现业务的系统服务来说它是一个边缘服务,主要提供动态路由,监控,弹性,安全性等功能。在分布式的微服务系统中,系统被拆为了多套系统,通过zuul网关来对用户的请求进行路由,转发到具体的后台服务系统中。本 Chat 主要内容如下:服务网关演化历程。Zuul 1.0 服务架构与源码剖析。Zuul 2.0 服务架构新特性。...

2018-09-11 12:25:54 17929

原创 MySQL中流式查询使用

一、前言MySQL 是目前使用比较广泛的关系型数据库,而从数据库里面根据条件查询数据到内存的情况想必大家在日常项目实践中都有使用。当指定条件的数据量特别大时候一般是通过分页的方式在前端页面通过 Tag 标签一页页的加载数据到内存;但是有些情况下却不需要用户切换 Tag 标签的方式一页页的加载数据,这时候如果一下子全部把数据加载内存,就有可能会导致 OOM,虽然这时候可以通过程序控制分页查询...

2018-08-08 19:50:38 5716

原创 分布式消息中间件 RocketMQ:概述与源码编译篇

一、前言Apache RocketMQ 是一个分布式消息中间件,其具有低延迟、高性能和可靠性、万亿级容量、灵活的可扩展性特性;它是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。二、RocketMQ架构 本图来自rocketmq官网RocketMQ 是一个分布式消息中间件,其具有低延...

2018-07-21 10:13:34 815

原创 Spring事务切面原理

一、前言本节我们来谈谈 <tx:advice/>、<aop:config> 标签如何创建事务切面的。二、<tx:advice/>、<aop:config> 标签如何创建事务切面的<tx:advice/>标签作用是创建一个TransactionInterceptor,作为事务切面的通知方法。在Spring中(可以参考:htt...

2018-07-15 09:34:58 4965 1

原创 Spring&Mybaits数据库配置解惑

一、前言一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能会遇到坑,所以下面对这些配置项进行一一解说(1)配置数据源?xml version="1.0" encoding="UTF-8" standalone="no"?><beans xmlns="http://www.spr...

2018-07-14 14:11:54 3753

原创 MySQL 中基于 XA 实现的分布式事务

五、MySQL 中基于 XA 实现的分布式事务5.1 XA协议首先我们来简要看下分布式事务处理的XA规范 可知XA规范中分布式事务有AP,RM,TM组成:其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软...

2018-07-07 09:58:23 4705 4

原创 何为脏读、不可重复读、幻读

事务的隔离性是指多个事务并发执行的时候相互之间不受到彼此的干扰的特性,隔离性是事务ACID特性中的I,根据隔离程度从低到高分为Read Uncommitted(读未提交),Read Committed(读已提交),Repeatable Read(可重复读),Serializable(串行化)四种隔离级别。在具体介绍事务隔离性前先介绍几个名词,以便说明数据库在并发操作时候可能存在的问题,以便展开来探...

2018-06-30 18:26:09 263

原创 分布式事务- TCC编程式模式

一、前言严格遵守ACID的分布式事务我们称为刚性事务,而遵循BASE理论(基本可用:在故障出现时保证核心功能可用,软状态:允许中间状态出现,最终一致性:不要求分布式事务打成中时间点数据都是一致性的,但是保证达到某个时间点后,数据就处于了一致性了)的事务我们称为柔性事务,其中TCC编程模式就属于柔性事务,本文我们来阐述其理论。二、TCC编程模式TCC编程模式本质上也是一种二阶段协议,...

2018-06-23 23:54:13 5377 1

原创 分布式事务- 三阶段协议

一、前言前面我们介绍了为解决分布式事务而提出来的的二阶段协议,本文首先来讲解二阶段的不足,然后阐述三阶段协议,三阶段协议也是一个标准的协议,也并没有说具体如何实现。二、二阶段协议存在的问题主要是同步阻塞问题,在二阶段的第一阶段所有参与者接受到事务协调器的事务准备请求后,会在本地开启并执行事务,但是没有提交事务。所有参与者等待第二阶段事务协调器发出事务提交或者回滚后才会提交或者回滚事...

2018-06-22 15:51:11 388

原创 分布式事务-二阶段协议

一、前言在单个数据库实例时候,我们可以在一个数据源的事务(本地事务)内做多步数据库操作,在事务内的多个操作要么全部执行生效,要么全部不生效。在多数据实例节点时候,我们对多个实例的数据源进行操作时候就没办法把多个操作放到一个大的事务内来管理了,因为多个实例操作的是不同的数据源,而数据库自带的事务是针对单个数据源来说的。二、二阶段协议单个数据库实例内的事务我们称为本地事务,需要保证多个...

2018-06-21 19:46:39 370

原创 使用数据库悲观锁实现不可重入的分布式锁

一、前言在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。常见的有使用zk的最小版本,redis的set函数,数据库锁来实现,本节我们谈谈使用数据库悲观锁机制来实现一个分布式锁。二、使用数据库悲观锁实现不可重入的分布式锁...

2018-06-12 19:17:23 700

原创 使用Redis单实例实现分布式锁

一、前言在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。常见的有使用zk的最小版本,redis的set函数,数据库锁来实现,本节我们谈谈Redis单实例情况下使用set函数来实现分布式锁。二、使用Redis单实例实现分布...

2018-06-11 21:15:21 809 1

原创 使用zookeeper实现分布式锁

一、前言在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。常见的有使用zk的最小版本,redis的set函数,数据库锁来实现,本节我们谈谈使用zookeeper的序列节点机制来实现一个分布式锁。二、使用zookeeper实...

2018-06-11 21:14:48 4002 2

原创 使用包定长FixedLengthFrameDecoder解决半包粘包

四、使用包定长FixedLengthFrameDecoder解决半包粘包4.1 试验由于客户端发给服务器端的是hello server,im a client字符串,该字符串占用24字节,所以在服务器端channelpipeline里面添加一个长度为24的定长解码器和二进制转换为string的解码器: 然后修改NettyServerHandler的channelRead如下: ...

2018-06-09 15:35:22 2515

原创 架构设计课程推荐

一、左耳朵耗子,一个很资深的技术大佬开设的专栏 二、阿里p9开的架构学习课程,挺不错的 三、拍拍贷波波开的架构学习课程,也挺不错的

2018-06-08 18:31:43 895

原创 高性能网络通信框架Netty-Netty客户端底层与Java NIO对应关系

5.1 Netty客户端底层与Java NIO对应关系在讲解Netty客户端程序时候我们提到指定NioSocketChannel用于创建客户端NIO套接字通道的实例,下面我们来看NioSocketChannel是如何创建一个Java NIO里面的SocketChannel的。首先我们来看NioSocketChannel的构造函数: public NioSocketChanne...

2018-06-04 12:24:40 2492

原创 高性能网络通信框架Netty-基础概念篇

一、前言Netty是一种可以轻松快速的开发协议服务器和客户端网络应用程序的NIO框架,它大大简化了TCP或者UDP服务器的网络编程,但是你仍然可以访问和使用底层的API,Netty只是对其进行了高层的抽象。Netty的简易和快速开发并不意味着由它开发的程序将失去可维护性或者存在性能问题。Netty是被精心设计的,它的设计参考了许多协议的实现,比如FTP,SMTP,HTTP和各种二进制和基于...

2018-06-03 15:33:45 697

99 bottles of oop

面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。 面向对象面试的99个建议,大师推荐,面向对象编程必备的学习资料。

2023-01-21

ppt to word ppt转word ppt截图 mfc 源码

用mfc实现的ppt转换为word的源代码,程序给你三种转换选择,第一种:整张ppt,第二中:一个框框为单位,第三制转换字体,另外还可以打开ppt进行截图。

2013-03-16

音乐播放器

用mfc开发的音乐播放器,可以快进,后退,单曲循环,顺序,随机播放,后台有access做数据保存音乐列表,实现了桌面歌词功能。实现了换肤功能

2013-03-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除