- 博客(27)
- 资源 (3)
- 收藏
- 关注
转载 UML之类图
类图类图用于描述系统中所包含的类及它们之间的相互关系。一个类分为三个部分:类名、属性、方法。类名 如果类名是正体字,说明类是具体的类,如果是斜体字,说明类是一个抽象类。如果是接口,在类上回有<<interface>>的标识。属性列表 属性可以是public,private,protected,分别使用+,-,#表示冒号后面是属性的类型方法列表 方法也可以是public,private,
2017-10-16 20:28:24
610
原创 Java NIO完整总结
一、概述Java NIO从JDK1.4开始出现,它只有一个目标:提高IO效率。老的IO包其实也都用NIO重新实现过,也可以利用NIO的一些特性提高效率,即使不写NIO的代码,平时使用IO也都用到了NIO的技术,只是隐藏到了底层的实现中。NIO的高效率来自于类似操作系统IO处理的结构方式,也是NIO的核心部分:channel(通道)buffer(缓冲区)selector(选择器)IO与NIOI
2017-03-27 20:41:17
464
原创 大型网站构建:三、消息中间件
大型网站构建五、消息中间件当服务之间需要异步化和解耦,这时需要消息中间件来完成。当系统A自己的逻辑完成后需要通知其他系统,但是这个通知和系统A本身的逻辑并没有直接依赖关系,如果通过同步调用来告诉其他系统的话会使系统依赖太多而变得太重,而且如果有多个系统需要通知的话会使链路变得十分复杂,并且性能影响会很大。这时可以使用消息中间件,系统A只需将消息发送给消息中间件即可,由消息中间件来负责消息的下发,如
2016-12-28 20:01:56
949
原创 大型网站构建:二、服务化框架
SOA概述当我们的网站系统越来越复杂,多个应用并存,业务之间互相依赖,越来越臃肿的时候,我们就要想办法把这些应用拆小了,一些共用的功能可以独立成服务供大家使用。这时候就需要采用服务化的架构,将底层的功能拆分成一个个服务提供给上层应用来调用。采用服务化后的网站架构如下,在原来的应用和底层的数据库、缓存系统、文件系统等之间增加了服务层。SOA(Service Oriented Architecture)
2016-12-19 16:21:13
1226
原创 集群Session的解决方案
基于http协议本身的限制,我们开发web应用的时候经常使用到session来支持同一个用户的会话状态。(了解http协议参考另一篇文章《Http协议解析》) 在应用系统进行分布式部署之后,原本的单机同一个session变成了多台机器,多个session,同一个用户访问的时候可能一会请求到机器A,一会请求到机器B,会发生session不一致而导致会话丢失。 解决集群session问题一般有以下几
2016-07-26 22:44:37
715
原创 大型网站构建:一、概述
对于目前学习,我们最开始建立的网站一般都是在单机上的,当单机服务器支撑不住的时候,就需要分布式系统,来提升系统的处理能力。一般情况,处理能力关注的是CPU、内存、磁盘和网络。当这些指标超过我们预估的阈值时,表示我们服务器可能快要达到瓶颈了。 那分布式系统有什么好处呢:购买单颗处理器,处理器性能越高,要付出的成本就越高,性价比越低。单颗处理器是有自己的瓶颈的,不是想要更高性能的处理器,
2016-07-18 20:16:17
651
原创 Java序列化
Java序列化就是将Java对象转换成字节流,可用于持久化存储,或者网络传输等。反序列化就是将字节流再转成对象。1、序列化使用在Java中,类实现了java.io.Serializable接口就可以被序列化。Java的枚举默认继承类java.lang.Enum也实现了Serializable接口,所以枚举类型对象都是默认可序列化的。另外数组也是可以序列化的。那通过实现Serializable的类如
2016-07-11 16:24:06
379
原创 负载均衡的方案
负载均衡:在计算机集群、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。负载均衡既可以采用硬件实现,也可以采用软件实现。比较知名的F5负载均衡器,就是基于硬件实现的,性能上优于大部分软件方式,不过成本也比较昂贵。大部分用户都会选用软件实现的方式来解决。 (下面图片来自网络)负载均衡方案1.HTTP重定向负载均衡 这种适用
2016-06-13 20:31:52
647
原创 JVM系列:四、Java类加载机制总结
Java程序是运行与虚拟机之上的,程序中使用到的类元数据由虚拟机先加载进内存才可以使用。 虚拟机的类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。类加载的时间Java的类型加载和连接过程都是在程序运行期间完成的。类的生命周期: 1.加载 -> 2.连接【2.1.验证 -> 2.2.准备
2016-05-16 22:35:14
484
原创 IO模型:同步与异步,阻塞与非阻塞
Unix下的IO可以区分为5种I/O模型:阻塞式I/O非阻塞式I/OI/O复用(select和poll)信号驱动式I/O(SIGIO)异步I/OUnix下一个输入操作可分为两个步骤:等待数据准备好从内核向进程复制数据对于一个网络I/O的输入操作也是一样:等待数据从网络到达,复制到内核中的某个缓冲区把数据从内核缓冲区复制到进程缓冲区
2015-03-21 15:45:27
967
转载 mysql分表的3种方法
一,先说一下为什么要分表当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1,接收到sql; 2,把sql放到排队队列中; 3,执行sql; 4,返回执行结果。在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二
2015-03-13 16:11:03
357
原创 二叉查找树
二叉树是一种很好的存储结构,通过二叉树衍生的更高级的如红黑树,AVL,SBT等在各个领域程序,算法中都常会见到它的身影。 二叉查找树是具有以下性质的二叉树: 1、若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2、若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3、它的左、右子树也分别为二叉查找树。它的搜索,插入,删除的复杂度等于树高,期望O(log
2015-02-28 23:11:44
410
翻译 Redis在多实例下对数据分区
分区是将数据分割到不同的Redis实例中的过程,所以每个Redis实例只包含所有key的一部分(子集)。这篇文章的第一部分介绍分区的概念,第二部分介绍Redis分区的方案。分区的好处Redis的分区主要有两个目的: ·让数据库存储空间更大了,使用了所有服务器的内存之和。如果不使用分区,将受一台服务器的内存限制。 ·将多个服务器,计算能力,网络带宽等规模化了。分区基本
2015-02-02 11:32:20
3334
翻译 Redis命令快速检索
总结了Redis的命令,希望能快速检索到想要的命令。键(Keys)DEL key [key ...] 删除一个或多个key。返回:删除的个数DUMP key 返回指定的key序列化后的值,用RESTORE可以反序列化key,可用于数据的转存EXISTS key 查询一个key是否存在。返回:1-存在;0-不存在EXPIRE key seconds 设置一个key的过期的秒数。返
2015-01-30 16:55:32
1044
原创 自己实现Http服务器:二、实现过程
要实现一个Http服务器并不是一件容易的事情,需要对网络IO十分熟悉,并且对Http协议的规范了如指掌。Http规范可以参考我的上一篇文章《一、Http协议解析》。实现Http服务器并不是短短几十行代码就能实现的,当然,你要做得十分简陋我也就不多说了。所以我就不把大量的代码给贴出来,让人觉得长篇大论似的。这里我用图文的形式,尽量把Http服务器的实现过程详细的展示出来,希望做到言简意赅
2015-01-14 11:35:33
664
原创 Java 集合源码分析及总结
Java的集合容器这块是平时开发中使用到最多的Java类库了,什么情况下应该使用那些容器,这些容器的实现机制又都是怎样的?最近重新仔细地研究了Java的集合这块知识以及JDK的源码,总结一下自己的心得。下图中对于Java的集合api,有一个比较全面的展示。Java容器库中分为两类(基本接口)1、集合(Collection):通过一个或多个规则存储的一序列
2015-01-05 15:28:02
615
原创 自己实现Http服务器:一、Http协议解析
之前总结过一篇TCP/IP协议的文章,而Http就是建立在TCP的基础之上的。TCP、UDP属于传输层协议,而Http是属于应用层的协议。Http是超文本传输协议的缩写。协议详细内容参考RFC2616。由于面向文本的,所以使用ASCII编码。Http特点1. 客户/服务器模式,支持基本认证和安全认证(Https)2. 简单快速3. 灵活:允许传输任意类型数据,通过C
2015-01-05 10:47:20
5814
原创 MySQL的安全管理
当服务器安装完MySQL之后就需要对其进行帐号分配了。我们需要确保哪些帐号能本地访问,哪些帐号能其他机器访问,这些帐号又都有哪些的权限。比如线上数据库开发者们具有读表的权限,而DB们读写都有权限,根据用户登录的地点限制访问权限等。下面介绍下具体如何进行MySQL安全的管理。注意:在对MySQL的所有操作中尽量不要使用root帐号(仅在不能用其他管理帐号时使用)可以在mysql数据库
2014-12-04 15:34:58
873
原创 Java中的迭代器Iterator和for-each循环
迭代器(Iterator)的工作就是循环一个序列,依次获得里面的对象,这里不再需要程序去关心序列的底层结构。迭代器的接口一共就三个方法:public interface Iterator { boolean hasNext(); E next(); void remove();} 通过方法名很容易猜到它的目的,在这基础之上还有个ListIterator接口
2014-12-02 15:36:22
5437
原创 Redis快速入门
缓存这块一直是大并发的一个重要模块。Redis是一个开源高性能K/V存储系统,key可包含多种数据结构,而且还支持持久化等功能,是近几年迅速成长起来的用于缓存的系统,大有超越Memcached之势。Redis在很多地方更优于Memcached。不过这两个网上比较的已经很多,目前各有优点吧。 下面介绍下Redis的环境搭建,十分简单,只需要几个步骤即可。 环境搭建首先获取re
2014-11-26 11:38:35
306
翻译 Redis数据类型
字符串(Strings)字符串是Redis中一种最基本的值。Redis的字符串是二进制安全的,也就是意味着一个Redis字符串能保存任何类型的数据,例如一个JPEG图片、一个序列化后的Ruby对象。一个Redis字符串可存最大512MiB(兆字节)。你可以对Redis字符串做很多有趣的事,例如: 通过后面的命令可以使用字符串作为原子计数器:INCR、DECR、INCRB
2014-11-25 17:57:34
402
原创 JVM系列:三、性能监控及工具
Sun JDK自带监控和故障处理工具jps显示Hotspot虚拟机继承jstat收集Hotspot虚拟机的运行数据jinfo显示虚拟机配置信息jmap生成虚拟机的内存转储快照(heapdump文件)jhat用于分析heapdump文件,建立
2014-11-13 11:04:45
2016
原创 Java内存溢出错误:OutOfMemoryError异常分析
在JVM的运行时数据区,除了程序计数器之外,其他区域都有可能会产生OutOfMemoryError异常。Java堆溢出Java堆溢出时会报下面的异常错误:java.lang.OutOfMemoryError: Java heap space 在启动虚拟机的时候可以加上参数:-XX:+HeapDumpOnOutOfMemoryError,让虚拟机在出现内存溢出异常时Dump出
2014-10-29 00:17:45
3016
原创 JVM系列:二、JVM内存回收
程序计数器、虚拟机栈、本地方法栈这三个区域的生命周期是和线程同步的,并且内存分配是在编译期就知道了,所以在方法结束或线程结束时,这三个区域的内存自然就回收了。而Java堆和方法区是在程序运行时才动态分配和回收内存,垃圾收集器所关注的就是这部分的内存。判断对象是否死亡堆中几乎放着所有的对象实例。垃圾收集器判断堆中对象是否“死去”有这几种方法:1、引用计数法当有一个地方引用该对象,计数
2014-10-28 17:32:46
511
原创 TCP/IP协议族
TCP/IP协议族,在网络中TCP/IP协议族是用的最多的协议族,现在互联网上也都是基于该协议族,它的另一个名字叫Internet协议族。这里我对TCP/IP协议进行综合的总结下。
2014-07-22 18:10:59
696
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人