自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 IDEA创建maven的web工程很慢

尝试了好几次创建web工程,一度以为idea坏了. 然后网上搜索之后发现. 需要在创建过程中,加上如下配置. archetypeCatalog = internal 原因如下: archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,local,即中央仓库archetype元数据,由于中央仓库的archetype太多了,所以导致很

2017-09-18 22:39:46 863

转载 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)

第1章 引言随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失;负载均衡策略:可以降低单台机器的访问负载,降低宕

2017-07-31 09:59:39 403

原创 网络编程之epoll理解

网络编程, select, poll, epoll, file descriptor 文件描述符 . socket, 内核态用户态. IO多路复用, 同步阻塞, 同步非阻塞, netty, linux

2017-06-25 19:02:20 755

转载 Linux中的文件描述符(fd)与打开文件之间的关系

1. 概述    在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件

2017-06-25 15:59:24 22569

原创 网络IO模型及同步、异步与阻塞、非阻塞的理解

1.Linux常见IO模型 .常见IO分为下面两个流程 : (1) 等待数据准备好 (2) 从内核向进程复制数据 . 对于一个套接字的输入操作, 第一步通常涉及等待数据从网络中到达, 当所有等待分组到达时, 他被复制到内核的某个缓冲区 . 第二步就是数据从内核缓冲区复制到应用程序缓冲区 . 阻塞IO模型 : 标红部分是阻塞, 直到阻塞结束r

2017-06-24 12:01:27 541

原创 getSuperclass和getGenericSuperclass区别(java泛型和反射综合应用)

1.官方API对这两个方法的介绍 .getSuperclass : 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象。getGenericSuperclass : 返回表示

2017-06-22 13:15:37 1990

原创 HashMap的长度为什么设置为2的n次方

1. 构造函数中控制长度必须为2的n次方.首先在构造方法中, 有下面这段代码, 其中initialCapacity是我们传入的自定义map容量大小(如果不设置, 默认是16) 如果我们自定义容量, 会执行下面这段代码 : initialCapacity = 8, 这样capacity = 1, 要向左移动3次, 刚开始移动之前capacity=1, 根据移位运算, 移

2017-06-13 19:49:40 13392 3

转载 Java HashMap中在resize()时候的rehash,即再哈希法的理解

HashMap的扩容机制—resize()虽然在hashmap的原理里面有这段,但是这个单独拿出来讲rehash或者resize()也是极好的。什么时候扩容:当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值(知道这个阈字怎么念吗?不念fa值,念yu值四声)—即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。扩容(resize)就是重新计算容量,向HashMap对象里不停的添

2017-06-13 19:44:41 1581

原创 spring学习之FactoryBean

spring中有两种类型的bean, 第一种是普通bean, 另一种是工厂bean, 即FactoryBean . 工厂bean和普通bean不同, 其返回的对象不是指定类的实例, 其返回的是该工厂bean的getObject方法返回的对象 . spring内部AOP相关功能, 以及spring和mybatis整合也都使用到FactoryBean . 分析spring和mybatis整合后Facto

2017-06-08 12:55:08 316

原创 Mysql中常见日期查询

最近面试过程中有人问到:”写一个查询最近一星期的数据的sql” . 当时略感懵逼, 感觉日期这块总是很模糊 . 所以这里总结下方便后期学习查看.1.查询当前详细时间/日期/时间 . SELECT NOW(); -- 2017-06-02 09:59:52 SELECT CURDATE(); -- 2017-06-02 SELECT CURTIME(); -- 0

2017-06-02 10:22:37 1535

原创 protobuf安装和入门

Protobuf是一个灵活, 高效, 结构化的数据序列化框架, 下面将安装windows版本, 并通过一个小案例进行入门.1.下载安装 .在网上下载windows版本的Protobuf, 解压既是安装完成, 解压之后出现exe文件. 2.案例先编写一个”SubscribeReq.proto”文件 . 具体proto语法可以网上搜索, java_package : 生成java文件的包名

2017-05-23 18:57:05 535

原创 java多线程之Callable和Future

java多线程里的Callable和Future一般是成对出现, 当我们获取线程执行结果时, 需要用到他们, Callable用于产生结果, Future用于获取结果. Callable相当于计算产生结果部分, 而Future是获取计算产生结果的部分.1.CallableCallable是一个接口, 只包含call方法, 我们一般实现这个类, 然后在异步计算

2017-05-22 20:38:45 615

转载 Eclipse vs. IDEA快捷键对比大全

Eclipse和IDEA的快捷键大全

2017-05-10 10:49:14 394

原创 使用maven报错:org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0

错误:使用”mvn -version”, 出现下面错误: 应该是jdk版本不一致, 查看本地环境变量版本:”java version “1.6.0_39”” 之后更换为1.7. 此时问题出现了, 为什么更换完javahome, 但是”java -version”还是显示以前的1.6版本. 在网上找了好久,果然有人说将path中”java_home”相关配置放在最前面. 因为可能

2017-04-15 11:26:39 16601 1

原创 eclipse中禁用JS验证

步骤:右键项目, 进入选中”Properties”.找到”JavaScript”, 找到下面”include”.点击”Source”, 然后展开项目树.选中”Excluded”, 然后点击右侧”Edit”在”Exclusion pattern”部分, 选择”Add”.找到要禁止检查的js目录, 点击确定即可.截图:

2017-04-15 10:43:53 310

原创 eclipse中maven项目jar包下载失败解决办法

1.删除本地仓库中*lastUpdated*相关文件, 重新下载 http://www.cnblogs.com/mymelody/p/5616685.html2.手动下载jar包,然后构建到本地仓库中 http://www.cnblogs.com/tangshengwei/p/6341628.html

2017-04-14 19:25:44 6882

转载 UML类图中箭头和线条的含义和用法

UML类图中箭头和线条的含义和用法在学习UML过程中,你经常会遇到UML类图关系,这里就向大家介绍一下UML箭头、线条代表的意义,相信通过本文的介绍你对UML中箭头、线条的意义有更明确的认识。AD: 本节向大家学习一下UML箭头、线条代表的意义,UML中关系主要有依赖,聚合,合成,泛化和实现等,下面就让我们来看一下这些关系如何用UML箭头和线条来实现。UML箭头、线条程序关系后面的例子将针对

2017-04-13 21:14:53 1293

原创 spring中使用context:property-placeholder错误记录

问题:最近使用spring时候, 使用@value注解, 想注入配置文件中的相关属性 . 但是出现下面错误: Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘ITEM_INFO’ in string value “${ITEM_INFO}” 但是我发现我配置文件中已经配置了:<!-

2017-04-09 16:53:51 5295

转载 AbstractQueuedSynchronizer理解

ReentranLock示例 我们都知道ReentranLock的加锁行为和Synchronized类似,都是可重入的锁,但是二者的实现方式确实完全不同的,我们之后也会讲解Synchronized的原理.除此之外,Synchronized的阻塞无法被中断,而ReentrantLock则提供了可中断的阻塞下面的代码是ReentranLock的相关API,我们就以此为顺序,依次讲解.123Reentra

2017-04-07 18:24:07 399

原创 ActiveMq出现HTTP ERROR: 503错误

最近在自己机器上安装Activemq, 但是启动之后, 访问管控台, 出现HTTP ERROR: 503错误 : 于是使用”./activemq stop”停掉服务 . 使用”./activemq console”启动服务, 观察启动日志 . 果然出现下面错误 : 因为我的主机名修改为”mayuan”, 但是却没有在hosts中配置 , 所以应该去修改hosts文件 : vim

2017-04-07 12:42:57 5199 3

原创 linux修改hostname

从网上找到两种方式, 一种是临时修改, 一种是永久修改.临时修改 执行命令 : hostname newName 这种方式只能当前生效, 服务器重启之后就会失效, 回到原来hostname永久修改 vim /etc/sysconfig/network 配置 : HOSTNAME=newName 当时这种方式必须重启才能生效 . 所以要做到不重启, 并且永久生效, 可以综合两种方式,

2017-04-07 12:18:01 606

原创 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

spring整合mybatis, 项目启动调用相应dao方法出现下面错误 : “org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)” 网上有几种说法: 1. mapper.xml的命名空间(namespace)是否跟mapper接口的包名一致? 我观察我的项目是没有这个问题. 2

2017-04-06 17:40:44 280

原创 linux安装单机版solr

由于solr是java开发的, 所以安装之前必须安装jdk, 并且使用tomcat作为web容器, 所以也得先安装tomcat . 开始安装上传solr-4.10.3.tgz.tgz到linux指定目录(/usr/local/application), 并且解压. tar -zxvf solr-4.10.3.tgz.tgz 创建目录”/usr/local/application/sol

2017-04-06 15:47:21 888

原创 linux上安装nginx

将安装包放在指定目录下. 解压到指定目录 . tar -zxvf nginx-1.6.2.tar.gz -C /usr/local/application 安装之前的准备 下载所需要的依赖库文件: yum install pcre , yum install pcre-devel yum install zlib , yum install zlib-devel进行confi

2017-03-30 21:10:15 228

转载 java内存模型

转自:http://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html 1. 概述  多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而

2017-03-24 15:18:31 150

原创 spring的aop:advisor和aop:aspect

概念:上网找关于这两个概念区别:第一种说法 : 1、Adivisor是一种特殊的Aspect,Advisor代表spring中的Aspect 2、区别:advisor只持有一个Pointcut和一个advice,而aspect可以多个pointcut和多个advice第二种说法: aop:aspect实际上是定义横切逻辑,就是在连接点上做什么,aop:advisor则定义了在哪些连接点应

2017-03-23 18:53:00 2044

原创 java-ThreadLocal学习记录

看了各路大神总结关于ThreadLocal的知识, 我也做了相关笔记, 然后在这里记录, 方便后面生疏之后再次学习.1.基本概念ThreadLocal不是用来解决对象共享访问问题的,而主要是提供了保持对象的方法和避免参数传递的方便的对象访问方式。归纳了两点: 每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保持到其中,各管各的,线程可以正确的访问到自己的对象。 将

2017-03-23 13:53:39 211

原创 mybatis一对一,一对多查询

最近重新看了一遍mybatis, 对这块进行总结, 方便后期学习工作查询.准备:spring和mybatis的环境搭建这里就不赘述 . 准备实验的两个实体类: Blog:public class Blog { private String blogId; private String title; private Author author;

2017-03-22 20:00:41 447

原创 Rocketmq集群搭建步骤

最近在学习RocketMq, 根据网上的搭建步骤, 成功搭建了RocketMq集群环境, 然后在这里做记录, 方便后面学习查看 . 了解几种集群方式:单Master方式 风险比较大, 一旦Broker重启或者宕机, 将导致整个环境不可用, 不建议线上使用.多Master模式 一个集群中没有slave, 全是master, 例如2个master或者3个master. 优点:配置简单, 单个M

2017-03-22 15:31:24 1429

原创 java设计模式-适配器模式

最近在看springmvc, 其中使用了适配器模式, 然后我根据框架中思想, 写了一下我理解的适配器模式 . 适配器接口 :public interface HandlerAdapter { public void handle(Object handler); public boolean support(Object handler);}具体适配器OneHandlerAdapter

2017-03-22 12:58:47 174

原创 redis集群搭建步骤

本人共有三台虚拟机–192.168.223.144 192.168.223.145 192.168.223.146 . 计划每台机器创建两个redis实例, 每台都创建7000和7001两个端口 . 所以一共6个节点, 3个master, 3个salve.安装前:安装前, 需要明确几个概念.make 这一步是用来编译的,它从Makefile中读取指令,然后编译 , 大多数的源代码包都

2017-03-18 00:07:48 350

原创 java泛型总结学习

什么是泛型?泛型 , 即 “参数化类型” . 提到参数 , 最熟悉的就是定义方法时有形参 , 然后调用方法传递实参 . 那么参数化类型如何理解? 就是将类型由原来具体的类型参数化 , 类似于方法中的变量参数 , 此时类型也定义成参数形式 , 然后在调用的时候传入具体的类型 . 下面采用泛型后, 当通过List<’String> , 就相当于给List传递了参数类型是String, 限定了集合

2017-03-17 17:50:25 255

原创 java设计模式--代理模式

代理模式分为静态代理和动态代理 . 静态代理:接口public interface Subject { public void request();}代理类public class ProxySubject implements Subject { private Subject subject; public ProxySubject(Subject subject

2017-03-16 19:11:56 162

原创 java设计模式--观察者模式

比较抽象的概念 : 抽象被观察者角色: 把所有对观察者对象的引用保存在一个集合中,每个被观察者角色都可以有任意数量的观察者。被观察者提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色: 为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。具体被观察者角色: 在被观察者内部状态改变时,给所有登记过的观察者发出通知。具体被观察者角色通常用一个子类实现

2017-03-16 15:36:56 200

原创 java设计模式-工厂模式

简单工厂:又称为静态工厂方法模式, 组成 : (1) 工厂类角色 : 本模式核心, 含有一定的商业逻辑和判断逻辑, 用于创建产品 . (2) 抽象产品角色 : 一般是具体产品继承的父类或者实现的接口 . (3) 具体产品角色 : 工厂类所创建的对象就是此角色的实例, 在java中由一个具体类实现 .

2017-03-16 14:41:47 222

转载 HashMap原理分析

1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。      数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表那么

2017-03-15 17:44:42 156

原创 java设计模式-单例模式

对一些重要资源的访问, 有时需要实例创建只有一份, 那么实例创建就需要用到单例模式 . 恶汉式:在类初始化时候就加载了对象, 可以不用考虑多线程问题 . 缺点 : 如果对象创建比较耗资源, 提前加载会耗费性能 . /** * 恶汉式 * @author 张延 * */public class SingleInstance { // 类初始化就加载这个对象, JVM初始化是线程安全

2017-03-15 16:18:16 169

原创 Zookeeper实现分布式锁

1.实现步骤首先要创建一个锁的根节点,比如/mylock。想要获取锁的客户端在锁的根节点下面创建znode,作为/mylock的子节点,节点的类型要选择 CreateMode.PERSISTENT_SEQUENTIAL,节点的名字”lock-“,假设目前同时有3个客户端想要获得锁,那么/mylock下的目录应该是这个样子的。 lock-0000000001,lock-0000000002,l

2017-03-14 17:54:53 480

原创 java中String学习

String的不可变性 一旦一个String对象在内存中创建, 它将不可改变, 所有String类中方法并不是改变String对象自己, 而是重新创建一个新的String对象 . 第一行在常量池中创建一个”abc”对象, 第二行进行截取, 其实是重新创建一个对象, 然后让a重新指向这个截取对象 . 但是原来”abc”对象并没有变化 , 只是没有引用指向它, 最后被垃圾回收 .

2017-03-14 17:12:25 283

原创 Zookeeper的Watcher

Zookeeper观察机制 服务端只存储事件的信息,客户端存储事件的信息和Watcher的执行逻辑.ZooKeeper客户端是线程安全的每一个应用只需要实例化一个ZooKeeper客户端即可,同一个ZooKeeper客户端实例可以在不同的线程中使用。ZooKeeper客户端会将这个Watcher对应Path路径存储在ZKWatchManager中,同时通知ZooKeeper服务器记录该Client

2017-03-14 14:21:47 889

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除