首页 文章 精选 留言 我的

精选列表

搜索[阿里云],共10000篇文章
优秀的个人博客,低调大师

每秒7亿次请求,阿里新一代数据库如何支撑?

作者 | 正研 2019年以来,Lindorm已经服务了包括淘宝、天猫、蚂蚁、菜鸟、妈妈、优酷、高德、大文娱等数十个BU,在今年的双十一中,Lindorm峰值请求达到了7.5亿次每秒,天吞吐22.9万亿次,平均响应时间低于3ms,整体存储的数据量达到了数百PB。 这些数字的背后,凝聚了HBase&Lindorm团队多年以来的汗水和心血。Lindorm脱胎于HBase,是团队多年以来承载数百PB数据,亿级请求量,上千个业务后,在面对规模成本压力,以及HBase自身缺陷下,全面重构和引擎升级的全新产品。相比HBase,Lindorm无论是性能,功能还是可用性上,都有了巨大飞跃。本文将从功能、可用性、性能成本、服务生态等维度介绍Lindorm的核心能力与业务表现,最后分享部分我们正在进行中的一些项目。 极致优化,超强性能 Lindorm

优秀的个人博客,低调大师

上次阿里面试问到Redis主从复制原理,这次终于搞明白了!

1.前言 Redis单节点存在单点故障,为解决单点问题,需要对Redis节点配置从节点。使用哨兵来监听主节点存活状态,若主节点挂掉,从节点能继续提供缓存功能。从节点怎样和主节点间完成数据传递?就是Redis的主从复制。 2. 主从配置及作用 临时配置:redis-cli进入redis从节点后,使用 --slaveof [masterIP] [masterPort]永久配置:进入从节点的配置文件redis.conf,增加slaveof [masterIP] [masterPort]作用:1)主从配置结合哨兵模式能解决单点故障问题,提高redis可用性2)从节点仅提高读的操作,主节点提供写操作。对于读多写少的状况,可给主节点配置多个从节点,从而提供响应效率补充:主从复制并不是redis的横向拓展,集群模式才是 3. 复制过程 1)从节点执行slaveof [masterIP] [masterPort],保存主节点信息2)从节点中的定时任务发现主节点信息,建立和主节点的socket连接3)从节点发送Ping信号,主节点返回Pong,两边能互相通信4)连接建立后,主节点将所有数据发送给从节点(数据同步)5)主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性 4. 数据同步 redis 2.8 之前使用sync [runId] [offset]同步命令,redis2.8之后使用psync [runId] [offset]命令。两者不同在于,sync命令仅支持全量复制过程,psync支持全量和部分复制;介绍同步之前先介绍几个概念:runId:每个redis节点启动都会生成唯一的runId,每次redis重启后,runId也会发生变化offset:主节点和从节点都各自维护自己的主从复制偏移量offset,当主节点有写入命令时,offset=offset+命令的字节长度。从节点在收到主节点发送的命令后,也会增加自己的offset,并把自己的offset发送给主节点。这样,主节点同时保存自己的offset,从节点的offset,通过对比offset来判断主从节点数据是否一致repl_backlog_size:保存在主节点上的一个固定长度的先进先出队列,默认大小为1MB1)主节点发送数据给从节点过程中,主节点还会进行一些写操作,这时候的数据存储在复制缓冲区。从节点同步主节点数据完成后,主节点将缓冲区的数据继续发送给从节点,用于部分复制;2)主节点(master)响应写命令时,不但会把命名发送给从节点,还会写入复制积压缓冲区,用于复制命令丢失的数据补救; psync执行流程 从节点发送psync [runId] [offset]命令,主节点有如下响应FULLRESYNC:第一次连接,进行全量复制CONTINUE:进行部分复制ERR:不支持psync命令,进行全量复制 全量复制流程 1)从节点发送psync ? -1命令,因为第一次发送,不知道主节点的runId,所以为?,因为是第一次复制,所以offset = -1。2)主节点发现从节点是第一次复制,变返回FULLRESYNC {runId} {offset},runId是主节点的runId,offset是主节点目前的offset。3)从节点接收主节点信息后,保存到info中。4)主节点在发送FULLRESYNC后,启动bgsave命令,生成RDB文件(数据持久化)。5)6)主节点发送RDB文件给从节点。到从节点加载数据完成这段期间主节点的写命令放入缓冲区。7)从节点清理自己的数据库数据。8)从节点加载RDB文件,将数据保存的自己的数据库中。9)如果从节点开启了AOF(另一种持久化方案),从节点会异步重写aof文件。 部分复制流程 1)部分复制主要是Redis针对全量复制的过高开销做出的一种优化措施,使用psync {runId}{offset}命令实现。当从节点(slave)正在复制主节点(master)时,如果出现网络闪断或者命令丢失等异常情况时,从节点会向主节点要求补发丢失的命令数据,如果主节点的复制积压缓冲区内存将这部分数据则直接发送给从节点,这样就可以保持主从节点复制的一致性。补发的这部分数据一般远远小于全量数据。2)主从连接中断期间主节点依然响应命令,但因复制连接中断命令无法发送给从节点,不过主节点内部存在的复制积压缓冲区,依然可以保存最近一段时间的写命令数据,默认最大缓存1MB。当从节点网络恢复后,从节点会再次连上主节点。3)当主从连接恢复后,由于从节点之前保存了自身已复制的偏移量和主节点的运行ID。因此会把它们当做psync参数发送个主节点,要求进行部分复制操作。4)主节点接到psync命令后首先核对参数runId是否与自身一致,如果一致,说明之前复制的是当前主节点;之后根据参数offset在自身复制积压缓冲区查找,如果偏移量之后的数据存在缓冲区中,则对从节点发送+COUTINUE响应,表示可以进行部分复制。因为缓冲区大小固定,若发生缓存溢出,则要进行全量复制。5)主节点根据偏移量把复制积压缓冲区里的数据发送给从节点,保证主从复制进入正常状态。欢迎大家关注我的公种浩【程序员追风】,文章都会在里面更新,整理的资料也会放在里面。 5. 补充 Redis故障处理若主节点挂掉后,再次重启,runid的值会变。此时从节点的发送psync命令,会提示找不到原runid,则会再进行一次全量复制。为避免这种状况,使用Redis故障转移机制,主节点挂掉后,从节点升级为主节点。如哨兵模式。 最后 欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!

优秀的个人博客,低调大师

备战金九银十,跳槽经验分享,我是如何逆袭进入阿里的

前言想起刚刚入门的时候,工作和学习上是完全找不到方向的,再然后渡过了一段时间的新手期之后,工作的方向虽然逐渐变得清晰起来,但是没过多久,能了解到的资料就开始超过每天学习的能力,像是买了没看的书、收藏没读的贴、mark了之后再也没有关注过的文章越积越多,更别提每天面对各种技术分享或者微博里的新鲜玩意了。 我曾经就很喜欢看一些博客或者是一些“看起来”比较通俗易懂的文章,每天在微博微信里刷到什么技术文章就mark下来,基本上几分钟就能读完。可一段时间下来,虽然读了不少东西,但是还是有种在原地打转的状态,并没有感受到有什么实际的提高。 现实中,大多数人每天能留给我们学习的时间有限,所以,这个阶段要逆袭,要完成我们当初“梦想”的话,如何提升学习效率就成了要解决的重点,在这里我也给大家列出了一份目录以及准备的一些免费架构专题资料分享,希望能与大家共勉。 1、架构师内功心法(设计模式) Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Decorator装饰器模式 Observer观察者模式 2、架构师审美观(品味经典,分析源码) Spring核心原理 SpringMVC Spring容器 SpringIOC和AOP Mybatis源码 Mybatis实用 手写Mybatis框架 3、架构师必备技术栈(分布式架构) 漫谈分布式架构 分布式架构基础 分布式通信框架 分布式协调服务 分布式服务治理 分布式消息中间件 分布式缓存技术 高性能Wed容器 数据库分库分表 分布式并发编程 分布式搜索引擎 分布式日志监控 分布式实战解决方案 4、次世代架构技术(微服务架构) Spring Boot Spring Cloud Docker虚拟化 漫谈微服务架构 5、架构书工具箱(DevOps) git Maven jenkins sonar 6、架构诊断处方笺(性能调优) 理解性能优化 JVM调优篇 Tomcat调优 MySQL调优 Java程序性能优化 最后针对上面的高频常问面试题我还总结出了适合于1-5年以上开发经验的java程序员面试涉及到的绝大部分面试题及答案做成了文档和学习笔记文件以及架构视频资料和高清架构进阶学习导图免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。

优秀的个人博客,低调大师

面试百度、阿里、腾讯,这134道Java面试题你会多少?

这里一共是134道Java面试题,看看你能对几道吧! Java 语言有哪些特点 面向对象和面向过程的区别 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 和 C++ 的区别6.什么是 Java 程序的主类 应用程序和小程序的主类有何不同 Java 应用程序与小程序之间有那些差别 字符型常量和字符串常量的区别 构造器 Constructor 是否可被 override 重载和重写的区别 Java 面向对象编程三大特性: 封装 继承 多态 String StringBuffer 和 StringBuilder 的区别是什么 String 为什么是不可变的 自动装箱与拆箱 在一个静态方法内调用一个非静态成员为什么是非法的 在 Java 中定义一个不做事且没有参数的构造方法的作用 import java 和 和 javax 有什么区别 接口和抽象类的区别是什么 成员变量与局部变量的区别有那些 创建一个对象用什么运算符? 对象实体与对象引用有何不同? 一个类的构造方法的作用是什么 若一个类没有声明构造方法, 该程序能正确执行吗 ? 内存模型以及分区,需要详细到每个区放什么。 .堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。 对象创建方法,对象的内存分配,对象的访问定位。 GC 的两种判定方法: SafePoint 是什么 GC 的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路? GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。 Minor GC 与 Full GC 分别在什么时候发生? 几种常用的内存调试工具:jmap、jstack、jconsole、jhat 类加载的几个过程:31.JVM 内存分哪几个区,每个区的作用是什么? 32.如和判断一个对象是否存活?(或者 GC 对象的判定方法)33.简述 java 垃圾回收机制?34.java 中垃圾收集的方法有哪些?35.java 内存模型36.java 类加载过程? 简述 java 类加载机制? 类加载器双亲委派模型机制?39.什么是类加载器,类加载器有哪些? 40.简述 java 内存分配与回收策率以及 Minor GC 和Major GC41、什么是 Redis?简述它的优缺点?42、Redis 与 memcached 相比有哪些优势?43、Redis 支持哪几种数据类型?44、Redis 主要消耗什么物理资源?45、Redis 有哪几种数据淘汰策略?46、Redis 官方为什么不提供 Windows 版本?47、一个字符串类型的值能存储最大容量是多少?48、为什么 Redis 需要把所有数据放到内存中?49、Redis 集群方案应该怎么做?都有哪些方案?50、Redis 集群方案什么情况下会导致整个集群不可用?51、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?52、Redis 有哪些适合的场景?53、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?54、Redis 和 Redisson 有什么关系?55、Jedis 与 Redisson 对比有什么优缺点?56、说说 Redis 哈希槽的概念?57、Redis 集群的主从复制模型是怎样的?58、Redis 集群会有写操作丢失吗?为什么?59、Redis 集群如何选择数据库?60、Redis 如何做内存优化?71 、什么是 Spring 框架?Spring 框架有哪些主要模块?72 、使用 Spring 框架能带来哪些好处?73 、什么是控制反转(IOC) ?什么是依赖注入?74 、请解释下 Spring 框架中的 IoC ?75 、BeanFactory 和 和 ApplicationContext 有什么区别?76 、Spring 有几种配置方式?77 、如何用基于 XML 配置的方式配置 Spring ?78 、如何用基于 Java 配置的方式配置 Spring ?79 、怎样用注解的方式配置 Spring ?80 、请解释 Spring Bean 的生命周期?81 、Spring Bean 的作用域之间有什么区别?82 、什么是 Spring inner beans ?83 、Spring 框架中的单例 Beans 是线程安全的么?84 、请举例说明如何在 Spring 中注入一个 Java Collection ?85 、如何向 Spring Bean 中注入一个 Java.util.Properties86 、请解释 Spring Bean 的自动装配?87 、请解释自动装配模式的区别?88 、如何开启基于注解的自动装配?89 、请举例解释@Required 注解?90 、请举例解释@Autowired 注解?91 、请举例说明@Qualifier 注解?92 、构造方法注入和设值注入有什么区别?93 、Spring 框架中有哪些不同类型的事件?94 、FileSystemResource 和 和 ClassPathResource 有何区别?95 、Spring 框架中都用到了哪些设计模式?96.RabbitMQ 中的 broker 是指什么?cluster 又是指什么?97.RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制?98.什么是 ActiveMQ?99.Kafka 判断一个节点是否还活着有那两个条件?100、Kafka 消息是采用 Pull 模式,还是 Push 模式? 数据库三范式是什么? 有哪些数据库优化方面的经验? 请简述常用的索引有哪些种类? 以及在 mysql 数据库中索引的工作机制是什么?105.MySQL 的基础操作命令 106.mysql 的复制原理以及流程。107.mysql 支持的复制类型?108.mysql 中 中 varchar 与 与 char 的区别以及 varchar(50) 中的 50 代表的涵义? 表中有大字段 X (例如:text 类型),且字段 X 不会经常更新,以读为为主,将该字段拆成子表好处是什么?110.MySQL 中 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现)的? 111.分布式系统怎么做服务治理112.对分布式事务的理解113.如何实现负载均衡,有哪些算法可以实现?114.分布式集群下如何做到唯一序列号 什么是进程 什么是线程 线程和进程有什么区别 多线程的几种实现方式 多线程中忙循环是什么 为什么要用线程池?121.在java中守护线程和本地线程区别? 122.Java中用到的线程调度算法是什么?123.为什么使用Executor框架?124.什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?125.Java Concurrency API中的Lock接口(Lock interface)是什么?对比同步它有什么优势?126.什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?127.什么是并发容器的实现?128.多线程同步和互斥有几种实现方法,都是什么?129.为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?130.什么是不可变对象,它对写并发应用有什么帮助?131.Java中ConcurrentHashMap的并发度是什么?132.JVM中哪个参数是用来控制线程的栈堆栈小的?133.你如何在Java中获取线程堆栈?134.volatile 变量和 atomic 变量有什么不同?最后欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!

优秀的个人博客,低调大师

Javascript前端开发:阿里JS面试题让你深入了解原型与继承

题目如下: var F = function(){} Object.prototype.a = function(){ console.log('a()') } Function.prototype.b = function(){ console.log('b()') } var f = new F() F.a() F.b() f.a() f.b() 主要考查的技术点: 1.、原型与原型链 2、实例对象、构造函数、Object、 Function的关系 分析: F是个构造函数,而f是构造函数F的一个实例。 因为F instanceof Object == true、F instanceof Function == true 由此我们可以得出结论:F是Object 和 Function两个的实例,即F既能访问到a,也能访问到b。 所以F.a() 输出 a() F.b() 输出 b() 对于f,我们先来看下下面的结果: f并不是Function的实例,因为它本来就不是构造函数,所以就调用Function原型链上的相关属性和方法了,只能访问Object原型链。 所以f.a() 输出 a() 而f.b()就报错了。 接下来,我们具体分析下,它们是如何按路径查找的: f.a的查找路径: f自身: 没有 ---> f.__proto__(Object.prototype): 输出a() f.b的查找路径: f自身: 没有 ---> f.__proto__(Object.prototype): 没有 ---> f.__proto__.__proto__ (Object.prototype.__proto__): 因为找不到,所以报错 F.a的查找路径: F自身: 没有 ---> F.__proto__(Function.prototype): 没有 ---> F.__proto__.__proto__(Object.prototype): 输出 a() F.b的查找路径: F自身: 没有 ---> F.__proto__(Function.prototype): b()

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册