自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux lvs负载均衡

Linux Virtual Server(LVS)是一个基于Linux内核的开源软件项目,用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡,从而提高系统的可扩展性和可靠性。

2023-08-02 20:00:00 3151

原创 Java NIO 详解

java.nio.Buffer 用于读写数据,是Java NIO读写操作的中间容器。​​​​​​​数据从通道读入缓冲区,从缓冲区写入通道。缓冲区本质上是一块可以写入和读取数据的内存,这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便该块的内存访问​​​​​​​。缓冲区实际上就是一个容器对象/数组。常用的Buffer子类包括:ByteBuffer:ByteBuffer是最常用的Buffer实现类,用于读写字节数据。CharBuffer:用于读写字符数据。

2023-07-28 19:00:00 2527

原创 Java IO(BIO) 总结

java IO BIO

2023-07-26 08:00:00 1987

原创 Spark(1)-- 一文看懂Spark

Spark是一个快速而通用的大数据处理框架,它提供了高效的分布式数据处理和分析能力。spark与Hadoop的关系:Spark虽然不是Hadoop的一部分,但与Hadoop生态系统紧密集成。Spark提供了更快的数据处理和分析能力,具备批处理、流处理、机器学习和图计算等功能,spark可以理解为Hadoop中MapReduce的升级后的计算模型。HadoopSpark类型完整的分布式基础平台,支持计算、存储、调度等分布式计算工具,可用于迭代计算, 交互式计算, 流计算生态系统。

2023-07-24 08:00:00 383

原创 hadoop -- Hbase

HBase是一个分布式、可扩展、面向列的数据存储(百万级别列)、可伸缩、高可靠性、实时读写的NoSQL 数据库。HBase利用 Hadoop的 HDFS作为其文件存储系统, 利用MapReduce 来处理HBase中的海量数据, 利用Zookeeper作为分布式协同服务。

2023-07-12 10:00:00 1075

原创 hadoop --- hive

..Hive 使用HiveQL的建表语句,DDL 来定义表结构。DDL可以用于创建、修改、删除Hive表的元数据,包括表名、列定义、分区定义、存储格式等。这里的发部分语法与标准的SQL建表语句还是相同的。EXTERNAL:可选项, 用于创建外表IF NOT EXISTS : 可选项,如果表已存在,就不创建。与标准SQL用法相同table_name :指定要创建的表名称column1, column2 : 表的列名,以及列的数据类型。

2023-07-11 09:00:00 758

原创 hadoop --- MapReduce

MapReduce可以分解为Map (映射) + Reduce (规约) , 具体过程:Map : 输入数据集被切分成多个小块,并分配给不同的计算节点进行处理Shuffle and Sort:洗牌和排序,在 Map 阶段结束后,将每个 Mapper 生成的键值对按照键进行排序,并将相同键的值归并在一起,并将相同的键发送给后续的reduceReduce: 规约计算,每个计算节点独立处理它们的键值对,并生成最终的输出结果。

2023-07-05 20:00:00 1605

原创 Hadoop --- HDFS配置与操作

hadoop的配置文件存放目录在 {HADOOP_HOME}/etc/hadoop 下, 与 hdfs相关的配置:新增属性信息: fs.defaultFSfs.defaultFS表示指定集群的文件系统类型是分布式文件系统(HDFS),datanode心跳发送到nameNode的地址。

2023-06-25 11:56:22 1790

原创 Hadoop --- HDFS介绍

HDFS 文件存储系统。适合一次写入,多次读出的场景。HDFS不需要单独安装,安装Hadoop的时候带了HDFS系统。

2023-06-21 17:33:56 2307

原创 大数据hadoop生态技术简介

大数据生态知识体系

2023-06-15 15:46:23 3474

原创 Redis中的缓存穿透、雪崩、击穿

缓存穿透:大量请求根本不存在的key, 应用服务器压力变大缓存雪崩:redis中大量key集体过期,数据库压力变大,服务器崩溃缓存击穿:redis中一个热点key过期(大量用户访问该热点key,但是热点key过期),,数据库的访问压力瞬间激增三者出现三者出现的根本原因:Redis命中率下降,请求直接打在DB上。正常情况下,大量的资源请求都会被redis响应,在redis得不到响应的小部分请求才会去请求DB,这样DB的压力是非常小的,是可以正常工作的。

2023-05-13 16:47:25 827 1

原创 Java8--Stream的各种用法(二):collect、Collectors

Steam Collectors的使用

2022-11-30 15:08:21 3276

原创 Java8--Stream的各种用法(一)

java8 Stream API

2022-10-25 16:04:00 627

原创 线上问题处理1---CPU飙高问题定位

线上CPU飙高问题定位, top命令详解

2022-07-31 18:39:13 1617

原创 代码简洁3 —— 注释

前段时间在组织代码review时,提到代码可读性问题时,很多人的第一反应竟然是多添加注释。而我始终觉得注释只能是锦上添花,而不能雪中送炭。再多的注释也改变不了代码逻辑组织混乱的现实,反而过多的注释会加重代码阅读的时间。 什么也比不上放置良好的注释来得有用;什么也不会比乱七八糟的注释更能搞乱一个模块;什么也不会比陈旧、提供错误信息的注释更有破坏性 注释是一种必须的恶,只有在编程语言表达能力不够时,我们才需要借助注释来说明代码含义。注释的恰当用法是用来弥补我们...

2022-01-25 17:17:43 1230

原创 代码简洁2 —— 函数、类

读过spring源码的同学一定还记得spring中的核心方法—— refresh() , 它用十几行代码为我们描述了spring容器的启动过程: @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepar

2022-01-25 15:31:36 309

原创 代码简洁1 —— 什么是简洁代码、有意义的命名

最近新入职一家初创公司, 团队不大,工作了一段时间后发现团队中的代码情况很糟糕。团队一共两个产品线,五个开发人员, 每个人一个代码风格,每个人有每个人的代码风格本无可厚非, 但是如果代码没有经过合理的组织,只是机械的堆积功能,那对于以后功能迭代和需求变更会是很灾难性的。所以我打算将几年前看的一本书《代码整洁之道》—— 英文名叫《clean code》 重新再读一遍,也为了不让自己跑偏了。1、首先思考几个问题:我们读代码读的是什么?? 我们写出的代码的作用是什么?? 什么是好代码,...

2022-01-24 17:59:52 930

原创 MYSQL JSON数据操作

mysql JSON函数

2021-11-29 16:26:41 1763

原创 Mysql replace into 和 update or insert

在用mysql做批量数据同步时, 经常会遇到的一种情况是: 批量获取的数据, 有些需要新增,有些需要修改。 mysql对此提供了两种解决方案REPLACE INTO代替 INSERT INTO INSERT ...ON DUPLICATE KEY UPDATE ...这两种方案, 都需要有主键或唯一索引, 当主键或唯一索引存在冲突时, 会执行修改数据,否则会插入数据。 下面我们具体看一下两种方案。首先我们先创建表和索引:show create table person; -- 查看...

2021-10-12 18:41:38 2650 1

原创 Mysql 锁

部分内容摘录自博客:正确的理解MySQL中让你想到就烦的各种锁 (一)锁分类:1、按照操作粒度划分:表级锁: 每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低 行级锁:每次操作锁住一行数据。锁定粒度最小,发生锁冲突概率最低,并发度最高 记录锁(RECORD):锁定单个行记录(索引记录),普通认知上的行锁(RR、RC隔离级别) 间隙锁(GAP):锁定索引记录间隙,确保索引记录间隙不变(RR 隔离级别) 临键锁(NEXT-KEY):记录锁和间隙锁的组合,锁住数据的同时..

2021-09-28 17:44:19 614

原创 MySQL MVCC实现原理

什么是MVCC:MVCC 全名Multi Version Concurrency Control 多版本控制, 是指在数据库中为了实现高并发的数据访问,对数据进行多版本处理,并通过事务的可见性来保证事务能看到自己应该看到的数据版本。MVCC 在MySQL Innodb中的实现主要是为了提高数据库的并发性,更好的处理读写冲突问题。MVCC中的几个概念:当前读:读取的是最新版本的数据,且读取是其它并发事务不能修改当前记录,需要对读操作进行加锁。如: select lock in share mo

2021-09-27 19:02:28 676

原创 MYSQL 事务ACID与日志关系

事务相关特性回顾:事务的四个特性: ACIDAtomicity: 原子性,一个事务包含多个操作,要么完全执行所有部分,要么不执行任何操作。如果执行过程发生意外错误,应该支持回滚操作。 Consistency: 一致性,数据库操作前后应该保持某个特征不变 Isolation: 隔离性,事务提交之前,相关数据不能被其他事务访问 Durability: 持久性,事务提交后,修改将被永久保存于数据库中事务的隔离级别:脏读: 实时读取其他事务未提交的数据,数据随时可能会发生修改 不可重复读:..

2021-09-27 09:51:59 461

原创 Mysql系统文件--日志文件、数据文件

系统文件包数据文件、配置文件、pid进程文件、socket网络链接文件,这些文件都可以理解为日志文件。日志文件分类:错误日志(error log) : 记录mysql服务的启停时正确和错误的信息,还记录启动、停止、运行过程中的错误信息。默认开启, 查看命令 --- show variables like '%log_error%' 通用查询日志(general query log) : 记录一般查询语句, 查看命令 --- show variables like '%general%' 中继..

2021-09-26 11:30:50 2108

原创 Java多线程---Phaser

Phaser是Java7新引入的并发API,我们可以将Phaser的概念看成是一个个的阶段, 每个阶段都需要执行的线程任务,任务执行完毕后就进入下一阶段。这里和CyclicBarrier 和CountDownLatch的概念类似, 实际上也确实可以用Phaser代替CyclicBarrier和CountDownLatch。Phaser也是通过计数器来控制, 在Phaser中叫parties, 我们在指定了parties之后, Phaser可以根据需要动态增加或减少parties的值。Phaser常用

2021-07-01 16:37:34 3521 1

原创 java多线程---CyclicBarrier

CyclicBarrier翻译过来也叫栅栏,意思很明显,就是一组线程相互等待,均到达栅栏的时候,再运行,功能与CountDLatch有些相似。CyclicBarrier是可以重复使用的,而之前的CountDownLatch是一次性的。CyclicBarrier允许一组线程相互等待,直到到达某个公共屏障点,屏障点即一组任务执行完毕的时候。CyclicBarrier 与 CountDownLatch的区别CyclicBarrier是可重复使用的, CountDownLatch是一次性的 使用场景, C

2021-06-29 12:05:48 379

原创 java多线程---Semaphore

Semaphore(信号量):是一种计数器, 用来保护一个或多个共享资源的访问。 如果线程要访问一个资源就必须先获取信号量。 如果信号量内部计数器大于0, 信号量减1, 然后允许共享这个资源; 否则,如果信号量的计数器等于0, 信号量将会将线程置于休眠状态,直至计数器大于0。注意: 信号量使用完后,必须释放。Semaphore的常用API: // 构造方法 public Semaphore(int permits) { //permits指定计数器大小 sync

2021-06-28 16:57:49 222

原创 JVM常用指令

1、jpsjps(java process status tool), 用于查看java进程及相关信息,如果你想找到一个java进程的pid,可以使用jps命令代替linux的ps命令。命令格式: jps 【options】 【hostid】options参数:-l : 显示进程ID, 显示主类全名或jar路径 -q :显示进程ID -m :显示进程ID, 显示JVM启动时传给main() 函数的参数 -v : 显示进程ID,显示JVM启动参数hostid : 主机或其他服务器IP

2021-06-26 13:27:41 5546

原创 ES 集群规划和集群调优策略

1、集群规划

2021-05-31 19:25:23 2014

原创 ES分布式架构

ES的架构遵循其基本概念: 一个采用Restful API 标准的高扩展和高可用性的实时数据分析特性:高扩展: 体现在EStia

2021-05-31 14:59:12 1753

原创 ES集成中文分词器: IK 3.0

<?xml version="1.0" encod<!DOCTYPE properties SYST<properties><comment>IK Analy<!--用户可以在这里配<entry key="ext_d<!--用户可以在这里

2021-05-30 17:56:38 756

转载 力扣39:组合总和

给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combination-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。...

2021-05-28 20:30:27 208

转载 力扣1190:反转每对括号间的子串

题目描述:给出一个字符串s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意: 结果中 不应 包含任何括号。示例:示例 1:输入:s = "(abcd)"输出:"dcba"示例 2:输入:s = "(ed(et(oc))el)"输出:"leetcode"示例 3:输入:s = "a(bcdefghijkl(mno)p)q"输出:"apmnolkjihgfedcbq"题解:...

2021-05-26 20:37:42 340

原创 dubbo SPI源码解读: ExtensionLoader 加载过程

上一篇博客中我们介绍了dubbo中SPI功能的使用规则,这里我们看一下它的加载过程:这里它的加载过程就两步:获取ExtensionLoader的实例对象 通过ExtensionLoader的实例对象获取到我们要的扩展点实例1、获取ExtensionLoader实例对象getExtensionLoader 方法做了这么几件事:1、 判断class对象是否为空、是否为接口、类上是否有@SPI注解2、查询缓存获取ExtensionLoader实例, 如果没有则创建一个实例对象,并...

2021-05-24 15:41:45 265

原创 dubbo SPI使用:@SPI 与 @Adaptive

dubbo中使用spi除了配置文件外还需要有@SPI和@Adaptive注解,这两个注解中都可以设置参数,且@Adaptive注解可以设置在方法上也可以设置在类上。下面我们来卡一下他的具体使用规则。1、引入dubbo依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.x</v

2021-05-23 18:21:06 882 2

原创 dubbo服务注册与发现源码解析

1、zookeeper中注册的数据我们一般使用zookeeper作为dubbo的注册中心,但是我们注册到dubbo中的数据是什么样的呢,这里我们就来看一下:1、初始时zookeeper中的数据:这是zookeeper中只有testRoot 和zookeeper两个路径2、我们启动dubbo的提供者和消费者:消费者:3、查看zookeeper中注册的信息下面是我们将获取的两段url解码后的信息:consumer:consumer://192.168.5..

2021-05-21 17:48:18 892

原创 jdk的SPI和dubbo的SPI

什么是SPI: SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI的作用就是为这些被扩展的API寻找服务实现。使用SPI机制的优势是实现解耦,使得第三方服务模块的装配控制逻辑与调用者的业务代码分离。JDK中的SPI:java中如果想要使用SPI功能,先要提供标准的服务接口,然后再提供相关接口实现和服务调用者。通过SPI机制中约定的信息进行查询相应接口的实现,如下图:SPI遵...

2021-05-20 17:54:13 468 1

原创 dubbo整体框架设计

1、dubbo调用关系说明前面我们已经介绍过dubbo的调用关系说明,这里我们对其做一些补充dubbo的调用关系主要由四部分组成:一、Provider: 暴露服务的服务提供方Protocol:协议, 负责提供者和消费者之间协议交互数据 Service:服务,真实的业务服务信息,可以理解为接口和实现 Container:容器,dubbo的运行环境二、Consumer:调用远程服务的服务消费方Protocol:协议,负责提供者和消费者之间协议交互数据 Cluster:集群,感知提

2021-05-19 18:13:12 579

原创 Dubbo与SpringBoot整合(2)----dubbo的高级功能

上一篇文章中我们介绍了dubbo与springBoot整合的基本功能:dubbo与springBoot整合(1), 使用的方式是:引入 dubbo-spring-boot-starter 依赖包,在application.properties中配置dubbo的属性, 使用@EnableDubbo开启dubbo支持, 使用@Service暴露服务, 使用@Reference调用服务。但是有些功能,暂时不支持使用注解配置,如我们要设置具体到一个类中一个方法的超时时间,这时候@service注解就没法满足。d

2021-05-19 13:46:13 548 1

原创 力扣:735 使用标记跳转简化代码 A:{ while/for ..... break A }

行星碰撞问题题目描述:给定一个整数数组 asteroids,表示在同一行的行星。对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。下面是题目给出的示例: 注意示例4,有助于搞清楚题目意思,我刚开始做的时候就弄错了题目含义这个题目倒不是有..

2021-05-13 20:01:17 186

原创 Dubbo与springBoot整合(1)

dubbo的基本介绍:Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。官网:http://dubbo.apache.org/基本架构设计:服务提供者(provider): 暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务 服务消费者(consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务。集群环境下,服务消..

2021-05-12 20:39:40 293 2

空空如也

空空如也

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

TA关注的人

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