后端
文章平均质量分 86
炫酷盖茨猫先生
一介IT俗人,更多鸿蒙精彩干货文章以及最新鸿蒙全套资料。请关注公众号:【蜀道衫】
展开
-
读完 RocketMQ 源码,我学会了如何优雅的创建线程
本文是RocketMQ 系列文章的开篇,和朋友们简单聊聊 RocketMQ 源码里创建线程的技巧。单线程抽象类 ServiceThread使用者只需要实现业务逻辑以及定义线程名即可 ,不需要写冗余的代码。线程池封装适当封装,定义线程工厂,并合理配置线程池参数。线程名很重要文件日志,堆栈记录配合线程名能大大提升解决问题的效率。RocketMQ 的多线程编程技巧很多,比如线程通讯,并发控制,线程模型等等,后续的文章会一一为大家展现。原创 2022-09-08 16:09:06 · 441 阅读 · 1 评论 -
MySQL 不同隔离级别,都使用了什么锁?
看到这里,我想我们可以对文章开头提出的问题做个解答了:MySQL 不同隔离级别,都使用了什么样的锁?对于任何隔离级别,表级别的表锁、元数据锁、意向锁都是会使用的,但对于行级别的锁则会有些许差别。在「读未提交」和「读已提交」隔离级别下,都只会使用记录锁,不会用间隙锁,当然也不会有 Next-Key 锁了。而对于「可重复读」隔离级别来说,会使用记录锁、间隙锁和 Next-Key 锁。今天我们是从隔离级别这个角度来看锁的应用,但什么时候会用上记录锁?什么时候会用上间隙锁?原创 2022-09-08 14:55:38 · 781 阅读 · 0 评论 -
一文搞懂mysql索引底层逻辑,干货满满!
在mysql中,索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列即可,索引是帮助Mysql高效获取数据且以排好序的数据结构,直观的说,索引就类似书的目录页,没有目录(即索引)我们就要一页一页的找,有了目录(索引)我们就可以按照目录中标记的页数去相应的页数去查找。原创 2022-09-08 14:12:43 · 856 阅读 · 0 评论 -
Dragonfly 基于 P2P 的文件和镜像分发系统
Dragonfly 是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。Dragonfly 面向镜像分发和文件分发,结合 P2P 网络和服务器集群的思想,向用户提供稳定的,高效的下载服务。Dragonfly 希望在服务器内部构建 P2P 网络,将服务器的不同主机节点分为 Manager、Scheduler、Seed Peer 以及 Peer 四个角色,分别提供不同的功能。原创 2022-09-08 14:00:39 · 537 阅读 · 0 评论 -
分布式中灰度方案实践
分布式系统中会存在这样的开发场景,不同需求可能涉及到对同一个服务的开发,那么该服务在研发期间就会存在多个版本并行的状态,为了保持不同版本之间的隔离性,验收需要将请求路由到指定版本号的服务上处理;假设存在三个服务:A、B、C,且服务B和C都存在多个版本,那么让请求按照即定的路由规则执行,即可保证研发期间的验收是版本间隔离的,并且可以实现灰度部署的策略;原创 2022-09-07 16:24:16 · 162 阅读 · 0 评论 -
高内聚、低耦合、高并发、高可用、分布式这些名称到底什么意思?
一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高,即‘高内聚’!我们的模块开发时,最重要的就是保证足够的独立性,这也是分模块的意义。每个模块之间相互联系的紧密程度,模块之间联系越紧密,则耦合性越高,模块的独立性就越差!独立的模块便于扩展, 维护, 写单元测试, 如果模块之间重重依赖, 会极大降低开发效率。但是实际用到的机会也是较少的,因为只有业务发展起来,流量高了,才会要求并发。模块内部的元素, 关联性越强, 则内聚越高, 模块单一性更强。原创 2022-09-07 16:12:08 · 653 阅读 · 0 评论 -
记一次线上 Spring CPU 高负载的解决思路
背景: 在某一天,运营同事突然发现运营看板好几天没有更新数据了, 然后找了过来?!这里看似抛出了一个问题?但细想一下, 同时暴露了我们对于线上服务的监控未完全覆盖到!!!这是致命的!!!当然, 这篇文章先不讨论监控的问题, 后面会推出完善的监控方案。原创 2022-09-07 16:07:31 · 301 阅读 · 0 评论 -
小小Javaer没用过AtomicInteger?
AtomicInteger 在Java 1.5就已经存在了,该类不是 java.lang.Integer 的替代品!因为原子变量预计会发生变异,所以它们是哈希表键的糟糕选择。原创 2022-09-07 15:56:20 · 198 阅读 · 0 评论 -
关于中间件:谈谈中间件开发
我假设你是一个工作 3 年以内的 Java 开发人员,且你可能是培训生,半路出家,科班生,大专生,初中生,且你不在大厂,通常在一个后台开发不超过 200 人的创业公司,title 是 “Java 开发工程师”,并且有一个程序员的梦想,不想 get、set,不想 crud,不想 html 填空,不想和产品同学讨论,也不想和测试同学点点点......(感觉这里会得罪人 =_=||)从 Java 程序员的角度,基础通常就是:集合,并发,JVM,Netty,IO、NIO(mmap,sendfile)原创 2022-09-07 15:53:17 · 218 阅读 · 1 评论 -
【金九银十必问面试题】站在架构师角度分析问题,如何解决TCC中的悬挂问题
好了,今天的分享就到这里结束了。!!原创 2022-09-07 15:15:29 · 132 阅读 · 0 评论 -
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。原创 2022-09-07 15:07:10 · 187 阅读 · 0 评论 -
Spring 中毒太深!离开 Spring 我居然连最基本的接口都不会写了。。。
随着Spring的崛起以及其功能的完善,现在可能绝大部分项目的开发都是使用来进行开发,Spring也确实和其名字一样,是开发者的春天,Spring解放了程序员的双手,而等到SpringBoot出来之后配置文件大大减少,更是进一步解放了程序员的双手。但是也正是因为Spring家族产品的强大,使得我们习惯了面向Spring开发,那么假如有一天没有了Spring,是不是感觉心里一空,可能一下子连最基本的接口都不会写了,尤其是没有接触过Servlet编程的朋友。因为加入没有了Spring。原创 2022-09-07 14:59:05 · 140 阅读 · 0 评论 -
SpringBoot使用自定义注解+AOP+Redis实现接口限流
系统有一个获取手机短信验证码的接口,因为是开放接口,所以为了避免用户不断的发送请求获取验证码,防止恶意刷接口的情况发生,于是用最简单的计数器方式做了限流,限制每个IP每分钟只能请求一次,然后其他每个手机号的时间窗口限制则是通过业务逻辑进行判断。系统在设计的时候,我们会有一个系统的预估容量,长时间超过系统能承受的TPS/QPS阈值,系统有可能会被压垮,最终导致整个服务不可用。还有其他的限流方式,如滑动窗口限流方式(比计数器更严谨)、令牌桶等...,有兴趣的小伙伴可以学习一下。4、写一个简单的接口进行测试。原创 2022-09-07 14:47:46 · 151 阅读 · 0 评论 -
云图说丨初识分布式消息服务Kafka版
分布式消息服务Kafka版是一款基于开源社区版Kafka提供的消息队列服务,向用户提供计算、存储和带宽资源独占式的Kafka实例。关于分布式消息服务Kafka版的更多信息和相关介绍,请您参考。本文分享自华为云社区《》,作者: 阅识风云。原创 2022-09-07 14:42:08 · 440 阅读 · 0 评论 -
硬核解析MySQL的MVCC实现原理,面试官看了都直呼内行
MVCC全称是(多版本并发控制),是一种并发控制的方法,通过维护一个数据的多个版本,减少读写操作的冲突。如果没有MVCC,想要实现同一条数据的并发读写,还要保证数据的安全性,就需要操作数据的时候加读锁和写锁,这样就降低了数据库的并发性能。有了MVCC,就相当于把同一份数据生成了多个版本,在操作的开始各生成一个快照,读写操作互不影响。无需加锁,也实现数据的安全性和事务的隔离性。事务的四大特性中隔离性就是基于MVCC实现的。说MVCC的实现原理之前,先说一下事务的隔离级别。原创 2022-09-06 20:42:14 · 119 阅读 · 0 评论 -
好像知道的人不多?Spring容器关闭执行销毁方法有几种,看完MQ源码我才知道SmartLifecycle最快
大家好,我是小郭,这段时间在写业务代码的时候用到了Spring容器关闭执行销毁方法来关闭正在执行中的业务。学习了多种触发销毁方法的方式,由于业务场景不同,我们可能需要尽快的做销毁动作,或者最晚才执行销毁动作。刚好最近在看RocketMQ的源码,发现了他的关闭方式和我们以往的不一样,他使用的SmartLifecycle不是那么多人知道,但是他却能够在Spring容器一收到通知的时候,就调用销毁方法。帮大家整理出来,给我们设计方案的时候提供更多的思路。原创 2022-09-06 16:06:22 · 152 阅读 · 0 评论 -
JAVA泛型和通配符,再也不用每次百度了
泛型机制在项目中一直都在使用,比如在集合中ArrayList, Map等,不仅如此,很多源码中都用到了泛型机制,所以深入学习了解泛型相关机制对于源码阅读以及自己代码编写有很大的帮助。但是里面很多的机制和特性一直没有明白,特别是通配符这块,对于通配符上界、下界每次用每次百度,经常忘记,这次我就做一个总结,加深自己的理解。泛型在类定义时不会设置类中的属性或方法参数的具体类型,而是在类使用时(创建对象)再进行类型的定义。原创 2022-09-06 15:52:59 · 104 阅读 · 0 评论 -
mysql高手进阶优化篇
相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点data域保存了完整的数据记录。B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其 data 域的值,然后以 data 域的值为地址读取相应的数据记录。mysql中锁的是索引或者主键 如果是查询等操作时,如果没有用到索引或主键就锁的是整个表 如果使用到了就是锁的行 锁定的行对一个行的操作不影响对其他行的操作。原创 2022-09-05 16:04:34 · 468 阅读 · 0 评论 -
深入理解synchronized实现原理
synchronized关键字保证方法或者代码块在运行时,同一时刻只有一个方法可以进入临界区,同时它还可以保证共享变量的内存可见性。本文对于synchronized的原理进行详细的讲解,关于synchronized锁的升级将在后续的文章进行讲解。如有疑问请随时反馈。原创 2022-09-05 15:37:43 · 124 阅读 · 0 评论 -
金九银十Go面试题进阶知识点:select和channel
立即执行:意思是当前Goroutine不会因当前操作而被阻塞这篇文章解析了Go语言中select和channel在面试中可能遇到的进阶知识点。原创 2022-09-05 14:30:13 · 260 阅读 · 0 评论 -
编程思考 : Java中如何用简单的数字描述更多的信息
这一篇来趣味性的探讨一下 , 如何通过更少的空间描述更多的信息在数据库里面 ,通常我们会用数字的递进来描述状态等信息 , 但是如果想进行更复杂的操作 , 就有必要对二进制有一定理解了.简单的通过其递增的变化 , 来对应不同的状态通过数字的叠加 , 来记录多种状态的叠加通过二进制内不同的位数 , 来记录多种层面的数据通过 long 等长位数 , 来为不同的位数匹配不同的含义通过作为一个游标 ,配合其他的对象做更深度的扩展。原创 2022-09-04 21:17:08 · 282 阅读 · 0 评论 -
Docker日常工作常用命令
Docker镜像打标签在我们的实际开发中非常常用,比如说公司的项目每次开发都会发布一个版本然后我们通过打标签来区分不同版本,如果以后想要回滚版本就可以使用指定的标签的镜像来创建容器。docker login : 登录到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。docker stop 容器名:停止一个运行中的容器。原创 2022-09-04 20:27:43 · 315 阅读 · 0 评论 -
Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能
操作系统:虚拟机运行的Ubuntu18.04 64位系统。原创 2022-09-04 19:27:47 · 3898 阅读 · 0 评论 -
高性能RPC框架gRPC竟恐怖如斯~
RPC(Remote Procedure Call Protocol)远程过程调用协议,目标就是让远程服务调用更加简单、透明。RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节,服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和调用过程。原创 2022-09-04 16:19:38 · 185 阅读 · 0 评论 -
也许是最客观、全面的比较 Rust 与 Go:都想把 Rust 也学一下
最近一年,将 Rust 和 Go 进行比较的不少,但不少都不公正,带感情色彩。而这篇文章客观、全面的分析对比了 Rust 和 Go,让你具体项目时选择最合适的。Rust 还是 Go,哪个更好?你应该为下一个项目选择哪种语言,为什么?两者在性能,简单性,安全性,功能,规模和并发性等方面如何比较?它们有什么共同点,并且在根本上有何不同?来自 For the Go of Love[1] 系列图书的作者,友好而公正的比较 Rust 和 Golang。原创 2022-09-04 15:59:03 · 5714 阅读 · 1 评论 -
一文彻底理解Go语言栈内存/堆内存
Go语言源代码中「栈内存」和「堆内存」的分配都是虚拟内存,最终CPU在执行指令过程中通过内部的MMU把虚拟内存转化为物理内存。Go语言编译期间会进行逃逸分析,判断并标记变量是否需要分配到堆上,比如创建Map、Slice时。栈内存分配小于32KB的栈内存来源优先级1:线程缓存mcache来源优先级2:全局缓存stackpool来源优先级3:逻辑处理器结构来源优先级4:堆mheap大于等于32KB的栈内存来源优先级1:全局缓存stackLarge来源优先级2:逻辑处理器结构来源优先级3:堆mheap。原创 2022-09-04 15:54:55 · 405 阅读 · 0 评论 -
大型网站架构
一般来说软件架构需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素。原创 2022-09-04 15:42:08 · 77 阅读 · 0 评论 -
HashMap集合源码详解
学习目标:HashMap是Map接口的实现类,基于哈希表结构实现的。其主要特点是以key-value存储形式存储数 据,即用与存放键值对。HashMap 的操作不是同步的,这意味着它线程不安全。 特点:无序性 : 存入和取出元素顺序不一致唯一性 : 键key是唯一的可存null : 键和值位置都可以是null,但是键位置只能是一个null数据结构 : 数据结构控制的是键key而非值value! 说明:补充:通过上述继承关系我们发现一个很奇怪的现象, 就是HashMap已经继承了AbstractMap而Ab原创 2022-09-04 14:44:03 · 118 阅读 · 0 评论 -
Linux的OpenLava配置
OpenLava是基于LSF早期的开源版本发展而来,其、、的工作负载调度器。当你需要执行某项业务时候(比如跑渲染之类的),当有服务器处于空闲状态时候,可以直接ssh到另一个服务器 ,在当前服务器中的shell再执行。原创 2022-09-02 20:16:17 · 1037 阅读 · 0 评论 -
Replication(下):事务,一致性与共识
通过第一篇文章,我们知道了留待我们解决的问题有哪些。那么这篇文章中,将分别根据我们的假设去解决上述的挑战。这些保证措施包括事务、一致性以及共识。接下来讲介绍它们的作用以及内在联系,然后我们再回过头来审视一下Kafka复制部分的设计,看看一个实际的系统在设计上是否真的可以直接使用那些套路,最后介绍业界验证分布式算法的一些工具和框架。接下来,继续我们的数据复制之旅吧!实际上,内部一致性并不是分布式系统特有的问题,在多核领域又称内存一致性,是为了约定多处理器之间协作。原创 2022-09-01 20:48:51 · 91 阅读 · 0 评论 -
Replication(上):常见复制模型&分布式系统挑战
在分布式系统中,数据通常需要被分散在多台机器上,主要为了达到以下目的:扩展性,数据量因读写负载巨大,一台机器无法承载,数据分散在多台机器上可以有效地进行负载均衡,达到灵活的横向扩展。容错、高可用,在分布式系统中,单机故障是常态,在单机故障下仍然希望系统能够正常工作,这时候就需要数据在多台机器上做冗余,在遇到单机故障时其他机器就可以及时接管。统一的用户体验,如果系统客户端分布在多个地域,通常考虑在多个地域部署服务,以方便用户能够就近访问到他们所需要的数据,获得统一的用户体验。原创 2022-09-01 20:10:33 · 286 阅读 · 0 评论 -
Spring Boot + Redis 实现分布式锁,还有谁不会??
对于耗时业务和核心数据,不能让重复的请求同时操作数据,避免数据的不正确,所以要使用分布式锁来对它们进行保护。原创 2022-09-01 16:13:04 · 257 阅读 · 0 评论 -
被一位读者赶超,手摸手 Docker 部署 ELK Stack
这次我们演示在单机上用 Docker 部署 ELK Stack,大家可以参照这个教程部署在集群环境中。ELK Stack 整体的工作流程如下:1、微服务写入日志到本地文件中。2、Filebeat 组件监控日志文件变化,将日志收集起来。3、Filebeat 把数据传给 Logstash 组件。4、Logstash 具有强大的数据清洗和过滤功能,然后写入到 Elasticsearch 中。5、Kibana 可视化工具从 Elasticsearch 中查询数据并展示出来。......原创 2022-09-01 15:59:00 · 158 阅读 · 0 评论 -
浅谈-java GUI-基础理论
Graphical User Interface(图形用户接口) 用图形的方式,用来显示计算机操作的界面Java为GUI提供的API都存在java.awt和javax.Swing两个包中添加图片时,不能直接加路径,直接使用字符串路径会识别成text文本需要使用-----ImageIcon(String filename);...原创 2022-08-31 20:13:17 · 294 阅读 · 0 评论 -
【Java面试】带你从面试官的角度深入剖析,什么是Java虚拟机为什么要使用?
好了,今天的分享就到这里结束了。原创 2022-08-31 19:55:30 · 98 阅读 · 0 评论 -
HashMap面试相关
本质上是因为安全问题.因为,在元素的存放过程中,如果一个对象哈希冲突,都被放到一个桶里,则会形成一个链表,而链表的查询是线性的会严重影响存取的性能.而现实情况中,构造哈希冲突的数据并不是非常复杂的事情,恶意代码就会利用这些数据与服务器大量交互,导致服务器端cpu大量占用,这就构成了哈希碰撞拒绝服务攻击.不能为null,因为会产生二义性问题: 当我们用get方法去获取一个value为null的时候,可能会没有这个key,也可能会有这个key,只不过value为null....原创 2022-08-31 19:49:36 · 99 阅读 · 0 评论 -
Linux 进程、线程、文件描述符的底层原理
Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。原创 2022-08-31 16:41:27 · 177 阅读 · 0 评论 -
基于MQ的分布式事务实现方案
在与不同业务系统之间进行交互时,怎么保证发送的消息对方一定能收到,可能有人说RocketMQ就能做到,如果贵公司用到的消息队列是kafka、rabbitmq、activemq怎么保证不丢?这里分享一下基于消息的分布式事务解决方案,此种方案是最终一致性的解决方案,不挑MQ,但是前提MQ本身要支持接收到的消息不能丢失。...原创 2022-08-31 16:08:54 · 158 阅读 · 0 评论 -
LinkedHashMap深度解析
在平时开发的过程中,大部分都是使用HashMap存储key value结构的数据,但是它是没有顺序的,如果你想要一个有顺序的Map,这时候LinkedHashMap就闪亮登场, 本篇文章主要基于jdk1.8学习下LinkedHashMap的功能和原理。在学习LinkedHashMap你需要对HashMap底层实现和源码有一定了解。LinkedHashMap是一个有顺序的Hash表,它可以是元素插入顺序或者访问顺序。LinkedHashMap最大的特点是有顺序的。...原创 2022-08-31 16:00:26 · 2598 阅读 · 0 评论 -
Docker 安装 MySQL、Redis
全部执行完毕后,可以尝试使用 MySQL Workbench 或 IDEA 或 Navicat 连接 MySQL。启动容器,指定3306 端口映射和上面的三个目录映射,同时也指定 MySQL root 账户的密码为。容器启动后,可以进入容器修改 MySQL 的一些权限,使得外部可以连接。Redis 容器运行后,可以通过 RDM 等客户端工具尝试连接。进入上面创建的 mysql/conf 目录下,创建配置文件。后便在命令行中进入了 MySQL。...原创 2022-08-31 15:40:46 · 89 阅读 · 0 评论