自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (2)
  • 收藏
  • 关注

转载 Codis与RedisCluster的原理详解

Codis与RedisCluster的原理详解背景介绍#我们先来看一下为什么要做集群,如果我们要部署一个单节点Redis,很明显会遇到单点故障的问题。首先能想到解决单点故障的方法,就是做主从,但是当有海量存储需求时,单一的主从结构就会出问题,说问题之前要先了解一下主从之间是如何复制的。我们把Redis分为三个部分,分别是客户端、主节点以及从节点,如果从节点要同步主节点的数据,它首先会发Sync指令给主节点,主节点收到指令之后会执行BGSAVE命令生成RDB文件,这个RDB文件指的是快

2021-03-13 14:58:50 186

原创 Java实现一次遍历单链表删除指定节点 剑指Offer18

今天刷leetcode的时候做到了一条单链表的经典题目,我做的题解运行速度和所占空间都不错所以分享给大家一下我的题解和思路。循例先上一下题目和运行结果:题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 ->..

2020-11-18 16:11:03 338

原创 代理模式中静态代理、jdk动态代理、cglib动态代理有什么不同?

1.静态代理首先,写一个要实现的目标的接口:/** * @author liangliwei * @description * @date 2020-08-12 09:42:20 */public interface TargetInterface { String sayHello(String name);}然后再写一个目标实现类,也就是需要被代理(增强)的类:/** * @author liangliwei * @description * @date

2020-08-12 11:37:25 109

原创 CountDownLatch怎么使用?一个简单的Demo与使用注意事项

前言在工作中,大家应该比较少用到CountDownLatch,但是CountDownLatch在面试中或者多线程的相关知识点面试中还是经常被问到,所以这次跟大家复习一下CountDownLatch的简单使用。什么是CountDownLatch(线程计数器 )CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch.

2020-07-09 16:17:46 788

原创 Spring boot 注解@Async不生效 无效 不起作用

今天在做公司项目时,有一个发邮件的需求。所以写了一个发送邮件的方法后来发现发邮件很慢,导致接口响应也很慢。于是我便想到要使用异步调用去处理这个方法。于是我把注解@Async 加到了自己service类下的一个发邮件的一个方法,后来发现并没有生效。调用处代码:我在以下两个方法上都试过加上@Async注解 可是都并没有生效发送邮件代码:我思考了一下可能应该是因为...

2019-12-20 10:31:20 24903 7

原创 redis的事务是否具有原子性?

众所周知,redis可以通过MULTI EXEC DISCARD等来实现“事务”。但是事务应该具有ACID 四大特性,下面我就来探讨一下redis的事务是否具有A——原子性。 首先,我们看第一种情况,语句格式语法错误:127.0.0.1:6379> multiOK127.0.0.1:6379> hset myhash java 10QUEU...

2019-09-30 11:07:10 1506 1

原创 用Java实现几种常见的排序算法的思路

一·选择排序核心理解:每次选择一个最大的或者最小的放在i的位置,直至i循环了这个数组的length-1个元素代码:public static void selectSort(int array[]) { for (int i = 0; i < array.length - 1; i++) { for (int j = i + 1; j &...

2018-11-25 19:00:20 198

原创 通过node.js进行前后端分离

       现在很多公司企业都是前后端分离开发,两端互相不干扰。由于以前在学校时习惯了把前端东西放在同一个项目里的projects目录或者springboot里的resources/static文件夹下,所以作为一个后端程序员,今天我也简单的介绍一下通过node.js进行前后端分离开发。      首先,确定自己已经搭建好node和npm安装环境,最好的话安装一下cnpm会快很多。其次,...

2018-09-20 15:22:26 7983 3

原创 通过代码简单介绍Java反射

1.Java 反射概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。Java 反射是很多Java框架的基础和实现,所以掌握java反射对框架的理解有很大的作用 2.三种获取Class类对象的方式1.(最常用)Class.for...

2018-09-06 14:13:34 158

原创 @Async 导致该Bean在循环依赖时启动报错

今天在开发代码的时候遇到了一个启动错误,错误内容大致就是:org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'classA': Bean with name 'classA' has been injected into other beans [classB] in its raw version as part of a circular referen

2021-05-12 18:23:14 490

转载 Spring 循环依赖和三级缓存

作者:Java程序猿阿谷链接:https://zhuanlan.zhihu.com/p/157611040来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。前言Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃不掉。如果你回答得好,那么这就是你的必杀技,反正,那就是面试官的必杀技,这也是取这个标题的原因,当然,本文的目的.

2021-01-19 11:34:14 280

转载 Linux面试的5个经典问题

1.CPU负载和CPU利用率的区别是什么?首先,我们可以通过uptime,w或者top命令看到CPU的平均负载。Load Average:负载的3个数字,比如上图的4.86,5.28,5.00,分别代表系统在过去的1分钟,5分钟,15分钟内的系统平均负载。他代表的是当前系统正在运行的和处于等待运行的进程数之和。也指的是处于可运行状态和不可中断状态的平均进程数。如果单核CPU的话,负载达到1就代表CPU已经达到满负荷的状态了,超过1,后面的进行就需要排队等待处理了。如果是是多核多CPU..

2021-01-08 16:14:00 195

转载 SpringBoot集成kafka全面实战

一、生产者实践 普通生产者 带回调的生产者 自定义分区器 kafka事务提交 二、消费者实践 简单消费 指定topic、partition、offset消费 批量消费 监听异常处理器 消息过滤器 消息转发 定时启动/停止监听器 一、前戏1、在项目中连接kafka,因为是外网,首先要开放kafka配置文件中的如下配置(其中IP为公网IP),advertised.listeners=PLAIN

2021-01-05 17:18:05 616

转载 秒懂 kafka HA(高可用)

我们知道,kafka中每个topic被划分为多个partition,每个partition又有多个副本,那么这些分区副本是怎么均匀的分布在整个kafka集群的broker节点上的?partition副本的leader是通过什么算法选举出来的?partition副本的follower是怎么复制备份leader的数据的?本文我们就来说一说和 kafka 高可用相关的一些策略。01名词解释要想说明白kafka的HA机制,我们必须先搞明白几个缩写名词,1、AR、ISR、OSRAR:Assigne

2021-01-05 14:23:07 245

转载 大白话 kafka 架构原理

大数据时代来临,如果你还不知道Kafka那就真的out了!据统计,有三分之一的世界财富500强企业正在使用Kafka,包括所有TOP10旅游公司,7家TOP10银行,8家TOP10保险公司,9家TOP10电信公司等等。LinkedIn、Microsoft和Netflix每天都用Kafka处理万亿级的信息。本文就让我们一起来大白话kafka的架构原理。kafka官网:http://kafka.apache.org/01PARTkafka简介Kafka最初由Linkedin公司开发,是.

2021-01-05 14:20:33 100

转载 一致性hash算法详解

目前正在维护公司的分布式任务调度平台,在任务节点的分配上使用到了一致性hash算法,特此记录,那么在后面的博文中会给出基于java实现的一致性hash算法的代码,以及分布式调度平台的一些设计思路。1.hash算法那么什么是hash算法呢,百度百科的定义如下:哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。普通的hash算法在分布式应用中的不足:比如,在分布式的存储系统中,要将数据存储到具体的节点上,如果

2020-12-08 16:04:09 142

原创 布隆过滤器介绍以及布隆过滤器的实现

一·简介 布隆过滤器(Bloom Filter)实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你“某样东西一定不存在或者可能存在”。二·原理1·刚开始是一个全部位为0的bit 向量或者说 bi...

2020-12-04 11:17:50 203

原创 动态修改LOGGER级别—— Arthas

一·背景记得前阵子,我在工作中就遇到过一个生产环境数据的排查,但是大多数情况下,我们的项目在部署的时候就已经定义了LOGGER级别,用来控制输出的信息范围。一般生产环境上我们的日志级别会设置成info级别因为,过多的输出会影响输出和查看日志的效率,另一方面,过少的日志让问题定位变得困难。所以当生产出现问题时,线上容器通常定义在info级别,发生一些疑难问题时,光靠info级别的日志很难定位问题。二·Arthas介绍Arthas是阿里开源的Java诊断工具。官方网站:h..

2020-12-04 11:09:50 812

原创 剑指 Offer 05 替换空格 ,用时0ms,超过100%用户的Java解法

题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。然后再上一下我的提交结果:...

2020-11-12 19:36:51 104

原创 Java的快速失败与安全失败与遍历修改

一、快速失败(fail—fast)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出 Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变 modCount 的值。每当迭代器使用 hashNext()/next() 遍历下一个元素之前,都会检测 modCount 变量是否为 expectedmodCou

2020-10-21 10:48:43 171

原创 记一次阿里巴巴面试的经历

今天我下班的时候接到了昨晚阿里巴巴面试我的技术面试官的电话,他问我昨晚的编程题是提交了全部的代码吗,我那时候正在地铁刚下班也有点迷糊,而且我想着昨晚的题也基本完成了90%应该没问题,于是我就说了:”应该是的“,然后说了一些昨晚没全部完成的理由。后面我们的通话就结束了,但是当我挂了以后我就十分后悔,我感觉这很有可能是面试官给我的最后一个机会,我想回拨回去,可是奈何这是虚拟电话,根本没有用。于是回到家中我十分懊恼,也用了一会就把昨晚的题完全做出来了,可是当我打开邮箱的时候却收到这样一封邮件:瞬...

2020-08-20 20:32:17 1470

转载 Zookeeper集群与Leader选举

ZooKeeper是一个开源分布式协调服务、分布式数据一致性解决方案。可基于ZooKeeper实现命名服务、集群管理、Master选举、分布式锁等功能。高可用为了保证ZooKeeper的可用性,在生产环境中我们使用ZooKeeper集群模式对外提供服务,并且集群规模至少由3个ZooKeeper节点组成。集群至少由3个节点组成ZooKeeper其实2个节点也可以组成集群并对外提供服务,但我们使用集群主要目的是为了高可用。如果2个节点组成集群,其中1个节点挂了,另外ZooKeeper节点不能正常

2020-08-18 15:40:33 728

转载 CP和AP有是什么?有什么区别?

最近有时间研究分布式架构,因为公司使用的Zookeeper,并没有使用Spring Cloud Eureka,所以想探究一下他们之间的区别,于是看到简书里的文章:Spring Cloud Eureka简介及与Zookeeper对比,明显的区别可能就是Zookeeper为CP设计,而Eureka为AP设计,但是对CAP/AP/CP很不理解,于是查阅资料,做一个简单的了解。Eureka服务治理机制与Dubbo服务治理机制的比较Feature Eureka Zookeeper 服务健康检

2020-08-18 15:31:32 18197 4

转载 Hystrix熔断机制原理剖析

一、前言在分布式系统架构中多个系统之间通常是通过远程RPC调用进行通信,也就是 A 系统调用 B 系统服务,B 系统调用 C 系统的服务。当尾部应用 C 发生故障而系统 B 没有服务降级时候可能会导致 B,甚至系统 A 瘫痪,这种现象被称为雪崩现象。所以在系统设计时候要使用一定的降级策略,来保证当服务提供方服务不可用时候,服务调用方可以切换到降级后的策略进行执行。二、Hystrix 中基于自反馈调节熔断状态的算法原理我们可以把熔断器想象为一个保险丝,在电路系统中,一般在所有的家电系统连接外部供电

2020-08-14 14:10:27 482

转载 谈谈服务限流算法的几种实现

保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。今天和大家谈谈限流算法的几种实现方式,本文所说的限流并非是Nginx层面的限流,而是业务代码中的逻辑限流。为什么需要限流按照服务的调用方,可以分为以下几种类型服务1、与用户打交道的服务比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮: 用户增长过快(这是好事) 因为某个热点事件(微博热搜) 竞争对象爬虫 恶意的刷单 这些情况都是无法预知的,不知道什么时候会有10倍甚至20倍的流

2020-08-13 17:53:40 251

转载 常用4种限流算法介绍及比较

1、计数器(固定窗口)算法计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。此算法在单机还是分布式环境下实现都非常简单,使用redis的incr原子自增性和线程安全即可轻松实现。这个算法通常用于QPS限流和统计总访问量,对于秒级以上的时间周期来说,会存在一个非常严重的问题,那就是临界问题,如下图:假设1min内服务器的负载能力为100,因此一个周期的访问量限制在100,然而在第一个周期的最后5秒和下一个...

2020-08-13 17:46:18 218

转载 限流算法

保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。今天和大家谈谈限流算法的几种实现方式,本文所说的限流并非是Nginx层面的限流,而是业务代码中的逻辑限流。为什么需要限流按照服务的调用方,可以分为以下几种类型服务1、与用户打交道的服务比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮: 用户增长过快(这是好事) 因为某个热点事件(微博热搜) 竞争对象爬虫 恶意的刷单 这些情况都是无法预知的,不知道什么时候会有10倍甚至20倍的流

2020-08-13 17:42:02 131

转载 Java并发之AQS详解

Java并发之AQS详解一、概述  谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!  类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。  以下是本文的目录大纲: 概述 框架 源码详解 简单应用   若有不正之处,...

2020-07-29 15:15:08 123

转载 看完这篇ThreadLocal的详解,你也能用得这么溜

开场白张三最近天气很热心情不是很好,所以他决定出去面试跟面试官聊聊天排解一下,结果刚投递简历就有人约了面试。我丢,什么情况怎么刚投递出去就有人约我面试了?诶。。。真烦啊,哥已经不在江湖这么久了,江湖还是有哥的传说,我还是这么抢手的么?太烦恼了,帅无罪。暗自窃喜的张三来到了某东现场面试的办公室,我丢,这面试官?不是吧,这满是划痕的Mac,这发量,难道就是传说中的架构师?张三的心态一下子就崩了,出来第一场面试就遇到一个顶级面试官,这谁顶得住啊。你好,我是你的面试官Tony,看我的发型

2020-07-29 10:51:37 297

转载 synchronized四种锁状态的升级

一、背景在 Java 语言中,使用 Synchronized 是能够实现线程同步的,即加锁。并且实现的是悲观锁,在操作同步资源的时候直接先加锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以总共有4种锁状态,级别由低到高依次为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。这几个状态会随着竞争情况逐渐升级。注意:锁可以升级但不能降级。

2020-07-10 11:23:26 201

转载 HashMap?ConcurrentHashMap?相信看完这篇没人能难住你!

前言Map 这样的Key Value在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于数组 + 链表组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同。Base 1.71.7 中的数据结构图:先来看看 1.7 中的实现。...

2020-07-09 13:58:04 78

原创 java多线程-线程池ThreadPoolExecutor的拒绝策略

在分析ThreadPoolExecutor的构造参数时,有一个RejectedExecutionHandler参数。RejectedExecutionHandler是一个接口:public interface RejectedExecutionHandler { void rejectedExecution(Runnable r, ThreadPoolExecutor executor);}里面只有一个方法。当要创建的线程数量大于线程池的最大线程数的时候,新的任务就会被拒绝,.

2020-06-22 09:54:24 336

转载 单例模式详解以及破坏单例模式的方法

前言单例模式是 Java 设计模式中最简单的一种,只需要一个类就能实现单例模式,但是,你可不能小看单例模式,虽然从设计上来说它比较简单,但是在实现当中你会遇到非常多的坑,所以,系好安全带,上车。单例模式的定义单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象,有点像 Java 的静态变量,但是单例模式要优于静态变量,静态变量在程序启动的时候JVM就会进行加载,如果不使用,会造成大量的资源浪费,单例模式能够实现懒加载,能够在使用实例的时候才去创建实例。开发工具类库中的很多工具类都应用...

2020-06-20 18:36:59 247

转载 如果这篇文章说不清epoll的本质,那就过来掐死我吧

从事服务端开发,少不了要接触网络编程。epoll作为linux下高性能网络服务器的必备技术至关重要,nginx、redis、skynet和大部分游戏服务器都使用到这一多路复用技术。文/罗培羽因为epoll的重要性,不少游戏公司(如某某九九)在招聘服务端同学时,可能会问及epoll相关的问题。比如epoll和select的区别是什么?epoll高效率的原因是什么?如果只靠背诵,显然不能算上深刻的理解。网上虽然也有不少讲解epoll的文章,但要不是过于浅显,就是陷入源码解析,很少能有通俗易懂的。于是

2020-06-10 16:28:57 150

转载 epoll的简单讲解

首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有把数据传回来),这时候该怎么办?阻塞:阻塞是个什么概念呢?比如某个时候你在等快递,...

2020-06-10 15:22:09 147

转载 常见数据库连接池性能分析对比

背景对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推荐出最优的数据库连接池。 NOTE: 本文所有测试均是MySQL库测试结论 1:性能方面hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益于最大限度的避免锁竞争。 2:druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。 3:综合性能,扩展性等方面,可考虑使用druid或者hik...

2020-06-10 11:48:56 938

原创 Java反射遍历判断值是否属于枚举类Enum

今天在开发的时候遇到一个判断需求:判断一个值是否属于枚举类。之前写的话都是通过在if里面写上|| 或来连接 或者为每个枚举Enum写一个遍历判断的方法。后来想了一下实在太麻烦了,加入枚举类改变的话业务代码的判断也需要改变比较麻烦,工具类也没找到相关的,于是自己通过反射写了一个循环遍历判断枚举类。首先,是一个枚举类:public enum AuditState { TO_BE_AUDIT(0, "待审核"), AUDITED(1, "已审核"); .

2020-06-08 10:53:18 8245 1

原创 Java Html实现带token的文件上传

今天要实现一个带token认证的文件上传 参数中既有token 也有文件流首先上html代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>文件上传测试</title></head><b...

2020-04-09 12:07:12 956

原创 redis应用中自增安全吗?

redis是单线程运行,所以多个redis命令是一个一个执行,所以是线程安全的 但是分开的两个redis命令,对于整个应用来说不是线程安全的,因为这两个redis命令之间会有其他命令,就像多线程环境下,java线程不安全的i++操作,这个两个redis命令没有事务管理 可以用RPOPLPUSH或者INCR,或者lua脚本,实现多个redis操作合为一个命令,这样就对于线...

2020-03-31 10:21:26 2110

转载 为什么重写equals一定要重写hashcode?

大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白,以下是我的一些个人理解。这是Object类关于这两个方法的源码,可以看出,Object类默认的equals比较规则就是比较两个对象的内存地址。而hashcode是本地方法,java的内存是安全的,因此无法根据散...

2020-03-26 10:22:19 76

klorofil pro(优秀boostrap后台管理模板)

klorofil pro(优秀好看的boostrap前端后台管理模板) 响应式 素材强大 外国要14美金购买 demo 地址 http://demo.thedevelovers.com/dashboard/klorofilpro-v1.6/html-ajax/index.html

2018-08-02

boostrap后台管理模板

一套完整的boostrap模板 带各种页面 控件的后台管理模板 关键词 boostrap 响应式 前端 html css javascript jquery js 后台管理模板

2018-05-11

空空如也

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

TA关注的人

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