常见IO模型 任何技术的发展都是经过不断的演变迭代的,同样IO模型的演变代表着人们在计算机世界对效率的追求,对不同场景的解决方案,从某种方面来说IO模型的演变也一定程度见证着互联网的发展,随着学习的不断深入,也需要对底层实现原理不断加强。接下来主要针对计算机网络、网络分层模型、网络协议以及重点的IO模型进行探讨,理解从网络通信到IO的发展演变。计算网络计算机网络也称计算机通信网。其定义是:一些相互连接的...
ElasticSearch使用(从入门到放弃) 概述什么是ElasticSearch? 也可简称为ES,顾名思义,可伸缩搜索,主要用来做检索的,再看看官网解释。Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。提取关键词,分布式、REST API、搜...
Kubernetes轻量级日志工具Loki安装及踩坑记录 Loki简介Loki是Grafana出品的一个轻量级日志系统,熟悉ELK的都知道ELK使用起来的成本,而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。Promtail用来将容器日志发送到 Loki 或者 Grafana 服务上的日志收集工具,该工具主要包括发现采集目标以及给日志流添加上 Label 标签 然后发送给 Loki,Promtail 的服务发现...
Spring事务详解 事务是基于数据库本身功能实现控制的,因此Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。相比于传统事务处理的模板式重复的编码过程,Spring提供了灵活的声明式事务使用形式,可以通过极少的代码或者注解形式,通过AOP代理来实现具体的事务操作。Java编程式事务Java 中数据源的加载...
LinkedHashMap源码及LRU实现原理 基本认识LinkedHashMap位于java.util包,于JDK1.4引入,属于Java Collections Framework的成员。查看其UML关系如下图所示:HashMap在很多场景下都满足K-V的存取,而且在非多线程的场景下也能保持不错的性能,但是HashMap有一个缺点就是不能保证元素的顺序,相比之下,LinkedHashMap就满足了这点,可以保证元素的插入顺序。Lin...
HashMap详解(JDK7、JDK8实现区别) 前言HashMap是是Java Collections Framework的成员,位于java.util包,在JDK1.2引入。其数据存储形式是基于K-V键值对形式进行存储,HashMap中的key不能重复,允许且只能存在一个null值。如果多次put同一个key会进行值覆盖,对于value则没有限制。public class TestHashMap { public static ...
MySQL事务详解(事务隔离级别、实现、MVCC、幻读) 基本认识事务(Transaction)在数据库中一般是指包含了一组原子性操作的步骤组合,这些操作要么都成功,要么都失败,事务一般包含了ACID四大特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这也是数据库区别于一般文件系统的重要特性之一。分类事务按照类别可以划分为以下几种类型:扁平事务(Flat T...............
ReentrantLock(公平锁、非公平锁)可重入锁原理 基本使用ReentrantLock,位于java.util.concurrent包,于JDK1.5引入,一种可重入互斥Lock ,其基本行为和语义与使用synchronized方法和语句访问的隐式监视器锁相同,但具有扩展功能。ReentrantLock的使用也很简单,在源码注释中可以看到使用的推荐方式:public void m() { lock.lock(); // block...
代理设计模式及Java常见代理实现(JDK Proxy、Cglib、ASM、javassist) 基本概念字节码动态代理运用了代理模式、字节码操作、反射等技术,在介绍常见字节码操作类库前,先了解一下一些基本概念。名词解释字节码文件:Java源代码经过编译后生成的二进制流文件,通常一个接口或者一个类对应一个class文件,但是由于动态字节码技术的存在一个字节码并不一定对应一个真实的磁盘文件。字节码中的二进制可以被转换为16进制,Java虚拟机在加载读取class文件时以字节为单位,这也...
Kubernetes基础入门(完整版) 简介Kubernetes这个名字源于希腊语,意为"舵手"或"飞行员”。k8s这个缩写是因为k和s之间有八个字符。Google在 2014年开源了Kubernetes项目,Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的容器编排工具还有docker swarm/mesos等,但kubernetes应用最为广泛,社区更为活跃。kubernetes主要包含了...
CAS与自旋锁、ABA问题 基本概念CAS(Compare And Swap)是一种比较交换算法,很多人会把CAS和自旋锁混为一谈,两者还是有差别,前者是一种原子算法,目的是在不使用操作系统互斥信号量的重量级锁的前提下提供一种原子操作,后者基于CAS算法实现。操作系统底层对CAS的都提供了不同的指令级实现:x86 cmpxchgarm LL/SC查看openJDK的源码实现的代码片段。完整代码地址:源码地址......
Java内存模型 在计算机的发展历史中,有这样两大定律Amdahl定律和摩尔定律,这两个定律的更替代表了近年来硬件发展从追求CPU频率到追求多核心并行处理的发展过程。Amdahl定律通过系统并行化与串行化的比重来描述多CPU系统能获得的运算加速能力。摩尔定律用于描述CPU晶体管数量与运行效率之间的关系。多任务处理的场景已经是现代计算机必不可少的能力了,这包括多核并行和单核并发。而上层应用程序开发大部分时............
Kubernetes基本入门-元数据资源(四) 元数据型资源HPAHPA全称HorizontalPodAutoscaler,Pod水平自动扩缩,可以根据CPU利用率自动扩缩RC、Deployment、RS或StatefulSet中的Pod数量,目的是自动扩缩工作负载以满足需求。水平扩缩意味着对增加的负载的响应是部署更多的Pod。 与"垂直(Vertical)"扩缩不同,对于Kubernetes,垂直扩缩意味着将更多资源(例如:内存或 C...
k9s-终端UI工具 K9s 是一个基于终端的 UI,用于与 Kubernetes 集群进行交互。 该项目的目的是让您在野外更轻松地导航、观察和管理已部署的应用程序。 K9s 持续监视 Kubernetes 的变化并提供后续命令来与您观察到的资源进行交互。官方网址:https://k9scli.iok9s 会以特定时间间隔监控 Kubernetes 资源,默认为 2 秒,并允许查看自己集群中的内容。它可以一目了然...
k3s-轻量级Kubernetes 作为轻量级Kubernetes,k3s是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。如果想学习k8s相关内容,又受限于资源限制,可以使用k3s来体验。希望安装的Kubernetes在内存占用方面只是一半的大小。Kubernetes是一个10个字母的单词,简写为 K8s。所以,有Kubernetes一半大的东西就是一个5个字母的单词,简写为K3s。K3s没有全称,...
Kubernetes集群安装 Kubernetes的安装过程还是比较繁琐的,网上也提供了不少的教程,总结下来安装方式大概可以分为三类。二进制安装(上手难度高,不推荐)kubeadm安装(官方推荐,基于命令行形式,安装过程相对简化)基于第三方工具(以容器安装容器,安装简单,但是也屏蔽了安装过程,快速体验可以采用这种方式安装)这里使用腾讯云服务器来安装,准备了以下四台节点。其中三台服务器作为k8s集群节点,一台服务器...
Kubernetes基本入门-名称空间资源(三) 名称空间级资源名称空间在kubernetes中主要的作用是做资源隔离,因此名称空间级别的资源只在当前名称空间下有效。工作负载型资源工作负载(workload)是在Kubernetes上运行的应用程序,无论负载是单一组件还是由多个一同工作的组件构成,工作负载都可以在一组Pods中运行。PodPod是Kubernetes中可以创建和管理的最小可部署计算单元。Pod中包含了一组(一个或多个)...
Kubernetes基本入门-集群资源(二) 资源在kubernetes中包含很多中类型的资源,所有内容都可以抽象为资源,资源实例化之后称为对象。资源按照不同的类型可以划分为集群类、名称空间类、元数据类资源。集群级资源集群级别的资源是所有名称空间之间可以共享的资源。NamespaceKubernetes中,名称空间(Namespace)提供一种机制,将同一集群中的资源划分为相互隔离的组。 同一名称空间内的资源名称要唯一。名称空间作...
Kubernetes基本入门-概念介绍(一) 简介Kubernetes这个名字源于希腊语,意为"舵手"或"飞行员”。k8s这个缩写是因为k和s之间有八个字符。Google在 2014年开源了Kubernetes项目,Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的容器编排工具还有docker swarm/mesos等,但kubernetes应用最为广泛,社区更为活跃。kubernetes主要包含了...
Java中Thread详解(一篇就够了) 前言操作系统中,一个进程往往代表着一个应用程序实例,而线程是进程中轻量级的调度单元,也可以看作是轻量级的进程,可以共享进程资源。下面简单介绍在操作系统中线程通用实现方式。接下来内容主要对线程模型进行简单介绍,然后对Java线程实现Thread类进行了解。线程模型暂且抛开Java线程,先说明一下在操作系统中,线程通用的几种实现方式。实现线程主要有三种方式。内核线程模型使用内核线程实现的方......