- 博客(25)
- 收藏
- 关注
原创 SpringBoot 整合:Redis延时队列的简单实现
业务流程首先我们分析下这个流程用户提交任务。首先将任务推送至延迟队列中。 延迟队列接收到任务后,首先将任务推送至 job pool 中,然后计算其执行时间。 然后生成延迟任务(仅仅包含任务 id)放入某个桶中 时间组件时刻轮询各个桶,当时间到达的时候从 job pool 中获得任务元信息。 监测任务的合法性如果已经删除则 pass。继续轮询。如果任务合法则再次计算时间 如果合法则计算时间,如果时间合法:根据 topic 将任务放入对应的 ready queue,然后从 bucket 中移除
2022-01-05 21:29:46
4411
原创 美团二面:Redis与MySQL双写一致性如何保证?
前言 十月份的时候,有位朋友去美团面试,他说被问到Redis与MySQL双写一致性如何保证? 这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨如何回答这个问题。谈谈一致性一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。 强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大 弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以
2022-01-04 17:12:05
188
原创 妈妈再也不用担心我不会使用线程池了
为什么要用线程池使用线程池管理线程有如下优点:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。线程池介绍ThreadPoolExecutorJava 为我们提供了 ThreadPoolExecutor 来创建一个线程池,其完整构造函数如下所示:pub..
2022-01-04 16:48:58
323
原创 这可能是Spring Boot Starter 讲的最清楚的一次了
一、SpringBoot的starter简介1.1 什么是starter(场景启动器)在SpringBoot出现之前,如果我们想使用SpringMVC来构建我们的web项目,必须要做的几件事情如下: 首先项目中需要引入SpringMVC的依赖 在web.xml中注册SpringMVC的DispatcherServlet,并配置url映射 编写springmcv-servlet.xml,在其中配置SpringMVC中几个重要的组件,处理映射器(HandlerMappi...
2021-12-31 17:04:43
4594
原创 这篇最全 Java 8 讲解,有没有之一先看后说
一、基础知识1)为什么要学习 Java8Java 8 所做的改变,在许多方面比Java 历史上任何一次改变都更加深远,这些改变会让你的编程更加容易例子:传统写法:List<Person> personList = Arrays.asList(new Person(21,50),new Person(22,55),new Person(23,60));Collections.sort(personList, new Comparator<Person>() ..
2021-12-30 21:20:01
264
原创 你需要知道的这25 个 Vue 技巧
1. 将 prop 限制为类型列表在 prop 定义中使用validator选项,你可以将 prop 限制为一组特定的值:export default { name: 'Image', props: { src: { type: String, }, style: { type: String, validator: s => ['square', 'rounded'].includes(s) } }}...
2021-12-30 20:06:23
415
原创 全网Java学习路线最详细的版本,没有之一
文章有点长,请大家耐心看完,话不多说直接上干货!一门永不过时的编程语言——Java 编程开发。Java编程语言占比:据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以900万的程序员数量位居首位。 而且很多软件的开发都离不开Java编程,因此其程序员的数量最多。而在以Java编程为核心的开发领域中,javaEE程序员的需求量10年来一直居于首位!Java工程师人才缺口:根据IDC的统计数字:就2017年来说,我国Java人才的缺口已达42.5万,并且以每年20%左右 的速度
2021-12-30 16:16:33
223
原创 缓存之王Caffeine Cache,性能比Guava更强
一、前言在项目开发中,为提升系统性能,减少 IO 开销,本地缓存是必不可少的。最常见的本地缓存是 Guava 和 Caffeine,本篇文章将为大家介绍 Caffeine。Caffeine 是基于 Google Guava Cache 设计经验改进的结果,相较于 Guava 在性能和命中率上更具有效率,你可以认为其是 Guava Plus。毋庸置疑的,你应该尽快将你的本地缓存从 Guava 迁移至 Caffeine,本文将重点和 Guava 对比二者性能占据,给出本地缓存的最佳实践,以及迁移策略
2021-12-29 20:42:31
245
原创 Java中大集合Long求交集的方法比较
背景项目中使用到List求交集,很容易想到collecion.retainAll()方法,但是在数据量比较大时,这个方法效率并不高。本文研究了几种常用的方法,以供大家参考。方法【首先】梳理下思路,List去重一般有几种方法。『外层遍历+内层遍历』查找:复杂度O(NM) ,一般使用contains()检查是否包含『外层遍历+内层Hash』查找:复杂度O(N),一般将内层List转化为HashSet实现『外层遍历+内层bitMap』查找:复杂度O(N),一般将内层List转化为字.
2021-12-29 20:30:26
351
原创 面试官:this和super有什么区别?this能调用到父类吗?
this 和 super 都是 Java 中常见的关键字,虽然二者在很多情况下都可以被省略,但它们在 Java 中所起的作用是不可磨灭的。它们都是用来起指代作用的,每个类在实例化的时候之所以能调用到 Object 类(Object 类是所有类的父类),全是二者的“功劳”。1.super 关键字super 是用来访问父类实例属性和方法的。1.1 super 方法使用每个实例类如果没有显示的指定构造方法,那么它会生成一个隐藏的无参构造方法。对于 super() 方法也是类似,如果没有显示指定 s
2021-12-29 20:15:18
3040
1
原创 一文掌握 Redisson 分布式锁的原理(值得收藏)
Redisson可以直接查看 Github Redisson官网 介绍, 没有了解过的小伙伴, 看一下 Redisson 的 WIKI 目录, 仔细瞅瞅 Redis 是如何被 Redisson 武装到牙齿的这里先过一下和文章有关的一部分内容通过项目简介可以看出来, 写这个项目介绍的人水平非常哇塞哈, 从第一段咱们就知道了两个问题Redisson 是什么Redisson 是架设在Redis 基础上的一个 Java驻内存数据网格框架, 充分利.
2021-12-29 14:46:44
149
原创 java集合之Vector超级详细源码解析
1.Vector介绍Vector和前面说的ArrayList很是类似,这里说的也是1.8版本,它是一个队列,但是本质上底层也是数组实现的。同样继承AbstractList,实现了List,RandomAcess,Cloneable,java.io.Serializable接口。具有以下特点:提供随机访问的功能:实现RandomAcess接口,这个接口主要是为List提供快速访问的功能,也就是通过元素的索引,可以快速访问到。 可克隆:实现了Cloneable接口...
2021-12-28 19:40:40
249
原创 入门Zookeeper核心知识点
1 ZooKeeper简介ZooKeeper是一个开源的分布式协调框架,它的定位是为分布式应用提供一致性服务,是整个大数据体系的管理员。ZooKeeper会封装好复杂易出错的关键服务,将高效、稳定、易用的服务提供给用户使用。如果上面的官方言语你不太理解,你可以认为ZooKeeper=文件系统+监听通知机制。1.1 文件系统Zookeeper维护一个类似文件系统的树状数据结构,这种特性使得Zookeeper不能用于存放大量的数据,每个节点的存放数据上限为1M。每个子目...
2021-12-27 20:06:58
248
原创 Java零基础到传奇的必经之路,你准备好了吗?
基础篇01 面向对象→ 什么是面向对象面向对象、面向过程 面向对象的三大基本特征和五大基本原则→ 平台无关性Java 如何实现的平台无关 JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)→ 值传递值传递、引用传递 为什么说 Java 中只有值传递→ 封装、继承、多态什么是多态、方法重写与重载 Java 的继承与实现 构造函数与默认构造函数 类变量、成员变量和局部变量 成员变量和方法作用域02 Java 基础知识→..
2021-12-23 21:14:24
405
原创 经常会遇到的24 道 Shell 脚本面试题,你会了吗?
虽然现在Python在运维工作中已经使用很普遍,但是很多企业在找Linux云计算工程师的时候还是会问到 shell 脚本的问题,它有助于你在工作环境中自动完成很多任务。如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答:Q:1 Shell脚本是什么、它是必需的吗?答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。Q:2 什么是默认
2021-12-23 21:00:12
378
原创 java多线程9:线程池
线程池线程池的优点我们知道线程的创建和上下文的切换也是需要消耗CPU资源的,所以在多线程任务下,使用线程池的优点就有:第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。线程池的实现原理我们看下线程池的主要处理流程,ThreadPoolExe
2021-12-21 20:13:20
330
原创 高性能Java本地缓存组件-Caffeine Cache
本篇文章主要介绍Caffine Cache 的使用方式,以及Caffine Cache在SpringBoot中的使用。1. Caffine Cache 在算法上的优点-W-TinyLFU#说到优化,Caffine Cache到底优化了什么呢?我们刚提到过LRU,常见的缓存淘汰算法还有FIFO,LFU:FIFO:先进先出,在这种淘汰算法中,先进入缓存的会先被淘汰,会导致命中率很低。 LRU:最近最少使用算法,每次访问数据都会将其放在我们的队尾,如果需要淘汰数据,就只需要淘汰队首即可。仍然有个..
2021-12-21 19:13:46
573
原创 Java安全之Dubbo反序列化漏洞分析
0x00 前言最近天气冷,懒癌又犯了,加上各种项目使得本篇文断断续续。0x01 DubboDubbo是阿里巴巴开源的基于 Java 的高性能 RPC(一种远程调用) 分布式服务框架(SOA),致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。dubbo 支持多种序列化方式并且序列化是和协议相对应的。比如:Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议。运行机制Dubbo框架启动,容器Contai
2021-12-21 16:59:58
2197
原创 阿里内部资料,总结JAVA面试题-Dubbo篇
目录1、 说说一次 Dubbo 服务请求流程?2、说说 Dubbo 工作原理3、Dubbo 支持哪些协议?4、注册中心挂了,consumer 还能不能调用 provider?5、怎么实现动态感知服务下线的呢?6、Dubbo 负载均衡策略?8、Dubbo 动态代理策略有哪些?9、说说 Dubbo 与 Spring Cloud 的区别?10、Zookeeper 和 Dubbo 的关系?其实关于 Dubbo 的面试题,我觉得最好的文档应该还是官网,因为官网有中文版,照顾..
2021-12-21 15:05:06
141
原创 《面试八股文》之Dubbo
前言虽然金九银十已经过了,但是金三银四马上就要到了,还不快快准备起来?今天就开启《面试八股文》系列的第一版-RPC王者Dubbo,moon 在后续的《面试八股文》系列还将继续推出mysql,spring,并发,redis,kafka,zookeeper等一系列文章。如果本文内容有错误或者大家有什么好的建议欢迎指正!每天一个知识点不要背,要理解,大家不要夸我内卷了目录1.Dubbo是什么?RPC又是什么? 2. Dubbo能做什么? 3.能说下Dubbo的总体的调用过程吗?..
2021-12-20 14:18:09
126
原创 Java内存模型:看Java如何解决可见性和有序性问题
什么是 Java 内存模型?你已经知道,导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性、有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性能可就堪忧了。合理的方案应该是按需禁用缓存以及编译优化。那么,如何做到“按需禁用”呢?对于并发程序,何时禁用缓存以及编译优化只有程序员知道,那所谓“按需禁用”其实就是指按照程序员的要求来禁用。所以,为了解决可见性和有序性问题,只需要提供给程序员按需禁用缓存和编译优化的方法即可。Java 内存模型是个很复杂的规范,可
2021-12-18 20:16:28
64
原创 Spring为什么建议构造器注入?
前言本章的内容主要是想探讨我们在进行Spring 开发过程当中,关于依赖注入的几个知识点。感兴趣的读者可以先看下以下问题:@Autowired,@Resource,@Inject三个注解的区别 当你在使用@Autowired时,是否有出现过Field injection is not recommended的警告?你知道这是为什么吗? Spring 依赖注入有哪几种方式?官方是怎么建议使用的呢?如果你对上述问题都了解,那我个人觉得你的开发经验应该是不错的。下面我们就依次对上述...
2021-12-18 14:17:42
125
原创 18道终极Mybatis面试题
Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的目标是介绍Mybatis的技术架构和重要组成部分,以及基本运行原理。有胆就来,我出几道Mybatis面试题,看你能回答上来几道。1、#{}和${}的区别是什么?答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com
2021-12-18 13:19:28
74
原创 Java安全——JVM类加载器
Java类加载机制在Java安全知识体系中有着非常重要的地位,早在之前分析Shiro反序列化漏洞利用,以及学习蚁剑Java马,都和Java ClassLoader打过交道。笔者打算从把ClassLoader的原理、使用场景、自定义方式等多个方面剖析类加载器在Java安全中设计到的知识。0x01 ClassLoader 简介Java语言需要把代码编译成class文件,才能用JVM加载执行,那么ClassLoader就是负责将class文件加载到内存,生成对应的类。0x1 ClassLoader..
2021-12-17 19:20:08
52
原创 完整过一遍axios,再也不怕写请求
axios请求方法主要有get,post,put,patch,delete get 获取数据 post 提交数据(表单提交+文件上传) put 更新数据(将所有数据均推放到服务端) patch 更新数据(只将修改的数据推送到后端) delete 删除数据 get方法写法调用型 axios.get('/data.json').then((res)=>{ console.log(res) })..
2021-12-17 16:45:02
850
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人