- 博客(82)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 MongoDB的基本配置与操作
MongoDB是用C++编写的,开源跨平台分布式的,非关系(NoSQL)文档型数据库,其可存储海量数据,主要用于查询操作。 NoSQL数据库主要有四大类。 键值型数据库,如MemcacheDB、Redis。 列数据库,如HBase。 文档型数据库,如MongoDB。 图形数据库。安装与配置 远程连接到Linux服务器。 cd 部署目录。 wget url—
2016-09-22 11:06:56 263
原创 Zookeeper
apache hadoop下的一个开源可分布式部署的子项目,为分布式部署的应用提供分布式服务。其采用结构化存储分布式应用的数据,存储结构类似树形,由节点znode组成,每个节点可以有子节点,可以存储数据,被到根目录的路径唯一标识。znode可以存数据,但不代表其是用来存储数据的,目的是监控这些数据的变化,从而做出相应的动作。在分布式环境下,为保证效率,避免单点故障,zookeeper本身也要被分布式部署到集群上。
2016-09-21 19:31:17 411
原创 架构——Nginx
像Apache一样,作为一台Web服务器。 通常将静态页面文件和资源部署在Nginx上,可直接访问。 将Nginx部署在客户端和服务端集群之间,作为一台反向代理服务器,实现请求的负载均衡。 客户端发送请求给Nginx服务器。 若请求的为静态资源,可在Nginx上直接找到,由Nginx处理并响应。 若请求的为动态资源,由于在Nginx上找不到,其会查找配置文件,从中找到服务集群的
2016-09-21 13:35:02 347
原创 Web——请求转发与响应重定向
请求转发Forward A发请求给B,B收到A的请求后将其原样转发给C,C对A的请求处理后响应A。整个过程A的请求地址不变,始终为B。A不知道C,虽然A的请求最终由C处理并响应,但A认为是B完成请求并响应。 A没有直接请求C,请求由B转发给C。由于http请求报文中有请求的发送者A和接受者B,所以C仍然知道请求是由A发出的,并对A做出响应而不是B。 整个过程只发生了一次请求,来自A,一
2016-09-20 14:46:05 791
原创 Web——过滤器与拦截器
过滤器Filter,本质为Servlet。 请求被服务端接收前,先由过滤器接收并处理。 过滤器可将请求转发给原服务端。 过滤器可可将请求响应重定向到其它服务端。=========================================== 拦截器Intercept,本质为AOP。 请求到达服务端后,执行服务端的方法之前或之后,先由拦截器拦截并处理。 拦截器可屏
2016-09-20 14:22:49 226
原创 Struts2的整体流程
struts2的前身是WebWork,后改名为struts2,其与struts1没任何关系。 请求先经controller层,本质是一个过滤器Filter,其对请求的url进行判断。若为页面,进行请求的转发,保证请求数据不会丢失;若为action,从配置文件找到对应action类的完全限定名,并通过反射加载此类,同时生成其实例。 Filter将生成的实例注入接口Action的实例,并调用配置中给出的
2016-09-20 14:14:38 580
原创 Web——开发流程
构建项目Eclipse下构建基于Maven的多模块Web项目 Maven自带工具archetype(原型),可以通过Maven命令,根据pom.xml来构建项目,比较繁琐,直接用Eclipse完成。 打开Eclipse,选择File->New->Project->Maven->Maven Project,选择一个合适的Archetype,其中quickstart可以创建jar或pom项目
2016-09-19 15:28:04 274
原创 Web——开发环境搭建
安装与配置JDK 从官网下载最新版本的JDK安装包并安装。 新建环境变量JAVA_HOME为JDK的安装目录。 新建环境变量CLASSPATH为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。 在环境变量Path中添加%JAVA_HOME%\bin,win+R->cmd->java -version验证是否安装成功。安装与配置
2016-09-19 14:59:52 308
原创 Spring的MVC
三层架构是项目架构,将整个项目从逻辑上划分为表现层ui、业务逻辑层bll、数据访问层dal。由于ui层存在显示逻辑、控制逻辑和业务逻辑的混淆问题,提出了mvc解决方案。其将ui层进一步划分为显示层view,控制层controller、模型层model。 spring的mvc中,view层仅完成显示逻辑;controller层分前端控制器和页面处理器,前端控制器DispatcherServlet仅完成控制逻辑
2016-09-18 11:29:44 297
原创 Solr
apache下的开源项目,基于servlet开发的java web应用,底层基于lucene,lucene是一个全文检索的api。可独立运行,需要部署在类似tomcat的servlet容器中,随着web服务器的启动而启动。对外提供http接口,来实现索引的增删改查操作。 schema类似定义表结构,indexed是否索引,若字段作为查询条件,设为是,查询快。multiValued是否多值,该字段以数组的形式
2016-09-09 09:33:00 199
原创 Map
java.util.Map,接口,映射结构,无序,key不可重复,常用的实现类有HashTable、HashMap、ConcurrentHashMap。=========================================== HashMap非线程安全,用哈希表存放键值对,处理冲突的方法类似链地址法。内部类Node实现了Map接口的内部接口Entry,是一个单链表结点结构,有key,valu
2016-09-08 15:50:59 322 1
原创 Struts2中Action内的两种异常处理方式
假设项目为dao、service、web.action三层。正常的异常处理流程为,从底层dao开始向上抛throws,抛到上层service层后try-cache捕获处理。 web.action只负责调用服务service,本身不做业务,可将多个服务封装事务,该层的异常处理——可以try-cache自己捕获处理;可以throws,继续上抛给struts2框架,但struts.xml内要配置global-exc
2016-09-08 15:21:49 2957
原创 Struts2与Spring整合
有两种整合方式,都必须引用struts2-spring-plugin-xx.jar。```// 方式一,将Action实例的构建交给spring的ioc容器来完成// 注册Action,由于Action对应的是Request作用域,scope必须使用prototype,缺省值为singleton<bean id="xxAction" class="....XxAction" scope="protot
2016-09-07 14:34:00 235
原创 Git的分支
git的版本库初始只有一个默认名为master的分支,其允许从某个分支上来拉取无限个数的新分支。实际中,远程版本库的master分支是稳定版本,仅用于发布上线用,不可在其上工作。管理者需要在远程版本库的master分支上拉取若干开发分支给开发人员使用。 // 从远程版本库clone默认分支 git clone url // 从远程版本库clone指定分支 git clone –b 分支名 url
2016-09-06 14:56:44 250
原创 Git的暂存区与回滚
// 查看当前工作区中文件的状态 // Untracked未跟踪,不被git管理的,通常为新创建的文件 // Changes to be not updated改变但未被暂存 // Changes to be committed改变被暂存但未被提交 git status // 暂存区属于版本库,对应.git目录下的index文件,用于存放工作区中已修改且被add的文件 // 将被修改过的文件
2016-09-06 13:48:22 3852
原创 Git的工作区和版本库
git是开源跨平台的分布式版本控制管理工具,由于分布式不存在客户端和服务端,每台机器都是等价的,都有工作区和版本库,开发人员无需联网就可直接在本地进行工作,工作成果可直接保存到本地版本库,任何两台机器都可通过相互交换各自的版本库来更新信息。为确保时刻都能进行信息交换,通常选择一台24小时运行的机器作为远程版本库,所有开发人员以此为中介来进行信息交换。由于每台机器都维持一个版本库,即使远程版本库崩溃也不会有任何问题
2016-09-06 11:15:33 1654
原创 Tomcat——程序架构
已发布的Tomcat工程工程名—— | |——WEB—INF—— | | |——classes—— | | | |——包名.model/vo/do | |
2016-06-05 21:20:29 303
原创 Tomcat——配置详解
Tomcat的配置主要通过安装目录下conf子目录中的server.xml文件来完成。Tomcat由若干组件构成,每个组件对应server.xml中的一个结点,以下是该文件的结点结构:<?xml version='1.0' encoding='utf-8'?><Server> <Listener /> <GlobaNamingResources> <Resource
2016-06-05 20:24:46 1316
原创 Tomcat——基本概念
web服务器 web服务器是安装在服务端主机上实现了http协议的软件,也叫http服务器,如微软的IIS,当前排名第一开源免费的Apache(个人认为,凡是实现了应用层协议的软件都可以叫web服务器,如ftp服务器,smtp服务器,只不过我目前只关心http服务)。 必备的功能是对某个端口(通常是80端口)循环监听,被动接受客户端发送到该端口的http请求,并进行响应。 根据这个原理
2016-06-05 20:20:38 2011 1
原创 Tomcat——安装详解
下载核心包 直接百度搜索Tomcat,一定从官网下载合适的Tomcat安装包。官网上有Linux版本,Windows版本。Windows版本有32bit的,64bit的,zip的、exe直接安装的。不同版本存在与jdk的兼容问题,如jdk1.4搭配Tomcat4.0,j dk1.7搭配Tomcat7.0(不绝对,实际中可以看Tomcat安装目录下的RUNNING.txt文件)。 我习惯下载z
2016-06-05 20:18:20 314
原创 设计模式——代理模式
代理模式 一个类A,被代理类,有一个功能a要提供给其它的类使用,如类C,使用类。为了降低类A和类C的耦合度,要求类C不能直接访问类A。类A将自己的功能a委托给类B,代理类,而类C通过类B来使用类A的功能a。 类A和类B有共同的接口a,类B对接口a的实现可以调用类A对接口a的实现,同时可以附加自己额外的操作,以适应其它类的需求。多个类对类A的a功能有着不同的需求,而这种需求的不同无需去改变类A,只
2016-05-05 11:42:12 216
原创 设计模式——装饰者模式
装饰者模式 通过对象组合的方式,为一个现有的类(被装饰者)添加一些新的功能。根据合成复用原则,避免使用继承的方式来扩展类。类继承会增加类的复杂度,且必须在编译之前确定要扩展的功能,静态的。类似java io的包装流,一层层外包。//原始被装饰者接口public interface Human { public void wearClothes();}//原始被装饰者接口实现类pub
2016-05-04 17:57:25 214
原创 设计模式——适配器模式
适配器模式 一个类提供了一个接口的实现,而另一个类要求通过另一个接口来使用该实现。两个接口不同肯定不能一起工作。根据开闭原则,接口确定好后是不能修改的,此时需要通过适配器来完成接口的转换。在原有的实现类或接口外包一层后,变为使用者可以使用的类或接口。 类适配器模式,通过继承实现。 //原有的接口public interface Old { public void oldMethod
2016-05-02 20:21:37 173
原创 原型模式
重写类的clone方法,仅在第一次创建该类的实例时使用构造方法创建,之后该类实例的创建都是直接调用第一次创建实例的clone方法生成。clone方法是java的本地方法,其内容的拷贝直接跳过构造方法在内存中完成,效率比new高很多。对于需要被重复创建的复杂对象,使用原型模式会明显提高效率。```public class ProtoType implements Cloneable { public sta
2016-05-02 11:27:45 257
原创 建造者模式
一个复杂的对象有很多的属性,那么在构造这个对象的时候,对其各个属性的初始化值就存在很多的可能。不同的初始化值,实际创建出的是符合某种需求的不同的实例。通过一个构造器类来对这些属性进行专门的初始化,从而构造出符合我们要求的实例。Android中的Dialog类的实例的创建方式,使用的就是建造者模式。```// 抽象类public abstract class Dialog { // 包含复杂对象的全部属性
2016-05-02 10:39:16 306
原创 单例模式
```// 单线程下懒汉式单例// 该方法在多线程下可能会创建出多个实例,由此仅适用于单线程环境public class Singleton { private static Singleton single = null; // 私有构造方法,仅能内部自己使用,外界无法访问,由此外界无法创建该类的实例 private Singleton() {} // 对外提供的公共接口,返回类的唯一实例 pub
2016-05-01 11:58:12 205
原创 抽象工厂模式
```// 抽象工厂模式// 有多个抽象子产品接口,每个抽象子产品接口都可以扩展多个具体子产品类的实现// 一个抽象工厂接口,可以扩展多个具体工厂类的实现,且每个具体工厂类能够创建多个具体子产品类的实例// 若一个产品由若干子产品组成,那一个具体工厂要形成可使用的具体产品,就必须通过生产多个具体子产品来实现// 抽象子产品接口public interface Engine {}public inter
2016-05-01 10:58:40 312
原创 工厂方法模式
```// 简单工厂模式// 一个抽象产品接口,可扩展多个具体产品类的实现// 一个具体工厂类,可创建多个具体产品类的实例// 抽象产品接口,为标准,不可变,对修改关闭public interface BMW {}// 具体产品类,实现抽象产品接口,对扩展开放pbulic class BMW320 implements BMW {}public class BMW523 implements BMW
2016-05-01 10:40:33 284
原创 设计模式概述
设计模式是方法论,问题解决方案,解决的是我们在开发中经常遇到的问题,其将解决该问题的方法步骤,以及共性内容全部抽象出来,形成一种统一规范的解决方案。设计模式有七大原则,分三大类,共二十三种。 开闭原则:OCP,Open Close Principle,为总原则。面向抽象编程时,对标准的扩展开放,对实现的修改关闭。在面向接口或抽象类编程的时候,会使用此原则。 单一职责原则:指一个类只做一件事,不能存在导致该
2016-04-30 21:36:00 271
原创 Java网络编程的框架
三层架构与MVC的区别三层架构是软件架构,是在整体上将整个软件系统从逻辑上划分为三层,即三个逻辑组件组成,目的是实现组件内的高内聚和组件间的底耦合,这三层分别是,表现层UI,业务逻辑层BLL,数据访问层DAL。 MVC是一种设计模式,三层架构的UI层存在显示逻辑,控制逻辑和业务逻辑的混淆,为了解决三层架构的UI层存在的问题,出现了MVC设计模式,MVC将UI层进一步划分成三层,显示层View,控制
2016-04-30 20:43:54 2303
原创 Java的字符串
String类String为不可变字符序列,实体内容确定后,包括实体堆内存和常量池,不可改,若要修改,必须重新生成实体内存来存放修改的值,且引用指向新生成的实体堆内存。 对于经常改变的字符串,不要使用String,因为每次改变都会生成新的实体,自然无引用的实体就会增多,导致GC开始工作,从而影响系统的性能。 String的replace方法,用于替换String中指定的字符,但不是在原Strin
2016-04-30 20:41:23 557
原创 正则表达式
正则表达式,又叫模式,实际是一个特殊的字符串,串中含有一些被称为元字符的特殊含义字符,元字符可代表若干字符。 模式匹配指,先给出一个指定的模式或正则表达式,可解为标准,下一步就是寻找与此模式匹配的字符串。给出一个要参与匹配的字符串,此字符串是否与正则表达式匹配,有两个层面:整个参与匹配的字符串完全与正则表达式匹配;仅仅是参与匹配的字符串中的某个子串完全与正则表达式匹配,符合任何一个标准都算该字符串被匹配成功。
2016-04-30 20:38:57 809
原创 Java的线程
操作系统创建一个进程并为进程分配资源,而后为进程创建一个内核级线程并为其分配处理器来运行jvm。jvm加载应用程序到内存并找到main方法,创建一个用户级线程或主线程来运行应用程序,应用程序可以调用jvm的服务来继续创建多个用户级线程。事务的原子性是指代码块的执行要么全做,要么全不做。操作系统的原子性是指代码块的执行不可分隔或中断,必须一次性全部执行完成 线程在未进入死亡状态时,不要再为其分配实体或new操作
2016-04-30 20:36:53 3903
原创 Java的流
用于程序与设备之间进行数据传送的流类似一根管道,仅源和目的地两个端,且只有将源的数据传送到目的地一个传送方向。输入流是将设备的数据输入到程序,设备是源;输出流是将程序的数据输出到设备,程序是源,输入输出均是相对使用该流的程序来说的。 java有字节流和字符流,任何数据在计算机内最终都会被转成二进制比特的形式来进行处理或存储,由此字节流可以传送所有的数据类型,而字符流只能处理字符类型的数据。外设或网络上的资源在
2016-04-30 20:32:01 493
原创 Java的类加载
类仅在用到时才会被加载,且仅加载一次。原则是延迟加载,能不加载就不加载。 类被加载的触发时机——调用类的static成员,但static的final成员若在编译时就确定值不会加载类;new对象;加载子类会先加载父类。 类加载时先根据书写顺序加载父类的静态变量与静态代码块,再根据书写顺序加载子类的静态变量与静态代码块,静态成员仅被加载一次,静态方法被动调用。 创建实例时先根据书写顺序初始化父类的非静态
2016-04-30 11:45:10 3726
原创 Java基本概念
如果一个类没有无参构造方法,那么这个类的子类构造方法必须显示的调用super(参数),否则默认调用super()基类的无参构造方法,而基类没有无参构造方法,会导致错误。 静态代码块,static {...},仅在类加载的时候执行且只执行一次。经过测试发现,工程下的类仅在用到的时候加载,不用时不会加载。 Java中基本数据类型所占字节数,char 2字节;byte 1字节;short 2字节;i
2016-04-29 20:21:33 389
原创 Arrays.sort()的内部排序机制
数组的操作可以使用java提供的工具类Arrays,其中Arrays.sort()方法用于数组的排序。 基本数据类型数组的操作,使用经过优化的快速排序算法 当数组的规模较小时,直接插入排序的比较次数并不会比快排或者归并多多少,其效率反而不如简单排序算法,所以在数组规模小于7时,使用直接插入排序, 当数组规模较大时,合理的选择快排的枢轴元素,如在规模小于40时,在数组的首,中,尾三个位置上的数,取中间
2016-04-29 20:03:17 5407
原创 反射
```// 任何一个类都有一个静态的class变量,为Class类型,用于描述一个类或接口的结构信息A a = new A();// 接口同样具有此特性Class c = a.getClass()Class c = A.class// 基本数据类型的类包装,如Integer.class指Integer引用类型,Integer.TYPE指int基本类型// c可以描述任何一个引用类型的结构,?必须是引用
2016-04-29 19:13:08 299
CPrintDialog WinCE不能用怎么办
2014-10-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人