自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kubernetes-running app on kube

pod是一组由一个或多个紧密相关的容器,它们总是在相同的工作节点和相同的Linux名称空间中一起运行。每个pod就像一台独立的机器,有自己的IP、主机名、进程等等,运行单个应用程序。应用程序可以是在单个容器中运行的单个进程,也可以是一个主应用程序进程和其他支持进程,每个进程在自己的容器中运行。为了更好地理解容器、pod和节点之间的关系,请查看Figure2.5。如您所见,每个pod都有自己的IP,并包含一个或多个容器,每个容器运行一个应用程序进程。pod分布在不同的工作节点上。# 查看所有pods。

2024-03-29 21:44:39 1249

原创 Kubernetes-introducing

多年前,大多数软件应用程序都是大型的单体,要么作为单个进程运行,要么作为少数服务器上的少量进程运行。这种过时的系统一直延续很久。它们的发布周期较慢,更新相对较少。在每个发布周期结束时,开发人员将整个系统打包并交给运维团队,然后运维团队对其进行部署和监控。如果发生硬件故障,运维团队将手动将其迁移到剩余的健康服务器。但是,随着可部署组件数量的增加和数据中心规模的扩大,配置、管理和保持整个系统平稳运行变得越来越困难。要弄清楚把这些组件放在哪里以实现高资源利用率,从而降低硬件成本要困难得多。

2024-03-28 21:21:49 1158 1

原创 AI Learning Path

图解机器学习斯坦福大学中文笔记。

2023-06-25 13:43:04 695

原创 Docker那点事

docker原理、实战

2023-03-06 22:02:04 316

原创 ReentrantLock原理

ReentrantLock,顾名思义,可重入锁首先看下源码实现了Lock类,先基本看下Lock类lock:获取锁,锁被其他线程占用,那么会等待,直到获取锁lockInterruptibly:获取锁,但是假如当前线程在等待锁的时候被中断,抛出中断异常tryLock:尝试获取锁,并立即返回tryLock:在一定时间范围类尝试获取锁unLock:释放锁newCondition:新建一个绑定在当前Lock上的Condition对象,condition表示一个等待状态,获得锁的线程

2021-03-02 16:51:59 536

原创 Java AQS的机制

如果是你,你怎么设计AQS框架?1、既然要做一个框架,首先要保证框架的通用性,可复用性,下游实现透明的同步机制,并且与上游解耦。2、利用CAS进行原子修改共享资源,在多个线程想要修改共享资源的时候,先读我们定好的标记位,如果标记位显示共享资源空闲,就给予该线程操作权限,并阻碍其他线程的调用。3、那么阻碍其他线程调用怎么设计?那么就运用等待队列,这样能保证CPU利用率达到最好其实这就是AQS的基本框架原理。下面来看源码AQS的成员属性state:用于判断共享资源是否被占用的标记位v

2021-03-01 21:57:18 370

原创 用两个线程,一个输出字母,一个输出数字,交替输出

public class JoinThread extends Thread { static Thread threadA = null,threadB = null; public static void main(String[] args) throws InterruptedException { char[] a = "1234567".toCharArray(); char[] b = "ABCDEFG"...

2021-03-01 17:55:56 259

原创 线程中的join、wait、sleep的区别

一、join方法先来看看join的三个重载方法:final synchronized void join(long millis, int nanos) throws InterruptedExceptionfinal synchronized void join(long millis) throws InterruptedExceptionfinal synchronized void join() throws InterruptedException这三个方法都可以抛出 I

2021-03-01 14:49:45 1226

原创 Java终止线程的方法

JDK 文档中还引入用一篇文章来解释了弃用以下这些方法的原因:《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?》方法一:Thread.stop()通过源码我们可以得出以下结论:stop方法会导致代码逻辑不完整,他收到停止命令后,会立即停止。 stop方法会破坏原子逻辑。 @Deprecated表示已经废弃并不建议使用为什么弃用stop:调用 stop() 方法会立刻停止 run() 方法中剩余的全部

2021-03-01 12:53:23 438 3

原创 详谈Java I/O 底层原理以及应用

前言一说到IO,大家都知道write、read,但是在不同操作系统中,IO读写的系统调用的名称可能完全不一样,但是基本功能是一样的。read系统调用,并不是直接从物理设备把数据读取到内存中。write系统调用,也不是直接把数据写入到物理设备。上层应用无论是调用操作系统的rad,还是调用操作系统的write,都会涉及缓冲区。具体来说,调用操作系统的read,是把数据从内核缓冲区复制到进程缓冲区;而write系统调用,是把数据从进程缓冲区复制到内核缓冲区。页缓存(page cache)是

2021-02-22 19:40:03 189

原创 Mysql索引类型及优点

在Mysql中,索引是在存储引擎层而不是服务器层面实现的。所以并没有统一的标准:不同的存储引擎的索引的工作方式并不一样,也不是所有的存储引擎支持所有类型的索引。B-Tree索引Mysql支持该索引,但是实际上很多存储引擎使用的是B+Tree,即每个叶子节点都包含指向一个下一个叶子节点的指针,从而方便叶子节点的范围遍历。InnoDB则使用的是B+Tree,B-Tree通常意味着所有的值都是按顺序存储,并且每一个叶子页到根的距离相同。B-Tree索引能够加快访问数据的速度,因为不需要全表扫描

2021-02-20 01:55:58 169

原创 代码优化和过度优化

工作几年你就会发现一年又一年,代码你会更嫌弃之前写的,这大概就是你感觉你自己优化自己,或者你觉得别人写的代码你会有强迫症的想要改的舒服点(代码洁癖)。那么代码优化是每个码农该有的素养,久而久之,每个人都会有自己的代码风格,关键代码是大家读的舒服,读的懂才是好代码,那今天简单说说代码优化。有人说,有很多人说,代码优化是一把双刃剑。有时候为了优化或者在错误的原因下优化你的代码,可能会造成错误的方向和结果。现实工作当中,我们是为了生产一个可用能用的软件,而不是漂亮的代码。而整理代码是件..

2021-02-19 19:28:31 350

原创 JMM Volatile原理简述

先来了解下所需要的基本知识储备:在计算机系统中,CPU高速缓存是用于减少处理器访问内存所需平均时间的部件。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果不存在(失效),则要先把内存中的相应数据载入缓存,再将其返回处理器。缓存之所以有效,主要是因为程序运行时对内存的访问呈现局部性(Locality)特征。这种局部性既包括空间局部

2021-02-18 17:32:47 268 3

原创 关于抢红包设计的几个思考

关于抢红包设计的几个思考工作中遇到一个关于直播间用户给直播间发红包,以及当前直播间观众领取该红包的项目需求对于发红包 >>>>>> 抢红包 这中间的有几点关键的点1、发送红包2、...

2021-02-03 21:09:00 708 1

原创 Dubbo SPI机制详解

什么是SPI?扩展点 Dubbo作用灵活的框架,并不会强制所有用户都一定使用Dubbo提供的某些架构。例如注册中心(Registry),Dubbo提供了zk和redis,但是如果我们更倾向于其他的注册中心的话,我们可以替换掉Dubbo提供的注册中心。针对这种可被替换的技术实现点我们称之为扩展点,类似的扩展点有很多,例如Protocol,Filter,Loadbalance等等。Wrapper Dubbo在加载某个接口的扩展类时候,如果某个实现中有一个拷贝类构造函数,那么该接口实现就是该接口的包装类,

2020-05-09 12:00:48 1910

原创 聊聊微服务中的那些事

前序之前做过SOA的架构模式,从表面看,刚开始觉得微服务和SOA没什么区别,好像都是拆分服务进行分布式部署,但是微服务没有像SOA那样有集成WEB的服务规范和比较重的ESB企业服务总线(Enterprise Service Bus)。而微服务是更轻量的协议,通过轻量级的设备与http型的API进行交互,而这些服务是暴露并提供给外部使用。那么微服务各个组件或者说服务本身可以在独立的进程里...

2020-05-02 23:34:20 260

原创 Kafka高可用、高吞吐背后的秘密(含问题)

简介首先熟悉kafka,先读官方文档,链接送上kafka中文官方kafka是一个分布式流处理平台流处理平台有以下三种特性:可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。 可以储存流式的记录,并且有较好的容错性。 可以在流式记录产生时就进行处理。Kafka适合什么样的场景?它可以用于两大类别的应用:构造实时流数据管道,它可以在系统或应用之间可靠地...

2020-05-02 15:04:03 711

原创 Thread中interrupt、interrupted、isInterrupted方法区别

简介什么是中断?1、比如现在下载一个几百兆的视频,这时候要去下载另一个文件,暂停这个视频,那就是中断该线程,但是这种状态是阻塞的2、那么想要改变阻塞的状态,通常在线程sleep、wait、join的情况下可以使用中断3、由于中断可以捕获,通过这种方式可以终结线程4、中断不是线程结束,只是发送一个 中断信号而已,线程退出还要手动加上自己的线程结束操作中断分为两种,一种可中断的...

2020-05-01 20:14:23 625

原创 微服务架构模式

微服务架构需要考虑的问题首先搞清楚,集群是个物理形态,分布式是个工作方式,分布式是指将不同的业务分布在不同的地方。分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成当然分布式肯定属于微服务。微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布...

2020-04-30 23:47:21 539

原创 GC算法以及G1、CMS

1、可达性分析哪些对象可以作为GCRoot:1、所有Java线程当前栈帧引用的,也就是正在被调用的方法的引用类型的参数、局部变量以及临时值。 2、所有的静态数据结构引用的对象 3、String常量池里的引用 4、运行时常量池里引用的类型2、G1垃圾回收器G1将新生代,老年代的物理空间划分取消了,不用单独的空间对每个代进行设置了,不用担心每个代内存是否足够。取而代之的是,G1...

2020-04-29 12:15:55 1390

原创 DirectByteBuffer堆外内存

DirectByteBuffer是Java用于实现堆外内存的一个重要类,我们可以通过该类实现堆外内存的创建、使用和销毁。而DirectByteBuffer中的unsafe.allocateMemory(size);是个一个native方法,这个方法分配的是堆外内存,通过C的malloc来进行分配的。分配的内存是系统本地的内存,并不在Java的内存中,也不属于JVM管控范围,所以在D...

2020-04-26 00:35:22 393

原创 零拷贝sendfile、内存映射mmap原理及应用框架

一、mmapmmap的优势在于通过把文件的某一块内容映射到用户空间上,用户可以直接向内核缓冲池读写这一块内容,这样一来就少了内核与用户空间的来回拷贝所以通常更快。但 mmap方式只适用于更新、读写一块固定大小的文件区域而不能做像诸如不断的写内容进入文件导到文件增长这类的事第一步:mmap系统调用使DMA引擎将文件内容复制到内核缓冲区中。然后与用户进程共享缓冲区,而无需在内核和用户内...

2020-04-25 21:45:42 1055 2

原创 I/O多路复用之select、poll、epoll分析

selectselect机制问题1、每次调用,都需要把fd_set集合从用户态拷贝到内核态,如果fd_set集合过大,开销也会很大2、同时每次调用select都需要在内核遍历传过来的fd_set,同事遍历时间复杂度为O(n)3、所以为了性能,内核对fd_set做了限制,大小不可变(32位机默认是1024个,64为2048)int select( int maxfdp1...

2020-04-25 21:25:13 187

原创 Zookeeper高可用原理及角色分析

1、Zookeeper的角色zk提供了什么,简单的说,zookeeper=文件系统+通知机制1、领导者(leader),负责进行投票的发起和决议,更新系统状态2、学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票3、Observer可以接受客户端连接,将写请求转发给lead...

2020-04-25 20:19:38 5244 1

原创 TreadLocal的内存泄露及使用注意

ThreadLocal提供了线程独有的局部变量,可以在整个线程存活的过程中随时取用,极大地方便了一些逻辑的实现。常见的ThreadLocal用法有:1、存储单个线程的上下文信息。比如线程id2、使变量线程安全。变量既然成为了每个线程内部的局部变量,自然就不会存在并发问题了;3、减少参数传递。比如做一个trace工具,能够输出工程从开始到结束的整个一次处理过程中所有的信息,从而方便deb...

2020-04-25 20:01:18 259

原创 FutureTask源码分析

这个是核心代码,首先我们需要知道FutureTask中有一个volatile state全局变量,通过这个值来界定任务是否已经执行完毕run方法先判断state状态,如果不是NEW说明执行完毕,直接return掉。 后面使用CAS操作,判断这个任务是否已经执行,这里FutureTask有个全局的volatile runner字段,这里通过cas将当前线程指定给runner。 下面主...

2020-04-25 15:04:05 227

原创 spring事务实际应用的问题

spring 对事务的控制,是使用 aop 切面实现的,如果只在方法上加@Transactional注解,这时候就会出现问题了PROPAGATION_REQUIRED (默认)支持当前事务,如果当前没有事务,则新建事务 如果当前存在事务,则加入当前事务,合并成一个事务REQUIRES_NEW新建事务,如果当前存在事务,则把当前事务挂起 这个方法会独立提交事务,不受调用者的事务...

2020-04-25 01:14:00 196

原创 索引最全分析

基本定义1、普通索引普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。查找时,遇到第一个不符合条件的才返回。更新时,找到位置直接更新。如果他是一个普通索引我们现在去查找,当查找到符合的数据的时候这个时候他就会在进行第二次查找,因为列里面的数据是唯一的所以第二次查找肯定是没有数据的,这一次查找通过二分法去查找B+树查找到二叉树的叶子结点,每个叶...

2020-04-21 00:02:49 386

转载 if else优化

想一下else是什么意思,其意为“如果满足A就执行这个,如果不满足A就执行那个”。如果A是二进制,就不存在问题——因为只存在两种情况。但是如果A是二进制变量的集合,或者包含着更大的变量,出现问题的机会就可能会出乎意料的大,且难以理解、测试和维护。避免if/else if,只使用if语句,花时间确保if组的输入条件是互斥的,这样答案就不依赖于执行顺序了。·使用swit...

2020-04-18 13:56:42 170

原创 BeanFactory、FactoryBean底层区别

Spring中BeanFactory与FactoryBean一、BeanFactoryBeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean()、containsBean()等管理Bean的通用方法。Spring的容器都是它的具体实现如: DefaultListableBeanFactory XmlBe...

2020-04-15 09:52:00 152

原创 RocketMQ底层原理及方案

1、高可用机制通过Master和Slave的配合达到高可用性在Broker中的配置文件中,brokerId为0的则是Master,大于0的是SlaveMaster角色的Broker支持读写,Slave的Broker仅支持读,也就是说Produer只能和Master的Broker连接写消息,Consumer随机Consumer的可用性:在Consumer的配置文件中,不需要设置配置,...

2020-04-13 22:51:18 929

原创 ASM、Javassist、JDK、CGLIB

ASM/Javassist/JDK/CGLIB简介ASM是一款基于java字节码层面的代码分析和修改工具。ASM的目标是生成,转换和分析已编译的java class文件,可使用ASM工具读/写/转换JVM指令集。ASM工具提供两种方式来产生和转换已编译的class文件,它们分别是基于事件和基于对象的表示模型。其中,基于事件的表示模型使用一个有序的事件序列表示一个class文件,...

2020-04-13 22:42:34 1737

原创 ons消息队列实战

ONS, 全名Open Notification Service, 是阿里基于开源消息中间件RocketMQ的一个云产品。步骤一:开通服务请按照以下步骤开通消息队列 RocketMQ 服务: 登录阿里云主页,将鼠标依次移动到产品>企业应用>消息队列 MQ,单击消息队列 RocketMQ进入消息队列 RocketMQ 的产品主页。 在消息队列 Rock...

2019-06-26 19:14:09 3458

空空如也

空空如也

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

TA关注的人

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