小媛的博客

当你真的爱上编程的时候,其实编程就是你的娱乐方式。
私信 关注
奋斗的小媛。
码龄6年

梦想成为自由职业者

  • 408,240
    被访问量
  • 36
    原创文章
  • 4,711
    作者排名
  • 570
    粉丝数量
  • 目前就职 就业
  • 于 2014-10-03 加入CSDN
获得成就
  • 获得1,683次点赞
  • 内容获得11次评论
  • 获得2,819次收藏
荣誉勋章
兴趣领域
  • #后端
    #分布式#Spring Boot#Linux#Java#Spring#Python#Elasticsearch#MySQL#Redis#架构
TA的专栏
  • Java基础
    1篇
  • 数据结构和算法
  • Flink
  • 数据库
  • Java并发编程(多线程)
    7篇
  • 分布式缓存【Redis】
    11篇
  • 消息中间件Kafka/RabbitMQ/ActiveMQ
    3篇
  • Java
  • JVM Java 虚拟机
    1篇
  • MyBatis & MyBatisPlus
    1篇
  • 面试
    12篇
  • 设计模式
  • Netty
    4篇
  • Spring
  • SpringBoot
  • 微服务【SpringCloud / Alibaba】
    1篇
  • Linux
  • 注册中心ZK&Console&Eurka
    2篇
  • 分布式服务框架
  • 分布式事务
  • 网站架构 & 性能调优
  • ShardingSphere & MyCat【分库分表】
  • 搜索引擎ES & Solr
  • Docker & K8S
  • 序列化
  • 定时任务
  • Nginx
  • 问题排查
  • RPC架构
  • Maven
  • 登录模块
  • 版本控制
  • Hadoop
  • HBase
  • 开发工具
  • 应用工具类
  • 未来规划
  • 服务器
  • Web前端
  • 二维码
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Zab(Zookeeper Atomic Broadcast)协议

一、什么是 Zab协议Zab( Zookeeper Atomic Broadcast:Zookeeper原子广播)Zookeeper 通过 Zab 协议保证分布式事务的最终一致性。【1】Zab协议是为分布式协调服务 Zookeeper专门设计的,是 Zookeeper保证数据一致性的核心算法。Zab借鉴了 Paxos算法,但又不像 Paxos那样,是一种通用的分布式一致性算法。支持崩溃恢复 和 原子广播协议。【2】在 Zookeeper中主要依赖 Zab协议来实现数据一致性,基于该协议,zk实现了一
原创
36阅读
2评论
0点赞
发布博客于 8 天前

Java 面试——Zookeeper

Java 面试——Zookeeper一、Zookeeper 实现机制文件系统 + 通知机制**二、**Zookeeper 高可用实现原理一个 ZooKeeper 集群如果要对外提供可用的服务,那么集群中必须要有过半的机器正常工作并且彼此之间能够正常通信。如果想搭建一个能够允许 N 台机器 down 掉的集群,那么就要部署一个由 2N+1 台服务器构成的 ZooKeeper 集群。所以部署3个节点,那么就得至少有2个节点可用则该集群才可用。4个节点同样还是要2个以上。所以 Zookeeper集群部
原创
30阅读
0评论
0点赞
发布博客于 8 天前

Java面试——Tomcat

Java面试——Tomcat一、Tomcat 顶层架构Tomcat 中最顶层的容器是 Server,代表着整个服务器,从上图中可以看出,一个 Server可以包含至少一个 Service,用于具体提供服务。Service 主要包含两个部分:Connector 和 Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:【1】Connector 用于处理连接相关的事情,并提供 Socket 与 Request 和 Response相关的转化;【2】Containe
原创
27阅读
0评论
0点赞
发布博客于 22 天前

Java面试——锁

Java面试——锁公平锁:是指多个线程按照申请锁的顺序来获取锁,有点先来后到的意思。在并发环境中,每个线程在获取锁时会先查看此锁维护的队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照 FIFO 的规则从队列中取到自己。非公平锁:指多个线程获取锁的顺序并不是按照申请锁的顺序,上来就尝试占有锁,如果尝试失败,就再采用类似公平锁的方式获取锁。有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,有可能会造成优先级反转或者饥饿现象。ReentrantLo
原创
29阅读
0评论
0点赞
发布博客于 22 天前

Java面试——Spring Boot

Java面试——Spring Boot一、谈谈你对 SpringBoot 的理解简单说说我的理解:Java是一个静态语言,相比动态语言,它相对笨重,体现在我们搭建 SSM 框架写一个 Helloword 的时候相当复杂,需要写一大堆的配置。还有在导入 jar包依赖的时候版本号问题,令人头疼。但是,我们有 Spring呀,真的是 Java 开发人员的福音。SpringBoot 就是为解决这些问题而生的。让我们写一个 Helloword 跟动态语言一样简单。版本控制也通过 SpringBoot 与 Mav
原创
31阅读
2评论
0点赞
发布博客于 22 天前

Java面试——开源框架知识

Java面试——开源框架知识一、简单讲讲 Tomcat结构,以及其类加载器流程,线程模型等【1】**模块组成结构:**Tomcat 的核心组件就 Connector 和 Container,一个Connector+一个Container(Engine)构成一个Service,Service就是对外提供服务的组件,有了Service组件Tomcat就能对外提供服务了,但是光有服务还不行,还需要有环境让你提供服务才行,所以最外层的Server就是为Service提供了生存的土壤。▁▂▃ Connect
原创
40阅读
0评论
0点赞
发布博客于 24 天前

Java面试——Linux

Java面试——Linux一、如果知道一个文件名称,怎么查这个文件在 Linux下的哪个目录,如:要查找 tnsnames.ora文件1 find / -name tnsnames.ora2 #还可以用locate 来查找3 locate tnsnames.ora二、Linux 中如何查看某个端口是否被占用netstat -anp | grep 端口号三、如何查看所有 Java进程ps -ef | grep java四、怎么对命令进行取别名alias la='ls -a'五、什
原创
35阅读
0评论
0点赞
发布博客于 24 天前

Java面试——不安全的集合类

Java面试——不安全的集合类Java 中有许多的集合,常用的有List,Set,Queue,Map。 其中 List,Set,Queue都是Collection(集合),List中**<>的内容表示其中元素的类型,是泛型的一种使用。不能直接使用简单数据类型**做泛型的原因:集合类(比如Set)在进行各种 “操作” ( 如contains()) 时都会调用元素本身提供的 “方法” ( 如hashCode() 和 equals()),而不是由集合类自身去实现这些 “方法”。这就要求如果某人想要
原创
34阅读
0评论
1点赞
发布博客于 24 天前

Java面试——MyBatis

Java面试——MyBatis一、MyBatis 与 JDBC 的区别【1】JDBC 是 Java 提供操作数据库的 API;MyBatis 是一个持久层 ORM 框架,底层是对 JDBC 的封装。【2】使用 JDBC 需要连接数据库,注册驱动和数据库信息工作量大,每次都要去创建、关闭、获取JDBC 编程可能的异常进行捕获处理,并正确关闭资源对象关闭映射(ORM)。操作 Connection,打开 Statement 对象。通过 Statement 执行 SQL 返回结果到 ResultSet 对象
原创
13阅读
0评论
0点赞
发布博客于 24 天前

Java面试——TCP与HTTP

Java面试——TCP与HTTP一、Session 和 Cookie 的区别【1】Cookie 保存在客户端,未设置存储时间的 Cookie,关闭浏览器会话 Cookie 就会被删除;设置了存储时间的 Cookie 保存在用户设备的磁盘中直到过期,同时 Cookie 在客户端所以可以伪造,不是十分安全,敏感数据不易保存。Session 保存在服务器端,存储在 IIS 的进程开辟的内存中,而 Session 过多会消耗服务器资源,所以尽量少使用 Session。【2】Session 是服务器用来跟踪
原创
42阅读
0评论
0点赞
发布博客于 25 天前

Java面试——专业技能

Java面试——专业技能一、简单讲下 Java 的跨平台原理由于各个操作系统(Windows,Linux等)支持的指令集不是完全一致的。就会让我们程序在不同的操作系统上要执行不同的程序代码。Java 开发了适用于不同操作系统及位数的 Java 虚拟机来屏蔽系统之间的差异,提供统一的接口(Java API)。对于 Java 开发者而言,只需要在不同的操作系统上安装对应的 Java 虚拟机即可。这时我们的程序只需要遵循 Java 规范,就可以在所有的操作系统上运行 Java 代码。如果我们需要将系统部署到
原创
36阅读
0评论
0点赞
发布博客于 25 天前

Java面试——Spring

Java面试——Spring一、Spring Bean 作用域【1】singleton:该属性在 IOC容器仅创建一个 Bean实例(单例),IOC容器每次返回的是同一个 Bean实例。【2】prototype:该属性在 IOC容器可以创建多个 Bean实例,每次返回的都是一个新的实例。【3】request:该属性仅对 HTTP请求产生作用,HTTP请求每次都会创建一个新的Bean,适用于 WebApplicationContext 环境。【4】**session:**该属性仅用于 HTTP S
原创
31阅读
1评论
0点赞
发布博客于 25 天前

Java面试——架构设计与分布式

ava面试——架构设计与分布式一、用 Java 自己实现一个 LRULRU(Least Recently Used:最近最少使用):简单的说,就是保证基本的 Cache容量,如果超过容量则必须丢掉最不常用的缓存数据,再添加最新的缓存。每次读取缓存都会改变缓存的使用时间,将缓存的存在时间重新刷新。其实,就是清理缓冲的一种策略。我们可以通过双向链表的数据结构实现 LRU Cache,链表头(head)保存最新获取和存储的数据值,链表尾(tail)既为最不常使用的值,当需要清理时,清理链表的 tail 即
原创
132阅读
1评论
0点赞
发布博客于 26 天前

Java面试——微服务

Java面试——微服务一、什么是微服务就目前而言,对于微服务业界并没有一个统一的,标准的定义。但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而
原创
47阅读
0评论
1点赞
发布博客于 26 天前

HashMap详解

HashMapJDK1.8对HashMap底层的实现进行了优化,引入红黑树的数据结构和扩容的优化。Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示:下面针对各个实现类的特点做一些说明:(1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最
原创
44阅读
0评论
0点赞
发布博客于 2 月前

Skywalking 链路追踪

Skywalking 链路追踪Skywalking 根据官方的解释,Skywalking是一个可观测性平台(Observability Analysis Platform简称 OAP)和应用性能管理系统(Application Performance Management 简称 APM)。提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案。一、APM 系统概述APM(Application Performance Monitoring
原创
113阅读
0评论
0点赞
发布博客于 2 月前

9种常见的CMS GC问题分析与解决

9种常见的CMS GC问题分析与解决本文主要针对 Hotspot VM 中“CMS + ParNew”组合的一些使用场景进行总结1. GC 问题判断在做 GC 问题排查和优化之前,我们需要先来明确下到底是不是 GC 直接导致的问题,或者应用代码导致的 GC 异常,最终出现问题。1.1 判断 GC 有没有问题?1.1.1 设定评价标准评判 GC 的两个核心指标:延迟(Latency): 也可以理解为最大停顿时间,即垃圾收集过程中一次 STW 的最长时间,越短越好,一定程度上可以接受频次的增
转载
405阅读
0评论
0点赞
发布博客于 2 月前

GC 的算法及收集器

GC 的算法及收集器Garbage Collection(垃圾收集),Java 中 GC 的对象是堆空间和永久区。文章目录GC 的算法及收集器1.1 引言2.1 基础概念2.2 分配对象2.3 收集对象2.3.1 识别垃圾2.3.2 收集算法2.4 收集器2.4.1 分代收集器2.4.2 分区收集器2.4.3 常用收集器2.4.4 其他收集器2.5 可触及性2.6 Stop-The-World2.7 常用工具2.7.1 命令行终端2.7.2 可视化界面2.7.1 命令行终端2.7.2 可视化界面1
原创
58阅读
0评论
0点赞
发布博客于 2 月前

Redis 线程模型

Redis 线程模型一、概述【1】Redis 是基于 Reactor 模式开发的网络事件处理器:这个处理器被称为文件事件处理器(file event handler),这个文件事件处理器是单线程的,所以 Redis 才叫做单线程的模型:■ 文件事件处理器使用 I/O 多路复用(multiplexing)机制监听多个套接字 Socket,根据 Socket 上的事件来选择对应的事件处理器进行处理。■ 当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(cl
原创
30阅读
0评论
0点赞
发布博客于 2 月前

Redis 性能优化

Redis 性能优化一、Linux 操作系统【1】ulimit 与 TCP backlog:1)、修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少设置成 10032,因为 maxclients 是10000 [客户端的数据是以文件的形式进行保存的] ,另外 redis 内部最多会使用 32 个文件描述符。1 ulimit -n 10032 #但重启后就无效了,也可以通过配置文件limits.conf 的形式持久修改2 #修改
原创
64阅读
0评论
0点赞
发布博客于 2 月前

Redis Cluster集群搭建及节点的添加、删除

Redis Cluster集群搭建及节点的添加、删除一、什么是 Redis ClusterRedis 是在内存中保存数据的,而我们的电脑一般内存都不大,这也意味着 Redis 不适合存储大数据,适合存储大数据的是 Hadoop 生态系统的 Hbase 或者是 MogoDB 。Redis 更适合处理高并发,一台设备的存储能力是有限的但是多台设备协同合作,就可以内存增大很多倍,这时就需要集群。Redis 集群搭建的方式有很多种,但从 redis 3.0 版本之后,支持 redis-cluster 集
原创
95阅读
1评论
0点赞
发布博客于 2 月前

Java面试-----缓存

一、什么是缓存【1】缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存中查询数据,有则直接执行,不存在时从磁盘中获取。由于缓存的数据比磁盘快的多,所以缓存的作用就是帮助硬件更快的运行。【2】缓存往往使用的是RAM(断电既掉的非永久存储),所以在用完后还是会把文件送到硬盘等存储器中永久存储。电脑中最大缓存就是内存条,硬盘上也有16M或者32M的缓存。【3】高速缓存是用来协调CPU与主存之间存取速度的差异而设置的。一般CPU工作速度高,但内存的工作速度相对较低,为了解决这
原创
59阅读
0评论
0点赞
发布博客于 2 月前

分布式缓存的一致性 Hash 算法

分布式缓存的一致性 Hash 算法一、使用一致性 Hash 算法的原因简单的路由算法可以使用余数 Hash:用服务器数据除缓存数据 KEY 的 Hash 值,余数为服务器列表下标编码。这种算法可以满足大多数的缓存路由需求。但是,当分布式缓存集群需要扩容的时候,事情就变得棘手了。举个例子:很容易可以计算出,3台缓存服务器扩容至4台服务器,大约有 75%(3/4)被缓存了的数据不能正确命中,随着服务器集群规模的增大,这个比例线性上升。当100台服务器的集群中加入一台新服务器,不能命中的概率是 99%(N/
原创
54阅读
1评论
0点赞
发布博客于 2 月前

Redis 主从复制

Redis 主从复制一、Redis 复制复制(Replication):是 Redis 实现高可用的基础。且在复制过程中,主节点/从节点都是非阻塞的,但是从节点在执行同步时使用的是旧数据集提供查询。Redis 复制启动图与流程说明:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QRM7gNLF-1609648520684)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEA
原创
20阅读
0评论
0点赞
发布博客于 2 月前

针对 Redis Rehash机制的探索和实践

针对 Redis Rehash机制的探索和实践来源于美团一、背景Squirrel(松鼠)是美团技术团队基于 Redis Cluster打造的缓存系统。经过不断的迭代研发,目前已形成一整套自动化运维体系:涵盖一键运维集群、细粒度的监控、支持自动扩缩容以及热点 Key监控等完整的解决方案。同时服务端通过 Docker进行部署,最大程度的提高运维的灵活性。分布式缓存Squirrel产品自2015年上线至今,已在美团内部广泛使用,存储容量超过60T,日均调用量也超过万亿次,逐步成为美团目前最主要的缓存系
转载
44阅读
0评论
0点赞
发布博客于 2 月前

本地缓存与分布式缓存

本地缓存与分布式缓存一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图所示,用户请求从界面(浏览器或App界面)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们的应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,且技术变革是缓慢的,数据库每秒能接受的请求次数也是有限的(或者文件的读写也是有限的),如何能够有效利用有限的资源来提供
原创
120阅读
0评论
0点赞
发布博客于 2 月前

消息队列设计精要

消息队列设计精要来源于美团消息队列已经逐渐成为企业 IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步 RPC的主要手段之一。 当今市面上有很多主流的消息中间件,如老牌的 ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等。 本文不会一一介绍这些消息队列的所有特性,而是探讨一下自主开发设计一个消息队列时,你需要思考和设计的重要方面。过程中我们会参考这些成熟消息队列的很多重要思想。
转载
76阅读
0评论
0点赞
发布博客于 2 月前

消息中间件选型

消息中间件选型常用的 MQ组件有 Kafka、RabbitMQ、RocketMQ、ActiveMQ、ZeroMQ、MetaMQ。当然 Kafka的功能更加强大,其它 MQ都有自己的特点和优势,如下:特性KafkaRabbitMQRocketMQActiveMQ开发语言ScalaErlangJavaJava单击吞吐量十万级万级十万级万级时效性ms级以内us(微秒)级ms级ms级可用性非常高(分布式架构)高(主从架构)非常高(分布式架
原创
103阅读
2评论
0点赞
发布博客于 2 月前

Netty5 入门HelloWorld

Netty5 入门HelloWorld一、客户端代码及关键类说明 1 /** 2 * netty5的客户端 3 * @author -zhengzx- 4 * 5 */ 6 public class ClientSocket { 7 8 public static void main(String[] args) { 9 //服务类10 Bootstrap bootstrap = new Bootstrap();11
原创
46阅读
1评论
0点赞
发布博客于 2 月前

IO 与 NIO之网络通信

IO 与 NIO之网络通信一、阻塞IO / 非阻塞NIO**阻塞IO:**当一条线程执行 read() 或者 write() 方法时,这条线程会一直阻塞直到读取到了一些数据或者要写出去的数据已经全部写出,在这期间这条线程不能做任何其他的事情。非阻塞NIO:NIO 与原有的 IO 有同样的作用和目的,但是使用的方式完全不同,NIO 支持面向缓冲区的、基于通道的操作。NIO 将以更加高效的方式进行文件读写操作。JAVA NIO的核心在于:通道(Channel)和缓冲区(Buffer)。通道表示打开 IO
原创
62阅读
0评论
0点赞
发布博客于 2 月前

MyBatis 版本升级引发的线上问题

MyBatis 版本升级引发的线上问题MyBatis上线前后的版本:上线前(3.2.3)上线后(3.4.6)服务上线后,开始陆续出现了一些更新系统交互日志方面的报警,这属于系统的辅助流程,报警如下代码所示。我们发现都是跟 MyBatis相关的报警,说明在进行类型转换 [ibatis.type.TypeException]的时候,系统产生了强转错误。更新开票请求返回日志, id:{#######}, response:{{"code":XXX,"data":{"callType":3,"code":
转载
49阅读
0评论
0点赞
发布博客于 2 月前

Netty堆外内存泄露排查

Netty堆外内存泄露排查来源于美团一、导读Netty 是一个异步事件驱动的网络通信层框架,用于快速开发高可用高性能的服务端网络框架与客户端程序,它极大地简化了 TCP 和 UDP 套接字服务器等网络编程。Netty 底层基于 JDK 的 NIO,我们为什么不直接基于 JDK 的 NIO 或者其他 NIO框架:使用 JDK 自带的 NIO 需要了解太多的概念,编程复杂。Netty 底层 IO 模型随意切换,而这一切只需要做微小的改动。Netty自带的拆包解包,异常检测等机制让我们从 NIO
转载
42阅读
0评论
0点赞
发布博客于 2 月前

Netty 线程模型(Reactor 线程模型)

[Netty 线程模型(Reactor 线程模型)当说到 Netty 线程模型的时候,一般首先会想到经典的 Reactor 线程模型,尽管不同的 NIO 框架对于 Reactor 模式的实现存在差异,但本质上还是遵循了 Reactor 的基础线程模式。一、Reactor 单线程模型无论是C++ 还是 Java 编写的网络框架,大多数都是基于 Reactor 模型进行设计和开发,Reactor 模型基于事件驱动,特别适合海量的 I/O 事件。【1】Reactor 单线程模型,是指所有的 I/
原创
67阅读
0评论
0点赞
发布博客于 2 月前

万亿级 KV 存储架构与实践

来源于美团KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量。第一部分讲述了美团 KV 存储的发展历程;第二部分阐述了内存 KV Squirrel 架构和实践;第三部分介绍了持久化 KV Cellar 架构和实践;最后分享了未来的发展规划和业界新趋势。一、美团点评 KV 存储发展历程美团第一代的分布式 KV 存储如下图左侧的架构所示,相信很多公司都经历过这个阶段。在客户端内做一致性哈希,在后端部署很多的 Memcached 实例,这样就实现了最基本的 KV 存储分布式设计.
转载
89阅读
0评论
0点赞
发布博客于 2 月前

Redis 基础数据结构

Redis 基础数据结构Reids 所有的数据结构都以唯一的 key 字符串作为名称,然后通过这个唯一的 key 值来获取相应的 value 数据。不同的数据结构差异就在于 value 的结构不一样。*一、*Redis 五大数据类型【1】String(字符串):String 是 Redis 最基本的类型,一个 key 对应一个 value。String 类型是二进制安全的。意思是 Redis 的 String 可以包含任何数据。一个键最大能存储 512MB。【2】Hash(哈希):Hash 是
原创
48阅读
0评论
0点赞
发布博客于 2 月前

Redisson实现分布式锁原理

Redisson实现分布式锁原理一、高效分布式锁当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁,这里我认为以下几点是必须要考虑的。1、互斥在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。2、防止死锁在分布式高并发的条件下,比如有个线程获得锁的同时,还没有来得及去释放锁,就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁,造成死锁。所以分布式非常有必要设置锁的有效时间,确保系统
原创
65阅读
0评论
0点赞
发布博客于 2 月前

ReentrantLock 锁详解

ReentrantLock 锁详解ReentrantLock 支持公平锁和非公平锁,可重入锁 ReentrantLock的底层是通过 **AQS[链接]**实现。一、BAT 大厂的面试题**【1】**什么是可重入,什么是可重入锁? 它用来解决什么问题?【2】ReentrantLock 的核心是 AQS,那么它怎么来实现的,继承吗? 说说其类内部结构关系。【3】ReentrantLock 是如何实现公平锁的?【4】ReentrantLock 是如何实现非公平锁的?【5】ReentrantL
原创
137阅读
0评论
0点赞
发布博客于 2 月前

CAS乐观锁(原子操作)

CAS乐观锁(原子操作)锁主要分为两种:乐观锁和悲观锁,而 synchronized 就属于一种悲观锁,每次在操作数据前都会加锁。乐观锁是指:乐观的认为自己在操作数据时,别人不会对当前数据进行修改,因此不会加锁。如果有人对数据进行了修改,则重新获取修改后的数据,进行操作。直到成功为止。而乐观锁的这种机制就是CAS(compare and swap)比较并交换。一、什么是 CASCAS(Compare And Swap | Compare And Set)**:**比较并交换,CAS 是解决多线程
原创
63阅读
0评论
1点赞
发布博客于 2 月前

AQS 锁核心类详解

AQS 锁核心类详解AQS(AbstractQuenedSynchronizer 抽象队列同步器) 是一个用来构建锁和同步器的框架,使用 AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于 AQS的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。当然,我们自己也能利用 AQS非常轻松容易地
原创
46阅读
0评论
0点赞
发布博客于 2 月前

Synchronized 关键字详解

Synchronized 关键字详解Synchronized原理分析加锁和释放锁的原理深入JVM看字节码,创建如下的代码:[](javascript:void(0)????1 public class SynchronizedDemo2 {2 Object object = new Object();3 public void method1() {4 synchronized (object) {5 6 }7 }8 }[]
原创
47阅读
0评论
0点赞
发布博客于 2 月前

线程池的实现原理

线程池的实现原理线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数超过了最大数量超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。什么是线程池线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避
原创
55阅读
0评论
0点赞
发布博客于 2 月前

线程池的使用

线程池的使用一、常见的五中线程池【1】Executors.newFixedThreadPool(n):创建一个定长的线程池,可控制线程最大并发数,超出的线程会在队列中等待。创建的线程池 corePoolSize 和 maximumPoolSize 值是相等的,使用的是 LinkedBlockingQueue 阻塞队列。执行长期的任务,性能好很多。底层实现如下:public static ExecutorService newFixedThreadPool(int nThreads) { retur
原创
33阅读
0评论
0点赞
发布博客于 2 月前

差一个赞

发布Blink于 2 月前

差一位,你们有什么条件尽管提。

发布Blink于 4 月前

我的梦想是什么。进阿里算吗?

 
发布Blink于 5 月前

突然之间感觉么了方向。。。

 
发布Blink于 6 月前

差一位,互互互互互互互互

发布Blink于 7 月前

想要xmind 的私我

发布Blink于 9 月前

java 高级开发 zzx博客链接.xmind

自己高级学习脑图,希望能够帮助到更多迷茫中的同行们。主要对当前非常流程的知识点和框架内容进行整理。重点是只需要1积分,纯粹的免费送呀。
xmind
发布资源于 10 月前

需要一份程序员从初级、中级、高级、架构师需要学习的知识体系图。

 
发布Blink于 11 月前
Dubbo面试题(2020最新版)
发布Blink于 1 年前
Lamdba Map取所有的value转化为List<T>集合
发布Blink于 1 年前
InnoDB---可重复读隔离级别的底层实现原理
发布Blink于 1 年前

电话面试比现场面试更累。因为你不知道对方的表情。自己是否回答到对付的心上。真的很难。需要适应,学学技巧。

 
发布Blink于 1 年前
2019年Spring Boot面试都问了什么?快看看这22道面试题!
发布Blink于 1 年前
Dubbo面试题集锦2|Java面试题|微服务
发布Blink于 1 年前
搞(bei)完这3套Java面试题,年后简历随便投,管它BAT还是TMD
发布Blink于 1 年前
我以为我对Mysql索引很了解,直到我遇到了阿里的面试官
发布Blink于 1 年前

今天面试第二面时有人想hold住我,哼,这种领导我不稀罕

发布Blink于 1 年前
Nginx 原理和架构
发布Blink于 1 年前
【金三银四】Zookeeper常用场景使用介绍
发布Blink于 1 年前
redis分布式锁,面试官请随便问,我都会
发布Blink于 1 年前
当 Redis 发生高延迟时,到底发生了什么
发布Blink于 1 年前
轻松理解RPC框架原理——用Java徒手撕一个RPC框架
发布Blink于 2 年前
四面京东(技术三面+HR面),拿offer回来分享面试经验总结
发布Blink于 2 年前
2019年228道Java中高级面试题(8),你会的有多少?
发布Blink于 2 年前
18道kafka高频面试题哪些你还不会?(含答案和思维导图)
发布Blink于 2 年前
2019年12道RabbitMQ高频面试题你都会了吗?(含答案解析)
发布Blink于 2 年前
互联网大厂Java面试题集—Spring boot常见面试题(二)
发布Blink于 2 年前
2019年总结:Java中高级面试题228道系列(6)
发布Blink于 2 年前
Redis常见面试题(精简版)
发布Blink于 2 年前
年底了,整理了一份程序员面试必看的文章合集
发布Blink于 2 年前
shell脚本基础
发布Blink于 2 年前
java面试题大全
发布Blink于 2 年前

面试失败,求

 
发布Blink于 2 年前
程序员实用工具网站
发布Blink于 2 年前
NIO效率高的原理之零拷贝与直接内存映射
发布Blink于 2 年前
学会了这些技术,你离BAT大厂不远了
发布Blink于 2 年前

我需要一句生日快乐,来安慰自己。感觉今天好苦

 
发布Blink于 2 年前

你知道这是那本书的读书笔记吗?

发布Blink于 2 年前

想在上海找份工作,求内推

 
发布Blink于 2 年前

有木有喜马拉雅公司的同事玩这个。。

 
发布Blink于 2 年前

有木有高手知道哪里可以接私活,或者有渠道,带上小弟呗。JAVA相关的项目。。

 
发布Blink于 2 年前

FastDFSClient配置文件

fastDFS配置文件,主要修改其中的Service就可以了,其他可默认。
java
发布资源于 3 年前

pagination.css

pagination.css 由于前端分页时配合pagination.js使用。
css
发布资源于 3 年前

MyBatis逆向工程生成工具

通过数据库逆向生成MyBatis需要的pojo、interface和xml文件
rar
发布资源于 3 年前

ojdbc14-10.2.0.4.0.jar包

由于微软的数据库不是用Java语言来编写的,但是我们需要用java语言连接微软的数据库,这样就要编写一个桥连接,使java语言编写的代码也可以操作数据库。
jar
发布资源于 4 年前

ojdbc14-10.2.0.4.0.jar

jar
发布资源于 4 年前

企业人事管理论文+源代码

本篇论文使用了Swing、Hibernate、Oracle等技术,设计了一个功能全面、操作简单,可以快速的为员工建立电子档案,并且便于修改、保存和查看,实现了无纸化存档,为企业节省了大量的资金和空间。通过企业人事管理系统,还可以实现对企业员工的考勤管理、奖罚管理、培训管理、待遇管理和快速生成待遇报表。
docx
发布资源于 5 年前