
笔记
文章平均质量分 88
Σεαγαπώ℡
Java,分布式,容器
展开
-
JVM运行时数据区域和各区域特点
JDK、JRE的区别JDK:Java程序设计语言、Java虚拟机、Java类库JRE:Java类库API中的Java SE API子集、Java虚拟机运行时数据区域JVM在程序运行时,会将自己管理的内存空间分为一下几个区域,实现内存的高效利用。每个区域各自的用途都不尽相同,所以它们的创建时间和销毁时间也有所不同,有些跟着虚拟机进程来创建销毁,有的则根据用户线程进行创建和销毁。根据《Java虚拟机规范》,将内存划分为一下几个运行时数据区域:接下来我们来看看,具体每一个区域的作用和它们锁存储的原创 2020-11-30 20:52:01 · 147 阅读 · 0 评论 -
SpringCloud微服务实战——服务降级处理过程分析
最近自己看到了SpringCloud微服务实战的Hystrix这一块,就简单的将这一块中的服务降级跟大家说一说。Hystrix的概念以及其作用断路器模式源于Martin Fowler的Circuit Breaker一文中。断路器本身是一种开关装置,用于在电路撒谎给你保护线路过载,当线路中有电器发生短路时,该装置能够及时切断故障电路,很好的保护其他电路不受影响。应用到微服务这一块,主要解决的是由于网络延迟等各种故障原因,让服务请求进行降级处理,让服务更加具有容错性。Hystrix服务降级原理分析这原创 2020-11-29 22:42:47 · 516 阅读 · 0 评论 -
常用Linux命令手册,持续更常用
硬链接和软链接ls -i #查看文件的inodeln fileName hard_link_name #给 fileName 创建对应的硬连接 hard_link_nameln -s fileName soft_link_name #给 fileName 创建对应的软连接 soft_link_name字符处理ls -l /etc/init.d | more #使用管道可以使得 | 之前的命令输出的内容作为该符号之后命令的输入#搜索文本grep [-icnv] '需要匹配的字符串' f原创 2020-11-20 00:51:51 · 160 阅读 · 0 评论 -
volatile关键字的内存语义
volatile关键字的理解当我们声明一个变量为 volatile 时,程序对于该变量的读和写就会变得十分特别,具体的特别之处,我们还是要看看 volatile 关键字的内存语义,观察其特别之处。下面是一个简单的例子,通过这个例子我们来具体说明 volatile 关键字的内存语义class VolatileFeatures { volatile long value = 0L; pulbic void set(long val) { value = val; } public void原创 2020-11-17 21:54:58 · 160 阅读 · 0 评论 -
happens-before原理简介
由来和具体概念从JDK5开始,JSR-133使用 happens-before 来实现变量的内存可见性问题。在JMM中,如果一个操作执行的结果需要对另外一个操作可见,那么二者必定要存在 happens-before 关系。与开发人员密切相关的 happens-before 规则1、程序顺序规则:一个线程中的每个操作,happens-before 于该线程中的其他任意后续操作。2、监视器锁规则:对于一个锁的解锁,happens-before 于对该锁的加锁。(有锁才能解锁)3、volatile 变原创 2020-11-17 21:52:20 · 639 阅读 · 0 评论 -
Redis的五种对象类型
基本概念Redis是一个基于内存中的数据结构存储系统,可以用作数据库、缓存和消息中间件。Redis支持五种常见的对象类型:字符串(String)哈希(Hash)列表(List)集合(Set)有序集合(Zset)对象类型与编码Redis 使用对象来存储键和值,在Redis中,每个对象是由redisObject结构表示。redisObject结构主要包含三个属性:type、encoding 和 ptr。typedef struct redisObject { //记录对象数据类型 un原创 2020-11-08 15:20:42 · 581 阅读 · 0 评论 -
ThreadLocal的概念和底层实现
ThreadLocal的使用原创 2020-09-04 00:26:26 · 167 阅读 · 0 评论 -
HashMap底层——解决Hash冲突(开放地址法)
开放地址法1、Hash函数Hash函数就是将任意长度的输入转化成固定长度的输出的一类函数举例说明比如说我的输入是任意一个自然数(0,1,2,3…),而我要求经过一个函数后我的输出的数的范围要在0-9这样一个范围之间。很容易想到,我们可以使用Hash函数:key就是输入;在哈希表(散列表)里,Hash函数的作用就是将关键字Key转化为一个固定长度数组的下标,以便存取键值对<Key,Value>Hash冲突解决的两个办法链地址法.开放地址法所谓开放地址法就是发转载 2020-08-26 13:07:17 · 2616 阅读 · 0 评论 -
HashMap底层——解决Hash冲突(链地址法)
1、链地址法次日清晨,大臣们按时上朝,接着讨论昨日的话题。“昨日Hash函数的选择我们已经有了具体的方案了,那就只剩下冲突的解决问题了”,王大臣率先发话。“要解决冲突其实也不难,既然会有多个元素被Hash到同一个位置,而这个位置只能存储一个元素,那么我让这个位置可以存储多个元素不就可以了吗?”,何大臣说道。“哦,怎么个弄法?”王大臣问道。“用链表啊,来一个元素加一个,让这个位置存储一个指针,指向一个链表,让所有相同位置的元素都放在这个链表中”,何大臣回答道,接着又画了一个图。“在存储的时候,如转载 2020-08-26 12:44:11 · 4276 阅读 · 12 评论 -
HashMap底层——Hash函数及其设计
1、查找速度的困扰算法国自建立起,就以快速为至高的荣誉,O(n^2) 时间复杂度的设计常常被人嫌弃,一般都想着弄个O(logn)。算法国最近遇到了一个问题,就是随着处理数据的逐步增大,查找的时间越来越大了。之前用的数组和链表,最后改成二叉查找树,可是这些都需要和其中的元素进行比较,比较的次数越多,查询的速度就越慢。国王想着能不能有一种办法,查找某个元素的时候,不需要比较,直接就得到这个元素,时间复杂度直接就为O(1),和集合中的元素个数就没有关系了。2、初次的方案国王召集各大臣讨论此事“如果不转载 2020-08-26 11:43:28 · 414 阅读 · 0 评论 -
微服务之SpringCloud(一)——Eureka服务治理组件
Spring Cloud——Eureka底层源代码解析基础概念Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。主要模块构建服务注册中心服务注册与发现Eureka的基础架构Eureka的服务治理机制Eureka的配置源码解析1、属性加载过程准备工作,搭建起一个基础架构,通过引入依赖,文件配置,开启启动类注解这三步的类似操作,进行服原创 2020-08-14 01:43:58 · 198 阅读 · 1 评论 -
Mybatis基础概念+缓存机制原理图解
Mybatis缓存机制默认情况下,Mybatis中有一级缓存和二级缓存,默认情况下一级缓存是开启的,而且是不能关闭的。一级缓存指 SqlSession 级别的缓存,当同一个 SqlSession 中进行相同的SQL语句查询时,第二次以后的查询就不会从数据库中查询,而是直接从缓存中获取,一级缓存最多缓存1024条 SQL。二级缓存指可以跨SqlSession的缓存,是 mapper 级别的缓存,对于 mapper 级别的缓存,不同的 SqlSession 是可以共享的。一级缓存原理(SqlSe原创 2020-08-06 00:34:07 · 390 阅读 · 0 评论 -
JVM中经典的垃圾收集算法
分代收集理论由于当今商业虚拟机的垃圾收集器,大多遵循“分代收集”这一理论,而他时间里在两个假说之上:弱分代假说 绝大多数对象都是朝生夕灭的。强分代假说 熬过越多次垃圾收集过程的对象就越难以消亡。根据这两则假说,开发者奠定了多款常用垃圾收集器的一致设计原则收集器应该将 Java 堆划分为不同的区域,然后根据回收对象根据它的存活年龄来分配到不同的区域之中进行存储。现在设计者都会将 Java 堆设计成新生代,老年代两个区域。标记 - 清除算法该算法根据其名称就可以猜测出它的执行原理。首先对于原创 2020-07-26 10:22:42 · 144 阅读 · 0 评论 -
JVM中几种经典的垃圾收集器
Serial 收集器该收集器是最基础、历史最悠久的收集器,是一个单线程工作的收集器,是在客户端模式下的默认新生代垃圾收集器,并不是说他只会使用一个处理器或者一条收集线程去完成垃圾收集工作,侧重强调当它进行垃圾收集时,必须暂停其他所有工作线程,直至它收集结束。优点简单高效(在单线程下相比较)额外内存消耗最小不足之处用户线程由于垃圾收集而导致的停顿需要进一步提升ParNew 收集器该收集器是Serial收集器的多线程并行版本,除了使用多条线程进行垃圾收集之外,其余行为完全包括了Serial收原创 2020-07-26 09:36:56 · 202 阅读 · 0 评论 -
基于Java的AtomicInteger类实现原子操作
原子的本意是:“不能被进一步分割的最小粒子”,而原子操作的意思是:“不可被中断的一个或者一系列操作”。首先先说说处理通过怎样的方式实现了原子操作:使用总线锁保证原子性首先,我们应该明白什么是总线锁总线锁:使用处理器提供的一种LOCK #信号,当一个处理器在总线处理一个变量时,其他处理器的请求被阻塞,正在处理当前变量的处理器独占共享内存。1、方法提出背景当多个处理器对同一个共享变量进行读改写操作时,共享变量会被多个处理器同时操作,不能够保证操作的原子性。举个例子,有一个共享变量 i 现在要进行原创 2020-07-23 13:29:14 · 255 阅读 · 0 评论 -
对于RestFul编码风格的理解
Resultful风格:GET 用于查询资源POST 用于创建资源PUT 用于更新服务端的资源的全部信息PATCH 用于更新服务端的资源的部分信息DELETE 用于删除服务端的资源...原创 2020-07-07 15:31:23 · 339 阅读 · 0 评论 -
Java内部类的使用方法
自己将Java内部类的理解跳出来,自己日后忘记了,再翻出来看看。Java内部类分为静态内部类、成员内部类、局部内部类、匿名内部类public class OuterClass { //私有静态变量 private static int radius = 1; private static String out_b = "outer priv...原创 2020-02-02 19:49:10 · 143 阅读 · 0 评论 -
你不知道的单一职责原则
Java设计模式——单一职责原则一、设计模式的七大设计原则:1、单一职责原则2、接口隔离原则3、依赖倒转原则4、里氏替换原则5、开闭原则6、迪米特原则7、合成复用原则 我们程序员在编程时,往往会遇到一系列...原创 2020-01-31 19:40:13 · 182 阅读 · 0 评论