- 浏览: 28046 次
- 性别:
- 来自: 北京
最新评论
文章列表
Arraylist Vector
- 博客分类:
- java
ArrayList和Vector都是继承了相同的父类和实现了相同的接口。如下
Java代码
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行.
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元, ...
设计与开发应用服务器--相关技术
- 博客分类:
- 服务器\架构
服务器的设计与开发涉及到诸多技术和问题,归纳一下大致可以分为以下几种:
服务器启动和接收数据过程
多线程策略
NIO
长连接
同步与异步
配置化支持
责任链模式
集群与负载均衡
数据包设计
服务端连接协议
客户 ...
设计与开发应用服务器--常见模式
- 博客分类:
- 服务器\架构
设计与开发服务器算是一个技术含量比较高的领域,需要涉及到网络编程、IO、多线程、分布式、性能和可扩展性等较为复杂的技术细节,比起JSP/servlet或SSH框架开发业务系统来说,开发服务器比较偏重于技术一些,许多开发人员会有些束手无措,但却无法避免,比如基于HTTP协议的服务不适用时,或需要提供某种协议的容器时。
其实服务器的设计与开发也是有模式可借鉴,只不过没有框架或是书籍来这么一些模式,但通过学习一些优秀服务器的源码和架构我们可以找到一些感觉,我挑选了几个自己较为熟悉的服务器,通过它们的架构来找一些可以借鉴的模式:
Tomcat
Apache perfork
Amoeba
M ...
一个大型系统里各个环节中最容易出性能和可用性问题的往往是数据库,因此分布式设计与开发的一个重要领域就是如何让数据层具有可扩展性,数据库的扩展分为Scale Up 和Scale Out,而Scale Up说白了是通过升级服务器配置来完成,因此不在分布式设计的考虑之内。Scale Out是通过增加机器的方式来提升处理能力,一般需要考虑以下两个问题:
数据拆分
数据库高可用架构
数据拆分是最先会被想到的,原理很简单,当一个表的数据达到无法处理的时候,就需要把它拆成多个表,说起来简单,真正在项目里运用的时候有很多点是需要深入研究的,一般分为:
切分策略
与应用程序端的整合策略
切分 ...
几种必须了解的分布式算法
- 博客分类:
- 算法
Paxos算法
1)问题描述
分布式中有这么一个疑难问题,客户端向一个分布式集群的服务端发出一系列更新数据的消息,由于分布式集群中的各个服务端节点是互为同步数据的,所以运行完客户端这系列消息指令后各服务端节点的数据应该是一致的,但由于网络或其他原因,各个服务端节点接收到消息的序列可能不一致,最后导致各节点的数据不一致。举一个实例来说明这个问题,下面是客户端与服务端的结构图:
当client1、client2、client3分别发出消息指令A、B、C时,Server1~4由于网络问题,接收到的消息序列就可能各不相同,这样就可能由于消息序列的不同导致Server1~4上的数据不一致。对 ...
题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。static int[] bits = new int[] { 1, 2, 3, 4, 5 };/** * @param args */public static void main(String[] args) {sort("", bits);}private static void sort(String prefix, int[] ...
linux查找替换字符串
- 博客分类:
- linux & shell
1、在vi中使用的查找替换方法利用 :s 命令可以实现字符串的替换。具体的用法包括::s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1:g/str1/s//str2/g 功能同上从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的 ...
HBase Metrics机制、架构
- 博客分类:
- 大数据
HBase Metrics
HBase Metrics是一种监控信息实时收集机制。它负责收集的信息有:
功能性信息(Compaction Queue、Store Files个数等)
JVM使用信息 (Heap Memory 的变化)
rpc访问信息
借助与Hadoop Metrics同样的方式,向Ganglia汇报。
Ganglia is a scalable distributed monitoring system for high performance computing systems such as clusters and Grids.
based on ...
java future模式
- 博客分类:
- java
Future介绍用过Java并发包的朋友或许对Future (interface) 已经比较熟悉了,其实Future 本身是一种被广泛运用的并发设计模式,可在很大程度上简化需要数据流同步的并发应用开发。
Future模式可以简单的看成是 Proxy 模式 与 Thread-Pe ...
in exists区别及应用
- 博客分类:
- 数据库
这两个函数是差不多的,但由于优化方案不同,通常NOT Exists要比NOT IN要快,因为NOT EXISTS可以使用结合算法而NOT IN就不行了,而EXISTS则不如IN快,因为这时候IN可能更多的使用结合算法。
Select * from tableA Where exists(Select * From tableB Where tableB.ID=tableA.ID)
这句相当于:Select * from tableA Where id in (Select ID From tableB)
对于表tableA的每一条数据,都执行Select * ...
hadoop体系结构(转)
- 博客分类:
- 大数据
简介
Hadoop Distributed File System(HDFS)是一个运行在商用硬件平台上的分布式文件系统。它和很多现存的分布式文件系统有很多相似之处。当然,和其他的分布式文件系统的区别也是很明显的。HDFS在廉价硬件平台上提供高可靠的文件服务,提供数据访问的高吞吐量,适合那些运行在大数据集上的应用。HDFS并不完全符合POSIX文件系统方面的标准,这是因为HDFS运行环境和POSIX filesystem适用的环境是不同。HDFS支持对文件系统数据的流式访问。HDFS最初是为Apache Nutch搜索引擎项目设计的。现在HDFS是Apache Hadoop的一个子项目,项 ...
memcache原理
- 博客分类:
- 服务器\架构
Consistent Hashing原理,Consistent Hashing如下所示:首先求出memcached服务器(节点)的哈希值, 并将其配置到0~232的圆(continuum)上。 然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。 如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。
memcached是怎么工作的?
Memcached的高性能源于两阶段哈希(two-stage hash)结构。Memcached就像一个巨大的、存储了很多<key,value>对 ...
java 内存区域划分
- 博客分类:
- java
堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。 堆内存分配JVM初始分配的内存由-Xms指定 ...