程序员
文章平均质量分 86
风平浪静如码
这个作者很懒,什么都没留下…
展开
-
想要深入理解分布式事务,看这篇就足矣
随着业务的快速发展,业务复杂度越来越高,大部分互联网公司几乎都会从单体走向分布式,特别是转向微服务架构,随之而来就必然遇到分布事务这个难题。原创 2022-03-17 21:22:00 · 671 阅读 · 0 评论 -
你知道什么叫金丝雀分布吗?你知道如何在Service Mesh微服务架构中实现吗?
什么是金丝雀发布既然要聊具体的实现,那么在开始之前,先科普下什么是“金丝雀发布”。金丝雀发布也叫**“灰度发布”**,具体来说就是在发布线上版本时,先将少量的生产流量打到服务的新版本,以验证新版本的准确性和可靠性,待发布的新版本得到线上流量的全面验证后,在逐步将所有流量放入新版本,以实现生产服务版本的稳定更新。为什么叫金丝雀发布呢,是因为金丝雀对矿场中的毒气比较敏感,所以在矿场开工前工人们会放一只金丝雀进去,以验证矿场是否存在毒气,这便是金丝雀发布名称的由来。在不同技术栈场景中,金丝雀发布的实现.原创 2021-11-11 22:16:44 · 568 阅读 · 0 评论 -
三分钟带你初步了解Service Mesh开源实现之Istio架构
Istio中的关键概念要学习Istio需要先明确以下几个关键术语。1.容器/容器镜像进入到云原生时代的服务网格架构,应用的发布、部署都是围绕Kubernetes为代表的容器基础设施展开的。这就需要对容器及容器镜像的概念有清晰的理解。实际上,容器的普及要归功于Docker技术的流行,而从本质上说容器就是运行在操作系统中的,受资源隔离限制的一组进程,也称为**“容器运行时”**。它可以将用户打包的代码及其所赖的关系完整的还原出来。通过容器化运行的应用程序,可以更快、更可靠地运行,而不受具体计算环境的影.原创 2021-10-15 21:20:03 · 453 阅读 · 0 评论 -
简述Kubernetes容器日志收集原理!
概述关于容器日志Docker的日志分为两类,一类是Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以理解是运行在容器内部的应用输出的日志,默认情况下,docker logs显示当前运行的容器的日志信息,内容包含 STOUT(标准输出)和STDERR(标准错误输出)。日志都会以json-file的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>.原创 2021-06-25 17:11:07 · 367 阅读 · 2 评论 -
你知道什么是CI/CD吗?不懂?五分钟让你彻底理解!
在CI/CD和DevOps领域中,持续交付和持续部署是一个老生常谈的话题。持续集成这个术语最早是在1994年由Grady Booch提出。微服务提出者Martin Flower在2014年发表的论文《Microservice》中也对软件开发持续集成提供了可参考原则。持续集成是借助工具对软件项目进行持续的自动化的编译打包构建测试发布,来检查软件交付质量的一种行为。而持续部署是基于持续交付的优势自动将经过测试的代码推入生产环境的过程。下文从细节描述了持续集成和持续部署各阶段的关键步骤。本文将探讨CI(持..原创 2021-06-17 15:06:10 · 932 阅读 · 0 评论 -
风水轮流转,三年前因迟到被主管骂退,三年后我竟面试了我的主管
都说三十年河东,三十年河西,一时运气不好不要紧,风水轮流转,总有一天好运会转到自己头上。一个被幸运之神眷顾的网友就分享了自己的经历:曾经当过一个产品组组长,组里有5名小伙伴,跟大家相处很好。有一天自己上班迟到了25分钟,被上级当着组内所有小伙伴大骂一顿,骂得很难听,自己当晚就提了离职。谁能想到三年后的一天,现公司HRBP推过来一个简历,打开一看,竟然是之前骂过自己的那个主管!楼主问大家:要面他吗?会不会尴尬?看了楼主的经历,小编只想说,大千世界无奇不有,这就是猿粪啊!有网友说,这不就是赘婿的现实版原创 2021-06-11 15:51:04 · 248 阅读 · 1 评论 -
必收藏干货!Kubernetes集群搭建超详细总结(CentOS版)
学习Kubernetes的关键一步就是要学会搭建一套k8s集群。在今天的文章中作者将最近新总结的搭建技巧,无偿分享给大家!废话不多说,直接上干货!01、系统环境准备要安装部署Kubernetes集群,首先需要准备机器,最直接的办法可以到公有云(如阿里云等)申请几台虚拟机。而如果条件允许,拿几台本地物理服务器来组建集群自然是最好不过了。但是这些机器需要满足以下几个条件:要求64位Linux操作系统,且内核版本要求3.10及以上,能满足安装Docker项目所需的要求;机器之间要保持网络互通,这.原创 2021-06-02 15:44:31 · 1137 阅读 · 0 评论 -
在数据库分库分表之后,你该如何解决事务问题?
一、概述随着时间和业务的发展,数据库中表的数据量会越来越大,相应地,数据操作,增删改查的开销也会越来越大。因此,把其中一些大表进行拆分到多个数据库中的多张表中。本篇文章是基于非事务消息的异步确保的方式来完成分库分表中的事务问题。二、需要解决问题2.1 原有事务由于分库分表之后,新表在另外一个数据库中,如何保证主库和分库的事务性是必须要解决的问题。解决办法:通过在主库中创建一个流水表,把操作数据库的逻辑映射为一条流水记录。当整个大事务执行完毕后(流水被插入到流水表),然后通过其他方式来执行这段流.原创 2021-05-30 17:04:51 · 578 阅读 · 3 评论 -
你知道为什么要选择B+树作为数据库索引结构?谈谈你的理解
背景首先,来谈谈B树。为什么要使用B树?我们需要明白以下两个事实:【事实1】不同容量的存储器,访问速度差异悬殊。以磁盘和内存为例,访问磁盘的时间大概是ms级的,访问内存的时间大概是ns级的。有个形象的比喻,若一次内存访问需要1秒,则一次外存访问需要1天。所以,现在的存储系统,都是分级组织的。最常用的数据尽可能放在更高层、更小的存储器中,只有在当前层找不到,才向更低层、更大的存储器中寻找。这也就解释了,当处理大规模数据的时候(指无法将数据一次性存入内存),算法的实际运行时间,往往取决于数据在不同存储.原创 2021-05-27 14:00:43 · 279 阅读 · 0 评论 -
Netty面试常驻题:你知道Netty的零拷贝机制吗?
理解零拷贝 零拷贝是Netty的重要特性之一,而究竟什么是零拷贝呢?WIKI中对其有如下定义:“Zero-copy” describes computer operations in which the CPU does not perform the task of copying data from one memory area to another.从WIKI的定义中,我们看到**“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。**而它通常是指计算机在网络上发.原创 2021-05-25 16:23:28 · 235 阅读 · 2 评论 -
中高级面试常驻题:简单说下Java面向对象设计的六大原则
这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则。只有掌握了这些原则,我们才能更好的理解设计模式。我们接下来要介绍以下6个内容。单一职责原则——SRP开闭原则——OCP里式替换原则——LSP依赖倒置原则——DIP接口隔离原则——ISP迪米特原则——LOD单一职责原则单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因。也就是说一个类应该只负责一件事情。如果一个类负责了方法M1,方法M2两个不同的事情,当M1方法发生变化的时候,我们需要修改这个类的M1方法,但是这个时候.原创 2021-05-20 14:19:45 · 174 阅读 · 0 评论 -
你真的懂并发吗?谈谈对JUC线程池ThreadPoolExecutor的认识吧
前提很早之前就打算看一次JUC线程池ThreadPoolExecutor的源码实现,由于近段时间比较忙,一直没有时间整理出源码分析的文章。之前在分析扩展线程池实现可回调的Future时候曾经提到并发大师Doug Lea在设计线程池ThreadPoolExecutor的提交任务的顶层接口Executor只有一个无状态的执行方法:public interface Executor { void execute(Runnable command);}而ExecutorService提供了很多.原创 2021-05-18 14:35:43 · 195 阅读 · 0 评论 -
Java序列化素质三连:是什么?为什么需要?如何实现?
遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题什么叫序列化和反序列化作用,为啥要实现这个 Serializable 接口,也就是为啥要序列化serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。在处理这个问题之前,你要先知道一个问题,这个比较重要。这个Serializable接口,以及相关的东西,全部都.原创 2021-05-17 14:49:23 · 177 阅读 · 0 评论 -
Java四种引用类型原理你真的搞明白了吗?五分钟带你深入理解!
Java中一共有4种引用类型(其实还有一些其他的引用类型比如FinalReference):强引用、软引用、弱引用、虚引用。其中强引用就是我们经常使用的Object a = new Object(); 这样的形式,在Java中并没有对应的Reference类。本篇文章主要是分析软引用、弱引用、虚引用的实现,这三种引用类型都是继承于Reference这个类,主要逻辑也在Reference中。问题在分析前,先抛几个问题?1.网上大多数文章对于软引用的介绍是:在内存不足的时候才会被回收,那内存不足是怎.原创 2021-05-13 14:42:56 · 179 阅读 · 0 评论 -
百度二面:@Component,@Service等注解是如何被解析的?
前言@Component和@Service都是工作中常用的注解,Spring如何解析?一、@Component解析流程找入口Spring Framework2.0开始,引入可扩展的XML编程机制,该机制要求XML Schema命名空间需要与Handler建立映射关系。该关系配置在相对于classpath下的/META-INF/spring.handlers中。如上图所示 ContextNamespaceHandler对应context:… 分析的入口。找核心方法浏览ContextName.原创 2021-05-12 14:12:13 · 283 阅读 · 0 评论 -
Java常见并发编程方式和手段解密,看这篇就足够了!
今天的文章将给大家分享Java并发编程相关的知识点,虽然类似的文章已有很多,但本文将以更贴近实际使用场景的方式进行阐述。具体将对Java常见的并发编程方式和手段进行总结,以便可以从使用角度更好地感知Java并发编程带来的效果,从而为后续更深入的理解Java并发机制进行铺垫。Java多线程概述在Java中使用多线程是提高程序并发响应能力的重要手段,但同时它也是一把双刃剑;如果使用不当也很容易导致程序出错,并且还很难直观地找到问题。这是因为:1)、线程运行本身是由操作系统调度,具有一定的随机性;2)、Ja.原创 2021-05-10 15:52:29 · 228 阅读 · 0 评论 -
花了一个月梳理总结万字微服务核心架构,原来没你想的那么难...
在公司学习了接近一个月。一个月内,从0开始开始接触分布式微服务架构,给了我不小的收获。今天,我来从头到尾梳理一下,有关微服务架构的核心内容(全是干货)。下文,你将看到业界主流微服务框架的核心原理,包括服务发现,网关,配置中心,监控等组件,功能和架构原理的简单介绍。感谢阅读!????什么是微服务微服务Microservices之父,马丁.福勒,对微服务大概的概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition原创 2021-05-07 15:23:37 · 255 阅读 · 0 评论 -
深入解析,快速教会你 SQL 子查询优化!
子查询 (Subquery)的优化一直以来都是 SQL 查询优化中的难点之一。关联子查询的基本执行方式类似于 Nested-Loop,但是这种执行方式的效率常常低到难以忍受。当数据量稍大时,必须在优化器中对其进行去关联化 (Decoorelation 或 Unnesting),将其改写为类似于 Semi-Join 这样的更高效的算子。前人已经总结出一套完整的方法论,理论上能对任意一个查询进行去关联化。本文结合 SQL Server 以及 HyPer 的几篇经典论文,由浅入深地讲解一下这套去关联化的理论体系原创 2021-05-06 14:46:41 · 248 阅读 · 0 评论 -
某程序员吐槽大龄程序员“太水”:水平低不服管理,网友:笑了!
一般而言,在一个行业里深耕的时间越长,经验越丰富,技术越纯熟,越会被人尊重,但许多人却觉得大龄程序员不受欢迎,这是为什么呢?一个程序员发帖吐槽组里的大龄程序员:1.技术水平相当于应届一两年,对技术毫无兴趣,够用就行,一年的经验用了十年。2.觉得自己经验丰富,看不起新人,不服从管理。楼主说,那位大哥比自己加班多50%,产出却不高,给他提了几次技术上的建议他都没听。楼主感叹,突然理解了为啥有些大龄程序员不受欢迎,都是有原因的!有人表示赞同,许多大龄程序员使用着多年前已经被淘汰的技术,而且学习速度确实跟刚原创 2021-04-14 14:38:15 · 462 阅读 · 1 评论 -
某程序员吐槽培训班简历造假,应届变三年,拿阿里外包高薪offer
关于程序员速成培训班的传言和八卦很多,近日,又有一个程序员发帖吐槽培训班简历造假,两个大四学生报了个培训班,竟然给包装成有三年工作经验的人,更离谱的是,竟然还拿到了阿里外包26k的offer……许多网友表示自己也有类似经验,有人说之前有培训班也让自己包装经历,他当时是一个还没毕业的应届生,培训班就让他包装成大厂实习生。有人说自己认识一个专科毕业、有一年工作经验的程序员,面试oppo时把自己包装成有六年经验的IT小管理,目前已经入职了。总之培训班简历都造假,十年前就已经是公开的秘密了。也有人质原创 2021-04-13 14:59:03 · 5058 阅读 · 5 评论 -
案例分享:只因在 update 语句中误用一个双引号,生产数据竟然都变成了 0
一、前言最近经常碰到开发误删除误更新数据,这不,他们又给我找了个麻烦,我们来看下整个过程。二、过程由于开发需要在生产环节中修复数据,需要执行120条SQL语句,需要将数据进行更新于是开发连上了生产数据库,首先执行了第一条SQLupdate tablename set source_name = "bj1062-北京市朝阳区常营北辰福第" where source_name = "-北京市朝阳区常营北辰福第"我们仔细看了下,这个SQL,的确没有什么问题,where条.原创 2021-04-12 14:42:19 · 130 阅读 · 0 评论 -
快速了解Service Mesh微服务架构实现服务间gRPC通信
在前面的文章之中我们介绍了基于Kubernetes及Istio如何一步一步把Service Mesh微服务架构玩起来!在该文章中,我们演示了一个非常贴近实战的案例,这里回顾下该案例的结构,如下图所示:该案例所演示的就是我们日常使用微服务架构开发时,服务间最普遍的通信场景。在Spring Cloud微服务体系中,服务间可以通过Fegin+Ribbon组合的方式,实现服务间负载均衡方式的Http接口调用;但在Service Mesh架构中,服务发现及负载均衡等治理逻辑已经由SideCar代理,如果还希望延.原创 2021-04-07 15:08:47 · 288 阅读 · 0 评论 -
实战|如何优雅地自定义Prometheus监控指标
今天要和大家分享的是在实际工作中**“如何优雅地自定义Prometheus监控指标”**!目前大部分使用Spring Boot构建微服务体系的公司,大都在使用Prometheus来构建微服务的度量指标(Metrics)类监控系统。而一般做法是通过在微服务应用中集成Prometheus指标采集SDK,从而使得Spring Boot暴露相关Metrics采集端点来实现。但一般来说,Spring Boot默认暴露的Metrics数量及类型是有限的,如果想要建立针对微服务应用更丰富的监控维度(例如TP90/TP.原创 2021-04-06 14:45:26 · 1267 阅读 · 1 评论 -
干货|如何步入Service Mesh微服务架构时代
今天要和大家分享的是关于新一代微服务架构——Service Mesh的具体玩法!在微服务架构盛行的今天,作为一名互联网技术从业人员,对于微服务的概念相信大家都已经耳熟能详了!而至于像Spring Cloud这样的微服务框架,因为大部分互联网公司都在此基础上构建过第一代微服务体系,所以对于做Java 的同学来说,Spring Cloud微服务体系应该是非常熟悉了!这里并不是说其他语言栈就没有构建微服务体系的框架,例如Go语言也有像Go-Micro这样的微服务框架,只不过目前除了像头条这样重度使用Go语言的.原创 2021-03-19 14:40:13 · 774 阅读 · 1 评论 -
五分钟教你如何优雅的统计代码耗时,让你知道你的程序到底慢在哪!
一、前言代码耗时统计在日常开发中算是一个十分常见的需求,特别是在需要找出代码性能瓶颈时。可能也是受限于 Java 的语言特性,总觉得代码写起来不够优雅,大量的耗时统计代码,干扰了业务逻辑。特别是开发功能的时候,有个感受就是刚刚开发完代码很清爽优雅,结果加了一大堆辅助代码后,整个代码就变得臃肿了,自己看着都挺难受。因此总想着能不能把这块写的更优雅一点,今天本文就尝试探讨下“代码耗时统计”这一块。在开始正文前,先说下前提,“代码耗时统计”的并不是某个方法的耗时,而是任意代码段之间的耗时。这个代码段,可能.原创 2021-02-19 14:09:30 · 261 阅读 · 0 评论 -
腾讯元老赚够钱后辞职到安徽农村隐居,亲手建造200亩农场
财富自由之后你想过什么生活?腾讯元老魏震给出了自己的答案:隐居农村,建造一个属于自己的农场。让我们来看看他的履历:2003年毕业于中国科技大学的计算机专业,进入华为;从华为离职后加入腾讯,当时的腾讯还没有上市,也不是今天这样的互联网巨头,魏震是腾讯的600多号员工,因为工作能力出众被不断提拔,很快成为腾讯的CTO,负责公司的技术部分;从腾讯辞职后,魏震和几个同事合伙创办了淘米网,依然担任CTO。这是一家面向儿童寓教于乐的家庭互动娱乐企业,开发了《摩尔庄园》、《赛尔号》等游戏,三年后,淘米网就上市了原创 2021-02-01 15:16:30 · 352 阅读 · 2 评论 -
操作系统的那些灵魂概念,你弄懂了几个?
一、进程进程与程序操作系统之中最为通用的概念就是「进程」。与此相关的面试题以及各种技术优化策略也层出不穷,足以够证明它对于理解操作系统中举足轻重的地位。事实上,通过「进程」,程序员可以更为直观的理解自己所开发的软件,并且能够从中深刻的认识到操作系统在软件运行做了些什么。简单来讲,进程就是正在执行的程序。每个进程都包含有属于自己的一段地址空间,可以看作是一部分内存空间。在这样的地址空间中,进程能够根据需要进行内存的读写。地址空间里面一般包含可执行程序,以及对应程序的数据及其堆栈。与每个进程相关的还有.原创 2021-01-13 14:26:03 · 175 阅读 · 1 评论 -
Java面试中常问的八大排序算法及代码实现你都会了吗?
一、直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如何写成代码:首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。< span>设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。从最后一个数.原创 2021-01-12 14:32:17 · 197 阅读 · 1 评论 -
应该没人比我更细了吧:带你深入剖析Redis分布式锁!
什么是分布式锁说到Redis,我们第一想到的功能就是可以缓存数据,除此之外,Redis因为单进程、性能高的特点,它还经常被用于做分布式锁。锁我们都知道,在程序中的作用就是同步工具,保证共享资源在同一时刻只能被一个线程访问,Java中的锁我们都很熟悉了,像synchronized 、Lock都是我们经常使用的,但是Java的锁只能保证单机的时候有效,分布式集群环境就无能为力了,这个时候我们就需要用到分布式锁。分布式锁,顾名思义,就是分布式项目开发中用到的锁,可以用来控制分布式系统之间同步访问共享资源,.原创 2021-01-11 15:06:53 · 379 阅读 · 1 评论 -
我把 Spring Cloud 给拆了!带你详细了解各组件原理!
我们先认识一下SpringCloud的各个组件,然后知其所以然。原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下:创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付”扣减相应的商品库存通知仓储中心,进行发货给用户的这次购物增加相应的积分如上,微服务的应用场景和核心竞争力:降低耦合:每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持原创 2021-01-07 13:56:54 · 133 阅读 · 0 评论 -
深入浅出MySQL灵魂十连问,你真的有把握吗?
一、SQL语句执行流程MySQL大体上可分为Server层和存储引擎层两部分。Server层:连接器:TCP握手后服务器来验证登陆用户身份,A用户创建连接后,管理员对A用户权限修改了也不会影响到已经创建的链接权限,必须重新登陆。查询缓存:查询后的结果存储位置,MySQL8.0版本以后已经取消,因为查询缓存失效太频繁,得不偿失。分析器:根据语法规则,判断你输入的这个SQL语句是否满足MySQL语法。优化器:多种执行策略可实现目标,系统自动选择最优进行执行。执行器:判断是否有权限,将最终任务提.原创 2021-01-06 14:12:04 · 997 阅读 · 0 评论 -
领统Java并发半壁江山的AQS你真的懂了吗?
一、JUC的由来synchronized 关键字是JDK官方人员用C++代码写的,在JDK6以前是重量级锁。Java大牛 Doug Lea对 synchronized 在并发编程条件下的性能表现不满意就自己写了个JUC,以此来提升并发性能,本文要讲的就是JUC并发包下的AbstractQueuedSynchronizer。在JUC中 CountDownLatch、ReentrantLock、ThreadPoolExecutor、ReentrantReadWriteLock 等底层用.原创 2021-01-04 16:03:21 · 259 阅读 · 0 评论 -
不会数据结构?24张图让你彻底弄懂它,还不会你来打我!
数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。常用的数据结构可根据数据访问的特点分为线性结构和非线性结构。线性结构包括常见的链表、栈、队列等,非线性结构包括树、图等。数据结构种类繁多,本文将通过图解的方式对常用的数据结构进行理论上的介绍和讲解,以方便大家掌握常用数据结构的基本知识。一、数组数组可以说是最基本最常见的数据结构。数组一般用来原创 2020-12-31 14:15:30 · 451 阅读 · 1 评论 -
你了解Spring事务传播行为吗?多个方法之间调用事务如何传播?
前言:Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文对七种事务传播行为做详细介绍,内容主要代码示例的方式呈现。基础概念:1. 什么是事务传播行为?事务传播行.原创 2020-12-30 15:57:11 · 972 阅读 · 1 评论 -
深入学习:三分钟快速教会你编写线程安全代码!
相信有很多同学在面对多线程代码时都会望而生畏,认为多线程代码就像一头难以驯服的怪兽,你制服不了这头怪兽它就会反过来吞噬你。夸张了哈,总之,多线程程序有时就像一潭淤泥,走不进去退不出来。可这是为什么呢?为什么多线程代码如此难以正确编写呢?从根源上思考关于这个问题,本质上是有一个词语你没有透彻理解,这个词就是所谓的线程安全,thread safe。如果你不能理解线程安全,那么给你再多的方案也是无用武之地。接下来我们了解一下什么是线程安全,怎样才能做到线程安全。这些问题解答后,多线程这头大怪兽自然就转载 2020-12-29 14:30:50 · 146 阅读 · 0 评论 -
五分钟让你彻底理解二叉树的非递归遍历
什么是二叉树在计算机科学中二叉树,binary tree,是一种数据结构,在该数据结构中每个节点最多有两个子节点,如图所示:二叉树的定义就是这样简单,但这种看起来很简单的数据结构遍历起来一点都不简单。如何遍历二叉树所谓遍历简单的讲就好比在迷宫中寻宝,宝物就藏在某一个树节点当中,但我们并不知道具体在哪个节点上,因此要找到宝物就需要将全部的树节点系统性的搜索一遍。那么该怎么系统性的搜索一遍二叉树呢?给定一个单链表你几乎不需要思考就能知道该如何遍历,很简单,拿到头节点后处理当前节点,然后拿到头节点.原创 2020-12-28 14:43:48 · 849 阅读 · 1 评论 -
超长解析:一文带你分析与解决分布式系统互斥性与幂等性问题
随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑也日趋复杂,对系统的高并发访问、海量数据处理的场景也越来越多。如何用较低成本实现系统的高可用、易伸缩、可扩展等目标就显得越发重要。为了解决这一系列问题,系统架构也在不断演进。传统的集中式系统已经逐渐无法满足要求,分布式系统被使用在更多的场景中。分布式系统由独立的服务器通过网络松散耦合组成。在这个系统中每个服务器都是一台独立的主机,服务器之间通过内部网络连接。分布式系统有以下几个特点:可扩展性:可通过横向水平扩展提高系统的性能和吞吐量。高可靠性.原创 2020-12-27 17:03:09 · 288 阅读 · 0 评论 -
一文告诉你大厂亿级并发下高性能服务器是如何实现的!
多进程历史上最早出现也是最简单的一种并行处理多个请求的方法就是利用多进程。比如在Linux世界中,我们可以使用fork、exec等系统调用创建多个进程,我们可以在父进程中接收用户的连接请求,然后创建子进程去处理用户请求,就像这样:这种方法的优点就在于:编程简单,非常容易理解由于各个进程的地址空间是相互隔离的,因此一个进程崩溃后并不会影响其它进程充分利用多核资源多进程并行处理的优点很明显,但是缺点同样明显:各个进程地址空间相互隔离,这一优点也会变成缺点,那就是进程间要想通信就会变得比.原创 2020-12-24 14:37:28 · 252 阅读 · 0 评论 -
18张图让你搞懂高并发中的线程与线程池,看完还不会你来打我!
一切要从CPU说起你可能会有疑问,讲多线程为什么要从CPU说起呢?原因很简单,在这里没有那些时髦的概念,你可以更加清晰的看清问题的本质。CPU并不知道线程、进程之类的概念。CPU只知道两件事:从内存中取出指令执行指令,然后回到1你看,在这里CPU确实是不知道什么进程、线程之类的概念。接下来的问题就是CPU从哪里取出指令呢?答案是来自一个被称为Program Counter(简称PC)的寄存器,也就是我们熟知的程序计数器,在这里大家不要把寄存器想的太神秘,你可以简单的把寄存器理解.原创 2020-12-23 14:52:23 · 173 阅读 · 0 评论 -
史上最全:近万字总结延迟任务实现方式!附代码(强烈推荐)
什么是延迟任务?顾明思议,我们把需要延迟执行的任务叫做延迟任务。延迟任务的使用场景有以下这些:红包 24 小时未被查收,需要延迟执退还业务;每个月账单日,需要给用户发送当月的对账单;订单下单之后 30 分钟后,用户如果没有付钱,系统需要自动取消订单。等事件都需要使用延迟任务。延迟任务实现思路分析延迟任务实现的关键是在某个时间节点执行某个任务。基于这个信息我们可以想到实现延迟任务的手段有以下两个:自己手写一个“死循环”一直判断当前时间节点有没有要执行的任务;借助 JDK 或者第三方.原创 2020-12-22 15:04:35 · 149 阅读 · 0 评论