自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1103)
  • 收藏
  • 关注

原创 每天学四小时:Java+Spring+JVM+分布式高并发,架构师指日可待

适合小白入门到高级,同时适合工作-两年的同学,因为整套课程全程通过项目演变的过程,从传统单机到整合分布式缓存,高井发负载均衡技术数据一致性方案,再到微服务,注册发现,路由熔断,统一配置管理,服务质量管理,中间件技术选型,底层原理源码分析,覆盖JAVA、spring全家桶、kafka. 多种MQ、缓存数据库技术,docker容器k8s部署,只要跟着学,不只会操作,还能领悟技术发展的因果关系让您面试先人一 步!添加图片注释,不超过 140 字(可选)添加图片注释,不超过 140 字(可选)

2022-10-12 09:40:20 1063

原创 牛啊!长这么大还是头一次见24W字的SpringBoot从入门到实战文档

最后重点介绍了阿里巴巴的开源组件——Sentinel,它集成了控制台管理页面,可以设置各种限流规则和熔断规则,选取不同的策略进行限流与熔断,如QPS和并发数等,并且能够与Nacos集成将相关的规则持久化。本文从Spring Boot的特性与基本原理讲起,逐步深入到Spring Boot与其他微服务开发组件的集成使用,并在最后配合实 际的项目案例,重点讲解Spring Boot的微服务开发,能够让读者全面、系统地学习Spring Boot开发的相关知识,并且对微服务应用开发有更深入的理解。

2023-01-13 11:05:24 51

原创 让我直接涨薪5K的Nginx/OpenResty详解,NginxLua操作Redis有多牛

以上代码处于nginx-redis-demo.conf文件中,修改后需要重启OpenRestry,然后可以使用浏览器访问其地址/pool_demo,具体的访问结果如图8-22所示。总之,作为一个专业的服务端开发工程师,大家必须要对连接池有较深理解,其实不论是Redis连接池、HTTP连接池,还是数据库连接池,甚至是线程池,其原理都是差不多的。②坑:如果设置错误,那么red连接对象不一定可用,不能把可用性存疑的连接放回池子里,如果另一个请求从连接池获取到一个不能用的连接,就会直接报错。

2023-01-13 10:54:09 43

原创 终于读完了阿里云p9专家分享云原生Kubernetes全栈架构师实战文档

通常情况下,在Kubernetes集群外部会有一个Ceph这样的分布式存储平台供Kubernetes使用,在Kubernetes上部署对应的CSI进行存储编排,之后即可非常方便地实现中间件数据的持久化,这也是常用的一种方式和架构。而Ingress多用于对外发布服务,即通过域名的形式让用户能访问到内部服务,这也是最普遍的发布方式,但是如果一个不需要对外发布的后端服务,通过Ingress被另一个后端服务调用,则相当于从外部绕了一圈,这不是推荐的方式。同时,在安装过程中,也可以更加深刻地理解每个组件的工作原理。

2023-01-12 11:15:37 231

原创 做这么多年程序员了,才把ELK和springboot的日志解决方案弄明白

我们知道,Spring Boot采用了LogBack作为默认的文件系统,而LogBack有非常强大的Appender机制,可以将日志动态输出到指定的Appender上,这样在日志采集时就不需要为每一个微服务都安装一个Agent了,同时日志不需要再落盘就可以通过第三方消息中间件将日志异步转发出去,避免了为每一台宿主机都安装LogAgent采集进程;Flume的数据流由事件(Event)贯穿始终,事件是将传输的数据进行封装而得到的,是Flume传输数据的基本单位。简单来说就是日志的收集、分析、过滤工具。

2023-01-12 11:09:46 34

原创 为什么工作三年的程序员还不懂APM与调用链技术?

调用链技术综合了数据埋点、采集、数据聚合、数据展示等多项技术,可以根据不同层次和维护的分析,标识出服务调用异常,快速定位问题,从微观层面监控系统的运行状态,是一种细粒度的服务监控模式。在微服务架构下,由于服务之间的交互对网络有如此强的依赖,我们需要时刻了解请求耗时、网络延迟、业务吞吐、系统运行等情况,所以,我们需要一个系统来分析当前系统的瓶颈,解决系统问题。● 带宽是有限的,应用的传输数据在逐渐增大,尽管应用系统无法控制生产环境下的网络带宽,但是我们需要模拟网络,监控并控制应用数据的传输上限。

2023-01-12 11:08:13 23

原创 任正非让寒气传递到每个人身上,互联网寒冬程序员该如何破冰?

小编给大家分享一条程序员修炼内功提升技能的学习路线,完整的知识体系,打造货真价实的架构师能力,技术层次是从p5到p8,薪资范围是20W—200W,希望大家能够喜欢!不要以为互联网寒冬,所有互联网企业都在裁人,还有一批互联网公司在广招人才,他们招的是大型互联网公司被辞退的优秀人才,通常职位替代性比较强的岗位,而公司裁掉的员工,一定是那些技术沉旧,不适应新技术发展,而且平日工作轻松,安逸,不思进取的员工。作为程序员,在如此恶劣的环境之下,该如何去储备技能,才能破冰而出,得以生存呢?

2023-01-12 10:54:40 55

原创 5分钟,带你看完24岁60W年薪架构师的简历,上面竟然写着精通JVM

所掌握的技能大部分写的都是精通!近期,看了一份24岁60W年薪架构师简历,上面写着他的求职意向+所掌握的技能.......除了所掌握的技能之后,还有工作经历+个人经历+自我的评价,内容太多不方便透露给大家。最后还有配套的视频来学习提升,让你也可以再简历上写上精通JVM!6.JVM调优必备理论知识-GCCollector-三色标记;1.JVM入门以及Class文件格式;4.内存屏障与JVM指令;11.JVM常见参数总结;7.PS+PO调优实战;微信公众号获取联系方式。8.JVM调优实战;9.JVM实战调优;

2023-01-11 10:55:20 26

原创 靠686页云原生Kubernetes全栈架构师实战文档成功上岸阿里高级岗

辛辛苦苦三个月,每天都遨游在知识的海洋当中,不知不觉已经把云原生Kubernetes给搞透了,并且拿到了阿里架构高级岗!那我就不藏着掖着了,直接把这个PDF分享出来给大家共同钻研!说实话,是真的有点佩服自己的毅力和吸收能力,人要是狠起来自己都害怕!看完来此评论,看谁更强!微信公众号获取联系方式。

2023-01-11 10:52:12 20

原创 华为22级专家十年心血终成云原生服务网格进阶实战文档,是真的6

本章从具体实践的角度详细介绍了Istio的各项流量控制功能,包括:相对简单的请求路由匹配,广泛用于系统稳定性验证的流量镜像,保障服务体验的超时限制、请求重试、服务熔断,以及Istio服务网格和外部客户端或外部服务交互的方法等。作为典型的分布式系统,规模较大的微服务在服务治理、网络通信等方面的需求日渐强烈。本章从Istio的安装开始,逐步介绍升级和Bookinfo实例,带领读者快速体验Istio的安装方式及基本应用,并利用Katacoda 平台,手把手带领读者快速上手Istio,体验 Istio的各种功能。

2023-01-11 10:47:32 29

原创 程序员该知道大型网站架构的发展历程吗?如何有效地增加服务器?

在一定层面上,网站是围绕数据工作的,网站的业务实际上是对数据的管理,数据库一般是整个网站系统的核心。当然,仅仅使用关系型数据库也可以满足所有的业务需求,但是存在两个问题:第一,针对查询而言,很多查询请求都是相同的,一段时间内查询的结果都是一样的,而数据库则基本上需要每次都重新检索一次;不过,微服务也是存在争议的,在笔者经历过的两个采用微服务的项目中,最后的结果都不太好。应对社交关系等复杂的数据时,采用Neo4J等图形非关系型数据库比较省力,需要注意的是,这里的图形不是图片,是图形结构的意思。

2023-01-11 10:41:29 26

原创 架构师才能看懂的大型网站架构面临的挑战:业务架构的基本思路

瀑布开发模型很大程度上依赖需求分析阶段的明确性,因为在瀑布开发模型中默认需求是充分和明确的,需求几乎不存在被改动的情况,所以设计和编码阶段都是完全以需求分析为依据的。等主体功能开发完成后,再对次要功能的细节进行明确,等次要功能完成后,再对一些琐碎的功能进行明确,以递进的方式逐步细化和修改业务架构。主功能阶段主要实现整个主体功能,这一阶段的业务架构需要完全明确主体功能需求,次要功能和琐碎功能的细节可以先忽略,但次要功能和琐碎功能也要体现,因为它们会影响技术架构和迭代计划。笔者认为,项目开发需要有递进思想。

2023-01-11 10:39:51 16

原创 在架构师的角度去看大型网站架构面临的挑战:技术架构的基本思路

那么,对于大型网站技术架构而言,如果把庞大的网站系统架构分成独立的几层,用分层的思维去理解庞大的架构,那么设计大型网站技术架构就不再无从下手了。云计算服务受后端软件调度。在图2.11中,云计算服务被分成两部分,一部分是自身系统提供的云计算服务,另一部分是第三方云计算服务,它们是由第三方平台提供的。我们把IaaS、PaaS和SaaS分层架构与前端、后端和云计算服务分层架构合并,并加上一些技术说明(技术说明是参照1.2.7小节中的图1.11添加的),就可以得到一个完整的技术架构,如图2.12所示。

2023-01-11 10:37:53 20

原创 阿里P9架构师终于把毕生心血而成的分布式高可用算法笔记开源了

本文尝试以通俗易懂的方式从理论的角度系统性地介绍分布式系统和算法,使读者不仅从算法层面知道诸如共享内存、共识、信号量等分布式抽象背后的工作原理,还知道分布式系统是如何被建模的,进而知道这些算法是怎么来的、为什么是对的、适用场景是什么,为将来自行设计分布式算法打下基础。1初识分布式,介绍什么是分布式系统,分布式算法的用处,以及设计分布式算法面临的主要挑战,让读者对本文所介绍的分布式系统和算法的范围有初步认识。3系统模型,通过本章的学习,读者将掌握设计一个分布式系统主要的关注点。微信公众号获取联系方式。

2023-01-10 11:12:44 128

原创 终于拿到了阿里P8架构师分享的JCF和JUC源码分析与实现笔记java岗

为了帮助大家能够成长未Java高级架构师,小编特意给大家分享了一份技术文档,它就是JCF和JUC源码分析与实现文档,足足607页,能够很大程度的帮助到大家的学习!在上面只是给大家展示了大致的一些内容章节,每个章节里面还有很细化的点,这里就不一一给大家赘述了,因为内容实在是太多了!8月,海南三亚疫情蔓延,全市全区实行封闭式静态管理措施,一座旅游旺季中的热气腾腾的城市,被迫按下了暂停键...除了一线大厂,还有很多规模稍小,但业务能力在快速增长的企业,也可以满足你的高薪和职业发展的需求。

2023-01-10 11:10:50 27

原创 GitHub标星1.6W+的570页JVM垃圾回收文档,助我boss直聘狂拿offer

java内存通常被划分为5个区域:程序计数器(Program Count Register)、本地方法栈(Native Stack)、方法区(Methon Area)、栈(Stack)、堆(Heap)。要想在简历上面写精通JVM的话,不得不提到在GitHub上面标星1.6W+的570页JVM垃圾回收文档!不止在这两个平台上面,几乎所有平台上面都是收费的!这份文档就是“深入探索JVM垃圾回收:ARM服务器垃圾回收的挑战和优化”!精通JVM、JMM模型,精通常见垃圾回收算法、垃圾回收器及JVM调优!

2023-01-10 11:09:02 123

原创 6000字搞不懂大型网站架构技术细节:后端架构数据库分布式事务?

场景二,当数据库中的数据个数超过千万级时,一般都需要进行分库,这也会造成多数据库的数据不一致问题,例如,用户1的余额存在数据库A中,而用户2的余额存在数据库B中,当用户1向用户2转账时,会出现用户1扣除金额成功,而用户2增加金额失败的情况。很多时候,造成场景一的原因,是由于过度设计造成的,即在系统内部划分出很多没必要的独立模块。解决“多数据库的数据不一致问题”的方式被称为分布式事务,确切地说,分布式事务不是某种具体的方式,而是解决“多数据库的数据不一致问题”的方式的统称,分布式事务的实现方式本身是开放的。

2023-01-10 11:07:25 30

原创 10年程序员了竟然不懂大型网站架构技术细节:云计算服务工作原理

由于后端应用程序和云计算服务是多对多的关系,而且云计算服务执行一次任务一般需要较长的时间,即任务发布时可能没有空闲的云计算服务软件(存在任务无法立刻被执行的情况),所以需要在后端应用程序与云计算服务之间添加一个任务池,作为后端应用程序和云计算服务间接通信的枢纽。但是,由于后端应用程序和云计算服务是多对多的关系,后端应用程序直接从云计算服务获取任务进度或中间结果的做法实际上是十分烦琐的,所以需要在后端应用程序与云计算服务之间添加一个进度数据池,作为后端应用程序和云计算服务间接通信的枢纽。

2023-01-10 11:05:53 27

原创 云计算服务架构任务池与指令池的搭建和使用,RabbitMQ消息队列

例如,A消息队列的绑定键是“zoo.#”,B消息队列的绑定键是“*.lily”,路由键是“zoo.tiger.lily”,则A消息队列收到消息,而B消息队列收不到消息,因为B消息队列的绑定键使用的是“*”,只能代表一个单词,而路由键“zoo.tiger.lily”中有三个单词(单词以“.”分割)。为此,RabbitMQ提供了消息路由的模式,生产者程序发送消息时指定交换机和路由键(无须关心具体消息队列名称),交换机收到消息后,根据路由键寻找与之匹配的消息队列并把消息发送到这些消息队列中。

2023-01-10 11:04:08 21

原创 经过两年努力,我终于进入腾讯(PCG事业群4面总结)

我从读书的时候就一直非常喜欢鹅厂,所以就将鹅厂设定为我的大目标,想要去鹅厂工作,那么就要一步一步实现,所以将此分为小目标,阶段性地去达到自己想要的程度。新技术的跟进也是非常快的,在这样的环境中,你的技术成长自然是非常快的。既然要面试大厂,那么相比面试普通公司来说,要付出的东西更多,尤其是花费的时间,一定要腾出一些功夫来刷一刷大厂的面试题,清晰地去了解大厂面试问到哪些技术栈,涉及哪些核心点。如果你的人生起点不高,那么趁早努力。项目中的图片上传如何实现的,如何优化的,底层协议如何设计分片分包?

2023-01-09 10:52:01 43

原创 看,教你手写一个最简单的SpringBoot Starter

所以我们将这些可独立于业务代码之外的功能配置模块封装成一个 Starter,在需要用到此功能模块的项目中,只需要在其 pom.xml 文件中引用依赖即可,SpringBoot 帮我们完成自动装配,而且我们还可以在配置文件中调整 Starter 中默认的配置信息。通过 Starter,能够简化以前繁杂的配置,无需过多的配置和依赖,它会帮你合并依赖,并且将其统一集成到一个 Starter 中,我们只需在 Maven 或 Gradle 中引入 Starter 依赖即可。你可以理解为一个可拔插式的插件(组件)。

2023-01-09 10:47:16 36

原创 海量数据写入——万级并发的订单系统如何分库?

在实际场景里,因为要详细记录用户的提单信息,单个订单记录的数据量均较多,所以不存在行数多但单条数据量小的情况。比如根据业务特点,对无效数据、软删除数据,以及业务上不会再查询的数据进行统一归档,这也是一个成本低、效果明显的方式了。总之,这两种分库的方式,在解决问题的同时又带来了一些新的问题。不管是打车的订单、电商里的支付订单,还是外卖或团购的支付订单,都是后台服务中最重要的一环,关乎公司的营收。的问题,比如出现一个超级客户(如企业客户),购买的订单量非常大,导致某一个分库数据量巨多,就会重现分库前的场景。

2023-01-09 10:44:43 22

原创 RabbitMQ没有延时队列?我就教你一招,玩转延时队列

如果是后者,可能我们队列里面有很多的消息,然后每条消息的过期时间又不一致,这个时候,如果队列出口处堵了很多没有设定过期时间的消息又不被消费的时候,队列后面的消息及时设定了过期时间也不会被丢弃,只有在设定了过期时间的消息到了队列该消费的位置,才会判定。但是它也是一个普通队列,所以它具备普通队列的特性,相比之下,延时的特性就是它最大的特点。使用这种方式,消息即使过期,也不一定会被马上丢弃,因为消息是否过期是在即将投递到消费者之前判定的,如果当前队列有严重的消息积压情况,则已过期的消息也许还能存活较长时间。

2023-01-09 10:43:38 35

原创 在阿里晋升3次,5年拿下P8岗位,这份pdf记录了我的整个成长过程

今年是我在阿里工作刚好满5年,现在已经任职P8了,当然也是刚刚才升P8没多久,实际上在阿里的这5年里,这是我晋升的第3次,身边很多朋友也好奇我是怎么坚持下来的,P5起步,当我到P7的的时候,我就知道我已经迈过一道分水岭了。初入阿里,是P5的位置进去的,当时校招顺利,很快就接到阿里的意向书,最后成功入职阿里。直至今日,我仍然相信自己的努力是值得的,因为我永远都相信,幸运只会降临在有准备的人头上。再识 Java 真面目——简单的Java程序。最流行的Java 开发工具——Eclipse。

2023-01-08 10:49:13 232

原创 面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我?

然后去跳槽,发现,现在的面试这么难的嘛,动不动就底层原理,动不动就源码分析,Java不好做了,做Java的人太多了,我还是转行吧。人人都有大厂梦,对于程序员来说,BAT为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。同样的,我自己的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。你学习了挺久的 Java,对于这门语言有什么认识?

2023-01-08 10:46:57 47

原创 疫情之后,幸获内推,4面京东拿下offer(Java后台研发岗)

幸运的是,刚复工之后,就收到了朋友的消息,有京东内推的机会,问我要不要试一试,虽然说之前的目标是BAT,但根据自己目前情况来说,可能拿个京东也算是不错了,于是着手准备起来。说说自己:实际上我的base并不是太好,本科毕业,没读研,也非985/211,毕业之后就进了一家电商公司做Java,这一呆就呆了整整三年,中途带了团队,也算做了一些事实,所以现在出来面试,在简历上,还是能写出不少项目内容的。说说Java线程池的原理?最后来赠送一波福利,对于从事JAVA开发的人来说,不断学习提升自己的技能是非常重要的。

2023-01-08 10:44:31 22

原创 又熬了一个通宵,肝了满满干货的线程池

这种场景需要执行大量的任务,我们也会希望任务执行的越快越好。I/O密集型和CPU密集型差别很大,不过都跟CPU核心数挂钩的,I/O密集型任务常常需要我们进行线程池参数动态化,所有线程池也非常友好的提供了几个公共方法,供我们动态配置线程池的线程核心数和线程最大数和阻塞队列大小。ctl这个AtomicInteger类型,是对线程池的运行状态和线程池中有效线程的数量进行控制的一个字段, 它同时包含两部分的信息:线程池的运行状态 (runState) 和线程池内有效线程的数量 (workerCount),

2023-01-08 10:42:37 7

原创 布隆过滤器,一文总结快速掌握,你能够get多少?

再者,查询是一个系统最高频的操作,当查询一个数据,首先会先到缓存查询(例如Redis),如果缓存没命中,于是到持久层数据库(mongo,mysql等)查询,发现也没有此数据,于是本此查询失败。对大文件进行hash拆分成小文件,例如拆分成1000个小文件(如果服务器内存更小,则可以拆分更多个更小的文件),比如文件A拆分为A1,A2,A3...An,文件B拆分为B1,B2,B3...Bn。一个元素映射到bit数组的k个位置上是1,删除的时候不能简单的直接置为0,可能会影响其他元素的判断。从而降低了冲突的概率。

2023-01-08 10:40:33 10

原创 线上MySQL读写分离,出现写完读不到问题如何解决?

这样,写操作执行后,就确保从节点已经读取到主节点发送的 binglog 数据,即 Master_Log_File、 Read_Master_Log_Pos 或 Retrieved_Gtid_Set 是最新的,这样才能与执行的相关数据进行对比,判断是否有延迟。上述是默认的异步同步模式,我们发现,从主节点提交成功到从节点同步完成,中间间隔了6,7,8,9,10多个步骤,涉及到一次网络传输,多次文件读取和写入的磁盘 IO 操作,以及最后的 SQL 执行的 CPU 操作。判断无延迟,其他延迟了。

2023-01-08 10:38:59 8

原创 入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

现在大部分的程序员的现状都特别奇怪,自己所掌握的知识是比较零散的,或者对某个知识点只知其表不知其里,其实这都是对自己掌握的技术内容没有进行一个系统的梳理,所以制定计划的第一步就是要梳理好自己的知识体系。关于算法部分,其实要准备的细节内容非常多,所以我也花了不少心思整理了一份关于算法方面的宝典,这份资料我对算法的认识以及我的学习方法,除了Leetcode以外,字节跳动喜欢问的核心算法题也进行一道一道的深度解析。在操作系统中,有高速缓存,主存,虚拟内存,外存,知道它们之间有什么样的关系,以及它们的作用是啥?

2023-01-07 10:58:34 115

原创 九大核心专题,630页内容,熬夜23天吃透,我收割了3个大厂offer

当我们的网站规模比较大时,这个时候,需要考虑的就非常非常多了,就需要各种各样的优化了,例如缓存,分库分表,负载均衡等等,关于网站规模这个问题,其实我也被问过几次,例如我们平时逛知乎时,有时候某个问题会非常热门,一下子上亿热度,面对这种问题,我们会如何出来?MySQL就更不用多说了,数据库不问基本上是不可能的,尤其是现在的互联网公司,基本都是用的MySQL,MySQL问得最多的自然就是索引、锁以及优化方式,当然还可能会问你一些命令,例如查看sql的执行计划,引擎之间的区别,自增主键优缺点,B+树等。

2023-01-07 10:55:02 7

原创 线上MySQL读写分离,出现写完读不到问题如何解决?

这样,写操作执行后,就确保从节点已经读取到主节点发送的 binglog 数据,即 Master_Log_File、 Read_Master_Log_Pos 或 Retrieved_Gtid_Set 是最新的,这样才能与执行的相关数据进行对比,判断是否有延迟。上述是默认的异步同步模式,我们发现,从主节点提交成功到从节点同步完成,中间间隔了6,7,8,9,10多个步骤,涉及到一次网络传输,多次文件读取和写入的磁盘 IO 操作,以及最后的 SQL 执行的 CPU 操作。判断无延迟,其他延迟了。

2023-01-07 10:51:47 13

原创 全面分析战!Redis持久化策略,这么一理顺,才知很简单

子进程在进行 AOF 重写期间, 主进程还需要继续处理命令, 而新的命令可能对现有的数据进行修改, 会出现数据库的数据和重写后的 AOF 文件中的数据不一致。重写是完全安全的,因为当Redis继续附加到旧文件时,一个全新的文件会生成,只需创建当前数据集所需的最少操作集,一旦第二个文件就绪,Redis就会切换这两个文件并开始附加到新文件中。RDB文件非常适合备份。服务器在每执行一个事件就把AOF缓冲区的内容强制性的写入硬盘上的AOF文件里,保证了数据持久化的完整性,效率是最慢的但最安全的;

2023-01-07 10:50:03 10

原创 领略设计模式的魅力,谈谈组合模式搭配访问者模式

有时,将容器和内容作为同一种东西看待,可以很好地帮助我们处理问题,在容器中既可以存放内容,也可以存放小容器,然后在小容器中,又可以继续放入更小的容器。通过上面的代码实现,可以看到ConcreteElement通过accept实现了对访问者动态变更,通过传入不同的访问者实现类不同的操作需求,后期因需求的增加只需增加不同的访问者。我们都知道文件和文件夹的概念,并且文件是可以存放在文件夹中,文件夹中也可以存放其他文件夹。文件夹需要存放文件夹和文件,首先想到的是在文件夹中设计两个集合分别来存放文件夹和文件。

2023-01-07 10:47:40 9

原创 太可惜了,四面字节跳动,我的offer竟被一道“算法题”给拦截了

把第一个字符作为首字符,则 max = 2 (遇到第三个字符 ')' 就匹配不了了) 把第二个字符作为首字符,则 max = 0 (一开始就是 ')',显然啥也匹配不了) 把第三个字符作为首字符,则 max = 0 把第四个字符作为首字符,则 max = 4 ..... 这种做法的时间复杂度为 O(n^2),空间复杂度为 O(1)"(" ,其实我们可以用一个变量来取代栈的,这个变量就记录 "(" 的个数,遇到 "(" 变量就加 1,遇到 ")" 变量就减 1,栈为空就相当于变量的值为 0。

2023-01-06 13:27:03 11

原创 三个步骤,一天就搞定了MySQL,让我顺利拿下了天猫offer

目前大部分的互联网的首选也仍然是MySQL,所以作为一名开发人员,掌握好MySQL的使用是非常有必要的,那么如何能够达到“精通”MySQL的程度,那就需要耗费不少心思了。无论是学习什么知识和技能,学会梳理是非常重要的,对于一个知识的梳理,一方面能够加速记忆,另一方面能够使得脑海知识点的整体更清晰完整,所以我学习MySQL的第一步就是梳理MySQL。MySQL近两年一直稳居第二,随时有可能超过Oracle计晋升为第一名,因为MySQL的性能一直在被优化,同时安全机制也是逐渐成熟,更重要的是开源免费的。

2023-01-06 13:26:04 18

原创 太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

缓存穿透,让我设计一个防止缓存穿透的解决方案,简单的就是存null值,但肯定会深究,可以结合布隆过滤器,设计分布式系统,里面又会问到流量分发到具体过滤器服务的方式,比如一致性hash算法,怎么调用?一般的面试,会被问到JVM原理、多线程、数据结构和算法、高并发、设计模式等内容,这都是一名普通Java开发人员的知识结构,那么阿里P7肯定是需要具备更多的知识树,需要掌握更全面的知识体系,所以就需要对知识进行一个系统的梳理了。一线互联网的面试题,我整理了近三年的,内容还真不少。同步TCC方式,TCC方式原理?

2023-01-06 13:23:26 98

原创 MySQL大无语事件:一次生产环境的死锁事故,看看我怎么排查

事务1: 执行SQL插入第二条 name = test14时 判断是否和插入意向锁{(test10, 10) ~ (test15, 10)}存在冲突, 此时发现事务2占有间隙锁, 那么需要加插入意向锁, 此时进入锁等待, Innodb发现事务1与事务2存在死锁关系, 由于事务2权重小直接回滚释放间隙锁, 事务1加插入意向锁成功, 插入数据(test14, 10)下一键锁(Next-Key Locks),行级锁,RR特有, 是特殊的gap锁,是索引值record锁和gap锁的合体。

2023-01-06 13:20:18 28

原创 异步结果通知实现——基于Redis实现,我这操作很可以

大概逻辑:当首次通知、或通知失败时,设置(重新设置)在 Redis 对应的 Key 的过期时间,Redis 会监听过期事件,发生事件时通知订阅者,订阅者接收到事件,做逻辑处理。所以我们只需要将消息延迟执行的时间戳作为分数值,就能解决上文所说的排序问题,当然由于该结构是 Redis 的基本功能,自然也支持持久化,也就是解决了消息丢失问题。监听容器的刷新事件,创建监听单线程,无限循环阻塞监听队列。相对前一篇内存实现,Redis 这种方式更加的可靠,且在允许一点时间的误差和牺牲一点消息可靠性下,不失为一种。

2023-01-06 13:17:48 18

原创 揭秘通信协议设计的奥妙,作为面试官我都看蒙了

的包,需要跳过这个超长的包,不对其解码,由于数据是陆续到达累积缓存区,并不能一次跳过整个无效包,故需引入 bytesToDiscard 变量,用于记录本次能跳过的字节,当 bytesToDiscard 为 0后表示一个无效包已全部跳过,需要处理正常数据包,此时discardingTooLongFrame 会重置为 false。字节序列,Netty默认使用大端序列(主要是针对int、long等数值类型),所谓的大端序列,通常可以这样理解,接收端收到的字节流的顺序是从数值类型的高字节。

2023-01-06 13:14:46 19

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除