`
臻是二哥
  • 浏览: 184247 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Java技术分享
浏览量:0
社区版块
存档分类
最新评论
文章列表
在Java中,线程有6种基本状态,理解这6种基本状态之间的关系可以让我们对多线程有更好的理解.如下图所示: 在Java中,所有的线程都存在于线程组中,每个线程组中可以包含多个线程或者线程组.运行下面的程序,从结果中可以看出默认的线程组层次结构. system是Java中的根线程组.从system开始,有一层层的线程和线程组.类似目录结构. /** * Java线程组的结构,见运行结果 * @author Administrator * */ public class Main { public static void main(String [] args) { ...
http://www.cnblogs.com/xrq730/p/5260294.html
中断处理 在java程序中,当使用Thread.sleep()或者BlockingQueue.take()等阻塞方法时,需要处理InterruptedException。对于这种异常,通常有2种方案进行处理。 1. 传递异常:将异常传递给方法的调用者。示例如下: BlockingQueue<String> queue; ...
随机数的性质从弱到强分为3类: 1. 随机性 2. 不可预测性 3. 不可重现性 在上面的三个性质中,越往下就越严格。具备随机性,不代表一定具备不可预测性;具备不可预测性,不代表一定具备不可重现性;但如果具备不可重现性, ...
Http协议是常用的传输层协议,但有些时候我们需要更加安全的http协议,即Https协议。Https协议与Http协议的区别在于:Https协议在Http与传输层之间添加了一个用于加密的SSL(安全套接层)。 首先来分析下,一个信息想在网络中安 ...
降低锁的竞争可以提高并发程序的性能和可伸缩性,有3种方式可以降低锁的竞争: 1. 减少锁的持有时间(缩小锁的范围) 2. 降低锁的请求频率(降低锁的粒度) 3. 放弃使用独占锁,使用并发容器,原子变量,读写锁等等来代替 ...
中间件就是在大型网站中,帮助各子模块间实现互相访问,消息共享或统一访问等功能的软件产品。常见的有: 远程服务框架中间件:主要解决各子模块之间互相访问的问题。 消息队列中间件:主要解决各子模之间消息共享的问题。 数据访问中间件:用于简化应用层对数据层的访问。 关于远程服务框架中间件,国内目前较多应用的是阿里巴巴的开源分布式服务框架Dubbo。其原理如图: 消息队列中间件是一种EDA架构(event driven architecture):通过在低耦合的模块之间传输事件消息来完成模块之间的合作。大型网站中,消息队列采用发布/订阅模式。消息发布者发布消息到消息队列,消息消费者只要对该类消息感兴 ...
缓存是优化网站性能的第一手段。在大型网站中,缓存通常用来保存热点数据,或者保存应用上下文相关信息。比如之前提到的session服务器集群就可以用分布式缓存来搭建。当然,分布式缓存还可用于缓存数据库中的热点数据以 ...
随着网站的发展,一台应用服务器无法处理太多用户请求,考虑部署多台应用服务器组成集群来提供服务。此时问题来了? 问题1:扩展到多台应用服务器时,可能同一个用户的先后两次请求由不同的应用服务器处理,这个时候 ...
回顾下之前博客中提到的大型网站架构: 这张图中,有很多经典的模块。比如CDN服务器,反向代理服务器,负载均衡系统,应用服务器,分布式缓存系统等等。之后的几篇博客中我会逐个来介绍。今天先来看看WEB前端优化,在 ...
“一般来说,设计网站的架构。除了关注功能需求以外,还需要关注性能,可用性,伸缩性,扩展性,安全性。” 性能:网站对并发请求的处理能力,有很多衡量指标,比如QPS,响应时间等。 可用性:1-网站不能对外提供服务 ...
第二遍阅读《大型网站技术架构》,真心觉得书中的内容很好,推荐大家去阅读。下面是书中对大型网站架构演变过程的介绍。 对于一个小型企业级网站,通常的架构如下图: 随着用户数量的增多,可以将应用服务与数据服务分离以提高性能,如下图: 用户继续增多,数据库的压力太大,此时考虑使用缓存,如下图:(缓存在网站性能优化中是一种很重要的手段,可以极大的减轻缓存所在位置后端的压力,缓存分为本地缓存和分布式缓存服务器,前者更快但容量有限,后者理论上容量可以无限伸缩。分布式缓存的一个典型例子是MemCached)。 增加缓存的做法缓解了数据服务器的压力,接着考虑缓解应用服务器的压力,将应用部署到集群中。 ...
业务对象是指那些从实际业务场景中抽象出来的对象,这些对象在代码中对应的就是一些业务对象类。 在常见的SSH框架的开发中,一般的做法是将每一个业务对象对应一个POLO,当然这是为了方便使用ORM框架。当我们把业务对象实现为POJO的时候,我们实际上是在使用业务对象贫血模式。下面是业务对象贫血模型图:(业务对象类既领域层的model) 在贫血模型中,业务对象仅仅包含数据而不包含行为,他的作用只是数据的载体或者说是数据的传递介质。系统的业务逻辑全部放到业务逻辑层,会导致业务逻辑层比较庞大。 为了避免出现贫血模型中业务逻辑层较庞大的缺点,考虑将一些恰当的业务逻辑放到业务对象类中,即贫血模型的 ...

常见RAID

笔者在做桌面云的过程中,就使用过raid。最近阅读《大型网站技术架构》,觉得作者总结的很到位,在此转发。http://book.51cto.com/art/201310/412862.htm RAID(廉价磁盘冗余阵列)技术主要是为了改善磁盘的访问延迟,增强磁盘的可用 ...
最近不是很忙,阅读了下《大型网站技术架构》一书。在4.3.4代码优化小节有这样的一句话:“目前比较好的字符串hash算法有Time33算法”。 Time33算法,就是hash(i)=33*hash(i-1)+str[i]。在jdk源码中String类的hashCode()方法使用的是Time31算法。 源码如下: public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; ...
Global site tag (gtag.js) - Google Analytics