- 博客(429)
- 资源 (29)
- 收藏
- 关注

原创 80个JAVA8函数式编程中关于集合的操作实例(持续更新增加实例)
reduce(Map.Entry identity, BinaryOperator accumulator, BinaryOperator combiner) - 根据给定的初始值和累加器将元素逐个结合,类似于reduce操作,只不过针对Map的键值对 示例:将字符串集合中的所有元素按照首字母分组,并统计每个分组中元素的个数。map - 将集合中的每个元素映射为另一个元素 示例:将数字集合中的每个元素平方并返回平方后的集合。
2023-04-13 21:49:54
1002
原创 微服务服务间调用组件Feign使用介绍、原理、优化技巧
Feign是一个声明式的Web Service客户端。它让微服务之间的调用变得更简单。Feign具有可插拔式的注解支持,包括Feign 注解和JAX-RS注解。Feign还支持可插拔的编码器和解码器。Spring Cloud增加了对Spring MVC注解的支持,并且也支持Spring WebFlux。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。Feign的基本概念、原理与使用。Feign采用声明式的接口,自动拼接URL、添加参数等工作,简化HTTP客户端的开发。
2023-05-20 15:51:28
867
原创 微服务负载均衡器Ribbon介绍、使用以及原理和源码理解
Ribbon是Netflix开源的客户端负载均衡器,它可以很好的控制HTTP和TCP客户端的行为。Ribbon支持配置客户端添加重试和超时等功能,旨在使客户端更加强健。负载均衡故障检测暂时性错误重试客户端配置化等轮询(RoundRobinRule):轮流选择服务器随机(RandomRule):随机选择服务器重试(RetryRule):在一个配置时间内当选择服务器不成功,则一直尝试该服务器,超过配置时间才尝试其他服务器。
2023-05-17 23:23:16
618
原创 微服务注册中心Eureka原理到源码
Eureka是Netflix开源的一款用于提供服务注册和发现的产品,它提供了完整的服务注册和发现功能,具有容错性,可伸缩性等特性。Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务。各个微服务启动时,会通过Eureka Client向Eureka Server注册自己的信息(例如服务名称、IP地址、端口等)。
2023-05-15 18:31:03
731
原创 JVM问题排查和垃圾回收机制
JVM的主要内存区有方法区、堆、栈、程序计数器等,堆和方法区是所有线程共享的,其中堆主要用于存储对象实例,是一个显著的可回收内存来源。垃圾回收器的主要工作就是规律的遍历堆区,释放那些不再被使用的对象所占用的内存,使其成为可用内存。其中,[标记-清除]算法会产生内存碎片较严重,而[标记-复制]算法需要双倍的内存空间,所以目前主流的商业虚拟机一般采用[标记-整理]算法。Java垃圾回收主要是利用垃圾回收器对堆内存进行回收,回收那些不再被使用的对象所占用的内存,以实现内存的再利用。
2023-05-12 19:44:15
649
原创 线程池的介绍、原理、监控运维、框架使用场景案例
JDK 提供的线程池功能较基础,开源框架 Executors 在此基础上做了许多封装,更加易用。主要有:- newCachedThreadPool:创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。- newFixedThreadPool: 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。- newScheduledThreadPool: 创建一个定长线程池,支持定时及周期性任务执行。- newSingleThreadExecuto
2023-05-03 20:19:47
1050
原创 synchronized的偏向、轻量、重量级锁
Synchronized实现同步的方式有三种:偏向锁、轻量级锁、重量级锁。本文会从理论和代码实践两方面阐述三种锁的实现细节和原理。
2023-05-02 22:47:16
826
1
原创 JAVA并发万字长文从ReentrantLock到juc框架
ReentrantLock 是通过一个volatile 的变量和一个 FIFO 的队列来实现的。该 volatile 变量表示当前获得锁的线程,FIFO 队列用来存储等待锁的线程。具体实现方式是:当一个线程获取锁时,将当前线程设置为 volatile 变量的值。如果其他线程试图获取该锁,则会加入 FIFO 队列的尾部,并标记为等待状态。当持有锁的线程释放锁时,它会唤醒 FIFO 队列头部的线程,这个线程继续执行并获取锁。ReentrantLock 是可重入锁,意味着同一个线程可以多次获取这把锁。这是
2023-05-02 20:53:28
954
原创 volatile关键字原理的使用介绍和底层原理解析和使用实例
volatile 关键字的主要作用是保证可见性和有序性,禁止编译器优化。保证可见性:当一个变量被声明为 volatile 之后,每次读取这个变量的值都会从主内存中读取,而不是从缓存中读取,这就保证了不同线程对这个变量操作的可见性。有序性:volatile 关键字保证了不同线程对一个 volatile 变量的读写操作的有序性。禁止编译器优化:编译器会对代码进行各种优化来提高性能,但是这些优化也可能让同步代码失效。volatile 关键字告诉编译器不要对这段代码做优化,从而避免一些不正确的优化。
2023-05-02 17:11:46
1347
原创 ThreadLocal的使用介绍和底层原理解析和开源框架的使用实例
ThreadLocal是一个线程内部的数据存储类,它可以为每个线程提供独立的变量副本,不同线程间的变量无法相互访问和修改。这避免了每个线程都要维护一套独立变量的麻烦,并且也减少了线程之间不必要的数据争用。ThreadLocal适用于这样的场景:每个线程需要有自己单独的实例,而不是共享实例。例如,在 web 应用中,每个请求被一个新的线程处理,每个线程需要有自己的变量实例。
2023-05-02 15:07:43
1662
原创 ConcurrentHashMap的使用介绍和底层原理解析和开源框架的使用实例
ConcurrentHashMap是JDK1.5提供的线程安全的HashMap,它允许多个线程并发访问哈希表,并发修改map中的数据而不会产生死锁。ConcurrentHashMap适用于高并发的环境下,可以替代synchronized实现的同步HashMap。ConcurrentHashMap的并发度很高,吞吐量也很高。ConcurrentHashMap通过锁分段技术,实现高度的并发访问,大大提高了HashMap的吞吐量,是高并发环境下一个很好的选择。
2023-05-01 23:01:50
843
原创 【面试长文】HashMap的数据结构和底层原理以及在JDK1.6、1.7和JDK8中的演变差异
JDK1.8引入了红黑树,降低了链表过长的可能性,提高了效率。JDK1.8使用synchronized+CAS控制并发扩容,避免锁定整个table,提高了并发度。JDK1.8对null key做了优化,null键值对存储在table[0]位置。三个版本的HashMap都采用链表散列结构,通过key的hashCode映射到table,如果hash冲突就采用链表存储。扩容的阈值loadFactor在三个版本都是0.75,阈值size和table大小的乘积超过loadFactor时触发扩容。
2023-04-30 13:51:09
1084
原创 CopyOnWriteArrayList 的底层原理与多线程注意事项
CopyOnWriteArrayList 是 Java 集合框架中非常实用的线程安全 List 集合,通过读写分离的思想,保证了在高并发读多写少的情况下的数据安全和性能。但是,由于每次写操作需要复制整个数组,所以对内存的消耗较大,同时在迭代过程中也可能会存在一些数据不一致的问题。因此,在使用 CopyOnWriteArrayList 时,需要根据实际业务需求选择合适的集合类型,避免出现不必要的问题。
2023-04-30 11:46:23
1691
1
原创 Java集合框架与ArrayList、LinkedList的区别
在集合框架中,ArrayList和LinkedList是两个最基本的数据结构。LinkedList是一个双向链表,表示一个有序的集合,可以包含重复的元素。ArrayList是一个动态数组,表示一个有序的集合,可以包含重复的元素。Java集合框架是Java平台的一部分,它包含了一组接口、实现类和算法,可以用于存储和处理数据。下面给出一个使用 ArrayList 和 LinkedList 的示例代码,包括元素的插入、删除和访问操作。Java集合框架提供了丰富的算法和数据结构,可以满足各种不同的需求。
2023-04-30 11:29:21
1922
原创 Java中的String、StringBuffer和StringBuilder
String、StringBuffer 和 StringBuilder 都是处理字符串的类型,但是它们之间有很大的不同。String 是不可变的,而 StringBuffer 和 StringBuilder 是可变的。StringBuffer 和 StringBuilder 类似,但是 StringBuffer 是线程安全的,而 StringBuilder 不是。如果你需要对字符串进行频繁的修改操作,并且在多线程环境中使用,那么就应该使用 StringBuffer;
2023-04-30 11:16:45
1076
原创 消息队列如何保证消息可靠性传输
在本文中,我们主要介绍了持久化存储、消息确认机制、重试机制和幂等性处理等机制,以及使用 JAVA 语言和 Apache Kafka、RabbitMQ 进行代码实践的示例。通过上述机制的支持和实践,可以保证消息队列系统的可靠性和稳定性,为各大互联网公司提供高效、稳定的消息传输服务。
2023-04-30 11:07:56
2583
原创 RocketMQ 底层实现原理
在 RocketMQ 中,消息的发送过程可以分为三个步骤:1. 生产者发送消息到 Broker;2. Broker 将消息存储到磁盘,并将消息持久化到 CommitLog 和 IndexFile 中;3. 消费者从 Broker 拉取消息并进行消费。
2023-04-30 10:59:16
2344
原创 kafka的push、pull分别有什么优缺点
在 Kafka 中,生产者使用 push 模式将消息推送给 Kafka 集群,而消费者则使用 pull 模式从 Kafka 集群中拉取消息。本文对 Kafka 的 push 和 pull 两种模式进行比较,分析其优缺点。Pull 模式是 Kafka 新增的方式,使用该模式时,消费者可以自主选择从哪个分区开始拉取消息,并可以自主控制拉取消息的速度。Kafka 中为消费者维护着一个 offset,表示消费者已经消费的消息序号,当消费者拉取消息时,Kafka 会返回该消费者还没有消费的消息。
2023-04-29 15:58:33
2417
1
原创 InnoDB如何实现事务、undo log、redo log、binlog
当一个事务开始后,会在内存中为其分配一块undo log,并在该事务执行修改数据表之前将相关数据先拷贝到undo log中。同时,InnoDB还利用了多版本并发控制(MVCC)来实现数据的隔离性。主从复制时,从库会读取主库的binlog事件来重放数据的更改,实现数据一致性。redo log是指数据库系统执行修改操作时所记录的日志,它的主要作用是确保当数据库崩溃时不会丢失数据更新操作。InnoDB是MySQL的默认存储引擎,它使用多版本并发控制(MVCC)和锁机制来实现事务。
2023-04-26 15:31:43
723
原创 B树、B+树的区别及MySQL为何选择B+树
B树和B+树都是一种多路搜索树,常用于数据库和文件系统中进行索引操作。在介绍B树和B+树的区别之前,先来了解一下它们的定义。
2023-04-26 14:44:37
937
转载 【转载】JAVA用户角色权限设计(功能权限)
**实现业务系统中的用户权限管理** B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让
2023-04-26 14:42:37
2042
原创 MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别
MySQL是目前使用最广泛的关系型数据库,而存储引擎是MySQL中一个非常重要的概念。存储引擎决定了MySQL如何存储和处理数据,对于系统性能和功能的影响非常大。本文将对MySQL常见的几种存储引擎进行介绍和比较,帮助读者更好地选择适合自己应用场景的存储引擎。不同的存储引擎有不同的特点和适用场景,我们可以根据实际需求选择最合适的存储引擎。一般来说,应该优先考虑使用InnoDB存储引擎,因为它支持事务、行级锁定等高级功能,能够保证数据的一致性和可靠性。
2023-04-23 15:16:29
974
原创 MySQL索引B+树、执行计划explain、索引覆盖最左匹配、慢查询问题
B+树以(m, M)-B+树的形式出现,其中m和M的含义与B树相同,但内部节点包含的关键字数目比B树更多,通常是M/2到M。B树是一种平衡多路查找树,相比于二叉查找树,它允许一个节点存在多个子节点,因此可以减少I/O操作的次数,提高数据的访问效率。B树中的每个节点都可能存储关键字,因此,除了叶子节点,B树的每个节点都可以作为查询结果返回。B树的非叶子节点存储关键字以及指向子节点的指针,而B+树中的非叶子节点只存储关键字和对应子节点的指针,即只存储索引信息,这样可以存储更多的索引信息。
2023-04-20 20:35:06
577
原创 MySQL执行计划详解
执行计划是MySQL查询优化器生成的一组指令,用于执行SQL语句。在执行SQL语句时,MySQL会对SQL进行解析、优化、执行三个步骤。在优化阶段,MySQL查询优化器会生成一个执行计划,该计划被称为查询计划或执行计划。执行计划告诉MySQL执行SQL语句的具体步骤,包括表的连接方式、扫描方式、过滤条件等。执行计划是指MySQL根据用户请求所生成的一份查询计划,它决定了MySQL在执行SQL语句时所采取的操作方式,包括表的连接方式、索引的选择、访问方法等,进而影响着查询语句的执行效率。
2023-04-19 23:25:05
2055
原创 Redis缓存MySQL数据库存储二者如何保证数据一致性
Redis缓存MySQL数据库存储二者如何保证数据一致性,既可以同步更新缓存,也可以异步更新缓存。同步更新缓存能够保证数据一致性,但会对写操作的性能产生影响;异步更新缓存则能够避免这个问题,但需要引入消息队列,并且也需要考虑缓存更新失败的情况。根据实际情况选择不同的方案即可。
2023-04-19 10:10:01
663
原创 Java缓存穿透、击穿、雪崩解决方案
针对缓存穿透、击穿和雪崩问题,我们可以采用布隆过滤器、分布式锁和多级缓存策略等技术手段来进行优化。在实际项目中,需要根据具体情况选择合适的解决方案,并进行适当的调整和配置,以达到最佳的性能和稳定性。
2023-04-18 21:03:11
593
原创 Redis主从复制、哨兵、集群原理部署介绍
Redis主从复制是保证Redis数据库高可用性和容错性的重要解决方案之一。Redis哨兵模式是保证Redis数据库高可用性和容错性的重要解决方案之一。Redis 是一款内存数据库,常用于缓存、消息队列等。随着业务的发展和数据的增长,单机 Redis 可能无法满足我们的需求,此时我们需要使用 Redis 集群模式。Redis 集群模式可以将多个 Redis 实例组成一个集群,提供更高的性能和可用性。我们将介绍 Redis 集群模式的核心原理,并通过代码实践演示如何搭建 Redis 集群。
2023-04-18 20:20:37
922
原创 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结
在Java多线程编程中,有三种常见的同步工具类:CountDownLatch、CyclicBarrier、Semaphore。这些工具类使得我们可以在多个线程之间进行协调,实现更高效的并发处理。本文将对它们的原理和实例进行分析总结。本文分析了CountDownLatch、CyclicBarrier、Semaphore三种常见的同步工具类的原理和实例。这些工具类可以帮助我们在多个线程之间进行协调,实现更高效的并发编程。
2023-04-14 11:56:50
668
原创 Redis分布式锁的实现方式及底层原理
在加锁方法中,我们首先生成了一个随机字符串nonce作为锁的值,并在每个Redis实例上进行原子性的set操作,返回成功加锁的实例数。如果获取到锁的实例数大于等于quorum(即多数节点),并且加锁操作完成的时间小于锁的过期时间expireTime,则表示加锁成功,否则认为加锁失败,触发重试机制。Redlock算法采用多个节点之间互斥的方式获取分布式锁,可以保证在大部分节点正常情况下分布式锁的可靠性,并允许在某些更繁忙或网络质量较差的节点上失败,从而确保分布式锁的稳定性。
2023-04-13 20:37:54
1006
原创 HashMap的关键性源代码进行解读
对于相同的键,hashCode()方法返回的哈希值是相同的,但是对于不同的键,哈希值不一定不同,因此在映射到数组下标位置时可能会出现冲突。下面我将结合HashMap的源码,深入讲解HashMap的实现细节和背后的实现原理。需要注意的是,扩容是一项比较耗费性能的操作,所以如果可以预测 HashMap 的元素数量,应该在创建 HashMap 时设置其初始容量,避免在后续使用过程中频繁扩容。先通过哈希函数计算键的哈希值,然后找到对应桶中的链表(或红黑树),再逐一遍历链表(或查找红黑树),直到找到对应的键值对。
2023-04-13 20:19:53
561
原创 SpringCloud微服务技术栈的配置中心SpringCloud Config
随着微服务架构的快速发展,现代化的应用架构越来越依赖于云原生架构、容器化和Kubernetes。在这种背景下,Spring Cloud已经成为了Java开发人员选择构建微服务的首选框架之一。本文将介绍如何使用Spring Cloud Config作为SpringBoot微服务体系结构的配置中心,让您轻松管理配置信息并独立部署。
2023-04-13 20:07:45
788
原创 Netty的高性能体现在哪些方面
相比传统的阻塞式IO模型,在多个客户端请求的情况下,非阻塞式IO模型可以减少线程数量,提高了应用程序的并发性能。综上所述,Netty通过采用非阻塞I/O、零拷贝、内存池以及合理的线程模型等技术手段来提高网络应用程序的性能和可伸缩性。在实际的开发工作中,我们可以根据具体的需求,选择合适的Netty组件和框架来构建高效稳定的网络应用程序。相比之下,Netty使用了零拷贝技术,即数据直接从操作系统内存缓冲区传输到网络协议栈或者应用程序中,完全避免了数据在内核态和用户态之间的拷贝。
2023-04-13 16:46:07
757
原创 Netty的线程模型
线程模型指的是Netty在处理网络I/O事件时使用的线程池模型。它包括两个方面:线程池类型和线程池大小。单线程池模型:所有的I/O操作都由一个线程来处理。多线程池模型:所有的I/O操作都由多个线程来处理,每个线程都有自己的事件循环。主从多线程池模型:一个线程池用于处理连接请求,另一个线程池用于处理I/O操作。这种模型可以减少连接请求处理对I/O操作的干扰,从而提高系统并发性能。线程池大小根据应用程序的负载情况进行调整。
2023-04-12 23:38:14
576
原创 从BIO到NIO、AIO和零拷贝
在BIO模型中,所有的I/O操作都是阻塞的,也就是说,当一个线程调用read()或write()时,该线程会被阻塞,直到有数据可读或写入成功。AIO(Asynchronous I/O)异步I/O模型是在NIO模型的基础上又做了一些改进,它将I/O操作的具体实现委托给内核,直接由内核进行读写操作,当数据读写完成后再回调到应用层,这样就不需要像BIO、NIO模型那样由用户线程进行数据读取和写入,从而减少了系统调用的次数,充分利用了系统的资源。零拷贝技术指避免CPU从应用缓冲区向内核缓冲区拷贝数据的一种技术。
2023-04-11 23:33:09
620
原创 分布式事务处理常用手段及生产实践
在分布式系统架构设计中,如何保证数据的一致性是一个非常重要的问题。实际生产需要根据具体业务场景来选择适合的分布式事务处理方法,以保证系统的可靠性和一致性。
2023-04-10 10:07:04
498
原创 从零开始,手把手教你实现基于 Websocket 的微服务
Websocket 协议是为了解决 HTTP 协议缺陷而产生的一种通信协议,它能够在客户端和服务器之间建立持久性的连接,并且允许双向通信。HTTP 协议的请求与响应模式,其实并不适合实时通信的场景。比如聊天室、在线游戏等应用,都需要实时地推送消息到客户端,而 HTTP 协议则需要进行频繁的请求和响应操作,这就会导致网络延迟和更多的带宽消耗。而 Websocket 则是允许服务器主动向客户端发送消息,而不需要客户端发起请求,从而提高了通信效率和实时性。
2023-04-09 19:36:58
1408
原创 SpringBoot常见的的面试点
SpringBoot是Spring框架的一个子项目,它可以让开发者更快速、更容易地创建基于Spring的应用程序。SpringBoot通过提供默认的配置和自动化配置来简化Spring应用程序的开发过程,并提供了一系列插件和工具来简化构建、测试和部署Spring应用程序的流程。相对于传统的Spring框架,SpringBoot更加轻量级,启动更快,编写更少的代码就能实现同样的功能。
2023-04-09 19:01:08
391
原创 SpringCloud微服务技术栈之网关服务Gateway
在微服务架构中,微服务数量的增加会使得系统中出现大量的服务实例,同时每个服务往往又有多个版本,这些版本需要进行升级、降级等操作。因此,对于这些微服务的调用和路由管理就变成了一个巨大的挑战。Spring Cloud网关服务Gateway可以作为微服务架构中的一个基础设施,通过将API网关方式暴露给服务客户端,从而控制所有的请求流量,并支持许多传输协议,例如HTTP、WebSocket等。
2023-04-09 17:16:37
993
原创 服务雪崩、服务限流、服务熔断和服务降级
在分布式系统中,由于网络延迟、节点宕机等各种原因,会出现一些异常情况,如某个服务的响应时间变慢或者宕机。这时候如果不采取措施,可能导致整个系统的性能下降或者不可用。本文主要介绍如何使用服务雪崩、服务限流、服务熔断和服务降级等技术手段来解决这些异常情况。
2023-04-07 23:53:09
194
原创 SpringCloud微服务技术栈的注册中心Eureka
在微服务架构中,服务的数量庞大,而且每个服务可能会有多个实例。此时,需要一个中心化的地方来管理和维护各个服务的相关信息,这就是微服务治理中很重要的一环:服务注册与发现。其中,服务注册是指将提供服务的应用实例注册到注册中心,而服务发现则是指从注册中心中获取服务实例列表并调用服务。本文将介绍SpringCloud微服务技术栈中的注册中心Eureka。本文介绍了SpringCloud微服务技术栈的注册中心Eureka,并以实际操作的方式进行了详细的说明。
2023-04-07 19:30:22
676
1
JAVA面试八股文.pptx
2021-09-22
mysql读写锁演示案例
2019-10-23
Zookeeper数据节点可视化查看工具
2018-11-29
自动生成mybatis映射文件工具
2018-09-14
支付宝账户体系架构支付宝账户体系、支付宝整体架构、资金流和信息流(业务流)的详细介绍
2018-06-11
java8帮助文档中文版API
2018-05-15
Git 64 bit
2017-10-11
spring-batch教程.pdf
2017-09-21
maven构建多模块项目源码实例
2016-11-21
springMVC4-rest-jackson-jsonview-annotation.zip
2016-11-19
个推Demo-APP
2016-07-15
Extjs中文API(脚本娃娃 (Ext4.1.0 Doc中文版 V1.0.0 Beta))
2014-07-12
W3SCHOOL离线api.chm
2014-07-08
开发API帮助文档集结(.chm)
2013-12-11
常用正则表达式
2013-12-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人