自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Cloud 面试题

微服务是一种软件开发技术,它将应用程序构建为一组小的、独立的、松散耦合的服务,每个服务运行在自己的进程中,并且通过轻量级的通信机制(通常是 HTTP RESTful API)进行协作。这些服务围绕业务功能组织,每个服务都有自己的数据存储和业务逻辑,可以独立部署、扩展和更新。模块化:微服务架构将应用程序分解为小的、自治的模块,每个模块负责应用程序的一部分功能。独立性:每个微服务可以独立部署和扩展,不会影响到其他服务的运行。灵活性。

2024-05-19 19:10:29 746

原创 如何保证秒杀过程的公平性

5. 实时监控:实时监控系统的负载情况,如发现某个服务器负载过高,可以及时进行负载均衡,确保每个用户都有平等的机会参与秒杀。6. 结果公示:在秒杀结束后,及时公示抢购结果,包括成功购买的用户名单和未成功购买的用户名单,接受用户的监督和反馈。4. 抢购逻辑:在抢购过程中,采用公平的随机算法或排队机制来决定用户的购买顺序,而不是按照请求到达的顺序。1. 时间同步:确保所有参与秒杀的用户的时间是同步的,避免因为时间不同步导致的抢购先后顺序问题。

2024-01-05 11:05:09 370

原创 Spring Cloud渐进式

直接看什么是微服务?文章。《[Spring Cloud] Eureka 的自我保护模式及相关问题》Hystrix 断路器通过 HystrixCircuitBreaker 实现。CLOSED:关闭OPEN:打开HALF_OPEN:半开其中,断路器处于OPEN状态时,链路处于非健康状态,命令执行时,直接调用回退逻辑,跳过正常逻辑。HystrixCircuitBreaker 状态变迁如下图 :HystrixCircuitBreaker 状态红线:初始时,断路器处于CLOSED状态,链路处于健康状态。

2023-03-16 10:31:21 110

原创 精尽 JDK 源码解析 —— 集合(七)TreeSet

TreeSet ,基于 TreeSet 的 Set 实现类。在业务中,如果我们有排重+排序的需求,一般会考虑使用 TreeSet。不过,貌似很少会出现排重+排序的双重需求。

2023-03-15 09:59:12 114

原创 精尽 JDK 源码解析 —— 集合(六)TreeMap

在《精尽 JDK 源码解析 —— 集合(四)哈希表 LinkedHashMap》中,我们提到了两种有序Map 的选择。一种是 LinkedHashMap ,以前在该文进行了详细解析,而本文,我们开始 TreeMap 之旅,按照 key 的顺序的 Map 实现类。

2023-03-15 09:57:34 150

原创 精尽 JDK 源码解析 —— 集合(五)哈希集合 HashSet

HashSet ,基于 HashMap 的 Set 实现类。在业务中,如果我们有排重的需求,一般会考虑使用 HashSet。在 Redis 提供的 Set 数据结构,不考虑编码的情况下,它是基于 Redis 自身的 Hash 数据结构实现的。这点,JDK 和 Redis 是相同的。

2023-03-15 09:53:54 129

原创 精尽 JDK 源码解析 —— 集合(四)哈希表 LinkedHashMap

众所周知,HashMap 提供的访问,是无序的。而在一些业务场景下,我们希望能够提供有序访问的 HashMap。TreeMap :按照 key 的顺序。LinkedHashMap :按照 key 的插入和访问的顺序。LinkedHashMap ,在 HashMap 的基础之上,提供了顺序访问的特性。而这里的顺序,包括两种:按照 key-value 的插入顺序进行访问。关于这一点,相信大多数人都知道。按照 key-value 的访问顺序进行访问。通过这个特性,我们实现基于 LRU 算法的缓存。

2023-03-14 19:55:07 292 1

原创 精尽 JDK 源码解析 —— 集合(三)哈希表 HashMap

HashMap ,是一种散列表,用于存储 key-value 键值对的数据结构,一般翻译为“哈希表”,提供平均时间复杂度为 O(1) 的、基于 key 级别的 get/put 等操作。之前我们在分享《精尽 JDK 源码解析 —— 集合(一)数组 ArrayList》中提到过,“在前些年,实习或初级工程师的面试,可能最爱问的就是 ArrayList 和 LinkedList 的区别与使用场景”。现在已经改变成,HashMap 的实现原理是什么。

2023-03-14 19:46:55 131

原创 精尽 JDK 源码解析 —— 集合(二)链表 LinkedList

LinkedList ,基于节点实现的双向链表的 List ,每个节点都指向前一个和后一个节点从而形成链表。相比 ArrayList 来说,我们日常开发使用 LinkedList 相对比较少。打开 IDEA ,搜下项目中 LinkedList 后,会发现使用的少之又少。

2023-03-14 13:19:38 123

原创 精尽 JDK 源码解析 —— 集合(一)数组 ArrayList

ArrayList ,基于[]数组实现的,支持自动扩容的动态数组。相比数组来说,因为其支持自动扩容的特性,成为我们日常开发中,最常用的集合类,没有之一。在前些年,实习或初级工程师的面试,可能最爱问的就是 ArrayList 和 LinkedList 的区别与使用场景。不过貌似,现在问的已经不多了,因为现在信息非常发达,这种常规面试题已经无法区分能力了。当然即使如此,也不妨碍我们拿它开刀,毕竟是咱的“老朋友”。

2023-03-14 13:08:37 123

原创 精尽 Redisson 源码分析 —— 可靠分布式锁 RedLock

1、客户端 A 从 Redis Master 获得到锁anylock。2、在 Redis Master 同步anylock到 Redis Slave 之前,Master 挂了。3、Redis Slave 晋升为新的4、客户端 B 从新的Redis Master 获得到锁anylock。此时,客户端 A 和 B 同时持有anylock锁,已经失效。当然,这个情况是极小概率事件。主要看业务对分布式锁可靠性的诉求。

2023-03-14 13:01:39 401

原创 精尽 Redisson 源码分析 —— 可重入分布式锁 ReentrantLock

在 Redisson 中,提供了 8 种分布锁的实现,具体我们可以在《Redisson 文档 —— 分布式锁和同步器》中看到。绝大数情况下,我们使用可重入锁(Reentrant Lock)就够了,对应到就是类,具体的使用示例可以看看《芋道 Spring Boot Redis 入门》的「6.2 Redis 分布式锁」小节。在《精尽 Redis 面试题》的问题中,我们在聊到“如何使用 Redis 实现分布式锁?这个题目中,提到了需要考虑的 7 个方面,这里我们再来重复看下:1、正确的获得锁。

2023-03-14 11:11:59 494 1

原创 精尽 Redisson 源码分析 —— 限流器 RateLimiter

限流,无论在系统层面,还是在业务层面,使用都非常广泛。【业务】为了避免恶意的灌水机或者用户,限制每分钟至允许回复 10 个帖子。【系统】为了避免服务系统被大规模调用,超过极限,限制每个调用方只允许每秒调用 100 次。限流算法,常用的分成四种:每一种的概念,推荐看看《计数器、滑动窗口、漏桶、令牌算法比较和伪代码实现》文章。计数器比较简单,每固定单位一个计数器即可实现。滑动窗口Redisson 提供的是基于滑动窗口RateLimiter 的实现。相比计数器。

2023-03-14 11:03:57 2127 1

原创 精尽 Spring Boot 源码分析 —— SpringApplication

/ 处,使用注解,标明是 Spring Boot 应用。通过它,可以开启自动配置的功能。处,调用方法,启动 Spring Boot 应用。上述的代码,是我们使用 Spring Boot 时,最最最常用的代码。而本文,我们先来分析 Spring Boot 应用的启动过程。关于注解,我们会后面单独开文章,详细解析。

2023-03-14 10:32:59 85

原创 精尽 Spring Boot 源码分析 —— AutoConfigurationMetadataLoader

在 SpringApplication 中,我们可以看到方法中,加载自动配置类(AutoConfiguration)的元数据,是如下一段代码:/*** @return 获得 AutoConfigurationMetadata 对象*/// 不存在,则进行加载// 存在,则直接返回在内部,会调用方法,加载 AutoConfigurationMetadata 对象。

2023-03-14 10:28:15 119

原创 精尽 Spring Boot 面试题

所以,上面的缺点,严格来说可能不太适合在面试中回答。通过 Spring Boot ,我们开发者可以快速配置 Spring 项目,引入各种 Spring MVC、Spring Transaction、Spring AOP、MyBatis 等等框架,而无需不断重复编写繁重的 Spring 配置,降低了 Spring 的使用成本。当然,Spring Boot 只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean ,而 Spring Boot 没有提供支持,则可以自定义自动配置进行解决。

2019-11-07 20:09:24 1224 1

原创 [ERROR] Sorry! ionic serve can only be run in an Ionic project directory.

输入ionic serve[ERROR] Sorry! ionic serve can only be run in an Ionic project directory.解决方法:执行 npm install -g ionic@legacy

2019-06-19 11:53:54 4372

转载 String类为什么是final的

主要是为了”安全性“和”效率“的缘故,因为:1、由于String类不能被继承,所以就不会没修改,这就避免了因为继承引起的安全隐患;2、String类在程序中出现的频率比较高,如果为了避免安全隐患,在它每次出现时都用final来修饰,这无疑会降低程序的执行效率,所以干脆直接将其设为final一提高效率;转载:https://www.cnblogs.com/hellowhy/p/6536590....

2019-06-04 15:05:06 94

原创 'Periodic workspace save .' has encountered a problem

最近eclipse总是弹出一个窗口,内容是: ‘Periodic workspace save .’ has encountered a problem1、打开Windows–>Preferences–>General–>Startup and Shutdown将“RSE UI”的选中状态去掉,关闭Eclipse;2、打开Eclipse工作空间将“RemoteSystemsT...

2019-06-04 12:02:30 6069 1

原创 window node 安装

windows环境安装步骤:1.下载node(http://nodejs.cn/download)2.cnpm的安装  注释:大家都知道的啦,npm大多数都是外国的,安装时候会很慢,所以我呢就是用淘宝的镜像服务器。  安装命令:npm install -g cnpm --registry=https://registry.npm.taobao.org3.用cnpm安装vuecnpm i...

2019-06-04 11:50:33 145

转载 exist in什么情况下使用

1、当A表数据少,B表数据较大时应使用exist,因为它会B表数据全部遍历一次。如:A表有10000条记录,B表有1000000条记录,那么最多有可能遍历100001000000次,效率很差。再如:A表有10000条记录,B表有100条记录,那么最多有可能遍历10000100次,遍历次数大大减少,效率大大提升。2、当A表数据大,B表数据较少时适合使用in,因为in是在内存里遍历比较,而exist...

2019-06-04 11:43:46 1309

原创 docker配置国内镜像源 Mac

添加 https://registry.docker-cn.com

2019-05-16 17:54:04 4626

原创 window下启动redis报错:creating server tcp listening socket 127.0.0.1:6379: bind No error

window下启动redis报错:creating server tcp listening socket 127.0.0.1:6379: bind No error解决方案如下按顺序输入如下命令就可以连接成功redis-cli.exeshutdownexitredis-server.exe redis.windows.conf...

2019-05-16 14:35:28 551

DataGrid for mac

DataGrid for mac,数据库连接工具

2024-05-19

navicat for Mysql for mac

navicat for Mysql for mac

2024-05-19

Docker版本 18.1.1 (53328) for Mac不支持m1芯片

Docker版本 18.1.1 (53328) for Mac不支持m1芯片,适用于intel芯片。 右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中加入下面的镜像地址: http://f1361db2.m.daocloud.io 点击 Apply & Restart 按钮使设置生效。

2023-03-14

空空如也

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

TA关注的人

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