- 博客(27)
- 收藏
- 关注
原创 计算机网络之概述篇
概述篇计算机网络在信息时代的作用计算机网络已由一种通讯基础设施发展成为一种重要的信息服务基础设施。计算机网络已经像水、电、煤气这些基础设施一样,成为我们生活中不可或缺的一部分。因特网概述网络、互连网(互联网)和因特网网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。在如下例子中,4个节点和3段链路就构成了一个简单的网络。多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互连网(互联网)。因此互联网是“网络的网络(Network o
2021-04-28 21:08:11
1657
原创 JVM性能监控与调优之概述命令行篇
背景说明生产环境中出现的问题生产环境发生了内存溢出该如何处理?生产环境应该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境 CPU 负载期飙高该如何处理?生产环境应该给应用分配多少线程合适?不加 log,如何确定请求是否执行了某一行代码?不加 log,如何实时查看某个方法的入参与返回值?为什么要调优防止出现 OOM解决 OOM减少 Full GC 出现的频率不同阶段的考虑上线前项目运行阶段线上出现 OOM调优概述监控的依据运行日志异常堆
2021-02-07 20:31:44
673
原创 深入学习RocketMQ之底层解析
RocketMQ生产者核心详解核心参数详解ProducerGroup:组名在一个应用里面是唯一的。CreateTopicKey:实际生产中不会使此参数进行生产者创建Topic。defaultTopicQueueNums:默认大小为4,一个topic下默认挂载的是四个队列。sendMsgTimeout:单位ms,消息发送的超时时间。compressMsgBodyOverHowmuch:默认压缩字节4096,自动压缩机制,当消息超过4096就会压缩。retryTimesWhenSendFaile
2021-01-28 09:57:08
704
原创 深入学习RocketMQ之快速入门
RocketMQ - 整体介绍简介RocketMQ是一款分布式、队列模型的消息中间件。支持集群模型、负载均衡、水平扩展能力。采用零拷贝的原理、顺序写盘、随机读。代码优秀,底层通信框架使用 Netty 。强调集群无单点,可扩展,任意一点高可用,水平可扩展。消息失败重试机制、消息可查询。RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件,具有以下特性:支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型。在一个队列中可靠的先进先出(FIFO)和严格的顺序传递。
2021-01-26 20:42:23
420
1
原创 深入学习Redis之缓存设计与优化
缓存的使用与设计缓存的收益与成本收益:加速读写:CPU L1/L2/L3 Cache、浏览器缓存等。因为缓存通常都是全内存的(例如 Redis、Memcache),而 存储层通常读写性能不够强悍(例如 MySQL),通过缓存的使用可以有效 地加速读写,优化用户体验。降低后端负载:帮助后端减少访问量和复杂计算,在很大程度降低了后端的负载。成本:数据不一致:缓存层和数据层有时间窗口不一致,和更新策略有关。代码维护成本:加入缓存后,需要同时处理缓存层和存储层的逻辑, 增大了开发者维护代码的成本
2021-01-02 11:02:35
253
原创 深入学习Redis之Redis Cluster
Redis Cluster在学习Redis Cluster之前,我们先了解为什么需要集群,当遇到单机内存、并发、流量等瓶颈时,单机已经无法满足我们的要求的时候,可以采用Cluster架构方案达到负载均衡的目的。数据分区概论分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。常见的分区规则有哈希分区和顺序分区两种。首先看一下对比分布方式特点典型产品哈希分区数据分散度高、键值分布无业务无关、无法顺序
2021-01-01 17:05:17
301
原创 深入学习Redis之持久化及Sentinel架构
Redis持久化什么是持久化Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘上。持久化的方式快照MySQL DumpRedis RDB日志MySQL binlogRedis AOFRDB什么是RDBRDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。在 Redis 运行时, RDB 程序将当前内存中的数据库快照保存到磁盘文件中, 在
2020-12-31 15:17:30
461
原创 深入学习Redis之基础使用及功能
Redis 客户端使用Java 客户端:JedisJedis 是 Redis 官方首选的 Java 客户端开发包。集成了 redis 的一些命令操作,封装了 redis 的 java 客户端。提供了连接池管理。Jedis Maven 依赖包<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9
2020-12-30 09:48:51
236
原创 深入学习Redis之特性及命令
什么是 RedisRedis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。Redis 支持数据的备份,即 master-slave 模式的数据备份。Redis 的特性特
2020-12-29 15:13:51
411
原创 MySQL 数据库集群-PXC 方案(四)
大数据归档-冷热数据分离虽然之前我们的数据是分散在不同的分片中,但是日积月累分片中的数据越来越多,数据迁移的成本就大大提高,所以能不能将数据进行分离。我们可以将很少使用到的数据,从分片中归档到归档数据库中。InnoDB 写入慢的原因因为 InnoDB 本身使用的是 BTree 索引,正因为如此,每次写入都需要用 IO 进行索引树的重排。特别是当数据量特别大的时候,效率并不够高。什么是 TokuDBTokuDB 是一个支持事务的“新”引擎,有着出色的数据压缩功能,由美国 TokuTek 公司
2020-11-28 14:37:31
531
原创 MySQL 数据库集群-PXC 方案(三)
MySQL 数据库集群-PXC 方案(三)什么是基准测试基准测试是针对系统的一种压力测试,但基准测试不关心业务逻辑,更加简单、直接、易于测试,不要求数据的真实性和逻辑关系。基准测试的指标Sysbench 简介Sysbench 是一个模块化的、跨平台、多线程基准测试工具,主要用于测试系统及数据库的性能。它主要包括以下几种方式的测试:CPU 性能(系统级别)磁盘 IO 性能(系统级别)调度程序性能(系统级别)内存分配及传输速度(系统级别)POSIX 线程性能(系统级别)数据库性能(O
2020-11-27 09:52:05
926
1
原创 MySQL 数据库集群-PXC 方案(二)
MySQL 数据库集群-PXC 方案(二)集群状态信息PXC 集群信息可以分为队列信息、复制信息、流控信息、事务信息、状态信息。这些信息可以通过 SQL 查询到。每种信息的详细意义可以在官网查看。show status like '%wsrep%';复制信息举例说明几个重要的信息:状态描述wsrep_replicated被其他节点复制的次数wsrep_replicated_bytes被其他节点复制的数据次数wsrep_received从其他节点处收到的写
2020-11-27 08:57:27
659
原创 MySQL 数据库集群-PXC 方案(一)
MySQL 数据库集群-PXC 方案(一)什么是 PXCPXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性;PXC 的特点完全兼容 MySQL。同步复制,事
2020-11-27 08:55:56
1759
原创 使用 ShardingSphere 实操MySQL分库分表实战
ShardingSphere 分库分表什么是 ShardingSphereApache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。一套开源的分布式数据库中间件解决方案。有三个产品:JDBC、Proxy、Sidecar。什
2020-11-27 08:54:42
4833
8
原创 Netty入门学习总结
Netty 概述原生 NIO 存在的问题NIO 的类库与 API 繁杂,需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、Bytebuffer 等。要求熟悉 Java 多线程编程和网络编程。开发工作量和难度大,例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等。什么是 NettyNetty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性
2020-11-27 08:53:10
403
原创 理解什么是BIO/NIO/AIO
I/O 模型I/O 模型基本说明I/O 模型简单理解为:就是使用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。Java 支持 3 种网络编程模型:BIO、NIO、AIO。Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不作任何事情会造成不必要的线程开销。Java NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求会被注册到多路复用器上
2020-11-27 08:52:13
865
原创 Socket - TCP快速入门
Socket - TCP 快速入门TCP 是什么英语:Transmission Control Protocol,缩写为 TCP。TCP 是传输控制协议;是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的 RFC 793 定义。与 UDP 一样,完成第四层传输层所指定的功能与职责。和 UDP 最大的区别是需要连接的,三次握手四次挥手,校验机制保证了数据传输的稳定性和可靠性。TCP 的机制三次握手、四次挥手。具有校验机制、可靠、稳定的数据传输。TCP 能
2020-11-27 08:51:12
168
1
原创 Socket - UDP快速入门
Socket - UDP快速入门UDP是什么英语:User Datagram Protocol,缩写为UDP。一种用户数据报协议,又称用户数据报文协议。是一个简单的面向数据报的传输层协议,正式规范为 RFC 768。用户数据协议、非连接协议。为什么UDP是不可靠的它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份。UDP在IP数据报的头部仅仅加入了复用和数据校验字段。发送端生产数据,接收端从网络中抓取数据。结构简单、无校验、速度快、容易丢包、可广播。UDP能做什么UD
2020-11-27 08:50:01
312
原创 Socket网络编程入门
什么是网络编程什么是网络?在计算机领域中,网络是信息传输、接受、共享的虚拟平台。通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。什么是网络编程?网络编程从大的方面就是说对信息的发送接收。通过操作相应API调度计算机资源硬件,并且利用管道(网线)进行数据交互的过程。更为具体的涉及:网络模型、套接字、数据包。7层网络模型-OSI互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层。实际上这个七层是不存在的。没有这七层的概
2020-11-26 21:53:49
532
1
原创 不得不了解的HTTP协议
了解 HTTP 协议浏览器背后的故事当我们在浏览器输入一个域名后,背后究竟发生了什么?第一步:当我们输入域名后,在 DNS 服务器进行域名查询。第二步:得到对应的 ip 地址。第三步:浏览器根据 ip 向 web 服务器进行通信发送请求,而通信的协议就是 HTTP。第四步:web 服务器回传页面内容。第五步:浏览器收到回传信息的报文数据,进行渲染出我们看得懂的页面。举个例子:如果我们想给张三打电话,我们需要在通讯录中先找到名字为张三的人,而张三这个名字就是域名,对应的手机号就是 ip。在通
2020-11-26 21:52:39
1362
原创 JVM字节码文件概述
字节码文件概述字节码文件的跨平台性Java语言:跨平台的语言当Java源代码成功编译字节码后,如果想在不同的平台上面运行,则无需再次编译这个优势目前来说已经不再吸引人,因为Python、PHP、Ruby、Lisp等有强大的解释器跨平台已经快成为一门语言的必选特性Java虚拟机:跨语言的平台Java虚拟机不和包括Java在内的任何语言绑定,它只与Class文件这种特定的二进制文件所关联,无论使用何种语言进行软件开发,只要能将源文件编译为正确的Class文件,那么这种语言就可以这Java虚拟机
2020-11-26 21:50:10
510
原创 Java深入学习并发原理总结
Java 并发多线程基础总结线程池线程池的简介线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。为什么要使用线程池如果不使用线程池,每一个任务都会新开一个线程处理。为了减少创建和销毁线程的次数,让每个线程可以多次使用,可根据系统情况调整执行的线程数量,防止消耗过多内存,所以我们可
2020-11-26 21:48:56
542
原创 Java并发多线程基础总结
Java深入学习并发原理总结线程核心一:实现多线程的正确姿势实现多线程到底有几种网上有说 2 种,3 种,4 种,6 种等等 ????♂️我们看 Oracle 官网 API 是怎么描述的。官方描述为两种:继承 Thread 类实现 Runnable 接口有两种方法可以创建新的执行线程。 一种是将一个类声明为 Thread 的子类。 该子类应重写 Thread 类的 run 方法。 然后可以分配并启动子类的实例。public class ThreadTest extend
2020-11-26 21:47:15
808
4
原创 Java程序员必知必会之JVM垃圾回收
JVM类加载概述JVM运行时数据区概述概述垃圾收集机制是 Java 的招牌能力,极大的提高了开发效率。如今,垃圾收集几乎成为了现代语言的标配,即使经过了如此长时间的发展,Java 的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景都对垃圾收集提出了新的挑战,也是面试的热门考点。什么是垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么这些垃圾所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其它对象所使用,
2020-11-26 21:45:05
611
原创 Java程序员必知必会之JVM运行时数据区
JVM类加载概述JVM垃圾回收概述运行时数据区概述程序计数器(Program Counter Register)是一块较小的内存空间,可以看作是当前线程所执行字节码的行号指示器,指向下一个将要执行的指令代码,由执行引擎来读取下一条指令。虚拟机栈 (Stack Area)栈是线程私有,栈帧是栈的元素。每个方法在执行时都会创建一个栈帧。栈帧中存储了局部变量表、操作数栈、动态连接和方法出口等信息。每个方法从调用到运行结束的过程,就对应着一个栈帧在栈中压栈到出栈的过程。本地方法栈 (Native
2020-11-26 21:43:52
445
原创 Java程序员必知必会之JVM类加载篇
JVM运行时数据区概述JVM垃圾回收概述JVM简介JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把
2020-11-26 21:40:40
274
1
原创 2020最新Java面试题总结
前言这篇文章是想记录自己看到的面试题,然后做个总结.不仅仅帮助到我,也希望可以帮助到大家.有疑问可以联系我.Java基础1.八种基本数据类型的大小,以及他们的封装类基本类型大小(字节)默认值封装类byte1(byte)0Byteshort2(short)2Shortint40Integerlong80LLongfloat40.0fFloatdouble80.0dDoubleboolean-false
2020-11-26 21:33:38
1364
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人