概述 UidGenerator是一款基于Snowflake算法的分布式高性能唯一ID生成器,由百度开源。 它使用Java实现,支持自定义workerId位数和初始化策略,适用于虚拟化环境下实例自动重启、漂移等场景。UidGenerator通过借用未来时间来解决sequence的并发限制,采用RingBuffer缓存生成的UID,实现无锁并行生产消费,避免了硬件级“伪共享”问题,单机QPS可达600
前言 据国家大气研究中心的查尔斯·奈特称,一般的雪花大约由10^19个水分子组成。在雪花形成过程中,会形成不同的结构分支,所以说大自然中不存在两片完全一样的雪花,每一片雪花都拥有自己漂亮独特的形状。雪花算法表示生成的id如雪花般独一无二。 snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个
一、背景简介 1.促销模式都有哪些? 2.产品设计过程中都有哪些必要逻辑? 3.业务如何选择促销的? 优惠劵 优惠券是互联网电商时代最为常用运营手段,拉新,促活,留存,在运营的过程中,能快速的、灵活的支持运营频繁多变的营销需求。 二、优惠券系统 优惠券系统的设计应涵盖以下几个方面: 1、创建优惠券:首先需要定义优惠券的基本信息,如名称、发放数量、是否可叠加、每人限领张数
前言 Spring的核心功能有三点IOC、DI、AOP,IOC则是基础,也是Spring功能的最核心的点之一。 IoC(控制反转) IoC是Spring框架的核心原则之一,它是一种设计模式,也称为依赖反转。在传统的开发中,对象通常负责管理其依赖关系,而在IoC中,控制权反转,由容器负责管理对象的生命周期和依赖关系。 核心概念: 容器(Container): Spring的IoC容器是一个负责创
前言 Spring 应用有时会在应用启动后做一些初始化的操作,比如从数据库中拉取一些数据缓存起来,比如读取一些配置变量。如何在容器启动后来执行一个任务呢?本文针对这个问题,探讨一下几个方面的内容。 Spring 是如何监听启动事件的? Spring Boot 中的 ApplicationRunner 和 CommandLineRunner 是什么? ApplicationRunner 和 Com
一、简介 在Spring应用程序中启动时,有时需要在所有Bean都已加载,初始化并准备好之后执行某些自定义代码。这时,Spring提供了一个可用的方式,即使用@PostConstruct注解。这个注解用于标记一个方法,这个方法将在Bean初始化完成后被执行。而且,它是所有注解中最后一个执行的。 总结一下 @PostConstruct 的使用和特点: 只有一个非静态方法能使用此注解; 被注解的
Redisson 是一种基于 Redis 的 Java 驻留集群的分布式对象和服务库,可以为我们提供丰富的分布式锁和线程安全集合的实现。在 Spring Boot 应用程序中使用 Redisson 可以方便地实现分布式应用程序的某些方面,例如分布式锁、分布式集合、分布式事件发布和订阅等。本篇是一个使用 Redisson 实现分布式锁的详细示例,在这个示例中,我们定义了DistributedLock
目前常用的几种任务调度 Timer,简单无门槛,一般也没人用。 spring @Scheduled注解,一般集成于项目中,小任务很方便。 开源工具 Quartz,分布式集群开源工具,以下两个分布式任务应该都是基于Quartz实现的,可以说是中小型公司必选,当然也视自身需求而定。 分布式任务 XXL-JOB,是一个轻量级分布式任务调度框架,支持通过 Web 页面对任务进行 CRUD 操作,支持动态
一、执行定时任务的线程池配置类 @Configuration @EnableAsync public class TaskPoolConfig { /** * 异步执行线程池————任务延时执行 * @return ThreadPoolTaskScheduler */ @Bean(name = "delayAsyncPoolTaskSch
1、maven依赖 下文中所有示例都是用该maven依赖,除非有特殊说明的情况。 <properties> <encoding>UTF-8</encoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.
一、路由 路由的本质就是一种对应关系,根据不同的URL请求,返回对应不同的资源。那么url地址和真实的资源之间就有一种对应的关系,就是路由。路由分为:后端路由和前端路由。 1.1 路由分为两大类: 前端路由:Hash地址与组件之间的对应关系。 SPA与前端路由之间的关系:SPA指的是一个web网站只有唯一的一个HTML页面,所有组件的展示与切换都在这唯一一个页面内完成。此时不同组件之间的切换,要
1.ref 引用 ref 用来辅助开发者在不依赖 jQuery 的情况下,获取DOM元素或组件的引用。 1.1 每个vue的组件实例上,都包含一个$refs对象,里面存储着对应的DOM元素或组件的引用。默认情况下,组件的$refs指向一个空对象。 1.2 使用ref引用页面上的DOM元素和引用页面上的组件实例: <template> <div> <!--
前言 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。一般来说,组件可以有以下几种关系: 如上图所示,A 和 B、B 和 C、B 和 D 都是父子关系,C 和 D 是兄弟关系,A 和 C 是隔代关系(可能隔多代)。 针对不同的使用场景,如何选择行之有效的通信方式?这是我们所要探讨的主题。本文总结了 vue 组件间通信的几种方式,如
一、生命周期的概念 生命周期是指从开始创建、初始化数据、编译模版、挂载 Dom -> 渲染、更新 -> 渲染、卸载等一系列过程,我们称这是 Vue 的生命周期,它主要强调一个时间段。用一句话来概括就是:Vue实例的生命周期: 从创建到销毁的整个过程 二、钩子函数 Vue框架内置函数,随着组件的生命周期阶段,自动执行 作用:特定的时间点执行特定的操作 三、组件的生命周期 1 生命周期
一、组件化开发思想 1. 什么是组件化开发 组件化开发指的是:根据封装的思想,把页面上可重用的部分封装为组件,从而方便项目的开发和维护。例如:ibootstrap - Bootstrap 可视化布局系统 所展示的效果,就契合了组件化开发的思想。用户可以通过拖拽组件的方式,快速生成一个页面的布局结构。 2. 组件化开发的好处 前端组件化开发的好处主要体现在以下两方面: 提高了前端代码的复用性和灵活
一、MySQL 高可用的背景 数据库的主从复制是一个很实用的功能,但如何保证它的高可用却是一件难事。实现MySQL主从复制高可用的工具,常见的有: MMM:淘汰了,在一致性和高并发稳定性等方面有些问题。 MHA:有些人还在用,但也有些问题,也是趋于淘汰的MySQL主从高可用方案。 Galera:引领时代的主从复制高可用技术。 MariaDB Galera Cluster:MariaDB对Gale
一、索引类型 索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下: 从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引。 从应用层次划分:普通索引、唯一索引、主键索引、复合索引。 从索引键值类型划分:主键索引、辅助索引(二级索引)。 从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引
前言 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI;如果你在开发大型项目, 那么你需要, 并且必然需要使用Vue CLI使用Vue.js开发大型应用时,我们需要考虑代码目录结构、项目结构和部署、热加载、代码单元测试等事情。如果每个项目都要手动完成这些工作,那无以效率比较低效,所以通常我们会使用一些脚手架工具来帮助完成这些事情。用vue.js开发大型应用需要使用webpac
一、axios简介 1.1 axios概述 前端最流行的ajax请求库 react/vue官方都推荐使用axios 发ajax 请求 文档: https://github.com/axios/axios axios中文网:axios中文网|axios API 中文文档 1.2 axios特点 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Pr
一、vue 简介 1.1、什么是 vue Vue是一套用于构建用户界面的渐进式JavaScript框架。 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用([SPA])提供驱动。(百度百科) 1.2、认识前端 1.2.1
一、前端工程化 1.1 小白眼中的前端开发 会写HTML+ CSS +JavaScript就会前端开发 需要美化页面样式,就拽一个bootstrap过来 需要操作DOM或发起Ajax请求,再拽一个jQuery过来 要快速实现网页布局效果,就拽一个Layui过来 1.2 实际的前端开发 模块化(js 的模块化、css的模块化、资源的模块化) 组件化(复用现有的UI结构、样式、行为) 规范化(目
前言 跳跃表(简称跳表)由美国计算机科学家William Pugh发明于1989年。他在论文《Skip lists: a probabilistic alternative to balanced trees》中详细介绍了跳表的数据结构和插入删除等操作。 跳表(SkipList,全称跳跃表)是用于有序元素序列快速搜索查找的一个数据结构,跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有
参考链接 Spring 官文: https://docs.spring.io/spring-framework/docs/6.0.0-SNAPSHOT/reference/html/web.html#websocket-stomp-benefits 前端页面: https://github.com/callicoder/spring-boot-websocket-chat-demo S
前言 Spring对于每个Java后端程序员来说肯定不陌生,日常开发和面试必备的。本文就来盘点Spring/SpringBoot常见的扩展点,同时也来看看常见的开源框架是如何基于这些扩展点跟Spring/SpringBoot整合的。 FactoryBean 提起FactoryBean,就有一道“著名”的面试题“说一说FactoryBean和BeanFactory的区别”。其实这两者除了名字有点像,
前言 在linux系统中,实际上所有的I/O设备都被抽象为了文件这个概念,一切皆文件,Everything is File,磁盘、网络数据、终端,甚至进程间通信工具管道pipe等都被当做文件对待。 在了解多路复用select、poll、epoll实现之前,我们先简单回忆复习以下两个概念: 什么是多路复用 多路:指的是多个socket网络连接; 复用:指的是复用一个线程、使用一个线程来检查多个文件
分布式锁 当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁 1、互斥 在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。 2、防止死锁 在分布式高并发的条件下,比如有个线程获得锁的同时,还没有来得及去释放锁,就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁,造成死锁。 所以分布式非
Redisson配置:https://blog.51cto.com/u_14014612/6606350 Redisson CountDownLatch @Component public class RedissonCountDownLatchUtil { @Resource private RedissonClient redissonClient; /**
Redisson配置:https://blog.51cto.com/u_14014612/6606350 Redis String @Component @Slf4j public class RedissonStringUtil { @Resource private RedissonClient redissonClient; /** * 同步缓存
一、App DAU统计,留存统计 - SET App每日活跃用户数,每日留存统计,是一个很常见的需求。在Redis中,我们刚好可以通过SET来记录所有的用户,并通过SET提供的各种操作API来实现对比统计。 每日DAU统计例子: # 记录20210525这天的活跃用户 127.0.0.1:6379> SADD user:20210525 10010 10011 2 127.0.0.1:637
一、如何同步缓存和数据库的数据? 技术的出现都是有特定的背景的,我们摸清了技术的发展脉络,也就能更好的掌握这门技术,也能理解未来的发展趋势。 为了同步缓存和数据库的数据,我们也先来看看传统的缓存策略。常见的有以下几种更新策略: 1.1、CACHE-ASIDE策略 我们学过操作系统的缓存之后,知道无论是LLC还是page cache,我们都不会显示的去维护它,而是在操作系统内部直接集成了这些缓存
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号