自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 Kafka与RocketMQ的比较

Kafka与RocketMQ是目前比较常用的两种消息中间件。他们有着高吞吐、低延迟的特性,有强大的消息存储能力和堆积处理能力,可以保证消息的可靠性。下面我们从消费模式、消息存储等多方面,比较一下这两个消息队列。

2022-08-21 22:44:40 917 1

原创 多线程与并发-ThreadLocal

什么是ThreadLocal?ThreadLocal并不是一个线程,而是保存线程本地化对象的容器。当运行于多线程环境的某个对象使用ThreadLocal维护变量时,ThreadLocal提供了get与set等访问接口或方法,为每个使用该变量的线程分配一个独立的变量副本。我们来看下ThreadLocal的结构,如下图 一个线程对应一个ThreadLocalMap,可以存储多个Thr...

2020-02-14 20:07:05 598

原创 Mysql 查询优化之 Using filesort

最近在优化分页查询的时候,遇到了一个问题,如下(基于Mysql Innodb)我们先建一个user表,其中有自增主键、user_id也建立索引,create_date暂时不建索引,省略其他字段。CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigi...

2020-01-08 00:01:35 972

原创 Java虚拟机学习笔记之jvm内存模型

java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域各自有各自的用途,以及创建销毁的时间,有的区域随着虚拟机进程的启动存在,有些区域则依赖用户线程的启动和结束而建立和销毁。JVM最重要的特性,平台无关性。“书写一次,到处运行”。“Java是解释执行”:Java的源代码,首先通过Javac编译成为字节码,然后,在运行时,通过java虚拟机...

2019-09-17 23:41:44 185

原创 Netty学习笔记四—Netty架构

Netty逻辑架构图Reactor 通信调度层它由一系列辅助类组成,包括 Reactor 线程NioEventLoop 以及其父类、NioSocketChannel/NioServerSocketChannel 以及其父类、ByteBuffer 以及由其衍生出来的各种 Buffer、Unsafe 以及其衍生出的各种内部子类等。该层的主要职责就是监听网络的读写和连接操作,负责将网络层...

2019-08-31 14:27:14 169

原创 Nety学习笔记三—Netty线程模型

Reactor单线程模型Reactor单线程模型,是指所有的I/O操作都在同一个NIO线程上面完成。职责如下: 作为NIO服务端,接收客户端的TCP连接; 作为NIO客户端,像服务端发起TCP连接; 读取通信对端的请求或者应答消息; 向通信对端发送消息请求或者应答消息; 由于Reactor模式使用的是异步非阻塞I/O,所有丶I/O操作都不会导致...

2019-08-25 22:47:47 430

原创 Netty学习笔记二—服务端/客户端创建

服务端创建netty服务端创建时序图:关键步骤:一、创建ServerBootstrap实例。此为Netty启动辅助类二、设置并绑定Reactor线程池。 Netty的Reactor线程池是EventLoopGroup,它实际就是EventLoop的数组。EventLoop的职责是处理注册到本线程多路复用器Selector上的Channel,Selector的轮询操作由绑定的...

2019-08-18 14:24:25 333

原创 Netty学习笔记一—Netty基础

Netty 是一个基于NIO的客户、服务器端编程框架, 提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。粘包/拆包问题的解决TCP是一个流的协议,一个完成的包可能会被TCP拆分成多个包进行发送,也可能把多个小包封装成一个大的数据报发送(半包读写问题)。解决方案: 消息定长, 报文大小固定长度,不够空格补全,发送和接收方遵循...

2019-08-17 19:38:57 197

原创 I/O模型学习笔记

TCP客户同时处理两个输入:标准输入和TCP套接口。它不能单纯阻塞在这两个源中某个特定源的输入,而是应该阻塞在其中任何一个源的输入上。这正是select和poll这两个函数的目的之一。客户阻塞于标准输入调用期间,服务器进程被杀死。服务器TCP虽然正确地给客户TCP发送了一个FIN,但是客户进程正阻塞于从标准输入读入,它将看不到这个EOF,直到套接口读时为止。这样进程需要一种预先告知内核的能...

2019-07-09 22:41:16 184

原创 TCP学习笔记

TCP:传输控制协议。是一种面向连接的协议,提供可靠的双全工的字节流,TCP套接口是流套接口的一种,关心确认、超时和重传等具体细节。TCP提供客户和服务器连接,跨该连接与服务器交互数据。提供可靠的双全工的字节流,TCP必须跟踪每个方向数据流的状态信息,TCP提供可靠性,当TCP向另一端发送数据时,要求另一端返回确认。TCP不是100%可靠,它提供的是数据的可靠投递或故障的可靠通知。TC...

2019-06-30 23:10:09 166

原创 ReentrantLock 源码简单分析

JAVA中锁的实现最常见的方式有两种,一种是 synchronized关键字,一种是Lock。实际的开发过程中,要对这两种方式进行取舍。synchronized是基于JVM层面实现的, Lock却是基于JDK实现的。synchronized是一个关键字,使用简单,锁粒度粗。Lock相对复杂,需要释放,锁粒度自由。Lock功能相对强大,如下表。 tips ...

2019-03-08 22:08:02 255

原创 CAP理论和BASE及ACID的关系

上一篇文章说了,CAP理论,是指在一个互相连接且共享数据的分布式系统中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition tolerance)三者中的两个,三者不可兼得。ACID其实大家都注意到了,CAP理论和ACID里一样,都有一个一致性。好了,那么这两个一致性到底有什么关系呢?答案就是没有关系!为什么没有...

2019-02-26 23:25:15 861

原创 CAP理论,浅谈我的理解

想必大多数的IT从业者,都听过CAP理论,但是听过和理解并熟练应用又是两码事,笔者也看了几篇文章,就想在这片里浅谈一下我的理解。CAP理论,是指在一个互相连接且共享数据的分布式系统中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition tolerance)三者中的两个,三者不可兼得。这里有个坑,就是什么样的分布式系...

2019-02-09 17:32:41 1847

原创 redis和Memcached的区别,都什么时候使用?

缓存在互联网公司占得比例还是蛮大的,提到缓存呢,就一定会想到redis和memcache,现在绝大多数的公司呢,都是推荐使用redis,这是为什么呢,而使用memcache也不在少数,所以redis和memcache之间到底有什么区别,在什么场景下选择redis,什么场景下选择memcache呢?redis和memcache这两个作为目前市面上最火的两款缓存,存在即合理,虽然redis有了很多...

2018-08-19 17:39:56 19524

原创 浅谈缓存与Mysql的区别

缓存是互联网公司最常用的组件之一,面试中绝大多数的公司也都会问关于缓存的问题。缓存的作用想必不用说,大家随口就能说出来,存储过热数据,防止数据库访问量多大,加快数据访问速度。甚至有的业务可以拿缓存当数据库用,虽然很不建议这么用,但是既然能这么用,必然有这么用的好处。缓存和关系型数据库之间的区别其实蛮大的,笔者认为有以下几点吧。首先,在存储数据的数据结构上就有很大的差别,传统的关系型数据库,...

2018-08-18 19:19:21 1789

原创 I/O模型简介

根据网络编程对I/O模型的分类,可以有一下五种I/O模型。 阻塞I/O模型 ​非阻塞I/O模型 I/O复用模型 信号驱动I/O模型 异步I/O模型 阻塞I/O模型:最常用的I/O模型,所有操作都是阻塞的,在数据包到达且被复制到应用进程的缓冲区或发生错误时才返回,在此期间一直等待,从调用到接收数据的整段过程都是阻塞的。非阻塞I/O模型:如果没...

2018-08-05 15:29:32 239

转载 并发编程-volatile

Java内存模型:Java内存模型规定了所有的变量都存储在主内存中。每条线程中还有自己的工作内存,线程的工作内存中保存了被该线程所使用到的变量(这些变量是从主内存中拷贝而来)。线程对变量的所有操作(读取,赋值)都必须在工作内存中进行。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。此种内存模型,多线程会产生脏读等问题。(例子略)并发编程三大概念在解决这个问...

2018-07-15 18:21:26 150

原创 Mysql迁表方案

阶段一:迁表阶段(双写读旧)步骤一:将所有写操作加上日志,打印出 所需迁表a的主键id,供之后补偿使用。开发补偿功能,根据ID,将old 数据与new数据同步。注:在业务低峰期对表进行操作,减少风险及补偿的开销。步骤二:将 old表 数据同步到 new表 中。注:建议dba进行同步,dba同步只能对空表进行同步,但速度快,数据量大,RD同步数据困难切慢,BI同步数据为前一天的数据,不可用。步骤三:...

2018-04-27 00:26:45 1403

原创 浅谈ActiveMq(下)

说起公共组件,免不了拿其他的组件做对比,我也没用过这么多组件,就从网上找一些。RabbitMQ 重量级,实现经纪人框架(Broker);消息在发送给客户端时先在中心队列排队;对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。ZeroMQ可实现RabbitMQ不擅长的高级/复杂的队列ActiveMQ类似ZeroMQ,以代理人和点对点技术实现队列;也类似Rab...

2018-04-21 17:01:09 188

原创 陌上人如玉,君子世无双——卡卡

我最喜爱的球星,卡卡12月17日宣布退役,距离那天已有1个月,退役声明来的很突然,突然到已经让我快忘了,他是我最喜爱的球星,因为他远离偶走,世界足坛的中心已经很久,偶尔会从一些花边新闻上看到他的名字,这是我刚开始看球想都想不到的。陌上人如玉,君子世无双。这是世人对卡卡的评价,人们都说,他是梅西C罗之前最后一个获得金球奖和世界足球先生的地球人,但在我看来,在他的金秋赛季,他就是外星人,他用他无双的脚

2018-01-15 00:22:31 524

原创 浅谈ActiveMq(上)

1.ActiveMq是什么?    首先解释MQ,mq:message queue 顾名思义就是消息队列。MQ是一种跨进程的通信机制,用于在上下游之间传递消息。MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。    MQ有什么用呢,首先先了解一个知识点(敲黑板),java线程节点间的通信依靠的是两种方式。一是共享内存

2018-01-14 23:28:16 280

空空如也

空空如也

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

TA关注的人

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