读书总结
文章平均质量分 80
后海hh
爱好技术,喜欢专研底层和看流行的开源代码,有一定的代码洁癖,会定时优化重构代码,使其扩展性维护性和性能更好
展开
-
常用限流算法:令牌桶和漏桶算法解析
漏桶算法漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。 令牌桶算法对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。如图2所示,令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理原创 2018-02-04 11:58:08 · 3446 阅读 · 0 评论 -
《亿级流量网站架构核心技术》总结
nginx后端节点健康检查主要有三种实现方式: 1. 本身自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块,属于惰性检测。 ngx_http_proxy_module:proxy_connect_timeout(与后端服务器建立连接的超时时间)、proxy_read_timeout(从后端服务器读取响应的超时)和proxy_next...原创 2018-02-10 15:45:35 · 6396 阅读 · 1 评论 -
《人人都是架构师》总结
警惕Dubbo因超时和重试引起的系统雪崩超时时间一定要设置,要根据业务场景而定,设置太短容易引发重试,设置太长容易引发请求堆积。超时设置过短的后果:Dubbo默认失败重试2次,所以假设有1000个并发,都超时了,则会重试2次,变成3000个请求,导致请求流量翻了3倍。重试设置:写服务一般要考虑幂等性,所以失败后不进行重试。Dubbo重试的集中容错方案: failover(失败重试其他...原创 2018-02-10 15:30:30 · 1045 阅读 · 0 评论 -
《JAVA程序性能优化》总结
设计优化单例模式:延时加载(内部类)。反射和序列化会破坏单例代理模式:延时加载 静态代理:包括主题接口、真实主题、代理类、main。初始化时使用代理,真正使用时再通过代理加载真实主题。动态代理:jdk动态代理、CGLIB、javassist基于动态代码的代理、ASM。动态加载过程(以CGLIB为例): 根据指定的回调类生成class字节码,并保存在byte数组中。通过反射,调用C...原创 2018-02-10 15:23:28 · 637 阅读 · 0 评论 -
《构建高性能web站点》总结
数据发送的过程(从主机到线路的过程)应用程序首先将数据写到该进程的地址空间中。应用程序通过系统函数库接口向内核发出系统调用,系统内核将这些数据从用户态内存复制到内核缓冲区中。(内核缓冲区大小有限,所有数据都以队列的方式进入这里)。数据写入内核缓冲区后,内核通知网卡控制器来取数据,将数据复制到网卡的缓冲区中。网卡缓冲区将要发送出去的数据进行字节到位的转换(二进制),然后依次发出。...原创 2018-02-10 14:53:11 · 359 阅读 · 0 评论 -
评价系统海量数据存储设计
京东的商品评论目前已达到数十亿条,每天提供的服务调用也有数十亿次,而这些数据每年还在成倍增长,而数据存储是其中最重要的部分之一,接下来就介绍下京东评论系统的数据存储是如何设计的。 整体数据存储包括基础数据存储、文本存储、数据索引、数据缓存几个部分。基础数据存储基础数据存储使用mysql,因用户评论为文本信息,通常包含文字、字符等,占用的存储空间比较大,为转载 2016-08-16 09:05:57 · 12354 阅读 · 0 评论 -
分布式队列编程:从模型、实战到优化
1模型篇模型篇从基础的需求出发,去思考何时以及如何使用分布式队列编程模型。建模环节非常重要,因为大部分中高级工程师面临的都是具体的需求,接到需求后的第一个步骤就是建模。通过本篇的讲解,希望读者能够建立起从需求到分布式队列编程模型之间的桥梁。何时选择分布式队列通信是人们最基本的需求,同样也是计算机最基本的需求。对于工程师而言,在编程和技术选型的时候,更容易进入大脑的概转载 2016-08-16 09:08:14 · 687 阅读 · 0 评论 -
Java 异常体系规范
什么时候抛出异常(throw)1、验证-抛出:当程序检测到非预期状态、当前处理层无法处理的,应创建一个新的异常对象,并使用关键字throw,将异常抛给调用者if (somethingIsInvalid) { throw new SomeException("msg");}2、检测-上抛:当调用了一个声明受检异常的方法,当前处理层无法处理,需要进行适当包装转载 2016-08-16 09:10:25 · 330 阅读 · 0 评论 -
StackOverflow: 你没见过的七个最好的Java答案
StackOverflow(后边简称so)发展到目前,已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西。这篇文章是在我们审阅了so上最流行的Java问题以及答案后从中挑出来的。即使你是一个有丰富经验的开发者,也能从中学到不少东西。分支预测SO上最多投票的一个Java问题是: 为什么处理一个排序数转载 2016-08-16 09:11:27 · 922 阅读 · 0 评论 -
Java进阶之路
一: 编程基础不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还是要有的。下面几篇文章从思想到实现,为你梳理出常用的数据结构和经典算法。 1-1 常用数据结构数组、链表、堆、栈、队列、Hash表、二叉树等1-2 算法思想算法时间复杂度和空间复杂度的分析计算算法思想:递推、递归、穷举、贪心、分治、动态规划、转载 2016-08-16 09:24:49 · 349 阅读 · 0 评论 -
闭环Java应用
你曾经因为部署/上线而痛苦吗?你曾经因为要去运维那改配置而烦恼吗?在我接触过的一些部署/上线方式中,曾碰到过以下一些问题:1、程序代码和依赖都是人工上传到服务器,不是通过工具进行部署和发布;2、目录结构没有规范,jar启动时通过-classpath任意指定;3、fat jar,把程序代码、配置文件和依赖jar都打包到一个jar中,改配置文件太费劲;4、不管是非web转载 2016-08-16 09:25:47 · 2093 阅读 · 0 评论 -
Java从基础到架构总结
一、数据结构和算法常用数据结构 数组:大小固定的数据结构。顺序存储,随机访问。链表:链表存储,顺序访问。主要有循环单链表,双向链表,循环双向链表。堆:二叉堆。栈:又叫LIFO表,后进先出。限制插入和删除只能在栈顶进行操作。队列:又叫FIFO表,先进先出。限制删除只能在对头进行操作,插入只能在队尾进行操作。二叉树算法思想 算法分析:按照时间复杂度和空间复杂度。算法思想:递推、...原创 2018-02-24 12:58:13 · 734 阅读 · 0 评论