Concurrent Overview
并发包概述
提前话:
进行myCat摸索时到处可见的并发包的原子性数据操作,与其摸瞎子过河,不如先把瞎子摸一遍!!!🤔 于是便有了下面这片的技术博客(关于concurrent概述)🤨
Overview of the java.util.concurrent(概述)原文网址
Main Components(主要构成)The java.util.concurrent contains way too many features to discuss in a single write-up. In this article, we will mainly focus on some of the most useful utilities from this package like:(在这片文章中如果一次撰写或讨论concurrent的功能、方式会太多,所以我们将大部分的精力集中于最常使用的实用程序)
Executor(执行者)
ExecutorService(执行器服务)
ScheduledExecutorService(执行器服务时间表)
Future()
CountDow ...
Volatile Keyword
概念解析👩💻 👨💻
被volatile修饰的变量能够保证每个线程能够获取该变量的最新值,从而避免出现数据脏读的现象。
volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的
因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。
内存模型的相关概念高速缓存
计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。
由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。
因此在CPU里面就有了高速缓存。也就是,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中。
那么CPU进行计算时就可以直接从它的高速缓 ...
BinaryTree Overview
why we Need it? 🤑
我们前面学习了那么多的数据结构 增删改查都有优化了 还需要再学习一个奇怪的树结构的数据处理方式呢?
🆗 follow me!
我们先进行一个比较
数组 (数组存储方式的分析)
优点:
通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。
缺点 :
如果要检索具体某个值,或者插入值( 按一定顺序 ) 会整体移动,效率较低 [示意图]
链表 (链式存储方式的分析)
优点:
在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,
删除效率也很好)。
缺点 :
缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历) 【示意图】
SO 这时候我们就开始YY了 当我们进行业务数据的处理里时,就可能会考虑到,我到底用那个方式好呢? 当然撒刁才做选择 !!!!我tm都要(大家底下评论666🤙 ),这时 树结构就腾空出“事”了!!
树存储方式的分析
能提高数据存储,读取的效率, 比如利用 二叉排序树(Binary So ...
JVM Overview
1.JVM is What?👇
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。
Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的 ...
Netty Overview
****
简介
Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架(java的NIO后浪🤙🤙),用于快速开发可维护的高性能协议服务器和客户端。
JDK 原生 NIO 程序的问题
JDK 原生也有一套网络应用程序 API,但是存在一系列问题,主要如下:
NIO 的类库和 API 繁杂,使用麻烦:你需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。
需要具备其他的额外技能做铺垫:例如熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的 NIO 程序。
可靠性能力补齐,开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等。
NIO 编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大。
JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。官方声称在 JDK 1.6 ...
Zookeeper Overview
1.What is ZooKeeper?💫
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.
All of these kinds of services are used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable.
Because of the difficulty of implementing these kinds of services, applications initially usually skim ...
NIO Overview
NIO
数据定义缓冲区容器
NIO中有几个核心对象需要掌握:缓冲区(Buffer)、通道(Channel)、选择器(Selector)。
官方API介绍
NIO api的核心抽象:
Buffers,容器数据;
Charsets及其相关解码器和编码器,字节和Unicode字符之间的转换;
Channels各种类型的,这表示连接实体能够执行I / O操作;和
选择器和选择键,连同可选择的渠道定义一个multiplexed、non-blocking、I/O设施。
java.nio包定义缓冲区类,用于在整个NIO api。
java.nio.charset 包定义字符集API 。
通道选择器API中定义java.nio.channels包。这些子包都有自己的服务提供者(SPI)分装,可用于扩展的内容或构建替代实现平台的默认实现。
Buffers
描述
Buffer
Position, limit, and capacity; clear, flip, rewind, and mark/reset
ByteBuffer
Get/put, compact, views ...
Mycat Overview
mycat起源👹(官方)
Mycat 背后是阿里曾经开源的知名产品——Cobar。Cobar 的核心功能和优势是 MySQL 数据库分片,此产品曾经广为流传,据说最早的发起者对 Mysql 很精通,后来从阿里跳槽了,阿里随后开源的 Cobar,并维持到 2013 年年初,然后,就没有然后了。
Cobar 的思路和实现路径的确不错。基于 Java 开发的,实现了 MySQL 公开的二进制传输协议,巧妙地将自己伪装成一个 MySQL Server,目前市面上绝大多数 MySQL 客户端工具和应用都能兼容。比自己实现一个新的数据库协议要明智的多,因为生态环境在哪里摆着。
Cobar 使用起来也非常方便。由于是基于 Java 语言开发的,下载下来解压,安装 JDK,然后配置几个不是很复杂的配置文件,猛击鼠标,就能启动 Cobar。
讲完起源,让我们开始将其层层打开。
mycat简述🌊
那么 Mycat 在整个行业领域归属何处呢?
数据库中间件
Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有存
储引擎,所以并不是完全意义的分布式 ...
Redis命令行
redis 命令行1、 Keys相关的命令操作:
(1) 查看key是否存在:
EXISTS key Code - ![](https://gitee.com/yichangkong/FigureBed/raw/master/img/20200429164311.png)(2) 查找满足pattern的keys:- ```properties KEYS key* -
(3) 查看key的超时时间:
PTTL key 以毫秒为单位返回 key 的剩余的过期时间。 Code - ![](https://gitee.com/yichangkong/FigureBed/raw/master/img/20200429164701.png)(4) 遍历key:- ```properties KEYS * -
(5) 返回key的值的序列化:
DUMP KEY_NAME Code - ![](https://gitee.com/yichangkong/FigureBed/raw/master/img/20200429164932.png)2、 字符串命令操作:(1) 设 ...
SpringBoot Overview
官方文档解析
1.介绍Spring Boot
Spring Boot可以轻松创建可以运行的独立的,生产级的基于Spring的应用程序。我们对Spring平台和第三方库采取自己的看法,以便您尽可能轻松地使用本教程。大多数Spring Boot应用程序只需要很少的Spring配置。
您可以使用Spring Boot来创建可以使用java -jar或更传统的war部署来启动的Java应用程序 。我们还提供了一个运行“spring script”的命令行工具。
我们的主要目标是:
为所有Spring开发提供一个更快,更广泛的入门体验。
立即开始开发。
提供大型项目(如嵌入式服务器,安全性,指标,运行状况检查和外部配置)通用的一系列非功能性功能。
绝对不会生成代码,并且不需要XML配置。
springbooot
1.启动流程