自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

starsray的博客

博客原文地址请访问博客园:https://www.cnblogs.com/starsray

  • 博客(112)
  • 收藏
  • 关注

原创 常见IO模型

任何技术的发展都是经过不断的演变迭代的,同样IO模型的演变代表着人们在计算机世界对效率的追求,对不同场景的解决方案,从某种方面来说IO模型的演变也一定程度见证着互联网的发展,随着学习的不断深入,也需要对底层实现原理不断加强。接下来主要针对计算机网络、网络分层模型、网络协议以及重点的IO模型进行探讨,理解从网络通信到IO的发展演变。计算网络计算机网络也称计算机通信网。其定义是:一些相互连接的...

2024-02-22 16:37:00 280

原创 ElasticSearch使用(从入门到放弃)

概述什么是ElasticSearch? 也可简称为ES,顾名思义,可伸缩搜索,主要用来做检索的,再看看官网解释。Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。提取关键词,分布式、REST API、搜...

2023-10-31 15:18:00 319

原创 Kubernetes轻量级日志工具Loki安装及踩坑记录

Loki简介Loki是Grafana出品的一个轻量级日志系统,熟悉ELK的都知道ELK使用起来的成本,而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。Promtail用来将容器日志发送到 Loki 或者 Grafana 服务上的日志收集工具,该工具主要包括发现采集目标以及给日志流添加上 Label 标签 然后发送给 Loki,Promtail 的服务发现...

2023-07-13 15:13:00 3025

原创 Spring事务详解

事务是基于数据库本身功能实现控制的,因此Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。相比于传统事务处理的模板式重复的编码过程,Spring提供了灵活的声明式事务使用形式,可以通过极少的代码或者注解形式,通过AOP代理来实现具体的事务操作。Java编程式事务Java 中数据源的加载...

2023-06-29 10:51:00 676

原创 LinkedHashMap源码及LRU实现原理

基本认识LinkedHashMap位于java.util包,于JDK1.4引入,属于Java Collections Framework的成员。查看其UML关系如下图所示:HashMap在很多场景下都满足K-V的存取,而且在非多线程的场景下也能保持不错的性能,但是HashMap有一个缺点就是不能保证元素的顺序,相比之下,LinkedHashMap就满足了这点,可以保证元素的插入顺序。Lin...

2022-08-30 15:52:00 1102

原创 HashMap详解(JDK7、JDK8实现区别)

前言HashMap是是Java Collections Framework的成员,位于java.util包,在JDK1.2引入。其数据存储形式是基于K-V键值对形式进行存储,HashMap中的key不能重复,允许且只能存在一个null值。如果多次put同一个key会进行值覆盖,对于value则没有限制。public class TestHashMap { public static ...

2022-08-27 22:50:00 1256

原创 MySQL事务详解(事务隔离级别、实现、MVCC、幻读)

基本认识事务(Transaction)在数据库中一般是指包含了一组原子性操作的步骤组合,这些操作要么都成功,要么都失败,事务一般包含了ACID四大特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这也是数据库区别于一般文件系统的重要特性之一。分类事务按照类别可以划分为以下几种类型:扁平事务(Flat T...............

2022-08-01 14:39:00 856 1

原创 ReentrantLock(公平锁、非公平锁)可重入锁原理

基本使用ReentrantLock,位于java.util.concurrent包,于JDK1.5引入,一种可重入互斥Lock ,其基本行为和语义与使用synchronized方法和语句访问的隐式监视器锁相同,但具有扩展功能。ReentrantLock的使用也很简单,在源码注释中可以看到使用的推荐方式:public void m() { lock.lock(); // block...

2022-07-20 22:56:00 386

原创 代理设计模式及Java常见代理实现(JDK Proxy、Cglib、ASM、javassist)

基本概念字节码动态代理运用了代理模式、字节码操作、反射等技术,在介绍常见字节码操作类库前,先了解一下一些基本概念。名词解释字节码文件:Java源代码经过编译后生成的二进制流文件,通常一个接口或者一个类对应一个class文件,但是由于动态字节码技术的存在一个字节码并不一定对应一个真实的磁盘文件。字节码中的二进制可以被转换为16进制,Java虚拟机在加载读取class文件时以字节为单位,这也...

2022-07-07 23:20:00 586

原创 Kubernetes基础入门(完整版)

简介Kubernetes这个名字源于希腊语,意为"舵手"或"飞行员”。k8s这个缩写是因为k和s之间有八个字符。Google在 2014年开源了Kubernetes项目,Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的容器编排工具还有docker swarm/mesos等,但kubernetes应用最为广泛,社区更为活跃。kubernetes主要包含了...

2022-07-01 14:29:00 9168

原创 CAS与自旋锁、ABA问题

基本概念CAS(Compare And Swap)是一种比较交换算法,很多人会把CAS和自旋锁混为一谈,两者还是有差别,前者是一种原子算法,目的是在不使用操作系统互斥信号量的重量级锁的前提下提供一种原子操作,后者基于CAS算法实现。操作系统底层对CAS的都提供了不同的指令级实现:x86 cmpxchgarm LL/SC查看openJDK的源码实现的代码片段。完整代码地址:源码地址......

2022-07-01 11:29:00 708

原创 Java内存模型

在计算机的发展历史中,有这样两大定律Amdahl定律和摩尔定律,这两个定律的更替代表了近年来硬件发展从追求CPU频率到追求多核心并行处理的发展过程。Amdahl定律通过系统并行化与串行化的比重来描述多CPU系统能获得的运算加速能力。摩尔定律用于描述CPU晶体管数量与运行效率之间的关系。多任务处理的场景已经是现代计算机必不可少的能力了,这包括多核并行和单核并发。而上层应用程序开发大部分时............

2022-06-21 10:17:00 255 1

原创 Kubernetes基本入门-元数据资源(四)

元数据型资源HPAHPA全称HorizontalPodAutoscaler,Pod水平自动扩缩,可以根据CPU利用率自动扩缩RC、Deployment、RS或StatefulSet中的Pod数量,目的是自动扩缩工作负载以满足需求。水平扩缩意味着对增加的负载的响应是部署更多的Pod。 与"垂直(Vertical)"扩缩不同,对于Kubernetes,垂直扩缩意味着将更多资源(例如:内存或 C...

2022-05-06 10:52:00 437

原创 k9s-终端UI工具

K9s 是一个基于终端的 UI,用于与 Kubernetes 集群进行交互。 该项目的目的是让您在野外更轻松地导航、观察和管理已部署的应用程序。 K9s 持续监视 Kubernetes 的变化并提供后续命令来与您观察到的资源进行交互。官方网址:https://k9scli.iok9s 会以特定时间间隔监控 Kubernetes 资源,默认为 2 秒,并允许查看自己集群中的内容。它可以一目了然...

2022-05-06 10:44:00 578

原创 k3s-轻量级Kubernetes

作为轻量级Kubernetes,k3s是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。如果想学习k8s相关内容,又受限于资源限制,可以使用k3s来体验。希望安装的Kubernetes在内存占用方面只是一半的大小。Kubernetes是一个10个字母的单词,简写为 K8s。所以,有Kubernetes一半大的东西就是一个5个字母的单词,简写为K3s。K3s没有全称,...

2022-05-06 10:43:00 1474

原创 Kubernetes集群安装

Kubernetes的安装过程还是比较繁琐的,网上也提供了不少的教程,总结下来安装方式大概可以分为三类。二进制安装(上手难度高,不推荐)kubeadm安装(官方推荐,基于命令行形式,安装过程相对简化)基于第三方工具(以容器安装容器,安装简单,但是也屏蔽了安装过程,快速体验可以采用这种方式安装)这里使用腾讯云服务器来安装,准备了以下四台节点。其中三台服务器作为k8s集群节点,一台服务器...

2022-05-06 10:43:00 885

原创 Kubernetes基本入门-名称空间资源(三)

名称空间级资源名称空间在kubernetes中主要的作用是做资源隔离,因此名称空间级别的资源只在当前名称空间下有效。工作负载型资源工作负载(workload)是在Kubernetes上运行的应用程序,无论负载是单一组件还是由多个一同工作的组件构成,工作负载都可以在一组Pods中运行。PodPod是Kubernetes中可以创建和管理的最小可部署计算单元。Pod中包含了一组(一个或多个)...

2022-05-06 10:39:00 858

原创 Kubernetes基本入门-集群资源(二)

资源在kubernetes中包含很多中类型的资源,所有内容都可以抽象为资源,资源实例化之后称为对象。资源按照不同的类型可以划分为集群类、名称空间类、元数据类资源。集群级资源集群级别的资源是所有名称空间之间可以共享的资源。NamespaceKubernetes中,名称空间(Namespace)提供一种机制,将同一集群中的资源划分为相互隔离的组。 同一名称空间内的资源名称要唯一。名称空间作...

2022-05-06 10:36:00 727

原创 Kubernetes基本入门-概念介绍(一)

简介Kubernetes这个名字源于希腊语,意为"舵手"或"飞行员”。k8s这个缩写是因为k和s之间有八个字符。Google在 2014年开源了Kubernetes项目,Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的容器编排工具还有docker swarm/mesos等,但kubernetes应用最为广泛,社区更为活跃。kubernetes主要包含了...

2022-05-06 10:34:00 605

原创 Java中Thread详解(一篇就够了)

前言操作系统中,一个进程往往代表着一个应用程序实例,而线程是进程中轻量级的调度单元,也可以看作是轻量级的进程,可以共享进程资源。下面简单介绍在操作系统中线程通用实现方式。接下来内容主要对线程模型进行简单介绍,然后对Java线程实现Thread类进行了解。线程模型暂且抛开Java线程,先说明一下在操作系统中,线程通用的几种实现方式。实现线程主要有三种方式。内核线程模型使用内核线程实现的方......

2022-05-04 21:11:00 32843 5

原创 Java线程池ThreadPoolExecutor详解(一篇就够了)

前言创建一个新的线程可以通过继承Thread类或者实现Runnable接口来实现,这两种方式创建的线程在运行结束后会被虚拟机销毁,进行垃圾回收,如果线程数量过多,频繁的创建和销毁线程会浪费资源,降低效率。而线程池的引入就很好解决了上述问题,线程池可以更好的创建、维护、管理线程的生命周期,做到复用,提高资源的使用效率,也避免了开发人员滥用new关键字创建线程的不规范行为。说明:阿里开发手册中......

2022-05-03 23:56:00 19695

原创 Java中ThreadLocal详解(一篇就够了)

前言ThreadLocal直译为线程局部变量,或许将它命名为ThreadLocalVariable更为合适。其主要作用就是实现线程本地存储功能,通过线程本地资源隔离,解决多线程并发场景下线程安全问题。ThreadLocal接下来,通过ThreadLocal的使用案例、应用场景、源码分析来进行深层次的剖析,说明如何避免使用中出现问题以及解决方案。使用案例前面提到关于ThreadLocal.........

2022-05-03 23:52:00 16562 3

原创 IvNWJVPMLt

IvNWJVPMLt

2022-04-13 15:51:00 235

原创 Docker基本使用,从入门的熟练

Docker 是一个开源的应用容器引擎,基于 Go 语言 开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise...

2022-03-28 15:14:00 560

原创 Java中String类原理详解

初识StringString位于java.lang包中,从JDK1.0时期引入,不需要导包就可以直接使用。一个Java应用程序中使用最多的可能就是String对象了。由于其使用的广泛性,几乎在每一代的JDK优化升级中都存在对String的优化。JDK7中字符串常量池从方法区迁移到堆内存中,对字符串常量池容量进行扩容。JDK8前String底层存储为char[ ],在JDK9中开始使用by...

2022-03-25 01:05:00 1917

原创 Redis持久化方式RDB和AOF详解

Redis作为基于内存的NoSQL数据库,在保障高性能、高并发的同时也支持数据持久化,将内存中的数据写入磁盘中,防止突发场景(如断电)导致的数据丢失。Redis提供了RDB和AOF两种持久化方案。RDBRDB全称Redis DataBase,在指定时间间隔内将内存中的数据集快照进行持久化。是Redis默认启用的持久化方案,持久化过程会生成一个压缩过的二进制文件,默认名称为dump.rdb,当...

2022-03-25 01:02:00 1162

原创 【概念简析】浅谈Java SPI机制的理解及应用

Java SPI(Service Provider Interface),是JDK提供的一套用来被第三方实现或者扩展的接口,通过java.util.ServiceLoader类加载META-INF/services/中的配置进行服务发现,可以用来启用框架扩展和替换组件。主要好处在于解耦,可拔插,面向接口编程,本质是基于接口的编程+策略模式+约定配置文件组合实现的动态加载机制。​这种思想被广泛...

2022-02-10 20:54:00 242

原创 Java发展历程时间线

前言世界上并没有完美的程序,因为写程序本来就是一个不断追求完美的过程。同样没有一门语言在一诞生就是完美的,不变的唯有变化。Java诞生至今已经不仅仅是一门语言,背后所涵盖的是一个庞大的技术体系。网上每隔一段时间就能见到几条“未来X语言将会取代Java”的新闻,此处“X”可以用Kotlin、Golang、Dart、JavaScript、Python等各种编程语言来代入。这大概就是长期占据编...

2022-02-08 19:25:00 1857

原创 Quarkus基本使用

简介Java并不是为了Web而诞生,但似乎B/S架构让Java生机无限,Spring全家桶的助推也使得Java在Web更为强大,微服务体系Spring Cloud更是顺风顺水,不得不说的Spring应用的痛点就是启动过慢,内存占用偏高,对服务器资源占用较大,而且JVM的本身就难逃离内存的过度依赖。​随着容器化技术Docker、Kubernetes,让云原生似乎成为了未来的发展方向,云原生(...

2022-01-17 14:16:00 7111

原创 【概念简析】浅谈Java关键字synchronized原理及使用

前言简介Java中提起synchronized很多人第一反应就是锁,这是不准确的,翻译一下中文意思为同步,锁是概念,抽象名词,同步是动作,操作结果。由于翻译不准确导致理解上的偏差,好比Robust翻译为中文意思是健壮的,这也是我们学习Java时讲到一个特性,但是有的地方音译为“鲁棒性”,假如有人这么问你你是不是一脸懵逼,同样的还有双亲委派机制,这里就不多说了。既然说到同步,那肯定就会想到异...

2021-11-28 19:51:00 303

原创 Spring Boot自定义starter配置提示

在使用Spring Boot官方提供的starter时候发现,每一个配置项都有提示信息,使用起来很方便,但是自定义的starter却没有提示,其实这里可以引入一个依赖来处理提示问题。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp...

2021-11-21 16:19:00 813

原创 spring boot自动装配原理

简介对于Spring Boot的描述就不再赘述,可以参考前面的文章:什么是Spring Boot?SpringBoot 和 SpringCloud的区别spring-boot-starter-parent和spring-boot-dependencies全部文章标签Spring Boot创建springboot应用如何创建一个spring boot应用?这就很简单了,可以...

2021-11-21 02:34:00 250

原创 如何自定义spring boot starter?

Spring Boot已经内置了127个场景启动器,基本上满足大部分的使用场景,但是有时候也会存在需要自定义starter的场景,如何自定义一个starter呢?其实也很简单,这里简单介绍如何自定义的关键步骤。创建starter工程首先创建一个自定义starter工程,除了spring官方的starter之外,第三方的starter一般命名规则遵循*-spring-boot-starter的...

2021-11-20 14:37:00 202

原创 Lombok @Builder注解原理

常用Lombok的都知道里面有一个@Builder注解很好用,但是这个注解的原理是什么呢,这里简单模拟一下。这里使用了设计模式中的建造者模式。package com.example.demoboot;import java.io.Serializable;/** * 数据源实例 * * @author starsray * @date 2021/11/20 */publi...

2021-11-20 13:25:00 471

原创 基于mybatis plus实现数据源动态添加、删除、切换,自定义数据源

简介基于springboot,mybatis plus集成了一套多数据源的解决方案,在使用时引入相应的插件dynamic-datasource-spring-boot-starter,可以实现数据源的动态添加、删除等功能,对于多租户或者分库等操作可以根据AOP切面代理到不同的数据源、实现单一系统数据隔离的目的。代码示例mavne依赖<!--mybatis-plus-->&l...

2021-11-19 23:08:00 7129

原创 deepin、UOS应用软件标题栏大额头问题解决

deepin系统一直让我觉得不舒服的就是软件大额头越看越难受,还好找到了解决方案。参考链接:https://github.com/linuxdeepin/developer-center/issues/1210创建目录白色主题mkdir -p ~/.local/share/deepin/themes/deepin/light黑色主题mkdir -p ~/.local/shar...

2021-11-06 13:18:00 1046 2

原创 Java线上问题诊断工具Arthas

常见线上问题常见的系统异常现象包括: CPU占用率过高、CPU上下文切换频率次数较高、磁盘 I/O 过于频繁、网络流量异常(连接数过多)、系统可用内存长期处于较低值(导致 oom killer)等等。Arthas简介Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。(摘自【官方文档】)当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 ja...

2021-08-05 13:38:00 219

原创 keepalived+nginx(Tomcat)实现双机热备

双机热备双机热备并不是真正意义上的集群模式,但是相比于单机模式优势是可以实现高可用,在主机出现故障的状态下,可以快速的切换到备机,备机替代主机的工作,保证服务可用。这里主要介绍基于KeepAlive实现的双机热备(本质是一种负载均衡的软实现)同时做好监控报警,在自动故障转移的同时能通知到相关的应用负责人检查相关应用,排查隐患。服务器准备虚拟机Vmware workstationC...

2021-07-15 19:57:00 545

原创 Windows10安装Docker使用Hyper-v还是WSL2

Docker基于容器化技术、可以很方便提供ElasticSearch、MySQL、Redis、RabbitMQ等容器,在Linux上安装Dockre就很简单,Windows要如何安装?参考官方安装文档:https://docs.docker.com/docker-for-windows/install/官方给出了两种方案,这里可能就会纠结了到底用哪种,WSL2还是Hyper-V,这两者有什么不同?可以参考下面一段话In the most basic of answers: If you’re ONL

2021-05-22 16:05:16 15950

原创 IDEA常用插件推荐

actiBPMidea的Activiti插件,不知道Activiti的可以百度下,用到了再来安装这个插件。Alibaba Java Coding GuidelinesAlibaba开发的Java Code Guidelines插件,可以极大程度的规范你的代码,提高代码质量。CMD Support一款辅助CMD脚本编辑工具,可以格式化CMD脚本,并且可以在idea中执行。jclasslib Bytecode viewerJava类字节码查看工具,可以分析Java的执行过程,大佬必备.

2021-05-18 15:46:05 220 2

空空如也

空空如也

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

TA关注的人

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