自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(242)
  • 资源 (1)
  • 收藏
  • 关注

原创 JVM面试题

程序计数器 :程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。它是线程私有的虚拟机栈:虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。

2023-05-31 01:46:20 551

原创 java多线程面试题

在线程的生命周期中,它要经过新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。CAS 算法的过程是这样:它包含 3 个参数CAS(V,E,N)。V 表示要更新的变量(内存值),E 表示预期值(旧的),N 表示新值。当且仅当 V 值等 E 值时,才会将 V 的值设为 N,如果 V 值和 E 值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。最后,CAS 返回当前 V 的真实值。

2023-05-30 23:45:40 844

原创 Kafka 消费者

不同点是,同步提交阻塞当前线程,一直到提交成功,并且会自动失败重试(由不可控因素导致,也会出现提交失败);粘性分区是 Kafka 从 0.11.x 版本开始引入这种分配策略,首先会尽量均衡的放置分区到消费者上面,在出现同一消费者组内消费者出现问题的时候,会尽量保持原有分配的分区不变化。因此吞吐量会受到很大的影响。虽然自动提交offset十分简单便利,但由于其是基于时间提交的,开发人员难以把握offset提交的时机。即在执行一次新的分配之前,考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量的开销。

2023-05-05 23:22:50 846 1

原创 Kafka生产者

需求:包含hello的进入0分区,否则进入1分区// 获取数据 String msgValues = value . toString();} else {} }关联自定义分区器// 关联自定义分区器 properties . put(ProducerConfig . PARTITIONER_CLASS_CONFIG , "com.atguigu.kafka.producer.MyPartitioner");

2023-05-05 20:44:52 889

原创 Hadoop(入门)

1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。2)主要解决,海量数据的存储和海量数据的分析计算问题。3)广义上来说,Hadoop通常是指一个更广泛的概念—Hadoop生态圈。Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、 文件权限),以及每个文件的块列表和块所在的DataNode等。

2022-12-19 17:53:04 863

原创 Kafka快速实战与基本原理详解

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。Kafka的使用场景kafka是一个分布式的,分区的消息

2022-07-01 21:53:32 283 5

原创 redis基本数据类型SortedSet

一、常用命令zset和set有着必然的联系,zset保留了set不能有重复成员的特性,区别是,zset中的元素是可以指定规则排序的,它给每个元素设置一个分数,作为排序的依据。(zset中的元素不可以重复,但是score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)实战场景:排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。1.1 添加zadd key score member [

2022-04-27 22:16:32 375

原创 redis基本数据类型Hash

一、常用命令Redis hash是一个键值对集合,hash特别适合用于存储对象。 类似Java里面的双层Map<String,Map<String,Object>>实战场景:缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。1.1 添加hset key field value:将哈希表 key 中的域 field 的值设为 value 。返回值:如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域

2022-04-27 22:15:51 2015 6

原创 redis基本数据类型Set

一、常用命令集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中不允许有重复的元素,集合中的元素是有序的,不能通过索引下标获取元素,支持集合间的操作,可以取多个集合取交集、并集、差集。实战场景;标签:比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并。共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。统计网站的独立IP。利用set集合当中元素不唯一性,可以快速实时统计访问网站的独立IP。1.1

2022-04-27 22:15:21 519

原创 redis基本数据类型List

实战场景:timeline:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。一、常用命令未学习命令:BLPOP,BRPOP,BRPOPLPUSH列表是线性有序的数据结构,它内部的元素是可以重复的,并且一个列表最多能存储2^32-1个元素1.1 从列表的左侧添加lpush key value [value ...] :将一个或多个值 value 插入到列表 key 的表头,返回执行命令后,列表的长度如果 key 不存在,一个空列表会被创建并执行 lpush

2022-04-27 22:14:48 1095

原创 redis基本数据类型String

一、String字符串类型是redis最基础的数据结构。首先键都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML)、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。未研究命令:实战场景:缓存: 经典使用场景,把常用信息,到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。计数器

2022-04-27 22:13:36 1974

原创 分布式高并发系统如何保证对外接口的幂等性

原文前言接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。不知道你有没有遇到过这些场景有时我们在填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是id不一样。我们在项目中为了解决接口超时问题,通常会引入了重试机制。第一次请求接口超时了,请求方没能及时获取返回结果(此时有可能已经成功了),为了避免返回错误的结果(这种情况不可能直接返回失败吧?),于.

2022-04-05 23:13:21 270 1

原创 常见分布式事务解决方案

前言关于分布式事务,工程领域主要讨论的是强一致性和最终一致性的解决方案。典型方案包括:两阶段提交(2PC, Two-phase Commit)方案eBay 事件队列方案TCC 补偿模式缓存数据最终一致性一致性理论分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的ACID是无法奢望的。另外,业界著名的CAP理论也告诉我们,对分布式系统,需要将数据一致性和系统可用性、分区容忍性放在天平上一起考虑。两阶段提交协议(简称2PC)是实现分布式

2022-04-05 22:38:18 577

原创 网关gateWay

一、为什么微服务一定要有网关1.1 解决 API 放哪里的问题要知道,采用微服务架构的系统本身是由很多的独立服务单元组合起来的。而客户端要调用系统,则必须通过系统提供的各种对外开放的 API 来实现。问题来了,这些 API 要放在哪里呢?直接放在组成系统的服务单元上行不行?比如,在一套电商系统上,关于订单相关的 API ,放在组成订单服务的服务单元上;风控服务的 API ,放在组成风控服务的服务单元上。好,咱们假设有这么一个场景,有一位用户想在这套电商系统上查看下商品详情。那么,这个查看商品详情

2022-04-04 14:14:48 1173

原创 数据库基础之查询语句

前言数据库基本查询语句语法如下:SELECT 列名1...列名n FROM 表名 #选定查找列来自的什么表[ WHERE 查询条件 ] #限制查询条件,如果没有就查询所有的行[ GROUP BY 列名1,...列名n ] #对查询进行分组[ HAVING 条件 ] #过滤分组条件[ ORDER BY 列名1,...列名n [ ASC | DESC ] ] #限制查

2022-04-04 14:13:13 12279

原创 数据库基础之函数

一、字符函数1、拼接字符串concat(str1,str2,...sn)//返回结果为连接参数产生的字符串,如果任何一个参数为NULL,则返回值为NULLconcat_ws (x , s1 , s2 ,....)//第一个参数 x 是其他参数的分隔符,分隔符可以是一个字符串,也可以是其他参数 repeat( str,x ) //返回str重复x次的结果案例 select repeat('abc',3) //abcabcabc2、截取字符串left(str,x) //返回字符串str最左边

2022-04-04 14:11:51 987

原创 分布式事务seata

一、什么是事务事务是逻辑上的一组执行单元,要么都执行,要么都不执行.比如: 张三给李四转1000元钱, 涉及到二个操作 张三的账户-1000 李四的账户+1000 上诉二个步骤要么一起成功,要么一起失败. 不存在张三的钱扣了,李四 没收到转账。1.1 事物的特性(ACID)ACID是指数据库管理系统DBMS中事物所具有四个特性①:atomicity【原子性】 原子性表现为操作不能被分割,那么这二个操作 要么同时完成,要 么就全部不完成,若事务出错了,那么事务就会回滚, 好像什么都没有发生过②:

2022-04-04 14:09:38 965

原创 分布式流量防卫兵Sentinel

一、Sentinel的引入在我们日常生活中,经常会在淘宝、天猫、京东、拼多多等平台上参与商品的秒杀、抢购以及一些优惠活动,也会在节假日使用12306 手机APP抢火车票、高铁票,甚至有时候还要帮助同事、朋友为他们家小孩拉投票、刷票,这些场景都无一例外的会引起服务器流量的暴涨,导致网页无法显示、APP反应慢、功能无法正常运转,甚至会引起整个网站的崩溃。Sentinel为了解决上述这些问题,由此应运而生。它通过为秒杀、抢购、抢票、拉票等功能提供API接口层面的流量限制,让突然暴涨而来的用户访问受到统一的管控

2022-04-04 14:08:25 644

原创 MySQL事务和锁

事务简介事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务set @@autocommit= 0;#设置为手动提交,注意这是全局的,如果设置了,那么DML语句,必须手动commit才会提交start transaction#--转账操作(张三给李四转账1000)#1.查询张三账户余额select*fr

2022-04-03 23:24:53 1077

原创 深入理解MVCC

概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。MySQL中的锁,按照锁的粒度分,分为以下三类:全局锁:锁定数据库中的所有表。表级锁:每次操作锁住整张表。行级锁:每次操作锁住对应的行数据。一、全局锁全局锁就是对整个

2022-04-03 23:23:54 727

原创 MySQL数据类型

1、整数型类型字节数取值范围tinyint1字节有符号值:-128到127(-27到27-1) 无符号值:0到255(0到2^8-1)smallint2字节有符号值:-32768到32766(-215到215 -1) 无符号值: 0到65535 (0到2^16 -1)mediumint3字节有符号值:-8388608到8388607(-223到223-1) 无符号值: 0到16777215(0到2^24-1)int4字节有符号值:-21

2022-04-03 01:41:19 359

原创 SQL优化实践

update在更新时要根据索引更新,否则会出现表锁1、order by优化MySql中有2种排序方式Using filesort和Using indexUsing index:通过有序索引顺序扫描直接返回有序数据,这种情况即为using index,不需要额外排序,操作效率高。Using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort bufferr中完成排序操作。它低层分为单路排序和双路排序单路排序:是一次性取出满足条件行的所有字段,然后在sor.

2022-04-03 00:51:02 280

原创 MySQL优化工具详解

Mysql版本5.7使用explain关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是 执行这条SQL 注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中Explain详解与索引最佳实践一、explain中的列接下来我们将展示 explain 中每个列的信息。1.1 id列id列的编号是 select 的序列号,有几个 .

2022-04-02 22:43:33 683

原创 MySQL索引优化实践

1 联合索引最左前缀法则create index n_a_p_index on person(name,age,phone)如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。explain select * from person where name = '小明' and age = 11 and phone = '11'使用了索引n_a_p_index,索引长度为143explain select * from pe

2022-04-02 22:26:56 1056

原创 深入理解Mysql索引底层数据结构与算法

前言索引(index)是帮助MySQL高效获取数据的一种有序数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。优势:提高数据检索的效率,降低数据库的成本通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。劣势:索引列也是要占用空间的。索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率降低。一、

2022-03-31 23:56:11 1330 1

转载 @LoadBalanced注解的使用理解

在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载均衡的能力: @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); }是不是很神奇?打开@LoadBalanced的注解源码,并没有什么特殊的东东package o

2022-03-30 17:26:37 1678

原创 微服务基本概念

CAP原则C:一致性( Consistency)节点1和节点2的数据是相同的A:可用性( Availability)P:分区容错性( Partition tolerance)节点1和节点2网络不通了,出现分区了对外依然要能提供服务,不能说分区了导致整个系统岩机无法对外提供服务。在满足P的前提下, client发一条数据给节点1因为分区产生这条数据暂时无法同步给节点2如果要保证整个分布式系统的数据一致性(C)肯定要栖牲掉可用性(A),也就是整个分布式系统对外暂时不可用,不然 client对节点1.

2022-03-30 16:15:02 2223

原创 Nacos服务注册

前言Nacos核心功能点服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。 Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认 5s发送一次心跳。服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务

2022-03-30 14:42:22 5137

原创 nacos客户端启动

1、nacos客户端主要功能nacos客户端核心功能有三点,服务注册,服务心跳和服务发现服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。 Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认 5s发送一次心跳。服务发现:

2022-03-29 21:40:45 9294

原创 SpringBoot中WEB的启动

想必大家都体验过springboot的便捷,以前想要运行web项目,我们首先需要将项目打成war包,然后再运行Tomcat启动项目,不过自从有了springboot,我们可以像启动jar包一样简单的启动一个web项目,今天我们就来分析下springboot启动web项目整个流程。老规矩,我们从spring.factories文件开始。spring-boot-starter-web下没有spring.factories文件所以我们从spring-boot-autoconfigure下的spring.f

2022-03-29 17:40:38 2497

原创 微服务技术栈

微服务和微服务架构概念引入一、注册中心1.1 Nacos微服务注册中心Nacos入门和安装二、负载均衡2.1 Ribbon负载均衡Ribbon入门Feign入门

2022-03-28 22:08:51 177

原创 Feign入门

一、Feign的引入1.1 什么是FeignFeign是Netflix开发的声明式、模板化的HTTP客户端,其灵感来自Retrofit、JAXRS­2.0以及WebSocket。Feign 可帮助我们更加便捷、优雅地调用HTTP API。在Spring Cloud中,使用Feign非常简单——只需创建接口,并在接口上添加注解即可。Feign支持多种注解,例如Feign自带的注解或者JAX­RS注解等。Spring Cloud对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Rib

2022-03-28 22:04:56 2006

原创 负载均衡Ribbon入门

一、负载均衡的引入在微服务中,服务的调用很常见,比如有2个集群,A和B,如果A集群需要调用B集群的某个接口,但是B集群中有很多服务b,这时A集群就不知道调用哪个为了解决这个问题,大佬们引入了负载均衡器。负载均衡有2种类型一种是以Nginx为代表的服务端的负载均衡我们用户服务发送请求首先打到Ng上,然后Ng根据负载均衡算法进行选择一个服务调 用,而我们的Ng部署在服务器上的,所以Ng又称为服务端的负载均衡(具体调用哪个服务, 由Ng所了算)生活案例: 程序员张三 去盲人按摩, 前台的小姐姐接待了

2022-03-28 16:29:40 749

原创 微服务注册中心Nacos入门和安装

一、微服务注册中心的引入在微服务架构中,各个微服务是提供http方式联系的比如现在我的用户服务是占用(User服务)8081端口的服务, 此时我的服务提供方 (order服务端口是8080)端口 我们可以通过RestTemplate 调用方式来进行调用ResponseEntity<ProductInfo> responseEntity= restTemplate.getForEntity(“http://localhost:8081/selectProductInfoById/”+ 3 o

2022-03-28 14:49:20 1195

原创 微服务和微服务架构概念引入

一、单体架构从单体架构说起 ,一个单体架构工程对应一个归档包(war),这个war包包含了该工程的所有功能。我们成为这种应用为单体应用,也就是我们常说的单体架构(一个war包打天下)。 具体描述: 就是在我们的一个war包种,聚集了各种功能以及资源,比如JSP JS,CSS等。而业务种包含了我们的用户模块,订单模块,支付模块等等.1.1 单体架构图1.2 单体架构优缺点总结优点:①: 架构简单明了,没有”花里胡哨“的问题需要解决。②:开发,测试,部署简单(尤其是运维人员 睡着都会笑醒)缺点:

2022-03-28 14:16:09 426

原创 Redis技术栈

Redis简介和安装Redis学习之存储类型基本命令Redis发布与订阅Redis事务Redis持久化Redis主从复制Redis集群之哨兵模式Redis集群之Cluster集群Redis缓存穿透、缓存雪崩和缓存击穿

2022-03-28 01:58:04 802

原创 Redis缓存穿透、缓存雪崩和缓存击穿

前言在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。为了克服上述的问题,项目

2022-03-28 01:51:26 16361

原创 Redis集群之Cluster集群

一、简介1.1 什么是 Redis 集群Redis 集群是一个分布式(distributed)、容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset)。Redis 集群中不存在中心(central)节点或者代理(proxy)节点, 集群的其中一个主要设计目标是达到线性可扩展性(linear scalability)。Redis 集群为了保证一致性(consistency)而牺牲了一部分容错性: 系统会在保证对网络

2022-03-28 00:59:21 4029

原创 Redis集群之哨兵模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。一、哨兵模式概述哨兵模式是一种主从切换技术,当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从.

2022-03-27 21:54:45 1128

原创 Redis主从复制

一、前言1.1 概念注意主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称之为主节点(master/leader),后者称之为从节点(slave/flower);数据的复制都是单向的,只能从主节点到从节点。 Master以写为主,Slave以读为主。默认情况下,每台Redis服务器都是主节点。且一个主节点可以有多个从节点或者没有从节点,但是一个从节点只能有一个主节点。1.2 主从复制的作用1、数据冗余:主从复制实现了数据的热备份,是持久化的之外的一种数据冗余方式

2022-03-27 21:52:47 1485

java System源码

java System源码 system类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。 由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用

2018-03-21

空空如也

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

TA关注的人

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