- 博客(105)
- 收藏
- 关注
原创 JDK8新特性讲解
1. JDK8之default关键字在jdk1.8之前接口里面是只能有抽象方法,不能有任何方法的实现,在jdk1.8里面打破了这个定义,引入了default关键字,使用default修饰方法,可以在接口里面定义具体的方法实现,即接口的默认方法,这个接口的实现类实现了接口之后,不用管这个default修饰的方法就可以直接调用,即接口方法的默认实现public interface Animal { void run(); void eat(); default void bre
2021-11-25 13:54:44
1443
原创 设计模式-适配器模式
1. 简介适配器模式(Adapter Pattern)见明知意,是作为两个不兼容的接口之间的桥梁,属于结构型设计模式。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。2. 常见的几类适配器2.1 类的适配器想将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可2.2 对象的适配器想将一个对象转换成满足另一个新接口的对象时,可以创建一个适配器类,持有原类的一个实例,在适配器类的方法中,调用实例的方法即可2.3 接口的适配器不
2021-08-18 18:54:49
123
原创 设计模式-建造者模式
建造者模式使用多个简单的对象一步一步构建成一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。允许用户只通过指定复杂对象的类型和内容就可以构建他们,不需要知道内部的具体构建细节场景举例KFC创建套餐:套餐是一个复杂对象,它一般包含汉堡,烤翅,饮料等组成部分,不同的套餐不同的组合,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构成一份完整的套餐。核心组成Builder : 抽象建造者,定义多个通用方法和构建方法ConcreteBuilder
2021-05-19 22:01:35
184
原创 设计模式-工厂模式
工厂模式介绍它提供了了⼀种创建对象的最佳方式,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象工厂模式的好处:解耦:分离职责,把复杂的对象的创建和使用的过程分开复用代码降低维护成本:如果对象创建复杂且多处需用到,如果每处都进行编写,则很多重复代码,如果业务逻辑发生了改变,需要四处修改;使用工厂模式统一创建,则只需要修改工厂类即可,降低维护成本工厂模式三种不同实现方式简单工厂模式:通过传入相关的类型来返回相应的类,这种方式比较单一,可扩展性相对较差工
2021-05-18 22:44:48
212
2
原创 设计模式-单例设计模式
单例设计模式:单例的意思只包含一个对象被称为单例的特殊类通过单例设计模式可以保证系统中,应用该模式的类只有一个对象使用场景业务系统全局只需要一个对象实例,比如发号器功能Spring IOC容器中的bean默认就是单例springboot中的controller、service、dao层中通过@autowire的依赖注入对象默认都是单例的单例设计模式分类懒汉:就是所谓的懒加载,延迟创建对象饿汉:与懒汉相反,提前创建对象单例设计模式大体实现步骤私有化构造方法..
2021-04-27 16:17:32
139
2
原创 设计模式之简介篇
前言为什么要学习设计模式?当公司项目需要重构,但是不知道如何下手,做到高内聚低耦合。为了更好的理解框架源码设计思想,封装中间件。为了让代码更好重用、可读、可靠、可维护、可拓展。总而言之学习设计模式是一个高级研发工程师必不可少的技能。1. 设计模式六大原则设计模式是站在设计原则的基础之上的,所以在设计模式之前,有必要对这些设计原则先做一下了解软件设计开发原则为了了让的代码更更好重⽤用性,可读性,可靠性,可维护性诞⽣生出了了很多软件设计的原则,这6⼤大设计原则是我们要掌握的将六⼤大原则的英⽂
2021-04-25 22:06:32
140
原创 Hadoop分布式搭建
1. 环境准备准备三台centos7虚拟机,设置静态IP(192.168.1.103,192.168.1.104,192.168.1.105)主机名称分别用hadoop3,hadoop4,hadoop5命名三台机器安装好java环境,并准备好上一篇博客中编译好的hadoop压缩包2. 集群规划部署HDFS有三个组件:NameNode(很重要,占资源)部署在一个节点上(企业级不会将其他模块与NameNode 部署在一起),用于查找数据块DataNode为实际存放数据的模块,
2020-06-03 11:13:18
264
原创 Hadoop单机版搭建
1. Jar包准备在上一篇博客中已经准备好linux环境,看本篇博客之前请看楼主上一篇大数据简介博客,准备系统环境下载以下jar包,传入linux服务器的opt目录下hadoop-2.7.2-src.tar.gz ,apache-maven-3.6.0-bin.tar.gz,apache-ant-1.9.15-bin.tar.gz,protobuf-2.5.0.tar.gz1.1 安装maven# 1. 解压maven包tar -zxvf apache-maven-3.6.0-bin.tar.g
2020-05-20 16:24:08
715
原创 大数据简介
1. 大数据简介大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。目前主要解决海量数据的存储和海量数据的分析计算问题。按顺序给出数据存储单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。1Byte = 8bit 1K = 1024Byte 1MB = 1024K1G = 1024M 1T = 1024G 1P = 1024T1.2 大数
2020-05-18 17:53:15
1804
原创 notify和notifyall的区别
讲解之前先贴上一篇代码,如下代码线程A中执行lock.wait()方法,不设置等待时间,设置无限等待public static void main(String[] args) { final Object lock = new Object(); new Thread(new Runnable() { @Override ...
2020-03-26 16:48:38
4722
2
原创 sleep和wait的区别
1. 基本的差别sleep是Thread类的方法,wait是Object类中定义的方法sleep方法可以在任何地方使用 ,wait方法只能在synchronized方法或synchronized块中使用2. 最主要的本质区别Thread.sleep只会让出CPU, 不会导致锁行为的改变即如果当前线程拥有锁,那么Thread.sleep不会让线程释放锁,而只会主动让出CPU,CPU会可以去...
2020-03-26 15:57:13
415
原创 线程的状态
我们打开Thread类的源码,搜索State字段,会看到State的枚举值 public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for...
2020-03-26 14:54:52
131
原创 实现处理线程的返回值
1. 给run()方法传参实现的方式主要有三种构造函数传参成员变量传参(set)回调函数传参这里不贴具体代码。可以自行实验2. 如何实现处理线程的返回值2.1 主线程等待法主线程等待法实现起来比较简单,但是必须自己实现线程等待逻辑,当需要等待的变量一多,代码会变得异常的臃肿,而且无法控制等待多久,无法精准控制2.2 使用Thread类的join()阻塞当前线程以等待子线...
2020-03-26 14:10:13
398
原创 Thread和Runnable的关系
1. 简介Thread是一个类,而Runnable是一个接口。Thread类实现了Runnable接口,Runnable接口里只有一个抽象的run()方法。说明Runnable不具备多线程的特性。Runnable依赖Thread类的start方法创建一个子线程,再在这个子线程里调用run()方法,才能让Runnable接口具备多线程的特性2. 使用Thread创建线程创建一个自定义类...
2020-03-26 11:42:18
3032
原创 线程的start方法和run方法的区别
1. 使用run方法启动线程public class ThreadTest { private static void attack() { System.out.println("Fight"); System.out.println("Cuurrent Thread is : " + Thread.currentThread().getName());...
2020-03-26 11:13:30
754
原创 vue-element-admin配置讲解
1. 项目初始化git clone https://github.com/PanJiaChen/vue-element-admincd vue-element-adminnpm install npm run dev 2. 项目精简删除scr/views下的源码, 保留:dashboard:首页error-page:异常页面login:登录redirect:重定向...
2020-03-17 14:53:24
21293
13
原创 RocketMQ总结与补充
1. 消息队列优缺点优点:1. 异步2. 解耦3. 削峰缺点:1. 系统可用性越低:外部依赖越多,依赖越多,出问题风险越大2. 系统复杂性挺高:需要考虑多种场景,比如消息重复消费,消息丢失3. 需要更多的机器的人力:消息队列一般集群部署,而且需要运维和监控,例如topic申请等2. 消息队列怎么避免重复消费任何一个消息队列无法保证消息不重复消费,RocketMQ也一样不保证消息...
2020-02-19 14:37:52
315
原创 RocketMQ分布式事务消息
1. 分布式事务消息介绍简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。2. RocketMQ4.X分布式事务消息架构讲解RocketMQ事务消息:RocketMQ提供分布式事务功能,通过RocketMQ事务消息能达到分布...
2020-02-16 15:53:34
684
原创 RocketMQ消费者核心配置和核心知识讲解
1. RocketMQ消费者核心配置讲解consumeFromWhere配置1. CONSUME_FROM_FIRST_OFFSET:初次从消息队列头部开始消费,即历史消息(还存在broker的),全部消费一遍,后续再启动接着上次消费的进度开始消费2. CONSUME_FROM_LAST_OFFSET:默认策略,初次从该队列最尾开始消费,即跳过历史消息,后续再启动接着上次消费的进度开始消费...
2020-02-14 21:29:00
4111
1
原创 RocketMQ生产者核心配置和核心知识讲解
1. 消息队列RocketMQ生产者核心配置生产者常见核心配置:compressMsgBodyOverHowmuch:消息超过默认字节4096后进行压缩retryTimesWhenSendFailed:失败重复次数maxMessageSize:最大消息配置,默认128ktopicQueueNums:主题下面的队列数量,默认是4autoCreateTopicEnable:是否自动创建t...
2020-02-13 16:26:58
1634
原创 RocketMQ集群架构分析与主从模式搭建
1. RocketMQ集群模式架构分析1.1 单节点优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢缺点:不可靠,如果宕机,会导致服务不可用1.2 主从(异步、同步消息)优点:同步双写消息不丢失,异步复制存在少量丢失,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行监测然后进行停止broker,...
2020-02-12 12:07:29
1197
1
原创 RocketMQ介绍与安装
1.RocketMQ简介RocketMQ是Apache RocketMQ֢作为阿里开源的一款高性能、高吞吐量的分布式消息中间件特点:支持Broker和Consumer端消息过滤支持发布订阅模型,和点对点支持拉pull和推push两种消息模式单一队列百万消息、亿级消息堆积支持单master节点,多master节点,多master多slave节点任意一点都是高可用,水平拓展,prod...
2020-01-19 10:39:52
362
原创 RabbitMQ--核心概念及AMQP协议
1. 互联网大厂为什么选择RabbitMQRabbitMQ的高性能之道是如何做到的什么是AMQP高级协议AMQP核心概念是什么
2020-01-14 16:16:15
533
原创 rabbitmq、kafka、activemq、rocketmq之间对比,区别
1. 为什么使用消息队列使用消息队列主要应用于三个场景:解耦、异步、削峰1.1 解耦传统模式:传统模式的缺点:系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!中间件模式:中间件模式的的优点:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。1.2 异步传统...
2020-01-13 14:42:58
1265
原创 Redis--秒杀系统分析需求
1. 秒杀系统业务分析2. 秒杀系统结构分析如图所示,第一层是前端拦截层、第二层是网关处理层、第三层是业务逻辑层、第四层是DB入库。在第三层中我们会用到Redis,这篇博客是秒杀系统中的Redis的应用场景,所以这篇博客主要讲解业务逻辑层。2.1 网关处理层简单讲一件网关处理层的实现,网关处理层主要处理后端流量数据的拦截,比如说我们有几十万的用户同时进行一个秒杀的功能,那么我们就会有这...
2020-01-08 16:43:54
704
原创 Redis--布隆过滤器
1. 简介布隆过滤器可以用来判断一个元素是否在一个集合中。它的优势是只需要占用很小的内存空间以及有着高效的查询效率布隆过滤器是什么,一定要用吗?黑客流量攻击:故意访问不存在的数据,导致程序不断访问DB数据库的数据黑客安全阻击:当黑客访问不存在的缓存时迅速返回避免缓存及DB挂掉思考:50亿个电话号码,现有10万个电话号码,如何判断这10万个是否已经存在在50亿个之中?(可能方案:数...
2020-01-04 16:08:07
293
原创 Redis---过期key清除策略
我们模拟一个业务场景, 我们使用redis来保存一些登录信息,来实现一个redissession,如果我们的用户特别特别多,然后我们的token又有一个过期时间,那redis是怎么对过期的key进行删除的呢?redis的删除策略主要有三种惰性删除定时删除定期删除1. 惰性删除当一些客户端获取 key 的时候,key会被发现并主动的过期。放任键过期不管,但是每次从键空间中获取时,都...
2020-01-02 18:07:54
180
原创 Redis--分布式锁
在Java中,关于锁我想大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常,我们以synchronized 、Lock来使用它。但是Java中的锁,只能保证在同一个JVM进程内中执行。如果在分布式集群环境下呢?1. 什么是分布式锁分布式锁是控制分布式系统或不同系统之家共同访问共享资源的一种实现。如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往通...
2020-01-02 17:00:46
179
3
原创 Redis--持久化
Redis持久化用一句话可以将持久化概括为:将数据(如内存中的对象)保存到可永久保存的存储设备中。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、 XML 数据文件中等等。Redis 为什么要持久化?Redis 中的数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式...
2019-12-30 10:43:42
251
原创 Redis--GEO
简介GEO(地理信息定位)是存储经纬度,计算两地距离,范围计算等。命令geoadd增加地理位置信息geoadd key longitude latitude member [longitude latitude member...]geopos查找指定key的经纬度信息,可以指定多个key,批量返回geopos key member [member...]geodist...
2019-12-26 17:23:22
364
原创 Redis--HyperLogLog
1. 介绍Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身。HyperLogLog的本质还是字符串在开始这一节之前,我们...
2019-12-26 16:32:10
139
原创 Redis--pipeline(流水线)
什么是流水线首先我们看一下Redis1次网络命令通讯模型如果要执行多条命令,要执行多次操作,批量网络命令通讯模型如下我们知道Redis的命令执行时间是特别快的,但是网络相反会有很大的不同,可能是内网之间通讯,也有可能是外网之间通讯,也甚至可能是跨机房,跨地区访问都有可能。那么什么是流水线,流水线是将一批命令批量打包,然后在服务端进行批量计算,然后将批量结果返回给客户端,如下图所示,这样...
2019-12-26 14:51:08
293
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人