自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解决前端el-select下拉数据量过大造成卡顿问题

背景为了将商家入驻申请单批量转移给某位招商人员,实现了一个下拉列表,可以进行下``

2021-06-14 17:33:54 3911

原创 JAVA8-Optional

如何为缺失的值建模原始的两种方式:Java8中引入了Optional类。java.util.Optional。变量存在时,Optional类只是对类简单封装。变量不存在时,缺失的值会被建模成一个“空” 的Optional对象,由方法Optional.empty()返回。Optional.empty()方法是一个静态工厂方法,它返回Optional类的特定单一实例。null和Optional.empty()没啥区别,就是防止出发nullException。代码中person引用的是Optio

2020-11-18 19:08:20 224

原创 JAVA8-接口的默认方法

传统上,Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一旦类库的设计者需要更新接口,向其中加入新的方法,这种方式就会出现问题。例如,给List接口加一个方法,那么所有实现类都需要实现这个方法。JAVA8为了解决这个问题,引入新的机制,支持在声明方法的同时提供方法。JAVA8允许在接口内声明静态方法。实现接口的类,如果不显式地提供该方法的具体实现,就会自动继承默认的实现。List<Integer>

2020-11-13 18:29:32 493

原创 JAVA8-Labmda重构与调试

interface Task{ public void execute(); } public static void doSomething(Runnable r){ r.run(); } public static void doSomething(Task a){ a.execute(); }如果写成这样doSomething(() -> System.out.println("Danger danger!!"));并不清楚用的哪个方法。可以改写成.

2020-11-12 19:47:35 221

原创 JAVA8-并行数据处理

1.将顺序流转换为并行流(生成1 - n,转为并行流)并行归纳操作如果想将并行流转为顺序流,可以使用sequential方法。流水线会并行执行,因为最后调用的是它。最后一次parallel或sequential调用会影响整个流水线。并行流内部使用了默认的ForkJoinPool,它默认的线程数量就是你的处理器数量。可以通过java.util.concurrent.ForkJoinPool.common. parallelism来改变线程大小共享可变状态会影响并行流以及并行计算,下面的代码

2020-11-10 17:59:13 661

原创 JAVA8-用流收集数据

Collector预定义方法预定义收集器1.获取流中元素个数2.查找流中的最大值和最小值Collectors.maxBy() Collectors.minBy()Collectors.summingInt Collectors.summingLong Collectors.summingDouble它可接受一个把对象映射为求和所需int的函数,并返回一个收集器;该收集器在传递给普通的collect方法后即执行我们需要的汇总操作。计算数值平均数:Collectors.averagi

2020-11-06 18:23:46 233

原创 JAVA8-stream

什么是流?流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。流还可以透明的并行处理,你无需写任何多线程代码了

2020-10-26 10:56:13 70

原创 JAVA8-Lambda表达式

前言行为参数化,是将方法作为参数进行传递,可以适应更多的需求变化。行为参数化中的方法参数,在JDK8之前可以使用匿名累来进行传递,也可以通过一个指定接口实现一个类来进行传递。总之,行为参数化传递代码有助于应对不断变化的需求。什么是Lambda表达式可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。Lambda表达式可以作为参数传递给方法或者存储在变量中。Lambda表达式分为三部分、1.参数

2020-10-22 18:34:56 1138 1

原创 JAVA8-了解新特性

相关概念1.流处理java增加了stream Api,可以将链接起来成为一个复杂流水线。处理流程类似于Linux的这样的命令cat file1 file2 | tr "[A-Z]" "[a-z]" | sort | tail -3先将file1流和file2流合并再交给tr进行字符处理,处理完的流交给sort排序,最后再取末尾的三行数据。2.用行为参数化把代码传递给方法Java8增加了把方法作为参数传递给另一个方法的能力。Stream API就是构建在通过传递代码使操作行为实现参数化的思想上

2020-09-27 18:15:25 107

原创 Kafka之可靠性

前言Kafka采用多副本机制,每个分区都有1个或多个副本,以此来实现水平扩展、提供容灾能力、提升可用性和可靠性。副本数据副本是指不同数据节点持久化同一份数据。当某节点上数据丢失可以从其他节点上获取副本数据,从而解决副本丢失问题。Kafka中每个分区有一个leader副本,其余的都是follower副本。follower副本只负责数据同步。AR:分区中所有副本统称为AR。ISR:是指与leader副本保持同步状态的副本集合。LEO:分区中最后一条消息的下一个位置。HW:高水位,ISR中最小的L

2020-09-25 20:07:27 315

原创 Kafka之协调器

由于不清楚组协调器与消费者协调器的作用。这里记录下。消费者协调器(ConsumerCoordinator)ConsumerCoordinator 是 KafkaConsumer 的一个私有的成员变量,因此 ConsumerCoordinator 中存储的信息也只有与之对应的消费者可见,不同消费者之间是看不到彼此的 ConsumerCoordinator 中的信息的。 一个Consumer实例对应一个ConsumerCoordinator。ConsumerCoordinator 的作用:处理更新消费

2020-09-20 18:13:39 357

原创 Kafka之日志存储

前言Kafka中消息是以主题来进行分类,每个主题又有一个或者多个分区,分区数可以再主题创建时或之后增加都可以。每条消息会根据分区规则追加到指定的分区当中。分区中的每条消息都会被分配一个唯一的序列号,也就是通常所说的偏移量 (offset)。分区文件考虑多副本的情况,一个分区对应一个日志( Log)。为了防止 Log 过大,Kafka 又引入了日志分段( LogSegment)的概念,将 Log 切分为多个 LogSegment,相当于一个巨型文件被平均分配为多个相对较小的文件。事实上, Log 和 L

2020-09-19 13:00:37 892

原创 springcloud

SpringCloud主要功能SpringCloud版本号SpringCloud版本号采用单词而不是数字的设计的目的是为了更好的管理每个SpringCloud子项目的清单,避免自己的版本号与子项目的版本号混淆。它采用伦敦地铁站的名称,ABCD等等。例如GreenWich。字母越大版本号越大。SR为正式版本。有SR1-SR2-SR3等等。服务注册与发现服务注册中心Eureka在AWS...

2020-05-08 09:19:52 144

原创 CompletableFuture的使用

Java 8 中, 新增加了一个包含 50 个方法左右的类–CompletableFuture,它提供了非常强大的 Future 的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。优点我们可以不用再去手工维护线程,任务分配的工作我们不再关注。语义清晰,只用专注业务逻辑。/...

2020-05-04 13:11:31 226

原创 Future

当我们将任务放入线程池后,如果不需要获取任务结果,可以使用execute。如果需要的话,可以使用submit。线程池提交任务1.提交一个Callable任务,任务返回值通过get方法获取。2.提交Runnable任务及结果引用,任务执行结果为传入的result参数。3.提交一个Runnable任务,仅仅用于判断任务是否已经结束。深入Future // 取消任务 boolean...

2020-04-12 21:20:21 145

原创 SpringBatch学习

什么是SpringBatchSpring Batch 是一个轻量级的、完善的批处理框架(并不是调度框架,需要配合Quartz等框架,实现定时任务),旨在帮助企业建立健壮、高效的批处理应用。Spring Batch 提供了大量可重用的组件,包括了日志、追踪、事务、任务作业统计、任务重启、跳过、重复、资源管理。对于大数据量和高性能的批处理任务,Spring Batch 同样提供了高级功能和特性来支...

2020-02-26 21:45:22 702

原创 MYSQL之JOIN算法

JOIN学习创建表t1里有100行数据(id是主键,a有索引) t2里有1000行数据,同样是这三列。Index Nested-Loop Join(基于索引的嵌套循环联接)通过explain分析,可以看到t1表扫描了100行,而t2表使用了索引a。执行伪算法如下:For each row r in R do -- 扫描R表 驱动表 ...

2019-12-29 22:55:49 198

原创 数据库查看死锁

命令show engine innodb status解释:------------------------LATEST DETECTED DEADLOCK------------------------191219 1:53:42*** (1) TRANSACTION:TRANSACTION 87658C46, ACTIVE 0 sec, process no 18445, ...

2019-12-24 20:33:36 871

原创 使用Apache Curator操作Zookeeper

什么是Curator?Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。并且提供了一些工具类,还可以更简单的实现例如分布式锁。POM依赖 <!-- 对zookeeper的底层api的一些封装。--> <...

2019-12-22 13:35:53 408

原创 了解正在运行的SpringBoot

生产监控ActuatorSpring Boot包含许多其他功能,可帮助您在将应用程序推送到生产环境时监控和管理应用程序。您可以选择使用HTTP或JMX方式来管理和监视应用程序。审核,运行状况和指标收集也可以自动应用于您的应用程序。依赖<dependencies> <dependency> <groupId>org.springframework.bo...

2019-11-23 22:00:10 287

原创 SpringBoot起步依赖

StartersStarters是一组方便的依赖描述符,您可以在应用程序中包含这些描述符。您可以获得所需的所有Spring和相关技术的一站式服务,而无需搜索示例代码和复制粘贴依赖描述符的负载。例如,如果要开始使用Spring和JPA进行数据库访问,请在项目中包含spring-boot-starter-data-jpa依赖项。starters减少了我们开发时需要搜索依赖哪些包的时间。spring...

2019-11-17 17:35:08 368

原创 SpringBoot配置实现原理

大体步骤1.实现java配置类。在我们的类上声明@Configuration注解2.编写条件。通过@Conditional注解,来达到什么情况下创建我们需要的bean。3.定位配置。我们需要在META/spring.factories中声明我们的自动配置类,让springboot能够找到它。相关注解@Conditional:条件注解类条件@ConditionalOnClass:存在某...

2019-11-16 21:55:48 136

原创 zookeeper第二章

分布式系列文章——Paxos算法原理与推导写的很棒啊

2019-11-11 11:03:47 100

原创 zookeeper第一章笔记

集中式特点集中式系统是指由一台或多台主计算机组成的中心节点,数据集中存储于这个中心节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统的所有功能均由其集中处理。其最大特点是部署结构简单。数据容易备份。不用考虑多个节点之间分布式协作问题。分布式特点分布式系统是通过消息传递进行通信和协调的系统。特点:分布性,空间上随意分布。对等性,没有主从之分。并发性,多个节点并...

2019-11-07 18:03:37 101

原创 restTemplate使用

什么是restTemplateRestTemplate是Spring提供的一个访问Http服务的客户端类。比httpClient好用几百倍。类似于jdbcTemplate。其中的方法使用创建restTemplate1.我们可以通过RestTemplateBuilder的build方法创建。2.直接通过new来创建一个实例。UriComponentsBuilder类,可以通过它来帮助...

2019-11-05 22:27:07 361

原创 DispatcherServlet逻辑处理

先看一下DispatcherServlet的关系结构图HttpServlet大家一定不陌生。DispatcherServlet重写了那些doGet、doPost方法。进入到processRequest方法

2019-11-05 11:50:25 154

原创 SpringMvc初始化流程源码

SpringMVC解决了哪些问题?将web页面请求传给服务器根据不同的请求处理不同的逻辑单元返回处理结果数据并跳转至响应页面<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="h...

2019-10-31 18:09:39 545

原创 Mybatis事务源码

使用<tx:annotation-driven transaction-manager="transactionManager" /><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property n...

2019-10-12 20:43:15 171

原创 Java分析死锁的方法

首先实现一个死锁程序。public class DeadLockSample extends Thread { private String first; private String second; public DeadLockSample(String name, String first, String second) { super(name)...

2019-10-10 20:55:11 175

原创 Mybatis注册扫描源码

Mybatis独立使用1.建立POpublic class User { private Integer id; private String name; private Integer age; public User(String name, Integer age) { this.age = age; this.name ...

2019-10-10 18:10:13 268

原创 jdbcTemplate源码分析

先看下jdbcTemplate的update方法,保存user对象。传入sql语句、值及对应的类型。进入update源码setValues用于设置preoaredStatement所需要的全部参数。execute是数据库操作核心入口。PreparedStatementCallback作为回调函数。execute方法流程1.获取数据库连接1.通过TransactionSy...

2019-09-26 20:04:09 844 1

原创 AOP源码分析

首先了解下AOP使用1.创建一个用于拦截的bean@Component@Slf4jpublic class TestBean { private String testStr = "testStr"; public String getTestStr() { return testStr; } public void setTestStr(...

2019-09-23 19:59:11 139

原创 SpringBoot-Reactive响应式编程

什么是响应式编程?响应式编程是就是对于数据流和传播改变的一种声明式的编程规范。响应式编程是基于异步和事件驱动的非阻塞程序。在命令式编程的模式下,定义了 a=b+c,那么 a 的值再执行了这条语句后就被分配了 b+c 的结果,不管后续 b、c 怎么发生变化都不会影响到 a 的值。但是在响应式编程中,当b、c发生变化后,a的值会自动进行更新,而不需要重新执行赋值语句。基于事件驱动(事件模式或...

2019-09-14 21:07:44 4300

原创 grpc学习

什么是grpc?GRPC是一个高性能、通用的开源RPC框架,基于HTTP/2协议标准和Protobuf序列化协议开发,支持众多的开发语言。同类技术有哪些?http://colobu.com/2016/09/05/benchmarks-of-popular-rpc-frameworks/grpc的优缺点优点:1.采用protobuf。protobuf是google团队开发的用于高效存储和...

2019-09-13 19:44:41 333

原创 ApplicationContext初始化源码

ApplicationContext和BeanFactory都是用于加载Bean的,该接口用于扩展BeanFactory功能,比BeanFactory更强大。@Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMon...

2019-09-09 18:03:54 463

原创 Kafka之Producer生产者

Kafka生产者的消息对象定义:topic:主题名称partition:指定的分区号headers:消息头部,一般不用指定。key:用来指定消息的键,它不仅仅是消息附加信息,可以通过它来计算分区号来发往指定分区。topic对消息进行归类,key可以对消息进行二次归类。value:消息体。如果消息体为空,则称为墓碑消息。timestamp:时间戳,它有两种类型,CreateTime和...

2019-09-01 21:49:50 1016

原创 Spring中bean的初始化实践与源码分析

实践我这边以Springboot来测试实现一个B类定制一个BeanPostProcessor处理器,并创建B实例到容器中,指定了B的initMethod方法为init()。运行结果源码学习上篇文章大概分析过了populateBean方法了。通过initializeBean方法,我们能了解到bean的初始化流程。首先看一下方法1的invokeAwareMethods,可以看...

2019-08-29 10:20:37 375

原创 创建Bean时的populateBean方法

先看一

2019-08-26 16:44:06 2537

原创 Redis哨兵及集群模式

哨兵模式它是一种高可用的解决方案,sentinel本身是一个独立运行的进程,可以部署在其他与Redis集群可通讯的机器中监控Redis集群。监控:哨兵会定时监控redis是否良好运行。提醒:如果哨兵发现某个redis节点出现状况,能够通知另一个进程(如他的客户端)自动故障迁移:在master宕机后会进行主备切换。当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器...

2019-08-24 22:48:09 3700

原创 SpringBoot之使用MongoDB

上一节中,介绍了Docker相关操作,并运行了一个mongodb镜像。回顾Docker和虚拟机比有什么区别?虚拟机需要模拟硬件,并且每个虚拟机都有自己的操作系统。Docker轻量级,使用的是宿主机的操作系统,进程在用户控件运行,启动快,能快速部署。拉镜像docker pull <镜像名称>运行镜像 运行过之后 再用直接 docker start 容器名称docker ...

2019-08-23 23:22:42 323

空空如也

空空如也

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

TA关注的人

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