自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 springcloud4

hystrix中的熔断是什么家里保险丝烧断,家里就会停电比如抢购接口,发生高并发调用时,在一段时间内,会有成功,会有失败,当请求次数达到N次,并且失败率达到一定比例后,hystrix熔断器会开启,就会发生熔断,此时再调用这个抢购接口,会直接走降级接口circuitBreaker.enabled 是否开启断路器功能circuitBreaker.requestVolumeThreshold 该属性设置在滚动时间窗口中,断路器的最小请求数。默认20,如果在窗口时间内请求次数19,即使19

2021-03-31 20:56:14 96 2

原创 springcloud3

图解服务隔离假设一个抢购下单场景,先需要调用订单系统的接口保存订单信息,然后调用支付接口进行支付,最后调用物流系统的接口进行发货,并且后两个接口依赖相邻前一个接口的处理结果假设第一个接口的三台机器都是正常的,第二个接口三台机器中有一台机器调用失败了,然后会一直卡在这里,而抢课下单是一个高并发接口,所有打到这个机器的调用全部都会失败,导致tomcat连接池占满,其余要调用这台机器其余接口的调用也都会失败一个点影响了全局思考:公司的微服务的并发量为什么不高?吞吐量为什么不高?h

2021-03-30 19:40:17 255

原创 springcloud2

Eureka用户认证通过用户名和密码的方式连接到Eurekapom文件增加jar包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>application.properties新增配置securit

2021-03-29 01:59:27 135

原创 springcloud1

架构演变过程1.单一架构我们最先接触的单体架构,整个系统就只有一个工程,打包往往是打成了 war 包,然后部署到单一tomcat 上面,这种就是单体架构请求–>APP–>DB假如系统按照功能划分了,商品模块,购物车模块,订单模块,物流模块等等模块。那么所有模块都会在一个工程里面,这就是单体架构好处维护成本低缺点一台服务器满足不了需求,最薄弱的环节是DB2.在单一架构基础上横向扩展(多个APP)这种架构貌似暂时解决了我们的问题,但是用户量慢慢增加后,我

2021-03-27 20:11:33 167

原创 java虚拟机16

深入JVM即时编译器JIT什么是JIT?just in time compiler,即时编译器#mermaid-svg-vsto63YlhcYCbhwL .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-vsto63YlhcYCbhwL .label text{fill:#333}#mermaid-s

2021-03-26 22:27:46 211 1

原创 java虚拟机15

直接内存直接内存(堆外内存)直接内存和堆外内存可以是认为是等同的,直接内存是直接向操作系统申请的,而堆是JVM提前申请的一块内存直接内存有哪些?java的unsafe类package ex15;import sun.misc.Unsafe;import java.lang.reflect.Field;/** * @author King老师 * 参数无效:-XX:MaxDirectMemorySize=10m */public class UnsafeDemo {

2021-03-26 17:47:21 148 1

原创 java虚拟机14

内存分析工具上一节中是通过jmap -histo来查看堆内存空间及对象实例情况,但是前提是程序必须是存活的,如果程序关闭了就不能查看之前的内存情况了,就需要通过以下的工具来查看内存分析工具VisualVM也是可以查看dump文件的文件->装入->选择指定的dump文件,就可以打开dump文件了上一节的cpu%项目中,虚拟机开启了-XX:+HeapDumpOnOutOfMemoryError,就是内存溢出后会自动保存dump文件,文件名形如java_pid15032.hprof

2021-03-26 02:51:47 249 2

原创 java虚拟机13

JVM性能调优JVM调优分类1.JVM预调优根据业务场景预估,预估需要使用的服务器资源容量、JVM堆内存的配置2.优化JVM运行环境(慢、卡顿等)2.优化JVM运行环境(慢、卡顿等)常见的手段就是重启,但是不可取这种问题是不明显的,像慢和卡是需要有数据指标的3.解决JVM中的问题(OOM等)内存溢出是最明显的问题调优规划及怎么进行预调优调优规划①业务场景设定场景1:注重吞吐量,让系统的tps更高,parallel scavenge的吞吐量是最大的,单一时间做单一事场

2021-03-25 01:43:04 159

原创 java虚拟机12

压测工具ABAb(Apache Bench)安装yum -y install httpd-tools测试 get 请求接口ab -c 10 -n 100 http://www.test.api.com/test/login?userName=test&password=test-c后面的10是10个并发,-n后面的100是100个总请求测试 post请求接口ab -c 10 -n 100 -p ‘post.txt’ -T ‘application/x-www-form

2021-03-24 16:59:44 130

原创 java虚拟机11

动态追踪技术底层分析什么是动态追踪不用关闭java程序重启,无侵入式的实现,即可统计java程序的运行处理信息通过java agent技术实现Java Agent 技术JVM级别的aop事前、事后、事中比如要打印方法的入参和出参,此时是需要对java代码进行修改的,但是java程序已经运行了,数据就在运行时数据区中,而class文件就在方法区中,如果要改变某一个方法,就需要替换class文件,修改相应的字节码一个JVM只能调用一个arthasmain方法

2021-03-23 21:54:28 365 2

原创 java虚拟机8

代码执行流程梳理java代码 --> class --> JVM运行时数据区(方法区)代码的执行 --> 体现在JVM中是方法的执行(class,也就是字节码)JAVA方法的调用与虚拟机栈启动main方法启动一个程序就是通过main方法启动的,因为main方法是JVM启动的入口,通常是启动一个线程来执行main方法方法调用的字节码指令方法调用一共只有5种字节码①invokestatic调用静态方法package ex8;/** *

2021-03-22 11:47:38 108

原创 java虚拟机10

JDK为我们提供的工具命令行工具jps:虚拟机进程状况工具jstat:虚拟机统计信息监视工具jinfo:java配置信息工具jmap:java内存映像工具jhat:虚拟机堆转储快照分析工具jstack:java堆栈跟踪工具可视化工具JConsole:java监视与管理控制台VisualVM:多合一故障处理工具jps第一列代表进程号,后面代表具体的进程,但是第二列可能空缺jps -q 只显示进程号jps -m 显示更多信息jps -l 显示全路

2021-03-22 11:11:32 209

原创 java虚拟机9

Java中的泛型泛型是什么?泛型,即“参数化类型”,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。引入一个类型变量 T(其他大写字母都可以,不过常用的就是 T,E,K,V 等等),并且用<>括起来,并放在类名的后面。泛型类是允许有多个类型变量的。按照约定,类型参数名称命名为单个大写字母,以便可以在使用普通类或接口名称时能够容易地区分类型参数。以下是常用的类型参数名称列表:E - 元素,主要由 Java 集合(Collections)框架使用。K - 键,主要用于表示映射

2021-03-21 16:29:04 107

原创 java虚拟机7

一个类的生命周期类生命周期7个阶段1.加载loading加载到虚拟机的内存中,即运行时数据区2.验证verification3.准备preparation4.解析resolution其中2、3、4合起来又称为连接Linking5.初始化initialzation6.使用using7.卸载unloading垃圾回收阶段顺序阶段的顺序是不定的,能够确定顺序的是①加载、②验证、③准备、⑤初始化、⑦卸载,而④解析就不一定了,因为java是有一个

2021-03-19 01:41:20 134

原创 java虚拟机6

Class类文件结构JVM的无关性平台无关性:一次编写,到处运行语言无关性:字节码(Byte-Code).java通过javac编译成class文件.rb通过jrubyc编译成class.groovy通过groovyc编译器编译成class其他于洋通过对应的编译器编译成class文件,kafka是通过scala写的,也是可以在jvm上运行的字节码向后兼容性比较好class在jdk1.2就稳定下来了,基本上没修改了字节码除了class文件这种磁盘文件,也可以通过类加

2021-03-17 01:35:20 193 1

原创 java虚拟机5

并发标记与三色标记并发垃圾回收器中为了应对并发场景需要用到三色标记算法三色标记算法把对象用三种颜色标记黑色:一般代表根对象,除了根对象以外,如果这个对象以及它的子对象都被扫描了,这种也是黑色的灰色:只扫到当前对象,但是它的子对象还没有被扫描到,这种是灰色白色:没有扫到的对象就是白色,如果扫描完所有对象后,最终是白色的为不可达对象,即垃圾对象优点可以异步执行,扫描颜色的线程进行的同时,用户线程也可以运行三色标记的问题GC并发情况下的漏标问题线程1和线程2属于垃圾

2021-03-16 11:41:43 121

原创 java虚拟机4

垃圾回收基础知识什么是gcminor gc/young gc:对新生代(eden、from、to----1/3)进行垃圾回收major gc(不同地方不一样,需要根据出处的上下文理解,不同地方不一样,有的只是老年代,有的是所有区域)/old gc(更好的说法,只针对老年代,cms):对老年代(tunured----2/3)进行回收full gc(不仅是新生代、老年代、还要加上方法区(1.7之前是永久代,jdk1.8及之后是元空间))分代回收理论1.大部分对象都是朝生夕死 — 新生代(98%

2021-03-15 18:31:55 130

原创 java虚拟机3

对象的创建过程package ex3;/** * @author King老师 * JVM遇到new关键字 * **/public class ObjectCreate { private int age; private boolean isKing; public static void main(String[] args) { ObjectCreate objectCreate = new ObjectCreate();//

2021-03-15 11:42:40 91

原创 java虚拟机2

JVM内存处理全流程实例package ex2;/** * @author King老师 * VM参数 * -Xms30m -Xmx30m -XX:MaxMetaspaceSize=30m * */public class JVMObject { public final static String MAN_TYPE = "man"; // 常量 public static String WOMAN_TYPE = "woman"; // 静态变量 publ

2021-03-12 02:36:43 247 1

原创 java虚拟机1

JVM基础知识从编译到执行HelloWorld.java通过javac编译成HelloWorld.classJVM中的ClassLoader类加载器把HelloWorld.class加载到JVM中再通过字节码解释器的执行引擎运行在操作系统上在JDK底下有一个JRE(java运行时环境),里面有很多java类库在JRE底下有一个JVM,也就是java虚拟机任何一个class要运行,除了走字节码解释器执行,还可以通过JIT编译器来执行jvm把class这个字节码文件翻

2021-03-11 17:52:52 132 2

原创 网络编程20

ByteBuf和ByteBufAllocator分析原生jdk的buffer缺点,一是定长,二是需要切换读写模式netty在jdk中Buffer的基础上提出了ByteBuf,本质上也是byte数组的缓冲区怎么实现ByteBuf更好?1.门面模式2.完全重写两种模式都用了ByteBuf抽象类的继承关系顶层是ByteBuf抽象类2.AbstractByteBuf抽象类公共方法都放在这里3.AbstractReferenceCountedByteBuf抽象

2021-03-11 02:03:40 217

原创 网络编程19

服务器端启动1.创建eventloopgroup(1)其中设定了线程的数量,缺省时设置为cpu*2,(2)同时创建一个executor,但是其中有一个threadFactory,从而可以为每一个eventloop来创建线程,但是不是此时创建的线程,而是后面创建的(3)创建NioEventLoop,这其中有一个run方法,会进行selector调用,处理各种各样的事件集,netty有个小的特殊处理,eventloop不光处理io事件,还会处理系统内部任务,根据ioRatio比例来决定处理io事件

2021-03-10 17:45:17 116

原创 网络编程18

AbstractUnsaferegister方法:把channel和selector挂钩,如果pipeline的通道已经是active状态的,会调用beginRead方法,beginRead方法又会调用doBeginRead方法,把真正关心的事件进行注册服务器启动流程1.首先创造了一个eventloopgroup,支持指定线程数,如果不传,默认会从配置中读取,如果配置没有,就是CPU逻辑核心数乘2,io操作的线程数一般都是这么设置的,会进入到MultithreadEventExecutorGr

2021-03-10 01:26:05 180

原创 网络编程17

Channel系列源码分析NioServerSocketChannelNioSocketChannelchannel----channel相关顶级接口提供了很多跟网络通讯相关的操作,以及状态判定read方法,读取到缓冲区,读取数据成功后,就会触发channel所属的pipeline进行handler的处理,触发channelRead,在各种handler中流转flush方法,将我们要写到对端的数据,刷新到目标channel中,并发送给对方config方法,获取当前channel的配置信

2021-03-09 16:27:25 112

原创 网络编程16

netty的基本组件EventLoopGroupServerBootstrapNioServerSocketChannelChannelFuture各种ChannelHandlerChannelPipelineChannelHandlerContextbyteBufChannelPipeline本质是职责链模式的变形类似于servlet,servlet专门用来拼凑页面来相应的,中间会有各种filter,完全不影响servlet功能的实现把channel的管道抽象成Ch

2021-03-09 01:30:00 127

原创 网络编程15

JDK中nio实现ServerSocketChannel的继承关系channel接口InterruptibleChannel接口是可以中断的NetworkChannel接口与网络通信有关AbstractInterruptibleChannel抽象类对InterruptibleChannel接口的实现SelectableChannel抽象类AbstractSelectableChannel抽象类ServerSocketChannel抽象类So

2021-03-08 16:43:56 101

原创 网络编程14

jdk下的bioSocksSocketImpl这两类操作系统都还存在一个 SocksSocketImpl 类,它其实主要是实现了防火墙安全会话转换协议,包括 SOCKS V4 和 V5(SOCKS:防火墙安全会话转换协议 (Socks: Protocol for sessions traversal across firewall securely) SOCKS 协议提供一个框架,为在 TCP 和 UDP 域中的客户机/服务器应用程序能更方便安全地使用网络防火墙所提供的服务,并提供一个通用框架来使这些

2021-03-05 02:20:10 245 1

原创 跳表简析

package cn.com.supermonkey.trainer.smartschedule.bo;import java.util.Random;public class SkipList { /** 最大层数 */ private static final int MAX_LEVEL = 32; /** 初始层树 */ public int levelCount = 1; /** 头节点 */ public Node head;

2021-03-04 00:38:16 84 1

原创 网络编程13

sendfile上次说错了,上次说的是3次拷贝,4次上下文切换理论只有2次上下文切换,到底有几次拷贝?需要看硬件的支持程度,如果不支持,从文件读取缓冲区到套接字发送缓冲区中间需要cpu干预一次,就是3次拷贝,如果支持,网卡设备支持直接从文件读取缓冲区读取数据,则只有两次slice和sendfile最大的区别slice只需要两次拷贝,但是不需要硬件支持,网卡直接从文件读取缓冲区获取数据java生态圈kafaka持久化对磁盘随机写入效率低,顺序写入效率高,可以达到300m/

2021-03-03 02:52:21 91

原创 简析红黑树

红黑树节点public class RbTreeNode { /** 节点颜色 */ public boolean color; /** 左孩子 */ public RbTreeNode left; /** 右孩子 */ public RbTreeNode right; public int value; /** 父节点 */ public RbTreeNode parent; public RbTreeNod

2021-03-03 00:32:01 127

原创 网络编程12

网络协议和Netty常见面试题汇总说一下TCP的三次握手过程为什么TCP握手需要三次?解释一下TCP的四次挥手为什么TCP的四次挥手要有TIME_WAIT状态?概述下什么是DDOS攻击和SYN洪水攻击DDOS攻击利用一个合理的服务请求去占用非常多的服务资源,导致正常请求无法成功,也叫拒绝服务攻击。常见的有计算机带宽攻击、连通性攻击1.带宽攻击是以极大的通讯量去冲击网络,使网络资源消耗殆尽,导致合法的请求无法响应2.连通性攻击是以大量的连接请求去冲击服务器,有syn洪水

2021-03-01 03:05:55 167

空空如也

空空如也

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

TA关注的人

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