Java
文章平均质量分 88
普通网友
这个作者很懒,什么都没留下…
展开
-
来了,来了!Nacos 2.0的Spring Boot Starter终于来了
随着Nacos2.0成熟稳定,Nacos-spring-boot发布0.1.10、0.2.10两个核心版本,全面支持了Nacos2.0,同时支持自动识别配置类型注入能力,修复了高并发场景下数据一致性问题。Nacos-spring-boot老用户,将相关maven依赖进行如下替换,即可快速升级。<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config原创 2021-09-09 19:45:11 · 469 阅读 · 0 评论 -
MySQL中的redo log和undo log
MySQL中的redo log和undo logMySQL日志系统中最重要的日志为重做日志redo log和归档日志bin log,后者为MySQL Server层的日志,前者为InnoDB存储引擎层的日志。1 重做日志redo log1.1 什么是redo logredo log用于保证事务的持久性,即ACID中的D。持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。redo log有两种类型,分别为物理重做日...原创 2021-09-09 19:44:11 · 402 阅读 · 0 评论 -
消息中间件中的王者:Kafka!应付Kafka面试,看这篇就够了
为什么要使用 kafka? kafka的数据可靠性怎么保证 Kafka的数据是放在磁盘上还是内存上,为什么速度会快? 副本数据同步策略 故障处理 kafka事务是怎么实现的 Kafka为什么不支持读写分离? Kafka的数据是放在磁盘上还是内存上,为什么速度会快? 总结为什么要使用 kafka?缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。原创 2021-09-09 19:43:04 · 361 阅读 · 1 评论 -
竟然有5种微服务框架可以替代Spring Boot
在 Java 和 Kotlin 中, 除了使用Spring Boot创建微服务外,还有很多其他的替代方案。 名称 版本 发布时间 开发商 GitHub Helidon SE 1.4.1 2019年 甲骨文 链接 Ktor 1.3.0 2018原创 2021-09-09 19:40:38 · 3593 阅读 · 1 评论 -
JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么
编者按:笔者在 HBase 业务场景中尝试将 JDK 从 8 升级到 11,使用 G1 GC 作为垃圾回收器,但是性能下降 20%。到底是什么导致了性能衰退?又该如何定位解决?本文介绍如果通过使用 JFR、火焰图等工具确定问题,最后通过版本逐一验证找到了引起性能问题的代码。在毕昇 JDK 众人率先修复问题最后将修复推送到上游社区中。希望通过本文的介绍让读者了解到如何解决大版本升级中遇到的性能问题;同时也提醒 Java 开发者要正确地使用参数(使用前要理解参数的含义)。HBase 从 2.3.x 开始正式默原创 2021-09-09 19:39:34 · 885 阅读 · 0 评论 -
Redis哨兵模式原理剖析,监控、选主、通知客户端你真的懂了吗?
Redis 除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis提供了哨兵模式,来进行故障恢复。哨兵主要负责做三件事:①监控,监控主、从节点是否正常运行②选主,Sentinel集群需要选择一个Leader来进行主从切换。③通知,选主完成后,需要把新主库的连接信息通知给从库和客户端。1.状态感知哨兵启动后只指定了master的地址,要想知道整个集群中完整的拓扑关系怎么做呢?哨兵每隔10秒会向每个master节点发送info命令..原创 2021-09-09 19:38:32 · 555 阅读 · 0 评论 -
蚂蚁金服三面:请说说Redis分布式锁的原理和实现
对同一个资源进行操作,单一的缓存读取没问题了,但是存在并发的时候怎么办呢,为了避免数据不一致,我们需要在操作共享资源之前进行加锁操作。我们在开发很多业务场景会使用到锁,例如库存控制,抽奖,秒杀等。一般我们会使用内存锁的方式来保证线性的执行。但现在大多站点都会使用分布式部署,那多台服务器间的就必须使用同一个目标来判断锁。分布式与单机情况下最大的不同在于其不是多线程而是多进程。图1:分布式站点使用内存锁图2:分布式站点使用分布式锁当然我们暂时用不了这么复杂的场景,我们就简..原创 2021-09-09 19:37:28 · 141 阅读 · 0 评论 -
聊聊Spring事务失效的12种场景,太坑人了
前言对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。确实,spring事务用起来贼爽,就用一个简单的注解:@Transactional,就能轻松搞定事务。我猜大部分小伙伴也是这样用的,而且一直用一直爽。但如果你使用不当,它也会坑你于无形。今天我们就一起聊聊,事务失效的一些场景,说不定你已经中招了。不原创 2021-09-09 19:36:29 · 136 阅读 · 0 评论 -
透视RPC协议:SOFA-BOLT协议源码分析
前提最近在看Netty相关的资料,刚好SOFA-BOLT是一个比较成熟的Netty自定义协议栈实现,于是决定研读SOFA-BOLT的源码,详细分析其协议的组成,简单分析其客户端和服务端的源码实现。吐槽一下:SOFA-BOLT的代码缩进和FastJson类似,变量名称强制对齐,对于一般开发者来说看着源码会有不适感当前阅读的源码是2021-08左右的SOFA-BOLT仓库的master分支源码。SOFA-BOLT简单介绍SOFA-BOLT是蚂蚁金融服务集团开发的一套基于Ne原创 2021-09-09 19:34:52 · 523 阅读 · 0 评论 -
司空见惯的Exception,你了解她的秘密吗?
对于Exception,不用说Java人都知道。指北君一直以来有个不治之症:对Java的一切东东有追根寻底的强迫症,不了解其所以然就睡不了觉,这不,为了能睡个好觉就带领大家探一探Exception的秘密。引子首先,指北君声明一下,这里讲的Exception不仅仅是Exception一个类,而是异常机制,就像下面图中的所有(含继承Error和Exception的)。当然JDK中更为细致的异常继承体系也不是本篇探讨内容,本次呢,指北君将对异常在JVM层面的执行原理和ARM进行介绍,这里ARM原创 2021-09-08 21:44:06 · 143 阅读 · 0 评论 -
好饭不怕晚,扒一下Redis配置文件
在往期的文章中我们已经对Redis的概念和基本命令进行了讲解,今天我们来看下它的配置文件,Redis的配置文件在我们的开发和实际应用中起着非常重要的作用。我们可以在安装目录下找到redis.conf配置文件,通过vim命令进行查看,为了防止配置文件进行更改,大家在使用前一定要备份一下!本文Redis的版本为5.0.7UNITS1k => 1000 bytes1kb => 1024 bytes1m => 1000000 bytes1mb => 1024*1024原创 2021-09-08 21:43:01 · 190 阅读 · 0 评论 -
万字详文:服务限流的实施
服务限流应当是每个并发程序都应该考虑的~!限流的目的不仅是为了控制访问的总并发量,而且还要尽量让访问的流量来的更均衡,这样才不会让系统的负载大起大落,因此又称为"流量整形"。当然在微服务盛行的时代,我们考虑到的服务限流不再单单应对单体服务,而是更要清楚分布式场景下如何进行服限流一丶单体限流以上三种是我们在单体服务中常见的限流算法,我们接下来分别认识一下!1、计数器限流计数器限流是属于一种比较简单粗暴的方式!设计思路如下:我们会限制一秒钟内能够通过的请求...原创 2021-09-08 21:27:46 · 549 阅读 · 0 评论 -
什么?ZGC在Java17中没有更新了
Java长期支持版本Java11发布时推出了ZGC, 之后的Java12 -16均有ZGC的一些更新。然而Java17的新特性已经敲定,确定没有关于ZGC的相关更新,也从另一方面说明了至Java17 ZGC已经比较稳定,可以作为比较稳定的GC垃圾回收器。相信未来ZGC必定会成为主流的Java垃圾回收期,那么盘一盘ZGC就是必然的了。1 ZGC从何而来,有什么好处1.1 ZGC 的命名根据OpenJDK官方网站的说明ZGC其实并没有什么特殊意义,就是一个名字而已。起初只是为了致敬ZFS 文件系统,原创 2021-09-08 21:26:04 · 2068 阅读 · 0 评论 -
基于Java和Bytemd用120行代码实现一个桌面版Markdown编辑器
前提某一天点开掘金的写作界面的时候,发现了内置Markdown编辑器有一个Github的图标,点进去就是一个开源的Markdown编辑器项目bytemd(https://github.com/bytedance/bytemd):这是一个NodeJs项目,由字节跳动提供。联想到之前业余的时候做过一些Swing或者JavaFx的Demo,记得JavaFx中有一个组件WebView已经支持Html5、CSS3和ES5,这个组件作为一个嵌入式浏览器,可以轻松地渲染一个URL里面的文本内容或者直接渲染原创 2021-09-08 21:24:06 · 274 阅读 · 0 评论 -
网络面经:一个TCP连接可以发送多少个HTTP请求?
一个TCP连接可以发送多少个HTTP请求?就这这个问题,我们聊聊TCP、HTTP以及浏览器之间的关系和对请求处理的优化。TCP与HTTP的渊源我们知道TCP协议对应于传输层,HTTP协议对应于应用层。WEB项目中,HTTP协议是建立在TCP的基础上的。最初浏览器从服务器加载一个网页,会发起一个HTTP请求,这时需要先建立一个TCP连接。当本次数据请求完毕之后,会立刻断开TCP连接。但随着时间的推理,HTML网页内容越来越复杂,不仅有内容,还有JS、CSS和图片资源,每个资源的请求都建立一次T原创 2021-09-08 21:20:20 · 3335 阅读 · 0 评论 -
聊聊大厂都在用的雪花算法
前言以前用rand和srand生成过伪随机数,伪随机数的序列是固定的,今天学习生成真正的随机数的生成。熵池利用/dev/urandom可以生成随机数的值,/dev/urandomLinux下的熵池,所谓熵池就是当前系统下的环境噪音,描述了一个系统的混乱程度,环境噪音由这几个方面组成,如内存的使用,文件的使用量,不同类型的进程数量等等。利用/dev/urandom可以生成随机数的值,/dev/urandomLinux下的熵池,所谓熵池就是当前系统下的环境噪音,描述了一个系统的混乱程度,环境噪音原创 2021-09-08 21:18:03 · 234 阅读 · 0 评论 -
你管这破玩意叫 B+ 树?
索引可以说是每个工程师的必备技能点,明白索引的原理对于写出高质量的 SQL 至关重要,今天我们就从 0 到 1 来理解下索引的原理,相信大家看完不关对索引还会对 MySQL 中 InnoDB 存储引擎的最小存储单位「页」会有更深刻的认识从实际需求出发假设有如下用户表:CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` int(11) DEFAULT NULL COMMENT '姓名',原创 2021-09-08 21:16:59 · 104 阅读 · 0 评论 -
网络面经:HTTP 2.0的这些新特性,是时候了解一下了
面试中关于HTTP 2.0的面试题并不多,但基于HTTP 2.0的应用已经很多了,比如谷歌的gRPC框架就是基于HTTP 2.0来提升效率的。同时,HTTP 1.0中的存在的很多缺陷也都在HTTP 2.0中得到了解决。所以,如果你在面试中脱颖而出,同时,在实践中更好的理解类似gRPC这类框架的实现,了解HTTP 2.0还是非常必要的。而且HTTP 2.0也在很多场景下逐步替代HTTP 1.0。HTTP 1.0存在的问题了解过HTTP 1.0的协议实现之后,会发现它存在不少问题。问题一:TCP原创 2021-09-08 21:15:45 · 549 阅读 · 0 评论 -
面试官:你说你精通Java并发,给我讲讲 volatile
今天来了解一下面试题:你对 volatile 了解多少。要了解 volatile 关键字,就得从 Java 内存模型开始。最后到 volatile 的原理。一、Java 内存模型 (JMM)大家都知道 Java 程序可以做到一次编写然后到处运行。这个功劳要归功于 Java 虚拟机。Java 虚拟机中定义了一种 Jva 内存模型(JMM),用来屏蔽掉各种硬件和操作系统之间内存访问差异,让 Java 程序可以在各个平台中访问变量达到相同的效果。JMM 的主要目标是定义了程序中变量的访问规则,就是内存原创 2021-09-08 21:14:40 · 1105 阅读 · 3 评论