自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (17)
  • 收藏
  • 关注

原创 Apache STORM工作原理详解

Apache Storm是一个分布式实时计算系统,允许用户在集群上运行流式数据处理应用程序。它的核心原理是将流式数据分割成多个小块,每个小块都会被分配给不同的计算节点进行处理,并且处理结果会被发送到下一个节点,直到达到最终结果。是整个集群的控管核心,负责topology的提交、运行状态监控、任务重新分配等工作。zk就是一个管理者,监控者。

2023-03-19 22:24:07 529

原创 maven settings.xml

【代码】maven settings.xml。

2023-02-19 13:42:55 118

原创 gRPC 非官方教程

一个高性能、通用的开源RPC框架主要面向移动应用开发: gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发支持众多开发语言创建一个文件夹src/main/proto/创建一个helloworld.proto文件然后使用maven编译项目 生成基础类这里修改service的定义,其他不变。

2023-02-18 09:59:23 415

原创 SpringCloud实战(一):Eureka

一、创建服务注册中心1、用IDEA创建一个maven工程2、添加pom.xml依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apac

2021-03-20 12:33:33 195 2

原创 GIT修改远程仓库地址

1、修改远程仓库地址git remote set-url origin https://xxxxxxxxxxxxxxxxxxxxxxx.git2、关联并且提交远程分支git push --set-upstream origin branchname

2020-08-19 15:21:12 621

原创 redis和memcached的区别

1. redis支持复杂的数据结构:list, hash , set等。因此Redis除单纯缓存作用外,还可以处理一些简单的逻辑运算,Redis不仅可以缓存,而且还可以作为数据库用 。2. redis的数据可以持久化到磁盘,memcached不能。3.redis有虚拟内存,可以突波屋里内存限制。4.memcached性能更好。吞吐量更高。应用场景Memcached:动态系...

2019-09-04 15:03:31 192

原创 Java反射机制

概念在Java中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法和属性,(重点是私有的方法和属性);这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。反射API反射API用来生成JVM中的类、接口或则对象的信息。-Class类:反射的核心类,可以获取类的属性,方法等信息。-Fie...

2019-09-03 21:32:40 176

原创 Java中的范型

什么是范型泛型,即“参数化类型”。顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。泛型类泛型类型用于类的...

2019-09-03 17:17:25 567

原创 MYSQL性能优化知识点

一、MYSQL的锁数据库锁的类型1.表级锁定(table-level)2.行级锁定(row-level)3.页级锁定(page-level)InnoDB的行级锁锁定模式InnoDB行锁实现方式:InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。间隙锁(Next-Key...

2019-08-31 22:58:00 203

原创 Java类加载机制

一、类加载过程1.加载加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,...

2019-08-25 22:30:41 166

原创 微服务之熔断、降级、限流

雪崩效应在IO型服务中,假设服务A依赖服务B和服务C,而B服务和C服务有可能继续依赖其他的服务, 继续下去会使得调用链路过长。如果在A的链路上某个或几个被调用的子服务不可用或延迟较高,则会导致调用A服务的请求被堵住。堵住的请求会消耗占用掉系统的线程、io等资源,当该类请求越来越多,占用的计算机资源越来越多的时候,会导致系统瓶颈出现,造成其他的请求同样不可用,最终导致业务系统崩溃,雪崩效应。...

2019-08-25 22:26:16 753

原创 Redis知识点总结

常用的淘汰算法:FIFO:First In First Out,先进先出。判断被存储的时间,离目前最远的数据优先被淘汰。 LRU:Least Recently Used,最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。 LFU:Least Frequently Used,最不经常使用。在一段时间内,数据被使用次数最少的,优先被淘汰。 缓存不一致问题方案一: 先更新数...

2019-08-25 17:58:03 190

原创 排序算法动图演示

1.冒泡排序代码 /** *1 冒泡排序 * 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。 * 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 * 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 ...

2019-05-19 23:02:54 590 1

原创 数据结构(1):HashMap实现原理分析

/** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * The maximum capacity, used if a h...

2019-05-12 17:29:36 212

原创 分布式锁

1. 基于redis的分布式锁,使用Jedis客户端SETSET key value [EX seconds] [PX milliseconds] [NX|XX]EXsecond:设置键的过期时间为second秒。SETkeyvalueEXsecond效果等同于SETEXkeysecondvalue。 PXmillisecond:设置键的过期时间为...

2018-05-20 10:49:32 357

原创 MySQL HASH索引的适用场景和限制

HASH索引只有精确匹配索引所有列的查询才有效。因为索引自身只需要存储对应的哈希值,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快,然而,哈希索引也有限制,如下:哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行(即不能使用哈希索引来做覆盖索引扫描),不过,访问内存中的行的速度很快(因为memory引擎的数据都保存在内存里),所以大部分情况下这一点对性能的影响...

2018-05-16 11:10:24 7388

原创 MySQL BTree索引的适用场景和限制

适用场景:全值匹配:全值匹配指的是和索引中的所有列进行匹配,即可用于查找姓名和出生日期匹配最左前缀:如:只查找姓,即只使用索引的第一列匹配列前缀:也可以只匹配某一列值的开头部分,如:匹配以J开头的姓的人,这里也只是使用了索引的第一列,且是第一列的一部分匹配范围值:如查找姓在allen和barrymore之间的人,这里也只使用了索引的第一列精确匹配某一列并范围匹配另外一列:如查找所有姓为allen,...

2018-05-16 10:54:53 1132

原创 判断链表是否有环的算法

第一步,找环中相汇点。分别用p1,p2指向链表头部,p1每次走一步,p2每次走二步,直到p1==p2找到在环中的相汇点。第二步,找环的入口。接上步,当p1==p2时,p2所经过节点数为2x,p1所经过节点数为x,设环中有n个节点,p2比p1多走一圈有2x=n+x; n=x;可以看出p1实际走了一个环的步数,再让p2指向链表头部,p1位置不变,p1,p2每次走一步直到p1==p2; 此时p1指向环的...

2018-05-10 14:36:31 291

原创 二进制十进制转换算法

2进制转10进制,10进制转2进制 //2进制转10进制: 按权相加 public static double binary2decimal(String binaryStr) { String[] binaryArr = binaryStr.split("\\."); String integer = binaryArr[0];// 整数部分 ...

2018-05-08 15:45:31 867

原创 一致性HASH算法

一致性HASH算法在分布式缓存系统中,需要将数据均匀的分布到缓存服务器集群的不同机器上,就需要使用对缓存的数据的key做hash值计算, 然后在将hash值除以服务器节点的数量取模计算出数据需要落到那台服务器节点上。这种算法很简单,也可以实现数据的均匀分布, 但是,增加或者减少数据节点的时候会导致所有缓存数据失效。传统的取模方式例如10条数据,3个节点,如果按照取模的方式,那就是node a: 0...

2018-05-07 20:36:43 1643

原创 Zookeeper 架构原理

1.Zookeeper是什么Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。简单的说,zookeeper=文件系统+通知机制。2.zook...

2018-04-28 18:45:01 8018 5

原创 Tair 架构原理

Tair总体结构一个Tair集群主要包括3个必选模块:config server、data server和client,以及一个可选模块:invalid server。通常情况下,一个集群中包含2台config server及多台data server。两台config server互为主备并通过维护和data server之间的心跳获知集群中存活可用的data server, 构建数据在集群中的...

2018-04-28 18:42:41 2447

原创 DUBBO架构原理

节点角色说明节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监控中心 Container 服务运行容器 调用关系说明服务容器负责启动,加载,运行服务提供者。 服务提供...

2018-04-15 16:52:15 419 2

原创 RocketMQ架构原理

集群部署架构结合部署结构图,描述集群工作流程:1,启动Namesrv,Namesrv起来后监听端口,等待Broker、Produer、Consumer连上来,相当于一个路由控制中心。2,Broker启动,跟所有的Namesrv保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有topic信息。注册成功后,namesrv集群中就有Topic跟Br...

2018-04-15 16:00:03 8958 7

原创 Java NIO 通道的实现类型

文件通道Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileChannel 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获...

2018-04-07 23:41:18 634

原创 Java NIO 选择器Selector

选择器(Selector)Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。 (1)  为什么使用Selector? 仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之...

2018-04-07 17:17:12 262

原创 Java NIO 分散(Scatter)/聚集(Gather)

分散(Scatter)/聚集(Gather)Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel中读取或者写入到Channel的操作。 分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。 聚集(gathe...

2018-04-07 14:53:56 301

原创 JAVA NIO 缓冲区Buffer

缓冲区(Buffer)Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。 Buffer的基本用法 使用Buffer读写数据一般遵循以下四个步骤: 写入数据到Buffer调用flip()方法...

2018-04-07 12:18:45 221

原创 Java NIO 通道Channel

通道(Channel)Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现 这些是Java NIO中最重要的通道的实现: FileChannel:...

2018-04-07 12:17:30 404

原创 Java NIO 概述

Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,...

2018-03-26 20:35:07 256

原创 Java IO

1,基于字节的IO2.基于字符的IO

2018-03-25 23:02:44 145

原创 java内存分配策略

JVM采用分代的垃圾回收策略:不同对象的生命周期是不一样的。目前JVM分代主要是分三个年代:新生代:所有新创建的对象都首先在新生代进行内存分配。新生代具体又分为3个区,一个Eden区、一个From Survivor区和一个To Sruvivor区。大部分对象都被分配在Eden区,当Eden区满时,还存活的对象将被复制到From Survivor区,当From Survivor区满时,此区还存活的对...

2018-03-19 17:21:06 1358 1

原创 java垃圾收集器

堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆进行回收前首先要确定哪些对象还活着,哪些对象已经死去。1,判断对象是否已死1.1引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,当引用失效时,计数器就减1;任何时刻计数器都为0的对象是不可能在被使用的。引用计数算法无法对象之间循环引用的问题。1.2 根搜索算法通过一系列名为“GC Roots”的对象作为起始点...

2018-03-18 22:50:20 3602 1

原创 Java并发编程指南(七):定制并发类

1,定制ThreadPoolExecutor类执行者框架(Executor framework)是一种机制,允许你将线程的创建与执行分离。它是基于Executor和ExecutorService接口及其实现这两个接口的ThreadPoolExecutor类。它有一个内部的线程池和提供允许你提交两种任务给线程池执行的方法。这些任务是:Runnable接口,实现没有返回结果的任务Callable接口,...

2018-03-17 13:33:27 205

原创 Java并发编程指南(六):并发集合

1. 非阻塞线程安全的列表 ConcurrentLinkedDeque并发列表允许不同的线程在同一时刻对列表的元素进行添加add()或删除pollFirst(),pollLast(),而不会产生任何数据不一致(问题)。add(), addFirst(), addLast(): 这些方法允许在列表的头部或者尾部插入一个元素。如果没有可用空间将会抛出异常。poll(), pollFirst()和pol...

2018-03-15 17:41:19 284

原创 Java并发编程指南(五):Fork/Join框架

这个框架被设计用来解决可以使用分而治之技术将任务分解成更小的问题。在一个任务中,检查你想要解决问题的大小,如果它大于一个既定的大小,把它分解成更小的任务,然后用这个框架来执行。这个框架基于以下两种操作:fork操作:当你把任务分成更小的任务和使用这个框架执行它们。join操作:当一个任务等待它创建的任务的结束。work-stealing算法:当一个任务正在等待它使用join操作创建的子任务的结 束...

2018-03-14 19:25:29 243

原创 Java并发编程指南(四):线程执行者

1. 创建一个线程执行者:使用Executor framework的第一步就是创建一个ThreadPoolExecutor类的对象。你可以使用这个类提供的4个构造器或Executors工厂类来 创建ThreadPoolExecutor。有了执行者,你就可以提交Runnable或Callable对象给执行者来执行。一个模拟web服务器的示例:// 1.首先,实现能被服务器执行的任务。创建实现Runn...

2018-03-12 17:42:16 272

原创 Java并发编程指南(三):线程同步工具

1. 控制并发访问资源Semaphore:Semaphore是一个控制访问多个共享资源的计数器。当一个线程想要访问某个共享资源,首先,它必须获得semaphore。如果semaphore的内部计数器的值大于0,那么semaphore减少计数器的值并允许访问共享的资源。计数器的值大于0表示,有可以自由使用的资源,所以线程可以访问并使用它们。另一种情况,如果semaphore的计数器的值等于0,那么s...

2018-03-12 11:21:13 190

原创 Java并发编程指南(二):基本线程同步

1. 同步方法:synchronized关键字:只有一个执行线程将会访问一个对象中被synchronized关键字声明的方法。如果另一个线程试图访问同一个对象中任何被synchronized关键字声明的方法,它将被暂停,直到第一个线程结束方法的执行。换句话说,每个方法声明为synchronized关键字是一个临界区,Java只允许一个对象执行其中的一个临界区。静态方法有不同的行为。只有一个执行线程...

2018-03-11 22:52:53 159

原创 Java并发编程指南(一):线程管理

1. 线程的创建和运行:在Java中,我们有2个方式创建线程:通过直接继承Thread类,然后覆盖run()方法。构建一个实现Runnable接口的类, 然后创建一个thread类对象并传递Runnable对象作为构造参数2.获取和设置线程信息:Thread类的对象中保存了一些属性信息能够帮助我们来辨别每一个线程,知道它的状态,调整控制其优先级。 这些属性是:ID: 每个线程的独特标识。Name:...

2018-03-11 14:55:47 229

rabbitmq-server-3.8.1.rar

RabbitMQ消息队列下载安装(Windows版本)RabbitMQ消息队列下载安装(Windows版本) rabbitmq-server-3.8.1.exe

2019-11-17

Java 9 Concurrency Cookbook Second Edition pdf

Java 9 Concurrency Cookbook Second Edition pdf 1004页完整清晰版,5分资源,不要再去下10分以上的啦,积分不好挣能省则省。

2018-03-11

Java 7 Concurrency Cookbook pdf

Java 7 并发编程手册 Java 7 Concurrency Cookbook pdf

2018-03-10

StarUML-v2.8.1 windows版

StarUML-v2.8.1 windows版,StarUML-v2.8.1 windows版

2018-03-08

Python编程:从入门到实践 (完整版正常字体)

总共482页完整版清晰版

2017-01-06

WEBX3.0框架指南(PDF版)

webx3.0框架指南,是一套基于Java Servlet API的通用Web框架,它在Alibaba集团内部被广泛使用。超清晰...

2016-06-26

rocketmq 官方开发指南

rocketmq 官方开发指南,详细介绍了rocketmq的原理及应用及搭建及使用

2016-06-24

Mastering Nginx.pdf

NGINX is a high-performance web server designed to use very few system resources. There are many how-to's and example configurations floating around on the Web. This guide will serve to clarify the murky waters of NGINX configuration. In doing so you will learn how to tune NGINX for various situations, what some of the more obscure configuration options do, and how to design a decent configuration to match your needs.

2016-01-21

Head First C.2012.英文版

Head First C.2012.英文版, 完整版, 文字、 彩图 、

2015-07-27

java虚拟机规范

The.Java.Virtual.Machine.Specification_Java.SE.7.Edition.pdf

2013-12-17

ORACLE驱动jar包

ORACLE驱动jar包 ojdbc4.jar -----&gt; JDK4 ojdbc5.jar -----&gt; JDK5 ojdbc6.jar -----&gt; JDK6

2012-03-12

Struts2、Spring3、MyBatis3整合ExtJS

Struts2、Spring3、MyBatis3整合ExtJS

2012-03-12

ext-4.0.7-gpl.zip

ExtJs最新版本,包含源代码,文档,例题。

2012-02-21

ext-4.0.jsb2

ext-4.0.jsb2 要放入到Ext4的src中 ext4.0 插件 安装 必备

2011-11-28

gateway.jar

openfire即时通讯开发中一个很关键的架包,有需要的请下载

2011-10-27

Pro JavaScript Design Patterns.pdf

This book is meant primarily for two types of people. The first is web developers or front-end engineers who know some JavaScript and wish to learn more. Specifically, those who want to improve their understanding of the object-oriented capabilities of JavaScript and learn how they can make their code more modular, maintainable, and efficient. This book will teach these readers about the basics of object-oriented programming in JavaScript. It will also teach them about specific design patterns, showing when they can be used and how to implement xxi them. This type of reader will already be familiar with the basic JavaScript syntax and will focus more on the sections that deal with converting existing code to implement specific patterns, and explanations of when each pattern should or shouldn’t be used.

2010-05-14

空空如也

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

TA关注的人

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