架构
文章平均质量分 80
qq_41534566
这个作者很懒,什么都没留下…
展开
-
基于redis实现的扣减库存
在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。解决方案使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。还是使用数据库,但是将库存分层多份存到多条记录里面,扣减库存的时候路由一下,这样子增大了并发量,但是还是避免不了大量的去访问数据库来更新库存。将库存放到redis使用redis的incrby特性来扣减库存。分转载 2018-01-31 16:33:17 · 21681 阅读 · 7 评论 -
Java架构师技术问答集锦
1 TCP 与 UDP网络层:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议;传输层:TCP协议与UDP协议;应用层:FTP、HTTP、TELNET、SMTP、DNS等协议;HTTP是应用层协议,其传输都是被包装成TCP协议传输。可以用SOCKET实现HTTP。Socket是一组接口,可以实现TCP,也可以实现UDP。在设计模式中,原创 2018-01-24 16:39:37 · 265 阅读 · 0 评论 -
Spring4 + Spring MVC + MyBatis 整合思路
1、Spring框架的搭建这个很简单,只需要web容器中注册org.springframework.web.context.ContextLoaderListener,并指定spring加载配置文件,那么spring容器搭建完成。(当然org.springframework的核心jar包需要引入)当然为了更加易用支持J2EE应用,一般我们还会加上如下:Spring监听HTT转载 2018-01-30 14:37:30 · 115 阅读 · 0 评论 -
保证分布式系统数据一致性的6种方案
在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性?具体业务场景如下,比如一个业务操作,如果同时调用服务 A、B、C,需要满足要么同时成功;要么同时失败。A、B、C 可能是多个不同部门开发、部署在不同服务器上的远程服务。在分布式系统来说,如果不想牺牲一致性,CAP 理论告诉我们只能放弃可用性,这显然不能接受。为了便于讨论问题,先简单介绍下数据一致性的基础理论。原创 2018-01-25 14:49:46 · 225 阅读 · 0 评论 -
微服务架构技术栈选型手册
一、前言2014 年可以认为是微服务 1.0 的元年,当年有几个标志性事件,一是 Martin Fowler 在其博客上发表了”Microservices”一文,正式提出微服务架构风格;二是 Netflix 微服务架构经过多年大规模生产验证,最终抽象落地形成一整套开源的微服务基础组件,统称 NetflixOSS,Netflix 的成功经验开始被业界认可并推崇;三是 Pivotal 将 Ne转载 2018-02-02 14:49:07 · 279 阅读 · 0 评论 -
java动态代理机制--那些让你面试脱颖而出的技能
retrofit是一个解耦性非常高的网络请求框架,最近在研究的时候发现了动态代理这个非常强大且实用的技术,这篇文章将作为retrofit的前置知识,让大家认识:动态代理有哪些应用场景,什么是动态代理,怎样使用,它的局限性在什么地方?#动态代理的应用场景1. AOP—面向切面编程,程序解耦简言之当你想要对一些类的内部的一些方法,在执行前和执行后做一些共同的的操作,而在方法中执行个性化原创 2018-01-26 15:40:31 · 148 阅读 · 0 评论 -
面试必问的volatile,你了解多少?
前言Java中volatile这个热门的关键字,在面试中经常会被提及,在各种技术交流群中也经常被讨论,但似乎讨论不出一个完美的结果,带着种种疑惑,准备从JVM、C++、汇编的角度重新梳理一遍。volatile的两大特性:禁止重排序、内存可见性,这两个概念,不太清楚的同学可以看这篇文章 -> java volatile关键字解惑概念是知道了,但还是很迷糊,它们到底是如何实现的?本转载 2018-01-27 16:27:12 · 334 阅读 · 0 评论 -
MySQL索引和SQL调
MySQL索引MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引。MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。转载 2018-01-29 17:40:58 · 131 阅读 · 0 评论 -
阿里P8的架构实践之Nginx实践
背景介绍: 阿里云,512M内存(最屌丝配置),搭建lamp 环境,除去 mysql分配了100M左右(这个不能再少了),http竟然占用了200多M,太庞大,决定换为较轻量级,高并发的nginx。背景数据如下图所示:系统也就500M ,出了mysql占用的100M, httpd 占了1/2 还多(经常达到十几个进程),剩余50M,有时更少不能忍,经常造成数据库崩掉,写了个自动重启脚本,但觉的不是...原创 2018-02-27 14:37:56 · 606 阅读 · 0 评论 -
保证分布式系统数据一致性的6种方案
在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性?具体业务场景如下,比如一个业务操作,如果同时调用服务 A、B、C,需要满足要么同时成功;要么同时失败。A、B、C 可能是多个不同部门开发、部署在不同服务器上的远程服务。在分布式系统来说,如果不想牺牲一致性,CAP 理论告诉我们只能放弃可用性,这显然不能接受。为了便于讨论问题,先简单介绍下数据一致性的基础理论。强一致当...原创 2018-03-07 15:23:17 · 340 阅读 · 0 评论 -
阿里资深架构师的学习之路
本文要点阅读和理解是不够的,你还需要记住你学的内容。进行主动阅读——你的大脑充分理解这些概念并将它变成你自己的东西。放慢你的大脑,做有创意的笔记,而且反复阅读是没有用的,测验才有效。经常反思你读过的东西并进行联想。管理你的学习队列和“离线存储”(例如书签、印象笔记或者wikis)。“他忘记的比你知道的还要多?”,那个人指的就是我。我成为一名开发者已经三十多年了,忘记过不少知识。但问题是:我现在知道...原创 2018-03-14 19:45:30 · 943 阅读 · 0 评论 -
手写Servlet 到 Spring MVC 的简化之路
背景Servlet和JSP是开发Java Web应用程序的两种基本技术,Spring MVC是Spring框架中用于开发Web应用的一个模块。相信大家也和我一样,是从编写Servelt和JSP开始,然后一步步向Spring MVC靠拢。那么Spring MVC到底简化了Servlet什么地方,使Spring MVC成为Web应用开发的首选框架呢,本文将会就这个方面进行探讨。Servlet简介什么是...原创 2018-03-08 14:48:45 · 520 阅读 · 0 评论 -
蚂蚁金服架构师所了解的Java 9中的GC调优
在经过了几次跳票之后,Java 9终于在原计划日期的整整一年之后发布了正式版。Java 9引入了很多新的特性,除了闪瞎眼的Module System和REPL,最重要的变化我认为是默认GC(Garbage Collector)修改为新一代更复杂、更全面、性能更好的G1(Garbage-First)。JDK的维护者在GC选择上一直是比较保守的,G1从JDK 1.6时代就开始进入开发者的视野,直到今天...原创 2018-02-28 19:53:21 · 769 阅读 · 0 评论 -
从经典架构项目中透析微服务架构的核心概念和充血模型
微服务架构和SOA区别微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢?我们先看相同点:需要Registry,实现动态的服务注册发现机制;需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑;同步调用还是异...原创 2018-03-08 18:37:11 · 299 阅读 · 0 评论 -
京东“狗场”出品——mysql的应用与解析
一个简单的mysql全量备份脚本,备份最近15天的数据。备份1234#每天备份mysql数据库(保存最近15天的数据脚本)DATE=$(date +%Y%m%d)/home/cuixiaohuan/lamp/mysql5/bin/mysqldump -uuser -ppassword need_db > /home/cuixiaohuan/bak_sql/mysql_dbxx_$DATE.s...原创 2018-03-01 14:46:36 · 454 阅读 · 0 评论 -
阿里P9告诉你 Spring Boot 2.0正式发布,升还是不升呢?
Spring帝国Spring几乎是每一位Java开发人员都耳熟能详的开发框架,不论您是一名初出茅庐的程序员还是经验丰富的老司机,都会对其有一定的了解或使用经验。在现代企业级应用架构中,Spring技术栈几乎成为了Java语言的代名词,那么Spring为什么能够在众多开源框架中脱颖而出,成为业内一致认可的技术解决方案呢?我们不妨从最初的Spring Framework开始,看看它为什么能够横扫千军,...原创 2018-03-02 16:10:21 · 2248 阅读 · 0 评论 -
架构师是技术的使用者而不是信徒之解析事件驱动架构
接上篇,我们采用了领域驱动的开发方式,使用了充血模型,享受了他的好处,但是也不得不面对他带来的弊端。这个弊端在分布式的微服务架构下面又被放大。事务一致性事务一致性的问题在Monolithic下面不是大问题,在微服务下面却是很致命,我们回顾一下所谓的ACID原则Atomicity – 原子性,改变数据状态要么是一起完成,要么一起失败Consistency – 一致性,数据的状态是完整一致的Isola...原创 2018-03-10 15:32:57 · 197 阅读 · 0 评论 -
支付宝资深架构师的分布式追踪 & APM 系统 SkyWalking 源码分析— DataCarrier 异步处理库
1. 概述本文主要分享 SkyWalking DataCarrier 异步处理库。基于生产者消费者的模式,大体结构如下图:实际项目中,没有 Producer 这个类。所以本文提到的 Producer ,更多的是一种角色。下面我们来看看整体的项目结构,如下图所示 :2. bufferorg.skywalking.apm.commons.datacarrier.buffer 包,主要包含 Channe...原创 2018-03-03 15:12:46 · 1464 阅读 · 0 评论 -
阿里P8技术专家细究分布式缓存问题
今天给大家整理一篇关于Redis经常被问到的问题:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等概念一、缓存雪崩缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃...原创 2018-03-17 16:44:01 · 892 阅读 · 1 评论 -
JDK解构 - Java中的引用和动态代理的实现
我们知道,动态代理(这里指JDK的动态代理)与静态代理的区别在于,其真实的代理类是动态生成的。但具体是怎么生成,生成的代理类包含了哪些内容,以什么形式存在,它为什么一定要以接口为基础?如果去看动态代理的源代码(java.lang.reflect.Proxy),会发现其原理很简单(真正二进制类文件的生成是在本地方法中完成,源代码中没有),但其中用到了一个缓冲类java.lang.reflect.We...原创 2018-02-25 20:28:10 · 295 阅读 · 0 评论 -
阿里P8架构专家带你透析分布式架构
什么是分布式系统 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能...原创 2018-03-12 17:22:41 · 1041 阅读 · 0 评论 -
专注java分布式架构之Zeppelin不是飞艇
过去的一年多的时间中,大部分的工作都围绕着Zeppelin这个项目展开,经历了Zeppelin的从无到有,再到逐步完善稳定。见证了Zeppelin的成长的同时,Zeppelin也见证了我的积累进步。对我而言,Zeppelin就像是孩提时代一同长大的朋友,在无数次的游戏和谈话中,交换对未知世界的感知,碰撞对未来的憧憬,然后刻画出更好的彼此。这篇博客中就向大家介绍下我的这位老朋友。Zeppelin是一...原创 2018-03-05 16:48:50 · 1066 阅读 · 0 评论 -
阿里P8架构专家的晋升法则(思维方法)
今天我们不谈技术我们谈思维方法,如何让你用同样的时间完成其他程序猿2倍的工作量时间管理大多数人看起来都很忙,但其实很多时候都是瞎忙,本质就是时间利用率太低。时间管理的第一步,是找出一天中自己的高效时段,具体就是用时间日志法,忠实记录每一个小时自己的预期目标、实际完成情况、工作状态,一天结束之后统计。一天工作八小时(当然IT从业者可能是12小时或者更多),高效的时间并不多。书中对高效、低效、休息三种...原创 2018-03-13 16:05:12 · 3745 阅读 · 1 评论 -
一位高级Java程序员教你如何轻松拿到阿里、京东、腾讯的offer
我开始投递简历(世界那么大,我想去外面的世界看看)。这次看机会与往常不同,我决定好好准备一番,然后开始投递简历,主要渠道是 “X钩”,辅助渠道是猎头。这次面试我将所有公司分为三类:A类: BAT公司,非常靠谱,各项待遇都是很优厚的B类:一些知名的互联网公司(基本都在C轮以上),基本很靠谱,该有的都少不了C类:就是那些正在招聘的公司,没啥名气,虽然钱多但是事也多。靠不靠谱真还不知道,只能碰运气面试前...原创 2018-03-13 16:22:35 · 398 阅读 · 0 评论 -
Java 9 和Spring Boot 2.0纷纷宣布支持的HTTP/2到底是什么?
关于HTTP/2,最近你可能没少听到过他,首先,如果你了解过Java 9的特性,那么你会发现在Java9中,提供了新的方式来处理HTTP调用,提供了新的HTTP Client,将替代HttpURLConnection,并提供对WebSocket和HTTP/2的支持。还有前两天刚刚发布的Spring Boot 2.0 的新特性中,也会看到,Spring Boot 2.0支持的Web容器中Tomcat...转载 2018-03-25 19:37:33 · 1127 阅读 · 0 评论 -
Java面试通关要点汇总集及参考答案(不吹不黑耿直福利)
以下是本人从某个视频中归纳出来的答案,感觉牛掰就总结了出来,你们可以到直播间去问管理要高清思维导图和一些实用的技术资料,他们会免费的发给你们,按照他们的说法是建立一个分享、交流、学习的平台,感觉他们太耿直了。反模式设计简单的来说,反模式是指在对经常面对的问题经常使用的低效,不良,或者有待优化的设计模式/方法。甚至,反模式也可以是一种错误的开发思想/理念。在这里我举一个最简单的例子:在面向对象设计/...原创 2018-04-01 19:47:42 · 1287 阅读 · 1 评论 -
一个高逼格开发者必须理解的大型分布式网站的几点概念
本文部分来自网络大牛总结,本人只是技术的搬运工,欢迎转发,如果感觉那里归纳的不足可以在评论区发表自己的看法1. I/O优化增加缓存,减少磁盘的访问次数。优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。设计合理的磁盘存储数据块,以及访问这些数据库的策略,这是在应用层面考虑的。例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以...原创 2018-04-15 14:15:34 · 306 阅读 · 0 评论 -
每分钟访问10万+,11种策略教你保持亿级流量网站稳定性!
稳定性在大型网站运行中至关重要,面对每分钟 10 万次的网络访问,稍有不慎就会引起重大故障。今天这篇文章一起讨论下亿级流量网站在稳定性方面的一些做法,希望对您有帮助。基础策略配置化配置化就是把很多业务流程相关的数据统一放在一个配置平台上,从代码中抽离出来,使得代码仅处理通用的业务逻辑。配置化之后,代码拥有处理所有场景的能力,通过配置数据来决定线上运行时具体操作什么样的数据。配置化的设计使得我们能够...原创 2018-04-16 17:48:03 · 415 阅读 · 2 评论 -
京东架构专家分享京东架构之路(你和高薪架构师差的不是年龄)
京东咚咚架构演进咚咚是什么?咚咚之于京东相当于旺旺之于淘宝,它们都是服务于买家和卖家的沟通。 自从京东开始为第三方卖家提供入驻平台服务后,咚咚也就随之诞生了。 我们首先看看它诞生之初是什么样的。1.0 诞生(2010 - 2011)为了业务的快速上线,1.0 版本的技术架构实现是非常直接且简单粗暴的。 如何简单粗暴法?请看架构图,如下。1.0 的功能十分简单,实现了一个 IM 的基本功能,接入、互...原创 2018-04-11 16:05:47 · 4980 阅读 · 0 评论 -
BAT等大型互联网公司的网站架构演化历程
大型网站系统的特点高并发,大流量需要面对高并发用户,大流量访问。Google 日均 PV 35 亿,日 IP 访问数 3 亿;腾讯 QQ 的最大在线用户数 1.4 亿(2011年数据)。高可用系统 7 x 24 小时不间断服务。海量数据需要存储、管理海量数据,需要使用大量服务器。Facebook 每周上传的照片数量接近 10 亿,百度收录的网页数目有数百亿,Google 有近百万台服务器为全球用户...转载 2018-04-12 17:15:18 · 840 阅读 · 0 评论 -
专研JVM的个人理解以及整理——自动内存管理机制
java虚拟机所管理的内存区域划分为堆,方法区,虚拟机栈,本地方法栈,程序计数器。每个虚拟机栈中有一个私有的程序计数器,程序计数器占用很小的一块内存,在执行一个java方法时,记录正在执行的虚拟机字节码的地址。虚拟机栈中有一个栈帧,用于存放局部变量表,操作数栈,动态链表,方法出口等。1. Java内存区域与内存溢出异常1.1. 运行时数据区域(1) 程序计数器:程序计数器用来记录当前线程执行的字节...原创 2018-04-18 16:09:26 · 301 阅读 · 0 评论 -
资深架构师关于数据库管理系统索引技术的概述
数据库管理系统索引技术概述2018年4月23日 Wray Zheng9文章目录为什么需要索引?索引中的一些概念索引如何提高查询效率?索引的分类稀疏索引与稠密索引主索引与辅助索引聚簇索引和非聚簇索引总结为什么需要索引?我们知道,磁盘的读写效率是比较低的,以传统机械硬盘为例,读写时涉及到读写头的寻道和定位,这部分时间开销可能比实际读写数据时所花的时间还要长。即使是固态硬盘,由于数据的存储可能是散落在各...原创 2018-04-23 17:42:46 · 241 阅读 · 0 评论 -
国外的程序猿可以工作到退休而国内的为什么这么短命(思维认知)
首先我想说明的是国外的程序猿也存在加班,他们也要赶项目,所以加班不算什么原因。真正的原因是我们国内的很大一部分程序猿只是工具的使用者,不会去思考工具的产生和原理,用惯了一个高效的工具就被这个工具套牢成为奴隶,而国外的程序猿跟多的会去思考和专研这个工具的产生和原理,然后可能会自己优化出个2.0之类的。然后到了中年往工具开发这一块走,我们更多的是往管理、服务业、转行等方面发展。只能说我们的创新氛围还是...原创 2018-04-19 17:42:55 · 513 阅读 · 0 评论 -
大型互联网公司微服务架构进化史
一、微服务架构介绍微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。概念:把一个大型的单个应用程序和服务拆分为数个甚至数...原创 2018-05-08 22:36:30 · 1034 阅读 · 0 评论 -
Java编程学习六大关键你知道吗?
Java的学习比较复杂,在相关的一系列平台、规范和协议上。有经验的Java程序员都知道,只掌握了Java语言本身很难开发应用程序。撇开这些复杂的概念不谈,从初学者的角度,对于Java语言本身的学习给出几点见解和建议。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话...转载 2018-05-02 21:34:48 · 240 阅读 · 0 评论 -
基于Spring Boot和Spring Cloud实现微服务架构
谈及微服务,作为当前主流的企业框架Spring,它提供了一整套相关的顶级项目,能让开发者快速的上手实现自己的应用,今天就介绍下Spring旗下各个顶级项目。前言首先,最想说的是,当你要学习一套最新的技术时,官网的英文文档是学习的最佳渠道。因为网上流传的多数资料是官网翻译而来,很多描述的重点也都偏向于作者自身碰到的问题,这样就很容易让你理解和操作出现偏差,最开始我就进入了这样误区。官网的技术导读真的...原创 2018-05-02 21:45:36 · 268 阅读 · 0 评论 -
今天我们来聊聊java开发者的基础应用(下层基筑决定上层高度)
一、命名风格【强制】类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion【强制】方...原创 2018-04-21 16:22:58 · 477 阅读 · 0 评论 -
请拿出30分钟钻研此文,系统掌握java面试题分析技巧
谈一谈对MySQL InnoDB的认识介绍:InnoDB引擎是MySQL数据库的一个重要的存储引擎,和其他存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(有外键)等。现在Innobase实行双认证授权.MySQL5.5.5以后默认的存储引擎都是InnoDB引擎。特点是:1、具有较好的事务支持:支持4个事务隔离级别,支持多版本读2、行级锁定...原创 2018-05-03 16:42:02 · 197 阅读 · 0 评论 -
阿里资深架构师告诉你为什么Java中只有值传递
对于初学者来说,要想把这个问题回答正确,是比较难的。在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂。所以,就有了我写这篇文章的初衷。这篇文章中,我从什么是方法的实际参数和形式参数开始,给你讲解为什么说Java中只有值传递。辟谣时间关于这个问题,在StackOverflow上也引发过广泛的讨论,看来很...原创 2018-05-10 21:12:52 · 188 阅读 · 0 评论 -
阿里项目的高可用Mongodb集群部署
数据副本MongoDB中的一组副本是一群mongod进程,这些进程维护同样的数据集。副本集提供了冗余和高可用性,是生产环境部署的基础。数据冗余和可用性通过在不同的服务器上存储相同的数据,副本机制保证了一定程度的容错,即在一个数据库挂掉后,数据服务仍然可用。在某些情况下,副本可以提升数据的读性能,因为用户可以从不同的数据库读取数据。在不同的数据中心维护数据的拷贝,能够提高分布式应用程序的可用性。也可...原创 2018-05-13 16:43:52 · 467 阅读 · 0 评论