自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 缓存淘汰算法--LRU算法

LRU 1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 1.2. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1.新数据插入到链表头部; 2.每当缓存命中(即缓存数据被访问),则将数据移到链表头部; 3.当链表满的时候,将

2017-05-31 21:42:57 165

原创 【indeed】C - Binary Tree

C - Binary TreeTime limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement You are given a binary tree with N vertices.(树有N个节点)In the given binary tree, the left child of vertex i

2017-05-31 20:33:00 189

原创 【读书笔记】大规模Web开发技术(第十六章 part2)

特别篇第3课 缓存系统——squid、varnish 当Web 应用程序负载的逐渐增大,系统容量不足时,增加应用程序服务器和数据库服务器当然可以应对,但使用HTTP加速器在HTTP 层增加缓存处理,就能以低成本实现不错的效果。 代理服务器可以缓存请求的响应内容,下次对于同样的请求就可以直接返回缓存的内容。这样无需消耗带宽或服务器资源,就能快速处理请求。 Web 应用程序达到一定规模后,有效利用

2017-05-31 16:53:01 621

原创 【读书笔记】大规模Web开发技术(ch16 作业队列系统,存储选择,分布式)

第16章 特别篇 当前构建web服务需要的实践技术——应对大规模web服务须知 特别篇第1课 作业队列系统theschwartz、gearman 利用作业队列系统异步执行那些允许延迟的处理,可以改善用户体验。 TheSchwartz TheSchwartz 的作业队列采用了MySQL 这种RDBMS 。用MySQL 管理作业队列,能保证非常高的可靠性和稳定性。多数异步处理都是必须确实

2017-05-31 15:16:42 565

原创 【简记】大规模Web开发技术(第十五章)

第15章 web服务和网络——通过网络看服务增长 流量达到1Gbps时就会产生许多问题。从路由器的性能来看, pps (每秒发包数)比bps 更重要。Hatena 使用的PC 路由器的极限为30 万pps 这是要点之一。 还有,将主机500 台以上放在一个子网内,就会出现许多问题,丢包现象也频繁发生。 此外,如果想把全球服务扩展到北美、欧洲等地,那么若只有一个数据中心,跨越太平洋或横跨大西洋

2017-05-31 13:56:34 362

原创 【简记】大规模Web开发技术(第十四章)

Hatena 通过虚拟化技术提高了主机的集成度,提高了整体的资源利用率。此外,我们自行纽装服务器,避免了服务器配置过高,实现了系统整体的低成本。虚拟服务器的构建策略 引入虚拟化技术最根本的目的就是提高硬件的使用率。为提高硬件使用率,应当让虚拟机操作系统使用空闲的资源。 例如, CPU 资源空闲就建立Web 服务器,I/O资源空闲就建立数据库服务器,内存资源空闲就建立缓存服务器。资源消耗倾向相似,

2017-05-31 13:21:39 408

原创 【集合类分析】LinkedHashMap

LinkedHashMap是直接继承了HashMap的,只不过LinkedHashMap重写了HashMap的一些方法。从而达到了输出有顺序的目的。 ==== 官方文档: 1.该类提供了一个特殊的构造方法,既可以构造一个输出顺序负荷LRU原则的LinkedHashMap. 何为LRU,就是最近最少使用,打个比方,我们插入值A、B、C、D,如果这样插入的话,那输出的时候就是A、B、C、D,看起

2017-05-30 21:29:37 250

原创 【集合类分析】ArrayList

做题的时候,ArrayList真的是出现频率最高的一个集合类,仔细想一下,主要是因为其不用一开始就确定大小,可以无限添加元素,以及用Collections.sort()将list中的数据排序,并且可以重写比较规则来自定义排序,所以今次就好好总结下ArrayList的底层实现和主要的类方法。==== 特点: 1.ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的

2017-05-30 16:04:15 277

原创 【集合类分析】LinkedList

以上为LinkedList结构示意图。==== 官方文档摘录: 1.双向链表,线程不安全,允许null值 2.List list = Collections.synchronizedList(new LinkedList(…)),这是线程安全的 3.可以看到LinkedList还实现了队列接口 ==== void linkFirst(E e):将e设为头结点 void linkLast

2017-05-30 15:57:34 222

原创 【简记】大规模Web开发技术(第十三章)

第13章 保证冗余性和系统的稳定化——实现100%在线率的原理保证冗余性——应用程序服务器一般解决方法:增加服务器当服务器宕机时:用负载均衡器实现失败转移(failover) 和失败恢复( failback) ,让故障服务器自动下线,故障恢复之后再上线。失败转移(failover) 就是使其自动离线,失败恢复( failback)就是让恢复正常的服务器再次上线。负载均衡器对服务器定

2017-05-30 11:20:37 320

原创 【简记】大规模Web开发技术(第十二章)

第十二章 保证可扩展性的必要思路——规模扩大和系统扩展Hatena 的大规模服务由几十台服务器构成,各台服务器均为4 核CPU 1 ~2 个,安装8GB ~ 32GB 内存,并能够根据负载状况进行扩展。各层的扩展性:因为应用程序服务器没有状态,将任何请求分配到其他应用程序服务器上都不会发生任何问题,因此只须在负载均衡器上添加新服务器就可以不断扩大。只要增加服务器,就可以扩展

2017-05-29 16:31:48 441

原创 【简记】大规模Web开发技术(第十一章)

第11章 支持大规模数据处理的服务器/基础设施入门——web服务的后台第29课 企业软件vs. web服务第30课 云vs.自行构建基础设施云计算的特点是价格便宜,可扩展性优秀。云的最大优点就是"可扩展性"。自行构建基础设施的优点有:1 .硬件配置可以灵活调整:2. 能够灵活应对服务的要求:3. 可以控制瓶颈。Hate

2017-05-29 10:55:31 631

原创 【简记】大规模Web开发技术(第十章)

第十章 创建全文搜索引擎——基本部分、改进、速度和准确度的要求第27课 创建Hatena Bookmark 全文搜索http://eriol.iteye.com/blog/1166989(java实现)

2017-05-28 19:50:23 227

原创 【简记】大规模Web开发技术(第九章)

第九章主题——挑战全文搜索技术(大数据处理技巧)第24课 全文搜索技术的应用范围本次首先从Hatena 实际应用的搜索引擎概要开始,接着讲述创建搜索引擎中最重要的元素之一一逆向索引( inverted index) 。逆向索引由Dictionary (字典文件)和Postings (置入文件)两个基本要素组成。本章的目标是以逆向索引为基础,理解搜索引擎的基本结构。“包含

2017-05-28 11:16:18 777

原创 【简记】大规模Web开发技术(第八章)

第八章主题——Hatena关键字链接的实现

2017-05-24 22:19:43 359

原创 【简记】大规模Web开发技术(第七章)

第七章主题:算法实用化——从身边的例子来看理论、研究的实践投入第19课:算法和算法评测实用算法也就到O(n logn)附近。再高,复杂度就会随着n的增加而急剧增大,经常导致计算无法结束。例如, 一般的基于比较的排序算法无论怎么优化,也不可能比O(n logn)快,这一点在理论上可以证明。因此,排序算法能达到O(n log),就可以认为是高速算法。复杂度记法适用于比较

2017-05-23 15:22:02 246

原创 【集合类分析】ConcurrentHashMap

ConcurrentHashMap是线程安全的,在多线程环境下可以放心使用(方法有原子性)。和HashTable的对比:HashTable也是线程安全的,但实现的途径是对每个方法都加了Synchronized悲观锁,进入方法时获取的都是同一把锁(this),会导致在竞争激烈的并发环境下效率低下。ConcurrentHashMap对加锁对象实现了分离,减少了并发下的冲突。Concurrent

2017-05-22 16:31:21 291

原创 【简记】大规模Web开发技术(第六章)

第六章主题:压缩编程——考虑数据大小和i/o加速之间的关系压缩的基础压缩就是分析符号的出现频率,用短编码标记频繁出现的符号,用长编码标记其余的符号。也就是说,根据符号出现概率的概率分布生成最佳编码。这就是最根本的压缩理论。例如,有的算法首先从头开始分析各个文字符号的出现频率,求出概率分布之后,再据此生成最佳符号,如哈夫曼编码等。第17课 可变字节码和速度的感

2017-05-22 15:01:55 326

原创 【简记】大规模Web开发技术(第五章)

第五章主题:大规模数据处理“实践”入门——应用程序开发的重点第14课  特殊用途索引——处理大规模数据时超出RDBMS 处理能力时怎么办?.用批处理取出数据·创建专用索引服务器,通过Web- API 等进行查询所建立的索引可以被称为特殊索引特殊用途索引定期取出数据根据取出的数据创建数据结构→搜索用的逆向索引→关键字链接用的Tire

2017-05-22 14:57:54 423

原创 【集合类分析】HashMap

首先,HashMap是线程不安全的,所以才有ConcurrentHashMap和HashTable。HashMap允许key和value为null值。(HashMap和HashTable基本相同,除了HashMap是线程不安全的以及HashMap允许null值)影响HashMap性能的两个指标:(1)数组初始长度(桶的数量)(2)负载因子因为当键值对数量>数组长度*负载因子时,H...

2017-05-21 19:18:49 312 1

原创 【简记】大规模Web开发技术(第四章)

第四章主题:数据库的横向扩展策略——以分布式为基础的MySQL应用最近也出现了很多NoSQL 等其他实现,但几年之内, LA如1p (Linux + Apache +MySQL + Perl )的Web 服务的标准数据存储仍会是MySQL 。(10年说的话)第11课:正确使用索引——分布式MySQL应用的大前提从页面缓存的角度:之前有提到一个页面缓存在4kb左右,b树每个节

2017-05-17 16:30:18 343

原创 【简记】大规模Web开发技术(第二章)

第二章主题:大规模数据处理入门(linux背景下)中-大数据标准,每张sql表的数据量都以GB为单位,表中数据量千万级别。改善I/O性能,需要确认以下几点:·能否通过增加内存以保证缓存区域的方法解决;.数据量是否本来就过多;·有无必要改变应用程序的I/O算法。Web 应用程序在进行计算时,也就是说接受HTTP 请求、查询数据库,再把数据库返回的数据加工变

2017-05-16 14:29:05 514

原创 【简记】大规模Web开发技术(第一章)

小规模服务和大规模服务的区别:1.保证可扩展性、负载均衡的必要性横向扩展:通过增加服务器数量来提高系统整体的处理能力并分担负载。纵向扩展:通过提高硬件性能来提高处理能力的方法。硬件的性能和价格不是成比例的。越是大批量生产的通用硬件,其价格就越便宜,而横向扩展策略就是通过横摆放廉价硬件来确保可扩展性。采用横向扩展策略能降低成本,但会产生各种各样的问题。例如:用户请求如何分配?

2017-05-16 11:13:15 382

原创 【读书笔记】大规模Web开发技术(前言)

给菜鸟看得网站架构入门书。2-5章主要讲解大规模数据的处理问题,基本思路和重点。主要有缓存机制和数据库相应的对策。6-10章主演于编程和算法。11-15章介绍Hatena的基础设施结构。

2017-05-15 22:27:00 320

转载 JVM之内存分配与回收策略

基本规则:对象主要分配在新生代的Eden区,如果启动了本地线程分配缓冲,则先在TLAB上分配,少数情况下也可能直接进入老年代。分配的规则不是100%确定的,其细节取决于当前使用的是哪一种垃圾收集器组合。大对象直接进入老年区,虚拟机设置超过多少大小的对象直接进入老年去,避免在新生代发生过多复制操作。长期存活的对象进入老年代:经历了一次minor GC 后,存活的对象从ed

2017-05-15 14:22:29 955

转载 Minor GC、Major GC和Full GC之间的区别

(http://www.importnew.com/15820.html)Minor GC从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到:当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden

2017-05-13 21:54:55 587

转载 G1收集器和CSM收集器对比

(http://blog.csdn.net/zhanggang807/article/details/45956325)回顾分代垃圾回收和CMS并发标记清除(CMS)收集器(也叫并发低延迟收集器)回收年老代垃圾。它通过和应用线程并发的执行大部分垃圾收集工作的方式来尝试最小化垃圾回收引起的暂停。正常情况下并发低延迟收集器不会复制或者压缩活跃对象。一次垃圾收集的完成不必移动活跃

2017-05-13 21:13:05 3625 3

转载 深入理解G1垃圾收集器

(http://blog.jobbole.com/109170/)了解G1G1的第一篇paper(附录1)发表于2004年,在2012年才在jdk1.7u4中可用。oracle官方计划在jdk9中将G1变成默认的垃圾收集器,以替代CMS。为何oracle要极力推荐G1呢,G1有哪些优点?首先,G1的设计原则就是简单可行的性能调优开发人员仅仅需要声明以下参数即可:

2017-05-13 19:48:17 4395 1

转载 HotSpot中的垃圾收集

指导理念:分代收集,根据对象的存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用“标记-清理”或“标记-整理”算法来进行回收。Oo

2017-05-12 19:35:11 275

转载 JVM系列之垃圾收集简介

垃圾收集关注三个问题:哪些对象需要回收?什么时候回收?如何回收?判断对象是否可被回收:1.引用计数法给每个对象添加一个引用计数器,当有新的引用就加1,当引用失效时则减1,当为0时,说明对象不会再被引用。会出现bug的情况:当两个对象互相引用时,即使对象已经为null,仍然无法被回收2.可达性分析算法在主流的商用程序语言(Java、C#,甚至包括前面提

2017-05-12 14:37:42 266

转载 hotspot对象相关

对象的创建过程:几点补充:1.对象所需的内存大小在类加载后便确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆划分出来。用过的内存在一边,空闲的内存在另一边,中间有一个指针作为指示器,这种分配内存的方式称为指针碰撞。如果Java堆中的内存并不是规整的,已使用的内存和空闲内存相互交错,那就没办法简单的进行指针碰撞了,虚拟机就必须维护一个队列表,记录哪些内

2017-05-11 21:32:12 260

原创 JVM内存区概述——InteviewOrientation

java虚拟机所管理的内存包含以下几个运行时数据区域:

2017-05-11 16:05:03 358

转载 SpringMVC+Spring阅读笔记——SpringMVC概览

(http://downpour.iteye.com/blog/1330596) 问题项目规模扩大之后,请求-响应的映射关系全部定义在web.xml中,将造成web.xml的不断膨胀而变得难以维护。针对这个问题,SpringMVC提出的方案就是:提炼一个核心的Servlet覆盖对所有Http请求的处理。。 这一被提炼出来的Servlet,通常被我们称之为:核

2017-05-10 11:35:13 258

转载 SpringMVC+Spring阅读笔记——发展历程

http://downpour.iteye.com/blog/1330537#comments在我们熟知的建立在三层结构(表示层、业务逻辑层、持久层)基础之上的J2EE应用程序开发之中,表示层的解决方案最多。因为在表示层自身的知识触角很多,需要解决的问题也不少,这也就难免造成与之对应的解决方案层出不穷。 【MVC模型】 在MVC模型中,我们选取当前比较热门的两大框架St

2017-05-09 19:58:19 1445

转载 mysql中的索引(聚簇索引和非聚簇索引)

(http://www.cnblogs.com/shijingxiang/articles/4743324.html)Mysql的存储引擎和索引  我们非常容易想象出一个只有单关键字组成的表如何使用B+树进行索引,只要将关键字存储到树的节点即可。当数据库一条记录里包含多个字段时,一棵B+树就只能存储主键,如果检索的是非主键字段,则主键索引失去作用,又变成顺序查找了。这时应该在第二个要检索的列...

2017-05-09 15:58:22 580

转载 索引的概念和B树

索引的作用:加快select语句的执行速度,当涉及到大量数据和跨表查询时,效果相当明显为什么需要索引:cpu对数据进行高速处理读取的是内存中的数据。当数据量很大时,数据被存放在磁盘中,需要将磁盘中的数据复制到内存中再进行操作。如果进行的是普通的顺序查找,在最坏情况下,磁盘I/O将会消耗大量时间(和运算操作所花时间不是一个数量级),所以需要一种合理高效的外存数据结构来进行快速定位,减

2017-05-08 23:22:41 1058

空空如也

空空如也

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

TA关注的人

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