
Java互联网高级培训教程
文章平均质量分 82
并发编程、数据结构、Java虚拟机等等这些知识都是互联网大厂的常见面试题,也是要进一步学习Java必须牢固掌握的基础,所以需要多花点时间学习。本博客内容涉及数据结构、Java基础知识、JVM、并发编程等等这些很重要的知识点,适合作为筑基教程,为之后更难的学习做准备
Nicky.Ma
优秀
展开
-
Java互联网高级培训教程专栏导航
并发编程、数据结构、Java虚拟机等等这些知识都是大厂面试的常见面试题,也是要进一步学习Java必须牢固掌握的基础,所以需要多花点时间学习,本博客内容涉及数据结构、Java基础知识、JVM、并发编程等等,适合作为筑基教程,为之后更难的学习做准备原创 2023-04-26 18:53:20 · 722 阅读 · 0 评论 -
Redis系列之常见数据类型应用场景
Redis支持多种数据类型,比如String、hash、list、Set、SortedSet、Streams、Bitmap、Hyperloglog、Geo(物理位置)等等,在官网也给出了说明,本博客就挑一些比较常有的数据类型说说,本文例子基于Redisson实现原创 2023-11-08 22:36:45 · 630 阅读 · 0 评论 -
Redis系列之什么是布隆过滤器?
Redis系列之什么是布隆过滤器?布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制数组。布隆过滤器有一系列随机映射函数,可以用于检索一个元素是否在一个集合中。......原创 2022-07-24 21:29:54 · 1162 阅读 · 0 评论 -
Redis系列之使用Lua脚本
lua语言是一个轻量级的脚本语言,可以嵌入其他语言中使用,调用宿主语言的功能。lua语法简单,小巧,源码一共才200多K,本身不会有太强的功能,很多的语言也支持lua语言,比如redis、Nginxredis语言中完美嵌入了lua脚本功能,redis可以调用lua脚本中的api,lua脚本也可以调用redis中的命令。原创 2024-01-14 00:00:53 · 756 阅读 · 0 评论 -
Redis系列之事务机制
学习mysql数据库的时候,我们知道了事务的ACID特性,Redis也是支持事务的,不过和数据库的事务又有什么区别?在mysql数据库中,我们使用begin开启事务,提交是commit,回滚是rollback,然后Redis中的事务是怎么一回事?redis的事务其实可以看做是一组命令按照顺序,串行执行队列中的命令,其它客户端的命令不会写入到这个队列中。总的来说,redis事务就是一次性、顺序性、排他性的执行一个队列中的一组命令。原创 2023-12-17 21:49:55 · 337 阅读 · 0 评论 -
Redis系列之实现分布式自增主键
使用Redis来实现分布式的主键自增主要是依赖于Redis的INCR命令,调用INCR命令的对应key,其数值是实现递增加一,所以利用这个性质,将redis独立部署起来就可以实现分布式环境的自增ID,如图,使用INCR命令的例子原创 2023-11-09 19:19:37 · 1233 阅读 · 0 评论 -
Redis系列之keys命令和scan命令性能对比
Redis的keys *命令在生产环境是慎用的,特别是一些并发量很大的项目,原因是Redis是单线程的,keys *会引发Redis锁,占用reids CPU,如果key数量很大而且并发是比较大的情况,效率是很慢的,很有可能导致服务雪崩,在Redis官方的文档是这样解释的,官方的推荐是使用scan命令或者集合原创 2023-12-05 00:01:13 · 1359 阅读 · 0 评论 -
Redis系列之简单实现watchDog自动续期机制
在分布锁的实际使用中,可能会遇到一种情况,一个业务执行时间很长,已经超过redis加锁的时间,也就是锁已经释放了,但是业务还没执行完成,这时候其它线程还是可以获取锁,那就没保证线程安全。具体的实现,主要是基于一个定时任务,时间间隔一定要比加锁时间少一点,这里暂时少1s,加上一个lua脚本进行检测,检测不到数据,就关了定时任务原创 2023-12-12 20:23:14 · 1791 阅读 · 0 评论 -
Redis系列之持久化机制RDB和AOF
RDB,Redis Database快照,是Redis默认的持久化方案。当满足一定条件的时候,会把当前内存中的数据写到磁盘,生成一个快照文件,默认的文件名为`dump.rdb`AOF:Append Only File,顾名思义,就是一种追加文件的意思,工作机制比较好理解,redis会将每一个收到的写命令通过write函数追加到文件中,通俗理解就是日志记录AOF机制默认是关闭的,你可以在配置文件中开启,找到redis.conf。原创 2024-03-08 23:34:02 · 869 阅读 · 2 评论 -
Redis系列之多线程下使用incr/decr命令
Redis是一个单线程的服务,所以正常来说redis的命令是会排队执行的。incr/decr命令是redis提供的可以实现递增递减的命令。但是如果使用不当也会有线程安全问题。动手实践一下吧,用一个例子来模拟实现高并发场景的秒杀减库存业务。原创 2023-12-04 20:15:00 · 2835 阅读 · 3 评论 -
Redis系列之底层数据结构SDS
SDS:Simple Dynamic String,翻译为简单动态字符串。SDS是一种用于存储二进制数据的数据结构,具有动态扩容的特点,代码位于src/sds.h和src/sds.c原创 2024-09-13 17:56:27 · 909 阅读 · 0 评论 -
Redis系列之底层数据结构整数集IntSet
IntSet,整数集合,是Redis集合类型的一种底层数据结构,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis就会选用intset作为底层实现。原创 2025-01-18 00:15:00 · 674 阅读 · 0 评论 -
Redis系列之底层数据结构字典Dict
Redis系列之底层数据结构字典Dict。Dict是Redis数据结构中使用最为频繁的复合型数据结构,本质上是一个哈希表。在Redis中,Dict数据结构应该是使用最为频繁的复合型数据结构,除了在hash数据的会使用字典外,整个Redis的key和value也组成一个全局字典,Zset集合中存储value和score值的映射关系也是通过字典结构实现的原创 2025-01-17 10:59:46 · 774 阅读 · 0 评论 -
Redis系列之底层数据结构ZipList
Ziplist,压缩列表,这种数据结构会根据存入数据的类型和大小,分配大小不同的空间,所以是为了节省内存而采用的。因为这种数据结构是一种完整连续的数据单元,所以一旦发生数据改变,会产生连锁更新,严重影响访问性能,所以这种数据结构只适应于数据量比较小的情况。原创 2024-11-13 16:58:20 · 777 阅读 · 2 评论 -
Redis系列之底层数据结构QuickList
在Redis3.2版本后,Redis推出了快速列表(QuickList)这种数据结构,之前的版本list都是元素少时用压缩列表(ZipList),元素多就用链表(LinkedList)。快速列表是一种双端链表的数据结构,QuickList用于处理Redis中List类型数据。原创 2024-12-17 09:15:46 · 920 阅读 · 0 评论 -
Redis系列之底层数据结构跳表SkipList
SkipList顾名思义,本质也是一个list数据结构,SkipList是在有序链表的基础上发展来的。如图,就是一个有序链表原创 2025-01-25 12:55:34 · 515 阅读 · 0 评论 -
Redis系列之高可用集群模式介绍
主从模式,是redis集群最基本的模式,主库负责读写,从库负责读。主库的数据会同步到从库,但是从库写的数据不会自动同步到主库,除非用写脚本等方式手动同步。这种模式应急能力比较差,假如出现宕机的情况,需要手动进行修改Redis的主从模式是可以解决负载、数据备份等问题,但是,如果master宕机的情况,slave是不会自动升级为master的,必须手动升级,所以就有了哨兵集群的方案,以及后面介绍的cluster集群先看看官网对Sentinel的介绍大概意思是。原创 2024-03-22 15:25:56 · 1099 阅读 · 0 评论 -
Redis系列之主从复制集群搭建
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。最近学习需要用到Redis,所以就去Linux服务器上部署一个主从复制集群,做下记录,方便以后需要参考原创 2024-04-09 22:06:23 · 666 阅读 · 0 评论 -
Redis系列之哨兵Sentinel集群搭建
在上一篇博客,我们已经知道怎么搭建一个redis主从复制集群,但是主从集群如果出现服务器宕机的情况,是不会自动选举master的,所以需要搭建更加高可用的集群模式,哨兵模式,哨兵集群会自动监控,如果出现master服务器宕机的情况,会重新选举新的master,保证系统的高可用原创 2024-04-20 21:46:12 · 716 阅读 · 1 评论 -
Redis系列之Cluster集群搭建
在上一篇博客,我们学习Redis哨兵Sentinel集群的搭建,redis的哨兵模式提供了比如监控、自动故障转移等高可用方案,但是这种方案,容量相对固定,要进行持续扩容或者数据分片就不适合,所以有另外一种更复杂的集群方案,Cluster集群模式原创 2024-04-20 21:46:28 · 1348 阅读 · 0 评论 -
Redis系列之key过期策略介绍
我们知道redis有一个特性,redis中的数据,我们都是可以设置过期时间的,如果时间到了,这个数据就会从Redis中移除。那么redis key的过期策略就是我们怎么将redis中的过期数据移除。原创 2024-05-07 11:14:27 · 949 阅读 · 0 评论 -
Redis系列之淘汰策略介绍
Redis系列之淘汰策略介绍。由于Redis内存是有大小的,当内存快满的时候,又没有过期数据,这个时候就会导致内存被占满,内存满了,自然就不能再放入新的数据。所以,就需要Redis的淘汰策略来保证可用性。原创 2024-06-06 16:15:47 · 1240 阅读 · 1 评论 -
如何确保Redis Pub/Sub模式的数据安全?
Redis 的 `client-output-buffer-limit` 参数用于设置客户端输出缓冲区的大小限制,以防止慢速客户端消耗过多的内存资源。通过这些配置,可以有效地控制不同类型客户端的输出缓冲区大小,确保 Redis 服务器的稳定性和性能。原创 2024-12-17 09:15:08 · 841 阅读 · 0 评论 -
Redis系列之基于Linux单机安装
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。最近学习需要用到Redis,所以就去Linux服务器上部署一个,做下记录,方便以后需要参考。原创 2024-04-09 22:06:08 · 680 阅读 · 0 评论 -
TCP协议为什么需要三次握手?
TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?读者可以带着疑问,看一遍本篇博客的详细讲解。首先解释原因之前还是要先复习一下TCP的基本知识和三次握手协议原创 2021-09-03 17:03:46 · 21616 阅读 · 21 评论 -
HashMap实现原理和源码详细分析
JDK1.8 HashMap实现原理和源码详细分析,学习要点:知道HashMap的数据结构。了解HashMap中的散列算法。知道HashMap中put、remove、get的代码实现。HashMap的哈希冲突是什么?怎么处理的?知道HashMap的扩容机制原创 2021-09-12 09:52:37 · 5477 阅读 · 27 评论 -
应如何设置HashMap容量的初始值?
Java中的集合框架是每一个java程序员使用很多的,其中hashMap的使用也是很多的,我之前也写过一篇对hashMap源码进行比较详细分析的博客:链接,读者可以参考学习。然后有看过阿里编程规范的应该知道,规范里指出在使用hashMap时候是可以指定一个初始化的容量的,然后具体原因是什么?原创 2021-10-31 17:22:07 · 3271 阅读 · 0 评论 -
记录一次大数据量接口优化过程
记录一次大数据量接口优化过程。最近在优化一个大数据量的接口,是提供给安卓端APP调用的,因为安卓端没做分批次获取,接口的数据量也比较大,因为加载速度超过一两分钟,所以导致接口超时的异常,要让安卓APP分批次调用需要收取费用,所以只能先优化一下接口的速度。原创 2024-04-29 17:21:32 · 5082 阅读 · 7 评论 -
并发编程系列之线程基础知识回顾
并发编程系列之线程基础知识回顾,并发多线程的知识是很重要而且比较杂的知识点,所以需要花不少时间用于整理。问题1、使用多线程的目的是什么?充分利用cpu资源,可以并发的处理任务原创 2021-08-27 13:54:48 · 1540 阅读 · 4 评论 -
为什么说创建线程的方法只有1种?
为什么说创建线程的方法只有1种??并发多线程的知识是很重要而且比较杂的知识点,所以需要花不少时间用于整理。创建线程的方式是学习并发编程的一个很基础的问题,所以必须先掌握好,这应该说是一个比较经典的面试题,创建线程的方式到底有多少种?有人可能会说有两种?三种?四种?原创 2021-08-22 16:16:02 · 1879 阅读 · 6 评论 -
并发编程系列之如何正确使用线程池?
并发编程系列之如何正确使用线程池?在上一章节的学习中,我们掌握了线程的基本知识,接着本博客会继续学习多线程中的线程池知识。线程是不是越多越好?在学习多线程之前,读者可能会有疑问?如果单线程跑得太慢,那么是否就能多创建多个线程来跑任务?原创 2021-09-01 22:33:41 · 2908 阅读 · 12 评论 -
并发编程系列之掌握原子类使用
并发编程系列之掌握原子类使用。原子类是jdk的juc包中提供的对单个变量进行无锁、线程安全修改的工具类。juc中提供的锁,能很好地保证线程安全,但是在高并发的情况下,可能不能保证高性能,所以适当地使用原子类,有时候是可以提高性能原创 2021-12-04 20:14:49 · 3359 阅读 · 0 评论 -
并发编程系列之什么是Java内存模型?
并发编程系列之什么是Java内存模型?Java内存模型简称JMM(Java Memory Model),JMM是和多线程并发相关的一组规范。各个jvm实现都要遵循这个jmm规范。才能保证Java代码在不同虚拟机顺利运行。因此,JMM 与处理器、缓存、并发、编译器有关。它解决了CPU 多级缓存、处理器优化、指令重排等导致的结果不可预期的问题原创 2021-11-20 11:08:51 · 1505 阅读 · 0 评论 -
并发编程系列之变量可见性问题探究
并发编程系列之变量可见性问题探究。以例子的形式看看,定义一个变量,先用static修饰,在主线程修改之后,看看在新开的子线程里能被看到?原创 2021-11-15 16:33:06 · 1579 阅读 · 0 评论 -
并发编程系列之volatile关键字详解
volatile是什么?volatile是Java中的一个关键字,也是一种同步机制。volatile为了保证变量的可见性,通过volatile修饰的变量具有共享性。修改了volatile修饰的变量,其它线程是可以读取到最新的值的原创 2021-11-27 17:43:46 · 2292 阅读 · 0 评论 -
单例模式双重检查锁模式为什么必须加 volatile?
单例模式双重检查锁模式为什么必须加 volatile?在new Singleton时候,会进行如下的过程,①先给Singleton分配内存空间、②调用Singleton的构造函数进行初始化操作③将Singleton对象指向分配的内存空间。不加volatile关键字,进行代码编译时候是会进行指令重排序的原创 2021-11-22 20:02:47 · 1724 阅读 · 0 评论 -
并发编程系列之什么是并发协同?
并发编程系列之什么是并发协同?多个线程并发,协作来完成一件任务的过程。因为任务处理的需要,需控制某些线程等待另外一些线程执行完成任务的某些部分,然后继续执行原创 2021-11-29 16:57:06 · 1831 阅读 · 2 评论 -
并发编程系列之CountDownLatch用法简介
并发编程系列之CountDownLatch用法简介。CountDownLatch:用于协同控制一个或多个线程等待在其他线程中执行的一组操作完成,然后再继续执行原创 2021-11-29 16:13:30 · 1914 阅读 · 0 评论 -
并发编程系列之CyclicBarrier用法简介
CyclicBarrier,协同指定数目的线程,让这些线程都在这个屏障前等待,直到所有的线程都到这个屏障前,再一起继续执行。线程执行完成后,这个屏障可以再次使用,因此被称之为循环屏障。原创 2021-11-29 16:16:10 · 1526 阅读 · 0 评论 -
并发编程系列之Semaphore用法简介
就是要给令牌池,可获取信号量(令牌或者许可)、放入信号量。常用于控制并发的线程数,也可用于池类资源的访问控制。原创 2021-11-29 16:55:47 · 1471 阅读 · 0 评论