摘要:
一、搭建Tomcat服务 下载安装JDK和Tomcat就不说了,太简单了。由于是win7单机环境测试,启动多个Tomcat服务可以通过在server.xml配置文件中修改端口实现。准备两个Tomcat,比如使用两个不同版本的Tomcat(相同版本可以更改下文件名或者放到不同目录下) 1、创建项目 在 阅读全文
posted @ 2017-05-10 17:48
撒_旦
阅读(370)
评论(0)
推荐(0)
摘要:
step1、下载 下载地址:http://zookeeper.apache.org/releases.html 将下载的压缩包放到用户家目录下(其他目录也可以) step2、解压 [plain] view plain copy $tar –zxvf zookeeper-3.4.6.tar.gz [p 阅读全文
posted @ 2017-05-10 17:47
撒_旦
阅读(602)
评论(0)
推荐(0)
摘要:
一、MongoDB简介 1、文档数据库 MongoDB是一款开源的文档型非关系数据库,具有高性能、高可靠性和自动扩展等特点。MongoDB中的每一条记录是一个文档,其数据存储结构为键/值对,类似JSON对象。每个字段的值可以包含其他文档、数组、文档数组。如: 使用文档的好处: 在许多编程语言中文档( 阅读全文
posted @ 2017-05-10 17:46
撒_旦
阅读(261)
评论(0)
推荐(0)
摘要:
1. 按日志级别区分文件输出 有些人习惯按日志信息级别输出到不同名称的文件中,如info.log,error.log,warn.log等,在log4j2中可通过配置Filters来实现。 假定需求是把INFO及以下级别的信息输出到info.log,WARN和ERROR级别的信息输出到error.lo 阅读全文
posted @ 2017-05-10 17:44
撒_旦
阅读(1562)
评论(0)
推荐(1)
摘要:
log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量、可配置的审计型日志、基于插件架构的各种灵活配置等。如果已经掌握log4j 1.x,使用log4j2还是非常简单的。 先看一个示例 1 基础配置 普通Java项目手 阅读全文
posted @ 2017-05-10 17:43
撒_旦
阅读(16339)
评论(4)
推荐(2)
摘要:
前面几节的示例看起来让人沮丧,要记忆如此多的接口、类和继承关系,做各种复杂的配置。好在这些只是一种相对过时的实现方式,现在只需要使用@Aspect注解及表达式就可以轻松的使用POJO来定义切面,设计精妙正如spring MVC的@Controller。 1 示例 仍然使用上一节的"骑士和剑士"的例子 阅读全文
posted @ 2017-05-10 17:42
撒_旦
阅读(10763)
评论(0)
推荐(1)
摘要:
在掌握了可用的增强后,接下来要做的就是精确的描述切点。前面的示例都是指定一个目标类并把增强织入到所有方法中,实际开发显然会有更精细的筛选需求,比如对所有类中名称以test结尾的方法加入监控执行时间,或者指定某些方法仅在输入参数是指定值时做某些特殊处理以解决临时性需求。 spring中用Pointcu 阅读全文
posted @ 2017-05-10 17:40
撒_旦
阅读(700)
评论(0)
推荐(0)
摘要:
上一篇介绍了几种Advice(增强),并通过代码演示了生成代理的方式,下面来看通过配置文件配置方式把Advice织入目标类。 注意,配置文件方式仍然不是spring AOP的最好方式,学习配置方式也是为了循序渐进的掌握内核技术。 接口SmartCar [java] view plain copy p 阅读全文
posted @ 2017-05-10 17:39
撒_旦
阅读(439)
评论(0)
推荐(0)
摘要:
前面描述的几种增强(Advice)都是在目标方法范围内织入,而引介(Introduction)不同,直接在类级别上添加目标未实现的接口方法。 在spring中可以通过扩展DelegatingIntroductionInterceptor类来实现引介增强类。 下面通过这种方式给一辆普通汽车加上无人驾驶 阅读全文
posted @ 2017-05-10 17:39
撒_旦
阅读(473)
评论(0)
推荐(0)
摘要:
学习AOP前要先了解几个重要术语:Joinpoint、Pointcut、Advice 仍然以改装车比喻,拿到心爱的汽车后想做改装,第一件事是什么?找到要改装的地方。车上可改装的地方很多,但每个人感兴趣的点并不一样,有人改装车灯,有人改装轮毂,也有人同时都改,确定位置后装上零件、装饰,就完成了一次"A 阅读全文
posted @ 2017-05-10 17:37
撒_旦
阅读(435)
评论(0)
推荐(0)
摘要:
AOP全称是Aspect Oriented Programing,通常译为面向切面编程。利用AOP可以对面向对象编程做很好的补充。 用生活中的改装车比喻,工厂用面向对象的方法制造好汽车后,车主往往有些个性化的想法,但是又不想对车进行大规模的拆卸、替换零件,这时可以买一些可替换的零件、装饰安装到汽车上 阅读全文
posted @ 2017-05-10 17:36
撒_旦
阅读(596)
评论(0)
推荐(0)
摘要:
生活中,我们常遇到需要等待的场景,例如去银行办事,在没轮到自己之前需要一直等待,但是如果需要自己每隔几秒钟就去柜台前看看状况,那肯定是种非常低效和令人恼火的体验。而实际的情况是,接待员会让您拿个号,说"请稍等一会"(wait); 当排到时,语言和大屏幕会提示"请XXX号到N号柜台办理"(notify 阅读全文
posted @ 2017-05-10 17:34
撒_旦
阅读(1229)
评论(0)
推荐(0)
摘要:
虽然Java的垃圾回收和当前高配置的服务器可以让程序员大部分时间忘掉OutOfMemoryError的存在,但是访问量增大后频繁的GC会额外消耗CPU (使用top查看结果为us值高),系统响应速度下降,积压的请求又会占用更多内存从而恶性循环,严重时可能导致系统不断Full GC造成应用停顿。 优化 阅读全文
posted @ 2017-05-10 17:32
撒_旦
阅读(270)
评论(0)
推荐(0)
摘要:
集合类在开发中使用非常频繁,使用时合理的选择对提高性能小有帮助。而且大部分面试都会有与集合相关的问题,例如ArrayList和LinkedList的对比。 了解API的集成与操作架构,才能了解何时该采用哪个类,而不会只能抄写范例。本文也尝试用一些现实生活中的物品来描述各个集合类的特性,仅仅是帮助快速 阅读全文
posted @ 2017-05-10 17:31
撒_旦
阅读(473)
评论(0)
推荐(0)
摘要:
为了方便维护系统,开发中通常会设置一些自定义参数,写在单独的配置文件里,需要调整时可直接登录服务器修复配置文件,而不需要修改程序。但尴尬的是,web服务器并不会自动重新加载配置文件,重启服务器又会中断服务。本文是一个使用quartz解决此问题的示例。 项目结构: 其中,system.properti 阅读全文
posted @ 2017-05-10 17:29
撒_旦
阅读(1494)
评论(0)
推荐(0)
摘要:
查找是指在一批记录中找出满足指定条件的某一记录的过程,例如在数组{ 8, 4, 12, 2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15 }中查找数字15,实现代码很简单: 查找是指在一批记录中找出满足指定条件的某一记录的过程,例如在数组{ 8, 4, 12, 2, 6 阅读全文
posted @ 2017-05-10 17:27
撒_旦
阅读(254)
评论(0)
推荐(0)
摘要:
贪吃的小老鼠又回来了,这次有什么新的办法吃到奶酪呢? 规则不变,只能上下左右在格子内移动。 因为上次的深度优先算法让老鼠走了不少冤枉路,这次老鼠带来了帮手探路鼠。探路鼠的使用规则如下: 小老鼠按右、下、左、上的顺序向身边四个格子尝试放出探路鼠,如果遇到猫、出边界、已经有探路鼠存在的格子则放弃。 每只 阅读全文
posted @ 2017-05-10 17:25
撒_旦
阅读(506)
评论(0)
推荐(0)
摘要:
天下事,合久必分,分久必合。合并排序的基本思想正是先分再合。 例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序。合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于存储合并结果。 合并分为三步: 1)两个数列在起始位置各分配一个"指针",对比指针位置的数字,取较小 阅读全文
posted @ 2017-05-10 17:24
撒_旦
阅读(328)
评论(0)
推荐(0)
摘要:
希尔排序是插入排序的一种,是直接插入排序的改进版本。 对于上节介绍的直接插入排序法,如果数据原来就已经按要求的顺序排列,则在排序过程中不需要进行数据移动操作,即可得到有序数列。但是,如果最初的数据是按倒序排列的,则在进行插入排序时每次的比较都需要向后移动数据,这样,将导致算法的效率很低。 希尔排序的 阅读全文
posted @ 2017-05-10 17:23
撒_旦
阅读(200)
评论(0)
推荐(0)
摘要:
直接插入排序是最简单的排序算法,也比较符合人的思维习惯。想像一下玩扑克牌抓牌的过程。第一张抓到5,放在手里;第二张抓到3,习惯性的会把它放在5的前面;第三张抓到7,放在5的后面;第四张抓到4,那么我们会把它放在3和5的中间。 直接插入排序正是这种思路,每次取一个数,从前向后找,找到合适的位置就插进去 阅读全文
posted @ 2017-05-10 17:22
撒_旦
阅读(280)
评论(0)
推荐(0)
摘要:
堆是一种特殊的完全二叉树,其特点是所有父节点都比子节点要小,或者所有父节点都比字节点要大。前一种称为最小堆,后一种称为最大堆。 比如下面这两个: 那么这个特性有什么作用?既然题目是堆排序,那么肯定能用来排序。想要用堆排序首先要创建一个堆,如果对4 3 6 2 7 1 5这七个数字做从小到大排序,需要 阅读全文
posted @ 2017-05-10 17:22
撒_旦
阅读(270)
评论(0)
推荐(0)
摘要:
树 下图是一“棵”树的样子。树这个名称起的很形象,整个数据结构由根、枝、叶组成,其中1为根节点,2、3是1的子节点,4、5、6、8、9、10这几个没有子节点的节点称为叶节点。 节点的度:一个节点的子树的数量称为该节点的度。例如,图中节点2的度为3,节点3的度为2。 树的度:一棵树的度是指该树中节点的 阅读全文
posted @ 2017-05-10 17:21
撒_旦
阅读(2644)
评论(1)
推荐(1)
摘要:
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 (文字和图片来自百度百科) 如果动手来摆放皇后,可以用这样一种思路:在最左侧一列放下一个皇后,然后在右边一列从上到下找到第一个与左边皇后不冲突的位置,摆放第二个皇后;再向yo一 阅读全文
posted @ 2017-05-10 17:20
撒_旦
阅读(347)
评论(0)
推荐(0)
摘要:
小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动。 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径。 首先用一个二维数组来把迷宫“数字化”。 [java] view plain copy print? in 阅读全文
posted @ 2017-05-10 17:19
撒_旦
阅读(1476)
评论(0)
推荐(0)
摘要:
全排列是指n个数(或其他字符)所有可能的排列顺序,例如1 2 3三个数字的全排列是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 那么问题来了,任意输入一个大于1的数字n,列出1-n这n个数字的全排列。 如果尝试手动列举一下1 2 3的全排列,会发现通常我们会在头脑中制定好 阅读全文
posted @ 2017-05-10 17:18
撒_旦
阅读(1659)
评论(0)
推荐(0)
摘要:
斐波那契数列问题:如果一对兔子每月能生1对小兔子,而每对小兔在它出生后的第三个月里,又能开始生1对小兔子,假定在不发生死亡的情况下,由一对初生的兔子开始,1年后能繁殖出多少对兔子? 首先手工计算来总结规律,如下表 注意总数这一列 1+1=2 1+2=3 2+3=5 3+5=8 5+8=13 可以得出 阅读全文
posted @ 2017-05-10 17:17
撒_旦
阅读(331)
评论(0)
推荐(0)
摘要:
快速排序的基本思路是,每次选定数列中的一个基准数,将小于基准数的数字都放到基准数左边,大于基准数的数字都放到基准数右边。然后再分别对基准数左右的两个数列分别重复以上过程。仍以4 3 6 2 7 1 5为例。 选定最左侧数字4为基准数,首先从右开始向左找小于4的数,找到第一个数1后停止。然后从左开始向 阅读全文
posted @ 2017-05-10 17:16
撒_旦
阅读(247)
评论(0)
推荐(0)
摘要:
冒泡排序法的原理是,每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。 例如对4 3 6 2 7 1 5这7个数字进行从小到大的排序,从最左侧开始,首先比较4和3 因为是从小到大排序,4和3的顺序显然是错误的,交换他们,得到 接下来比较4和6 顺序是正确的,不需要任何操作。接下来进行下一步 阅读全文
posted @ 2017-05-10 17:15
撒_旦
阅读(245)
评论(0)
推荐(0)
摘要:
项目从开发到部署会历经多个运行环境,如开发环境、测试环境和生产环境,不同环境中项目的配置文件通常也会不同,典型的如数据库连接配置。我们当然不希望每次部署打包前都去修改配置文件以适配环境,利用Maven的Profile和资源过滤,可以实现自动按环境设置调整配置文件。 新建一个Maven项目,在src/ 阅读全文
posted @ 2017-05-10 17:13
撒_旦
阅读(747)
评论(0)
推荐(0)
摘要:
接上文内容,上一节中的示例中完成了支持分页的商品列表查询功能,不过我们的目标是打造一个商品管理后台,本节中还需要补充添加、修改、删除商品的功能,这些功能依靠Mybatis操作数据库,并通过SpringMVC的数据验证功能检查数据合法性。既然是后台,那么肯定还需要验证和登录,这部分使用拦截器(inte 阅读全文
posted @ 2017-05-10 17:12
撒_旦
阅读(356)
评论(0)
推荐(0)
摘要:
接上文内容,本节介绍基于Mybatis的查询和分页功能,并展示一个自定义的分页标签,可重复使用以简化JSP页面的开发。 从头阅读传送门 在上一节中,我们已经使用Maven搭建好了项目的基础结构,包括一个父项目petstore-parent和数据库持久层模块petstore-persist及Web站点 阅读全文
posted @ 2017-05-10 17:11
撒_旦
阅读(377)
评论(0)
推荐(0)
摘要:
接上文内容,本节介绍Maven的聚合和继承。 从头阅读传送门 互联网时代,软件正在变得越来越复杂,开发人员通常会对软件划分模块,以获得清晰的设计、良好的分工及更高的可重用性。Maven的聚合特性能把多个模块聚合在一起构建,并促进各子模块通过继承父模块的pom配置来保持配置的一致。为了演示这些特性,本 阅读全文
posted @ 2017-05-10 17:10
撒_旦
阅读(674)
评论(0)
推荐(0)
摘要:
技术发展日新月异,许多曾经拥有霸主地位的流行技术短短几年间已被新兴技术所取代。 在Java的世界中,框架之争可能比语言本身的改变更让人关注。近几年,SpringMVC凭借简单轻便、开发效率高、与spring框架无缝整合等特点,逐渐击败前辈Struts/Struts2,成为最常用的Web框架。而Myb 阅读全文
posted @ 2017-05-10 17:08
撒_旦
阅读(2718)
评论(0)
推荐(0)
摘要:
Redis集合类型的基础功能也是存储字符串列表,和列表类型的区别是字符串不能重复且没有顺序。当然,存储元素唯一性也可以通过应用程序保证,单从这一点上并没有体现出对比列表类型的特点。 其实,集合类型的一个鲜明特性是可以对多个集合求交集、并集和差集。例如在一个社交应用中,A用户有C、D两个好友,B用户有 阅读全文
posted @ 2017-05-10 17:02
撒_旦
阅读(541)
评论(0)
推荐(0)
摘要:
有序集合类型是Redis五种数据类型中最高级的、也是最复杂的类型。有序集合具有集合类型的特性,在其基础上给每个元素关联了一个分值,或称为权重,操作时既可以在添加元素时指定分值,也可以单独修改集合中某一个元素的分值。使用时可以按分值排序(从低到高或从高到低)并顺序读取全部或某一范围内的元素,或者获得某 阅读全文
posted @ 2017-05-10 17:01
撒_旦
阅读(1114)
评论(0)
推荐(0)
摘要:
从上一篇的实例中可以看出,用字符串类型存储对象有一些不足,在存储/读取时需要进行序列化/反序列化,即时只想修改一项内容,如价格,也必须修改整个键值。不仅增大开发的复杂度,也增加了不必要的性能开销。 一个更好的选择是使用散列类型,或称为Hash表。散列类型与Java中的HashMap相似,是一组键值对 阅读全文
posted @ 2017-05-10 17:00
撒_旦
阅读(353)
评论(0)
推荐(0)
摘要:
经过上一篇基于Redis散列类型的改造后,实战练习中的商品管理已经具备了增加、修改整体、修改部分属性和分页查询功能,但仍然不支持删除商品的功能。这是因为商品总数是以一个自增数字记录的,且关联了新商品key的生成,删除商品后不能直接减小总数,进而会影响到分页的计算。 在本节中将完善这个功能,使用一个新 阅读全文
posted @ 2017-05-10 16:59
撒_旦
阅读(1220)
评论(0)
推荐(0)
摘要:
字符串类型是Redis中最基本的数据类型,能存储任何形式的字符串和和二进制数据。本文以代码形式列举常用的操作命令,并在实践部分演示一个简单的商品管理功能,实现了通常使用关系型数据库开发的增改查功能,注意并没有实现删除功能,这将放在后面的列表类型中去实现。 一、常用命令 pom.xml [java] 阅读全文
posted @ 2017-05-10 16:56
撒_旦
阅读(583)
评论(0)
推荐(0)
摘要:
转载,原文连接:http://blog.csdn.net/autfish/article/details/51576695 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,提供的功能包括配置维护、名字服务、分布式同步、组服务等。ZooKeeper会维护一个树形的数据结构,类似于W 阅读全文
posted @ 2017-05-10 16:46
撒_旦
阅读(8194)
评论(0)
推荐(0)
摘要:
本文主要通过批量与非批量对比操作的方式介绍MongoDB的bulkWrite()方法的使用。顺带与关系型数据库MySQL进行对比,比较这两种不同类型数据库的效率。如果只是想学习bulkWrite()的使用的看第一部分就行。 测试环境:win7旗舰版、16G内存、i3处理器、MongoDB3.0.2、 阅读全文
posted @ 2017-05-10 16:36
撒_旦
阅读(956)
评论(0)
推荐(0)
摘要:
转载,原文连接:http://blog.csdn.net/autfish/article/details/51439742 MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bs 阅读全文
posted @ 2017-05-10 16:32
撒_旦
阅读(459)
评论(0)
推荐(0)
摘要:
转载,原文连接:http://blog.csdn.net/autfish/article/details/51379379 MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bs 阅读全文
posted @ 2017-05-10 16:23
撒_旦
阅读(2304)
评论(0)
推荐(0)
摘要:
转载,原文连接:http://blog.csdn.net/autfish/article/details/51366839 MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bs 阅读全文
posted @ 2017-05-10 16:09
撒_旦
阅读(1480)
评论(0)
推荐(1)
摘要:
转载,原文连接: http://blog.csdn.net/autfish/article/details/51356537 MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建B 阅读全文
posted @ 2017-05-10 16:04
撒_旦
阅读(2943)
评论(0)
推荐(0)
摘要:
MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bson替代直接输入$命令等,本文整理了基于3.2版本的常用增删改查操作的使用方法。为了避免冗长的篇幅,分为增删改、查询、聚合、 阅读全文
posted @ 2017-05-10 15:05
撒_旦
阅读(63776)
评论(1)
推荐(3)
摘要:
一、SQL模式 SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。下面显示一些例子。注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。 SELECT 字段 FROM 表 阅读全文
posted @ 2017-05-10 14:46
撒_旦
阅读(9)
评论(0)
推荐(0)
摘要:
本文主要通过批量与非批量对比操作的方式介绍MongoDB的bulkWrite()方法的使用。顺带与关系型数据库MySQL进行对比,比较这两种不同类型数据库的效率。如果只是想学习bulkWrite()的使用的看第一部分就行。 测试环境:win7旗舰版、16G内存、i3处理器、MongoDB3.0.2、 阅读全文
posted @ 2017-05-10 12:00
撒_旦
阅读(18)
评论(0)
推荐(0)

浙公网安备 33010602011771号