数据结构
代码让人狂
十余年工作经验,精通Java和Android架构知识。
展开
-
目睹了阿里技术官写的Tomcat架构笔记后,瞬间觉得自己是渣渣
前言:有很多初级程序员会把Tomcat仅仅当做一个工具,而忽略了它的重要性。对于一个最简单的Web项目架构来说,Tomcat是前军,SSM是中军,Mysql是后方,而我们通常非常重视SSM框架的学习,而忽略Tomcat,如果能够多懂得关于Tomcat的底层原理知识,那么对于日常开发工作或项目性能调优是非常重要的。所以,对于Tomcat,正是因为它足够强大和优秀才容易被我们忽视。工欲善其事必先利其器,如果我们能真正掌握Tomcat的底层原理,那么将会有很大收获。小编以前以为自己对Tomcat的了解以是够明原创 2020-08-26 14:25:06 · 256 阅读 · 0 评论 -
不愧是阿里资深架构师,一本“分布式架构笔记”都能写得如此透彻
前言:任何的服务器的性能都是有极限的,面对海量的互联网访问需求,是不可能单靠一台服务器或者一个CPU来承担的。所以我们一般都会在运行时架构设计之初,就考虑如何能利用多个CPU、多台服务器来分担负载,这就是所谓分布的策略。分布式的服务器概念很简单,但是实现起来却比较复杂。因为我们写的程序,往往都是以一个CPU,一块内存为基础来设计的,所以要让多个程序同时运行,并且协调运作,这需要更多的底层工作。而Alibaba作为国内互联网行业的天花板,很多优秀的开源项目都是阿里大佬分享出来的,因此今天就跟大家分享一份连原创 2020-08-21 21:46:02 · 343 阅读 · 0 评论 -
2020最新最全阿里内推830道Java岗面试题合集,BATJ都有问到
小小叹语: 2020已过半,你是否对你现在的生活状态有满足感呢?逝去日子经过多少风雨波折才有今天的成就,只有努力向上不断闯断,热爱竟逐每秒每分钟,才能拥有的更多。而对于一个程序员来说,金三银四已经过去,秋招也已远走,如果说你是想要在互联网行业找份更钟意的工作或是已有自己心仪的大厂想准备跳槽的,除去内推的机会就只有在即将来临的金九银十当中大展身手了,但是机会是留给有准备的人的,多学习,学多方面知识点相信总归只有好处的,今天小编分享的正是阿里高级架构师内推的Java岗…道经典面试题解析,希望能帮助到即将要找工原创 2020-08-20 13:53:35 · 160 阅读 · 1 评论 -
最全Java面试596题:算法+缓存+TCP+JVM+搜索+分布式+数据库
JAVA基础JAVA中的几种基本数据类型是什么,各自占用多少字节。String类能被继承吗,为什么。String,Stringbuffer,StringBuilder的区别。ArrayList和LinkedList有什么区别。讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候,他们的执行顺序。用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容原创 2020-08-19 21:35:37 · 177 阅读 · 0 评论 -
MySQL 三万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)
一、MySQL架构和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。连接层:最上层是一些客户端和连接服务。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它原创 2020-08-19 16:21:48 · 264 阅读 · 1 评论 -
字节大神熬夜整理MyBatis+Redis+Kafka+spring源码与实战技术齐飞
前言:相信大家都清楚作为 Java 程序员,每天都在跟开源项目打交道,几乎每个项目都会引入开源项目,比如我们常用的 Web 容器 Spring、Spring Boot,数据库 MySQL 等。这些开源项目也因为被更多的人使用,不断的在优化完善,经过多年的沉淀,都变成了经典。小编认为不管当前我们处于什么编程水平,都应该尝试着阅读技术源码。理由有以下三点,也可以说是三点好处:1、应对面试,拿到更好的 offer2、跟大师学习,提升自己3、解决开发中的疑难杂症但是阅读源码并不是一件简单的事情,可能在刚原创 2020-08-08 11:16:21 · 170 阅读 · 0 评论 -
阿里P7告诉你什么是java并发包、线程池、锁
并发包java.util.concurrent从jdk1.5开始新加入的一个包,致力于解决并发编程的线程安全问题,使用户能够更为快捷方便的编写多线程情况下的并发程序。同步容器同步容器只有包括Vector和HashTable,相比其他容器类只是多用了Synchronize的技术Vector与ArrayList区别1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的原创 2020-08-07 17:28:52 · 133 阅读 · 0 评论 -
Kubernetes+Docker+Jenkins自动化部署实践与技术(硬核干货分享)
只有实践了才能对其有深入理解,所谓“纸上得来终觉浅,绝知此事要躬行”,本文从实践角度介绍如何结合我们常用的Docker与Jenkins,通过K8s来实现项目的自动化部署。Kubemetes 是什么?首先,它是一个全新的基于容器技术的分布式架构领先方案。这个方案虽然还很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果。确切地说,Kubernetes是谷歌严格保密十几年的秘密武器——Borg的一个开源版本。k8s孕育的初衷是培育出一个组件及工具的生态,帮助大家减轻在公有云及私有云上原创 2020-08-07 11:22:12 · 914 阅读 · 0 评论 -
阿里P8架构师对性能调优的神级操作,让MySQL性能提升了数百倍
本文投稿作者:王小壮最近有小部分同学找到了工作, 但大部分以外包或中小型企业工作为主, 其中有同学跟我反应道:2020年JAVA人才需要饱和, 很多企业停招Java人才…而我想说的是: Java每年有几百万人入行, 竞争确实很大,但目前国内90%以上程序员干的活是流水线CRUD, 从专业角度来看并无技术含量, 2020有资质的IT企业不缺CRUD程序员,所以只有外包公司要你…有没有感觉一股淡淡的忧伤.我认为: 在Java的技术生态圈里, 高并发架构选型/JUC并发包/幂等性/性能调优/并发线程/架构设原创 2020-07-30 19:34:17 · 147 阅读 · 0 评论 -
Java岗四面拿到了阿里Offer,却选择了字节跳动(面试真题分享)
话不多说,直上面试过程:阿里一面自我介绍TCP与UDP的区别TCP三次握手说一下(把流程说一遍,这里以为会继续问为什么不是两次或者四次,结果没有)看你项目用到线程池,说一下线程池工作原理,任务拒接策略有哪几种进程和线程的区别ArrayList与LinkedList的区别线程安全与非线程安全集合说一下,底层怎么实现的(hashmap,concurrenthashmap)数据库事务隔离级别说一下synchronized和lock区别,可重入锁与非可重入锁的区别说说悲观锁和乐观锁的区别手原创 2020-07-29 20:31:45 · 889 阅读 · 0 评论 -
因为命名被主管diss无数次。简单聊聊编程最头疼的事情之一:命名
编程过程中,有太多太多让我们头疼的事情了,比如命名、维护其他人的代码、写测试、与其他人沟通交流等等。就连世界级软件大师 Martin Fowler 大神都说过 CS 领域有两大最难的事情,一是缓存失效,一是程序命名(@ martinfowler.com/bliki/TwoHa…)。今天 Guide 就单独拎出 “命名” 来聊聊,据说之前在 Quora 网站,由接近 5000 名程序员票选出来的最难的事情就是“命名”。这篇文章配合我之前发的 《编码 5 分钟,命名 2 小时?史上最全的 Java 命名规原创 2020-07-28 19:21:51 · 234 阅读 · 0 评论 -
优秀的程序员是如何利用工具来提升工作效率的?
背景本篇文章将重点介绍一些可以提高程序猿工作效率的一些软件和工具及相关配置(主要还是针对 Mac)。Mac built-in首先介绍的就是我觉得应该熟悉 Mac 内置的一些软件及配置。trackpad 配置启用 Tap to click: 在 System Preferences -> Trackpad 中启用, 用 tap 替换 click 的操作,明明轻轻 tap 就可以完成的, 为何还要用力点击才 OK。现在偶尔用其他人电脑原创 2020-07-28 16:19:02 · 308 阅读 · 0 评论 -
RabbitMQ都写了,RocketMQ怎么能不跟上脚步
整体架构最近看到了我在Github上写的rabbitmq-examples陆续被人star了,就想着写个rocketmq-examples。对rabbitmq感兴趣的小伙伴可以看我之前的文章。下面把RocketMQ的各个特性简单介绍一下,这样在用的时候心里也更有把握RocketMQ是阿里自研的消息中间件,RocketMQ的整体架构如下主要有4个角色Producer:消息生产者。类似,发信者 Consumer:消息消费者。类似,收信者 BrokerServer:消息的存储,投递,查询。类似,邮局原创 2020-07-28 14:09:58 · 138 阅读 · 0 评论 -
拼多多面试官没想到ThreadLocal我用得这么溜,回答无死角
开场白张三最近天气很热心情不是很好,所以他决定出去面试跟面试官聊聊天排解一下,结果刚投递简历就有人约了面试。我丢,什么情况怎么刚投递出去就有人约我面试了?诶。。。真烦啊,哥已经不在江湖这么久了,江湖还是有哥的传说,我还是这么抢手的么?太烦恼了,帅无罪。暗自窃喜的张三来到了某东现场面试的办公室,我丢,这面试官?不是吧,这满是划痕的Mac,这发量,难道就是传说中的架构师?张三的心态一下子就崩了,出来第一场面试就遇到一个顶级面试官,这谁顶得住啊。你好,我是你的面试官Tony,看我的发型应该你能猜到我转载 2020-07-27 22:22:23 · 514 阅读 · 1 评论 -
一款直击痛点的优秀http框架,让我超高效完成了第三方接口的对接
1.背景因为业务关系,要和许多不同第三方公司进行对接。这些服务商都提供基于http的api。但是每家公司提供api具体细节差别很大。有的基于RESTFUL规范,有的基于传统的http规范;有的需要再header里放置签名,有的需要SSL的双向认证,有的只需要SSL的单向认证;有的以JSON 方式进行序列化,有的以XML方式进行序列化。类似于这样细节的差别太多了。不同的公司API规范不一样,这很正常。但是对于我来说,我如果想要代码变得优雅。我就必须解决一个痛点:不同服务商API那么多的差异点,如何才能维原创 2020-07-22 21:21:16 · 230 阅读 · 0 评论 -
RocketMQ保证高可用和高性能的几种措施
整体架构rocketmq是通过broker主从机制来实现高可用的。相同broker名称,不同brokerid的机器组成一个broker组,brokerId=0表明这个broker是master,brokerId>0表明这个broker是slave。消息生产的高可用:创建topic时,把topic的多个message queue创建在多个broker组上。这样当一个broker组的master不可用后,producer仍然可以给其他组的master发送消息。 rocketmq目前还不支持主从切换,原创 2020-07-20 21:55:05 · 1079 阅读 · 1 评论 -
手把手带你玩转k8s-jenkins安装与流水线
前言本系列教程最主要的目地是使用k8s做持续集成,从本文开始,才算是正式进入主题。环境安装如果使用的是阿里云Kubernetes集群 ,可以安装其 ack-jenkins应用。5分钟在阿里云Kubernetes服务上搭建jenkins环境并完成应用构建到部署的流水线作业为了通用性,这里并没有使用ack-jenkins,而是使用官方的 jenkinsci/blueocean镜像。jenkins中文官网因为后面要讲的jenkins内容需要联网,但是之前购买的服务器是没有绑定公网ip的,这里也不想原创 2020-07-17 15:28:51 · 306 阅读 · 0 评论 -
spring oauth2如何获取当前登录用户信息
使用spring oauth2框架做授权鉴定。想获取当前用户信息怎么办?我们知道spring oauth2是基于spring security的实现的。spring security可以通过SecurityContextHolder.getContext().getAuthentication().getPrincipal()获取到当前用户信息。而spring oauth2通过SecurityContextHolder.getContext().getAuthentication().getPrinc原创 2020-07-17 10:36:42 · 7118 阅读 · 6 评论 -
忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法
今天我们来拆解 Snowflake 算法,同时领略百度、美团、腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法。这还不够,我们会讨论到全局唯一 ID 服务的分布式 CAP 选择与性能瓶颈。已经熟悉 Snowflake 的朋友可以先去看大厂的设计和权衡。百度 UIDGenertor:github.com/baidu/uid-g…美团 Leaf:tech.meituan.com/2017/04/21/…腾讯 Seqsvr: www.infoq.cn/a原创 2020-07-12 20:28:36 · 678 阅读 · 0 评论 -
十次面试经历后耗时30天收集整理这神仙面试宝典,阿里P7不再是梦(Java岗专题)
小编最近花费了将近一个月的时间把最近的多次面试经历整理成了一本号称【神仙面试宝典】。宝典分为25大专题讲述 ,已助多位朋友拿到大厂Offer,而本人经过多日的沉淀与忘我的复习也拿到了阿里的Offer。我们一起来学习吧:专题一:JavaOOP面试题专题二:Java集合/泛型面试题专题三:Java中的IO与NIO面试题专题四:Java反射面试题专题五:Java序列化面试题专题六:Java注解面试题专题七:多线程&并发面试题专题八:JVM面试题专题九:Mysql面试题专题十:Redi原创 2020-07-10 14:10:19 · 357 阅读 · 0 评论 -
阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧
内存分配机制逐步分析类加载检查:虚拟机遇到一条new指令(new关键字、对象的克隆、对象的序列化等)时,会先去检查这个指令的参数在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否应被加载过,如果没有那么就去加载该类分配内存类加载完毕后会给对象分配内存空间。对象的所需的内存大小在类加载完毕后就便可完全确认,为对象分配内存大小的空间等同于把一块确定大小的内存从java堆中划分出来。如何划分内存?指针碰撞(默认使用指针碰撞):如果java堆内存是绝对规整的,那么会把所有用过的内存放在一原创 2020-07-08 21:43:15 · 298 阅读 · 0 评论 -
直到公司来了位前阿里P8大牛,我才知道Tomcat还可以这样用
作为Java开发人员,大多都对Tomcat不陌生,由Apache基金会提供技术支持与维护,因为其免费开源且易用,作为Web服务器深受市场欢迎,所以大家更有必要对其进行深入的研究,而小编之前也还是对Tomcat一知半解,直到公司部门主管换成了前阿里P8大牛后,我才知道Tomcat原来有这么多的玩法。 经过多日终于把这位有着十年工作经验的阿里大牛对Tomcat的总结整理成了完整的文档,现在分享给大家,希望能帮到更多爱学习的人,让更多的人涨更多的知识。我们先来看看Tomcat的顶层结构图:话不多说 直上目录原创 2020-07-08 14:59:51 · 296 阅读 · 0 评论 -
太厉害了!腾讯T4大牛熬夜把Docker实战整理成了PDF文档
Docker如日中天,这不是单纯的炒概念,Docker确确实实解决了开发与运维的痛点,因此在企业开发中得到了非常广泛的使用。Docker是一个开放源代码软件项目,让应用程序部署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一-个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。腾讯T4大牛每天熬夜到凌晨三四点,熬了半个多月写了一份Docker实战的详细教程整理成文档,相信看完这份教程之后你对Docker会有更深入的了解。由于文档内容过多,为了避免影响到大家的阅读体验,在此原创 2020-07-07 19:33:31 · 226 阅读 · 0 评论 -
有了这份MySQL调优笔记,再也不怕面试官的拷问了(附Java岗面试题)
作为一名编程人员,MySQL 是工作上最常用的关系型数据库之一。但随着移动互联网的高速发展,集群架构已经成为主流趋势,对于数据库的高并发,高可用等指标的要求也越来越高。应聘者是否具备相应的底层机制和原理的驾驭能力,成为了互联网公司筛选人才的重要考核标准。如果只停留在建库、创表、增删查改等基本操作的水平,迟早会被企业淘汰掉。今天这份最全的MySQL调优笔记总结,助你向大厂“开炮”,面试不再被MySQL难倒。MySQL思维脑图MySQL思维脑图一 基础篇:(由于分享笔记内容过多,知识内容比较全面,篇幅受原创 2020-07-07 19:11:33 · 1037 阅读 · 0 评论 -
Spring Boot 在启动时进行配置文件加解密
Spring Boot Application 事件和监听器寻找到application.yml的读取的操作。从spring.factories 中查看到# Application Listenersorg.springframework.context.ApplicationListener = \ org.springframework.boot.context.config.ConfigFileApplicationListener, \ConfigFileApplicationL转载 2020-07-06 16:27:36 · 481 阅读 · 0 评论 -
「Spring源码」Spring IOC 容器源码分析(一)
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。本文采用的源码版本是 4.3.11.RELEASE,算是 5.0.x 前比较新的版本了。为了降低难度,本文所说的所有的内容都是基于 xml 的配置的方式,实际使用已经很少人转载 2020-07-01 15:00:14 · 178 阅读 · 0 评论 -
面试官这样问Java 线程池,我的回答让他竖起了大拇指!
这周我投递出了简历,岗位是java后端开发工程师。这周美团面试官给我进行了面试。面试过程中他问了线程池,今天详细讲一讲 Java 线程池 。线程池线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。start()创建一定数量的线程池,进行线程循环stop()停止所有线程循环,回收所有资源addTask()添加任务复制代码Excutors创建线程池便捷方法如下:Executors.newFixedThreadPoo转载 2020-06-30 22:43:09 · 144 阅读 · 0 评论 -
只知道 Nginx 牛逼,却不知道它怎么支持百万并发?
Nginx是一个免费的,开源的,高性能的HTTP服务器和反向代理。以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。Nginx是一个Web服务器,也可以用作负载均衡器和HTTP缓存。很多高知名度的网站都使用Nginx,比如:Netflix,GitHub,SoundCloud,MaxCDN等。1.Nginx的整体架构1.1.主进程Nginx启动时,会生成两种类型的进程,一个是主进程(master),一个(windows版本的目前只有一个)或多个工作进程(worker)。主进程并不处理网转载 2020-06-29 16:51:18 · 712 阅读 · 1 评论 -
面试官:谈谈你对Spring AOP的了解?请加上这些内容,绝对加分!
众所周知,一旦提到AOP,相信大家都是条件反射的想到JDK代理和CGLib代理,没错,这两个代理都是在运行时内存中临时生成代理类,故而又称作运行时增强——动态代理。世间万物都不是绝对的,既然有动态代理,那么,是否有想过:是不是存在静态代理呢?二、LTW(Load Time Weaving)其实,除了运行时织入切面的方式外,我们还有一种途径进行切面织入,它可以在类加载期通过字节码转换,进而将目标织入切入点(目标类),这种方式就是LTW,即静态代理(静待代理也被称作编译时增强,后面会有相关代码样例)。LT转载 2020-06-28 17:19:58 · 102 阅读 · 0 评论 -
你认为分布式锁用 Redis 还是 Zookeeper?
为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场景:系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。由于系统有一定的并发,所以会预先将商品的库存保存在redis中,用户下单的时候会更新redis的库存。此时系统架构如下:但是这样一来会产生一个问题:假如某个时刻,redis里面的某个商品库存为1,此时两个请求同时到来,其中一个请求执行到上图的第3步,更新数据库的库存为0,但是第4步还没有执行。转载 2020-06-24 11:02:21 · 223 阅读 · 0 评论 -
为什么互联网大厂都愿意用Mybatis?MyBatis缓存特性你了解吗?
一、缓存简介一般我们在系统中使用缓存技术是为了提升数据查询的效率。当我们从数据库中查询到一批数据后将其放入到混存中(简单理解就是一块内存区域),下次再查询相同数据的时候就直接从缓存中获取数据就行了。这样少了一步和数据库的交互,可以提升查询的效率。但是一个硬币都具有两面性,缓存在带来性能提升的同时也“悄悄”引入了很多问题,比如缓存同步、缓存失效、缓存雪崩等等。当然这些问题不是本文讨论的重点。本文主要讨论MyBatis缓存这个比较鸡肋的功能。虽然说MyBatis的缓存功能比较鸡肋,但是为了全面了解MyBa转载 2020-06-23 20:26:38 · 274 阅读 · 0 评论 -
号称JVM 史上最最最完整深入解析
Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧转载 2020-06-23 15:18:24 · 157 阅读 · 0 评论 -
Spring Boot 2.3 新特性配置文件属性跟踪
背景当我们使用 spring boot 在多环境打包,配置属性在不同环境的值不同,如下:spring: profiles: active: @project.profile@ #根据maven 动态配置profile---spring: profiles: devdemo: lengleng_dev---spring: profiles: prddemo: lengleng_prd复制代码或者使用 spring cloud 配置中心 (nacos/config)等转载 2020-06-22 16:51:18 · 109 阅读 · 0 评论 -
涨姿势,Java中New一个对象是个怎么样的过程?
在语言层面创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(普通Java对象,不包括数组和Class对象等)的创建是一个怎么样的过程?一、对象的创建当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能在常量池中能否定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生的对象分配内存。对象所需的内存的大小在类加载完成后便可以完全确定,为对象分配空间的任务等转载 2020-06-19 20:35:37 · 207 阅读 · 0 评论 -
阿里巴巴为什么不用 ZooKeeper 做服务发现?
站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头,例如如果当年某事提前发生了,而另外一件事又没有发生会怎样?一如当年的奥匈帝国皇位继承人斐迪南大公夫妇如果没有被塞尔维亚族热血青年普林西普枪杀会怎样,又如若当年的丘老道没有经过牛家村会怎样?2008 年底,淘宝开启一个叫做“五彩石”的内部重构项目,这个项目后来成为了淘宝服务化、面向分布式走自研之路,走出了互联网中间件体系之始,而淘宝服务注册中心 ConfigServer 于同年诞生。2008 年前后,Yahoo 这个曾经的互转载 2020-06-19 16:29:13 · 150 阅读 · 0 评论 -
Spring Boot 在启动时进行配置文件加解密
Spring Boot Application 事件和监听器寻找到application.yml的读取的操作。从spring.factories 中查看到# Application Listenersorg.springframework.context.ApplicationListener = \ org.springframework.boot.context.config.ConfigFileApplicationListener, \ConfigFileApplicationL转载 2020-06-18 21:36:41 · 851 阅读 · 0 评论 -
前台与后台,为什么要分离?
如果你经历过快速迭代业务,经历过用户量不断上涨,经历过访问并发越来越大,你一定会遇到以下系统问题:用户访问页面越来越慢系统性能下降,数据库扛不住,连接数经常打满,最终数据库挂掉,重启后又快速挂掉改了一个小地方,另外一个看似不相干的地方却挂了,严重耦合遇到上述痛点,经常使用“前台与后台分离”的架构优化方案。业务早期,最常见的场景是什么?虚拟一个类似于“AJK”租房买房的业务场景,这个业务的数据有两大来源:用户发布的数据爬虫抓取来的数据这个业务对应的系统有两类使用者:普通用户,浏览转载 2020-06-17 17:28:15 · 789 阅读 · 0 评论 -
Java并发编程框架Disruptor
Disruptor是什么?Disruptor是一个高性能的异步处理框架,一个轻量级的JMS,和JDK中的BlockingQueue有相似处,但是它的处理速度非常快,获得2011年程序框架创新大奖,号称“一个线程一秒钟可以处理600W个订单”(这有点吓人吧),并且Disruptor不仅仅只有buffer,它提供的功能非常强大,比如它可以帮助我们轻松构建数据流处理(比如一个数据先交给A和B这2个消费者并行处理后再交给C处理,是不是有点想起storm这种流处理,实际上strom的底层就是应用了disruptor原创 2020-06-12 19:14:55 · 450 阅读 · 0 评论 -
MySQL数据库架构和同步复制流程
在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的。首先我们来说说数据库的架构。1、mysql主从架构,如图:这种架构基本上90%以上会采用的数据库架构。这种架构的 优点: 1、数据库架构简单 2、维护方便 缺点: 1、master存在单点问题,不能停机维护 2、读压力大slave过多的话,主从同步会影响master的性能2、Dual Master 复制架构上面的主从架构存在明显的单点master问题,master不能停原创 2020-06-09 21:27:54 · 186 阅读 · 0 评论 -
啃透这500页高并发笔记薪资涨了20K,并连收腾讯美团等5个Offer
我们知道,高并发是指运用设计手段让系统能够处理更多的用户并发请求,也就是承担更大的流量。高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。它是一切架构设计的背景和前提,脱离了它去谈性能和可用性是没有意义的。很显然嘛,你在每秒一次请求和每秒一万次请求,两种不同的场景下,分别做到毫秒级响应时间和五个九(99.999%)的可用性,无论是设计难度还是方案的复杂度,原创 2020-06-10 22:40:42 · 185 阅读 · 0 评论