- 博客(88)
- 资源 (17)
- 收藏
- 关注
原创 Linux安装zookeeper
从Apache官网下载 最新可用版本 apache-zookeeper-3.8.4-bin.tar.gz。3, 将配置好的zookeeper 远程复制到另外两台server。上传到linux 虚拟机 某个路径 /opt/software。三台linux server同时配置 /etc/profile。4, 修改slave0与slave1的“myid”文件中的内容。master是1,slave0是2,slave1是3。三台Linux server 分别执行启动。解压缩,并且重命名。
2025-01-30 09:19:32
774
原创 搭建Spark分布式集群
通过虚拟机设置共享文件夹将需要的安装包复制到linux虚拟机中 localhost1。虚拟机的共享盘在 /mnt/hgfs/。将共享盘安装包复制到 存在目标路径/opt/software/地址: https://downloads.apache.org/spark/spark-3.5.4/下载 spark-3.5.4-bin-without-hadoop.tgz。将spark分发到localhost2 和 localhost3。需要使用hdfs,所以需要先启动HDFS。启动后查看三个节点的进程。
2025-01-28 14:49:14
348
原创 搭建Hadoop分布式集群
Hadoop框架是采用Java语言编写,需要java环境(jvm) JDK版本:JDK8版本 ,本次使用的是 Java: jdk-8u431-linux-x64.tar.gz三台Linux虚拟节点: CentOS-7-x86_64-DVD-2009.iso通过虚拟机设置共享文件夹将需要的安装包复制到linux虚拟机中。
2025-01-07 20:13:25
1349
原创 CentOS 7的下载与安装
当你在 /etc/yum.repos.d/CentOS-Base.repo 文件中使用这些地址时,记得更新这些变量以匹配你的系统环境。选择GNOME桌面,安装三个基础组件(1, GNOME应用程序,2, 传统X windows系统的兼容性, 3, 开发工具)北京大学开源镜像站:https://mirrors.pku.edu.cn/centos/7/isos/x86_64/阿里云开源镜像站:https://mirrors.aliyun.com/centos/7/isos/x86_64/
2025-01-06 09:21:03
2575
原创 Apache STORM工作原理详解
Apache Storm是一个分布式实时计算系统,允许用户在集群上运行流式数据处理应用程序。它的核心原理是将流式数据分割成多个小块,每个小块都会被分配给不同的计算节点进行处理,并且处理结果会被发送到下一个节点,直到达到最终结果。是整个集群的控管核心,负责topology的提交、运行状态监控、任务重新分配等工作。zk就是一个管理者,监控者。
2023-03-19 22:24:07
654
原创 gRPC 非官方教程
一个高性能、通用的开源RPC框架主要面向移动应用开发: gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发支持众多开发语言创建一个文件夹src/main/proto/创建一个helloworld.proto文件然后使用maven编译项目 生成基础类这里修改service的定义,其他不变。
2023-02-18 09:59:23
507
原创 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
235
2
原创 GIT修改远程仓库地址
1、修改远程仓库地址git remote set-url origin https://xxxxxxxxxxxxxxxxxxxxxxx.git2、关联并且提交远程分支git push --set-upstream origin branchname
2020-08-19 15:21:12
792
原创 redis和memcached的区别
1. redis支持复杂的数据结构:list, hash , set等。因此Redis除单纯缓存作用外,还可以处理一些简单的逻辑运算,Redis不仅可以缓存,而且还可以作为数据库用 。2. redis的数据可以持久化到磁盘,memcached不能。3.redis有虚拟内存,可以突波屋里内存限制。4.memcached性能更好。吞吐量更高。应用场景Memcached:动态系...
2019-09-04 15:03:31
237
原创 Java反射机制
概念在Java中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法和属性,(重点是私有的方法和属性);这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。反射API反射API用来生成JVM中的类、接口或则对象的信息。-Class类:反射的核心类,可以获取类的属性,方法等信息。-Fie...
2019-09-03 21:32:40
221
原创 Java中的范型
什么是范型泛型,即“参数化类型”。顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。泛型类泛型类型用于类的...
2019-09-03 17:17:25
696
原创 MYSQL性能优化知识点
一、MYSQL的锁数据库锁的类型1.表级锁定(table-level)2.行级锁定(row-level)3.页级锁定(page-level)InnoDB的行级锁锁定模式InnoDB行锁实现方式:InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。间隙锁(Next-Key...
2019-08-31 22:58:00
233
原创 Java类加载机制
一、类加载过程1.加载加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,...
2019-08-25 22:30:41
227
原创 微服务之熔断、降级、限流
雪崩效应在IO型服务中,假设服务A依赖服务B和服务C,而B服务和C服务有可能继续依赖其他的服务, 继续下去会使得调用链路过长。如果在A的链路上某个或几个被调用的子服务不可用或延迟较高,则会导致调用A服务的请求被堵住。堵住的请求会消耗占用掉系统的线程、io等资源,当该类请求越来越多,占用的计算机资源越来越多的时候,会导致系统瓶颈出现,造成其他的请求同样不可用,最终导致业务系统崩溃,雪崩效应。...
2019-08-25 22:26:16
827
原创 Redis知识点总结
常用的淘汰算法:FIFO:First In First Out,先进先出。判断被存储的时间,离目前最远的数据优先被淘汰。 LRU:Least Recently Used,最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。 LFU:Least Frequently Used,最不经常使用。在一段时间内,数据被使用次数最少的,优先被淘汰。 缓存不一致问题方案一: 先更新数...
2019-08-25 17:58:03
242
原创 排序算法动图演示
1.冒泡排序代码 /** *1 冒泡排序 * 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。 * 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 * 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 ...
2019-05-19 23:02:54
637
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
252
原创 分布式锁
1. 基于redis的分布式锁,使用Jedis客户端SETSET key value [EX seconds] [PX milliseconds] [NX|XX]EXsecond:设置键的过期时间为second秒。SETkeyvalueEXsecond效果等同于SETEXkeysecondvalue。 PXmillisecond:设置键的过期时间为...
2018-05-20 10:49:32
396
原创 MySQL HASH索引的适用场景和限制
HASH索引只有精确匹配索引所有列的查询才有效。因为索引自身只需要存储对应的哈希值,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快,然而,哈希索引也有限制,如下:哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行(即不能使用哈希索引来做覆盖索引扫描),不过,访问内存中的行的速度很快(因为memory引擎的数据都保存在内存里),所以大部分情况下这一点对性能的影响...
2018-05-16 11:10:24
7704
原创 MySQL BTree索引的适用场景和限制
适用场景:全值匹配:全值匹配指的是和索引中的所有列进行匹配,即可用于查找姓名和出生日期匹配最左前缀:如:只查找姓,即只使用索引的第一列匹配列前缀:也可以只匹配某一列值的开头部分,如:匹配以J开头的姓的人,这里也只是使用了索引的第一列,且是第一列的一部分匹配范围值:如查找姓在allen和barrymore之间的人,这里也只使用了索引的第一列精确匹配某一列并范围匹配另外一列:如查找所有姓为allen,...
2018-05-16 10:54:53
1282
原创 判断链表是否有环的算法
第一步,找环中相汇点。分别用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
335
原创 二进制十进制转换算法
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
969
原创 一致性HASH算法
一致性HASH算法在分布式缓存系统中,需要将数据均匀的分布到缓存服务器集群的不同机器上,就需要使用对缓存的数据的key做hash值计算, 然后在将hash值除以服务器节点的数量取模计算出数据需要落到那台服务器节点上。这种算法很简单,也可以实现数据的均匀分布, 但是,增加或者减少数据节点的时候会导致所有缓存数据失效。传统的取模方式例如10条数据,3个节点,如果按照取模的方式,那就是node a: 0...
2018-05-07 20:36:43
1706
原创 Zookeeper 架构原理
1.Zookeeper是什么Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。简单的说,zookeeper=文件系统+通知机制。2.zook...
2018-04-28 18:45:01
8147
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
2612
原创 DUBBO架构原理
节点角色说明节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监控中心 Container 服务运行容器 调用关系说明服务容器负责启动,加载,运行服务提供者。 服务提供...
2018-04-15 16:52:15
479
2
原创 RocketMQ架构原理
集群部署架构结合部署结构图,描述集群工作流程:1,启动Namesrv,Namesrv起来后监听端口,等待Broker、Produer、Consumer连上来,相当于一个路由控制中心。2,Broker启动,跟所有的Namesrv保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有topic信息。注册成功后,namesrv集群中就有Topic跟Br...
2018-04-15 16:00:03
9095
7
原创 Java NIO 通道的实现类型
文件通道Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileChannel 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获...
2018-04-07 23:41:18
671
原创 Java NIO 选择器Selector
选择器(Selector)Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。 (1) 为什么使用Selector? 仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之...
2018-04-07 17:17:12
289
原创 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
333
原创 JAVA NIO 缓冲区Buffer
缓冲区(Buffer)Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。 Buffer的基本用法 使用Buffer读写数据一般遵循以下四个步骤: 写入数据到Buffer调用flip()方法...
2018-04-07 12:18:45
300
原创 Java NIO 通道Channel
通道(Channel)Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现 这些是Java NIO中最重要的通道的实现: FileChannel:...
2018-04-07 12:17:30
448
原创 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
280
原创 java内存分配策略
JVM采用分代的垃圾回收策略:不同对象的生命周期是不一样的。目前JVM分代主要是分三个年代:新生代:所有新创建的对象都首先在新生代进行内存分配。新生代具体又分为3个区,一个Eden区、一个From Survivor区和一个To Sruvivor区。大部分对象都被分配在Eden区,当Eden区满时,还存活的对象将被复制到From Survivor区,当From Survivor区满时,此区还存活的对...
2018-03-19 17:21:06
1393
1
原创 java垃圾收集器
堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆进行回收前首先要确定哪些对象还活着,哪些对象已经死去。1,判断对象是否已死1.1引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,当引用失效时,计数器就减1;任何时刻计数器都为0的对象是不可能在被使用的。引用计数算法无法对象之间循环引用的问题。1.2 根搜索算法通过一系列名为“GC Roots”的对象作为起始点...
2018-03-18 22:50:20
3676
1
原创 Java并发编程指南(七):定制并发类
1,定制ThreadPoolExecutor类执行者框架(Executor framework)是一种机制,允许你将线程的创建与执行分离。它是基于Executor和ExecutorService接口及其实现这两个接口的ThreadPoolExecutor类。它有一个内部的线程池和提供允许你提交两种任务给线程池执行的方法。这些任务是:Runnable接口,实现没有返回结果的任务Callable接口,...
2018-03-17 13:33:27
228
原创 Java并发编程指南(六):并发集合
1. 非阻塞线程安全的列表 ConcurrentLinkedDeque并发列表允许不同的线程在同一时刻对列表的元素进行添加add()或删除pollFirst(),pollLast(),而不会产生任何数据不一致(问题)。add(), addFirst(), addLast(): 这些方法允许在列表的头部或者尾部插入一个元素。如果没有可用空间将会抛出异常。poll(), pollFirst()和pol...
2018-03-15 17:41:19
321
原创 Java并发编程指南(五):Fork/Join框架
这个框架被设计用来解决可以使用分而治之技术将任务分解成更小的问题。在一个任务中,检查你想要解决问题的大小,如果它大于一个既定的大小,把它分解成更小的任务,然后用这个框架来执行。这个框架基于以下两种操作:fork操作:当你把任务分成更小的任务和使用这个框架执行它们。join操作:当一个任务等待它创建的任务的结束。work-stealing算法:当一个任务正在等待它使用join操作创建的子任务的结 束...
2018-03-14 19:25:29
292
rabbitmq-server-3.8.1.rar
2019-11-17
ORACLE驱动jar包
2012-03-12
Pro JavaScript Design Patterns.pdf
2010-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人