- 博客(25)
- 资源 (4)
- 收藏
- 关注
原创 Redis不再“开源”~
3月20日,Redis背后的商业实体Redis Labs的首席执行官Rowan Trollope在其官方博客上公布了一项具有里程碑意义的决定:自Redis 7.4版本起,该项目将启用一套全新的双许可证体系——RSALv2和SSPLv1。现在,从7.4版本起,Redis核心项目正式切换至RSALv2和SSPLv1双许可证制度,此举既是为了在保证开源共享的基础上,更好地维护商业利益,尤其是强化在云计算环境中的核心知识产权保护力度。,解锁更多Java干货文章。MORE | 更多精彩文章。
2024-04-04 23:59:26
335
原创 前方有车辆急刹,请小心驾驶:你知道高德地图是怎样实现的吗?
大家好,我是石头~之前看到一篇关于高德地图红绿灯倒计时的文章《高德地图官方首度揭秘:红绿灯倒计时功能是如何实现的?》,后来发现,高德还有很多其它很好的功能。比如:前车突然急刹车,高德会提示你“前方有车辆急刹,请小心驾驶”。在开车在山路弯道行驶时,高德提示“前方弯道来车,注意不要压线”。刚好拐弯时就遇上了对向来车。又或者当与前方车辆的距离过近,高德提示:“请注意,与前车距离过近,请保持安全距离。那么,高德地图是怎样实现这些功能的呢?
2024-04-04 11:10:03
4446
原创 一文读懂缓存击穿、穿透与雪崩,破局之道何在?
总的来说,应对缓存击穿、穿透和雪崩的问题需要综合考虑业务特性和系统负载情况,灵活应用各种策略。这些解决方案不仅有助于维护数据库安全,也有利于提升系统的稳定性和用户体验。期待你在评论区分享你的实战经验和观点!**MORE | 更多精彩文章**H5推送,为什么都用WebSocket?别再这么写POST请求了~Redis不再“开源”~
2024-04-03 20:39:14
903
原创 SSE:ChatGPT的对话传输协议!
Server-Sent Events (SSE) 是一种基于HTTP协议的服务器到客户端的单向数据通信技术,允许服务器向浏览器实时推送更新,而不需要客户端通过轮询等方式反复请求数据。综合以上对比结果,若是H5动作较少的单向刷新场景,例如股价刷新、新闻动态等,建议选择SSE;最近在研究H5推送,发现除了我们常用的WebSocket以外,其实还有一种协议也能实现H5推送,那就是SSE协议。而且,当前主流的大模型平台,比如ChatGPT、通义千问、文心一言,对话时采用的就是SSE。MORE | 更多精彩文章。
2024-03-15 20:23:40
1353
原创 微服务精通之Feign原理解析
前言 经过微服务精通之Ribbon原理解析的学习,我们了解到了服务消费者获取服务提供者实例的过程,都是通过RestTemplate来实现的,而且,都是模板化操作。那spring cloud是否有哪个组件可以通过注解或者配置的方式,来简化这个过程?答案是有的,就是Feign。一、Feign是什么? Feign是一个声明式的伪HTTP客户端,
2020-11-01 23:53:37
2748
3
原创 微服务精通之Hystrix原理解析
前言 经过微服务精通之Ribbon原理解析的学习,我们了解到了服务消费者获取服务提供者实例的过程,在这之后,服务消费者会调用服务提供者的接口。但是在调用接口的过程中,我们经常会遇见服务之间的延迟和通信失败的问题,极端情况下,可能会出现因为某个服务性能的下降或者故障宕机,导致服务超时,层层传递,引发雪崩,最终导致整个系统崩溃,而这种情况,我们可以通过熔断器解决这个问题,提高系统的稳定性。一、熔断器是什么? &n
2020-11-01 16:12:59
743
原创 微服务精通之Ribbon原理解析
文章目录前言一、Ribbon是什么?二、负载均衡是什么?三、Ribbon原理解析1.Ribbon工作流程2.Eureka高可用架构3.Eureka服务端缓存架构4.Eureka健康检查5.Eureka分区四、Eureka实战1.创建Eureka服务端(1)创建名为eureka-server的maven工程(2)引入Eureka-server依赖(3)创建启动类(4)创建application.yml配置文件2.创建Eureka客户端(1)创建名为service-hi的maven工程(2)引入Eureka-c
2020-09-19 23:06:34
1363
原创 微服务精通之Eureka原理解析
文章目录前言一、Eureka是什么?二、Eureka是干什么的?1.服务治理三、Eureka原理解析1.总体流程2.读入数据总结前言 随着互联网技术的发展,系统用户量的增长,很多系统都采用了分布式的方式进行部署。这个固然大大提高了系统的性能和可用性,但是分布式部署导致各种服务数量大增,这给我们进行服务治理和运维带来了困扰。一、Eureka是什么?  
2020-09-06 21:25:55
3048
原创 IOC容器的初始化
spring中,IOC容器的初始化分成三个步骤:资源文件定位、bean的加载和注册。资源文件定位我们以FileSystemXmlApplicationContext的资源定位为例,它是在DefaultResourceLoader的getResource方法中实现,如果是以classpath定位,就返回ClassPathResource,如果是以URL定位,就返回UrlResource,否则就从Fil
2017-05-24 11:59:56
379
原创 java并发编程:自定义同步工具
条件谓词在进行某些操作之前,需要进行一些先置条件判断。例如阻塞队列BlockingQueue在进行put操作之前,要先判断队列是否已满,如果已满,就会阻塞,直到队列空出位置出来,才能释放出来,继续执行操作。其中,“队列是否已满”就是条件谓词。条件队列在操作不满足条件谓词时,就会被阻塞,该线程就会被塞入对应锁的等待队列中,这个队列即为条件队列。使用notify的危害队列中如果有多种条件谓词,可能出
2017-05-17 17:24:15
323
原创 java并发编程:性能与可伸缩性
可伸缩性的定义增加系统的资源时(如CPU、内存、存储容量或者I/O带宽等),能够增加程序的吞吐量和系统响应速度。Amdahl定律程序中的串行部分比例越高,程序的可伸缩性越低。锁优化方法-降低锁的持有时间(快进快出,将非原子操作,且占用时间较长的如I/O操作等代码移出同步代码块) -降低锁的粒度(锁分解、锁分段) -使用非占用锁(使用ReadWriteLock、原子变量等)
2017-05-11 17:45:18
440
原创 java虚拟机:垃圾回收机制
判断对象是否存活java虚拟机使用“可达性”算法来判断对象是否存活。 “可达性”算法:从GC Root出发,对其它对象进行关联,如果能关联上的,表示存活,如果关联不上,表示需要回收。可作为GC Root的对象 虚拟机栈(局部变量表)中引用的对象方法区中类静态属性引用的对象方法区中常量池引用的对象本地方法栈中JNI引用的对象垃圾回收算法标记-清除 对“已死”对象进行标记,清除做标记
2017-04-19 19:25:02
230
原创 java并发编程:同步工具类
闭锁(CountDownLatch)闭锁就相当于一个大门,只有等所有线程都到达之后,门才会开。例如:我约了其它三个人一起打麻将,之后等我们四个人都到了之后,才能开始打麻将。private static void testCountDownLatch() { final CountDownLatch start = new CountDownLatch(1); fi
2017-04-19 16:33:21
236
原创 java并发编程:发布与逸出
发布与逸出的定义将线程的对象放在公共域,使其他线程可见,即为发布。 错误的发布,即为逸出。安全的发布方式将对象放在静态域中。对象会在初次使用Test类的时候进行初始化。public class Test { public static Object obj = new Object();}将对象放在final域中。使用volatile修饰或者使用AtomicReference使
2017-04-19 16:12:09
459
原创 java并发编程:线程安全性
java并发编程:线程安全性多线程的优势提高资源使用率提高系统的吞吐量提高系统响应速度 多线程的风险线程安全性问题(对象可能会发生竞态条件)活跃性问题(线程可能会出现阻塞、死锁之类的问题)性能问题(线程的不合理使用,可能会导致资源竞争、内存占用过大等问题)线程安全性的定义线程安全性,实际上就是看线程是否按照我们所预期的方式运行,如果是,就是线程安
2017-04-19 15:51:15
464
深入理解Java虚拟机:JVM高级特性与最佳实践
2016-02-22
Java编程思想第4版.pdf
2014-08-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人