- 浏览: 60852 次
- 性别:
- 来自: 上海
最新评论
文章列表
众所周知,Java是多线程的。但是,Java对多线程的支持其实是一把双刃剑。一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题。线程安全性可能是非常复杂的,在没有充足的同步的情况下,多个线 ...
为保障系统的可用性、可靠性以及性能,在分布式系统中,往往会设置数据冗余,即对数据进行复制。举例来说,当一个数据库的副本被破环以后,那么系统只需要转换到其他数据副本就能继续运行下去。另外一个例子,当访问单一服务器管理的数据的进程数不断增加时,系统就需要对服务器的数量进行扩充,此时,对服务器进行复制,随后让它们分担工作负荷,就可以提高性能。但同时,如何保障多个数据节点之间数据的一致以及如何处理分布式事务,将成为为一个复杂的话题。本文将介绍常用的事务处理机制。
CAP 定理
CAP 定理(也称为 Brewer 定理),是由计算机科学家 Eric Brewer 提出的,即在分布式计算机系统不可能同 ...
Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,设计模式,成熟的单元测试,或者那些很难掌
memcached缓存特点
协议简单
基于libevent的事件处理
内置内存存储方式
memcached不相互通信的分布式
memcached分布式原理
今天的内容主要涉及memcached特点的第四条,memcached不相互通信,那么memcached是如何实现分布式的呢?memcach ...
缓存真的有效?
真的。嗯,根据计算机访问数据经常会呈现出的局部性原理。局部性原理又包括空间局部性和时间局部性。空间局部性就是说,计算机访问数据,而其存储在邻近的数据也经常会被访问。时间局部性就是说,在相对的一小段时间内,计算机经常会访问相同的数据。实际中是怎么运用局部性原理的呢,比如说,计算机从硬盘中读块,计算机不会只读你要的特定块,附近的快很有可能接下来要被访问,他会把这些块也一起预读出来。接下来要读附近的快的时候,就不需要再访问硬盘了。这样,运用局部性原理就减少了访问磁盘的次数。附近的快就被缓存了起来,加快了运行速度。
缓存什么?
所有处理需要相对较长时间的内容都可以缓存,比如说,将 ...
1.1、Dubbo是什么?
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架
其核心部分包含:1》远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。2》集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群 ...
于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决我们的问题,可以采用数据库连接池技术。
数据库连接池的基本思想就是为数据库连接建立 ...
指令优化
在谈到优化之前我们先看一个简单例子,非常简单的例子,查看编译后的文件的的指令是什么样子的,一个非常简单的java程序,Hello.java
java结构示意图:
Oracle HotSpot JVM:
JVM结构:ClassLoader,Runtime Data Area,Execution Engine,Native Interface。
JVM是虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理。冯·诺依曼体系结构中,指出计算机处理的数据和指令都是二进制数,采用存储程序方式不加区分的存储在同一个存储器里,并且顺序执行,指令由操作码和地址码组成,操作码决定了操作类型和所操作的数的数字类型,地址码则指出地址码和操作数。从dos到window8,从unix到ubuntu和Cen ...
Java最显著的优势之一就是它的内存管理机制。你只需简单创建对象,然后Java垃圾回收机制便会小心的分配和释放内存。然而,事实并非如此简单,因为在Java应用程序中经常发生内存泄漏。
本教程说明了什么是内存泄漏,为什么会发生,以及如何防止它们。
1.什么是内存泄漏?
内存泄漏的定义: 对象不再被应用程序使用,但是垃圾回收器却不能移除它们,因为它们正在被引用。
要理解这个定义,我们需要理解对象在内存中的状态,下图说明了哪些是未被使用的以及哪些是未被引用的。
从图中可以
类加载器(class loader)是 Java™中的一个很重要的概念。类加载器负责加载 Java 类的字节代码到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模式、加载类的具体过程和线程上下文类加载器等,接着介 ...
1、HTTPS性能损耗
前文讨论了HTTPS原理与优势:身份验证、信息加密与完整性校验等,且未对TCP和HTTP协议做任何修改。但通过增加新协议以实现更安全的通信必然需要付出代价,HTTPS协议的性能损耗主要体现如下:
(1).增加延时
分析前面的握手过程,一次完整的握手至少需要两端依次来回两次通信,至少增加延时2* RTT,利用会话缓存从而复用连接,延时也至少1* RTT*。
(2).消耗较多的CPU资源
BIO: 同步阻塞IO,一个连接一个线程
NIO:同步非阻塞,一个请求一个线程
AIO:异步非阻塞,一个有效请求一个线程
BIO:
java1.4以前,一个网络请求,就要建立一个socket,这时候一个socket连接就要询问是否有线程可以处理,如果没有就等待,要么就拒绝。一个连接要求server对应一个线程处理。
NIO
本身基于事件驱动的思想完成,解决BIO的大并发问题:在同步IO的网络应用中,如果要同时处理多个客户请求,或是在客户端要同时和多个服务器通讯,就必须使用多线程来处理。将每一个客户端的连接请求都要一个线程来单独处理。
问题:每创建一个线程,就要为这个 ...
1、RPC 框架
RPC框架在微服务平台中,微服务间的服务调用,不可避免的会遇到一个问题,该选用哪一个RPC框架好呢?今天我们就请到三位RPC框架,来进行一场选美大赛,看看谁更适合微服务平台中的服务间调用。
Dubbo!阿里开 ...
二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。
折半查找,优点:是比较次数少,查找速度快,平均性能好;
缺点:要求待查表为有序表,且插入删除困难。
折半查找方法适用于不经常变动而查找频繁的有序列表。
假设表中元素是按升序排列,将表中间位置记录与查找关键字比较,如果两者相等,则查找成功;否则利用中间值将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件值,使查找成功,或直到子表不存在为止,此时查找不成功。
查找过程可以分为以下步骤: 1.从有序数组的中间的元素 ...