自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蓝猫的专栏

在实践中积累经验,不断求索

  • 博客(183)
  • 资源 (3)
  • 收藏
  • 关注

原创 Docker运行Mysql

1.下载MysqlServer Docker Imagedocker pull mysql/mysql-server:tagtag为镜像标签,可以使5.5,5.6,5.7,8.0或latest,可以忽略;忽略则为lastest2.运行MysqlServer Docker Imagedocker run --name=mysql8 -d mysql/mysql-server:8.0查看mysqlserver容器名称docker ps3.查看运行日志docker logs mysql8

2020-09-08 14:48:50 1007

原创 Centos7安装RabbitMQ

操作系统centos7用户权限要求如果不是root用户,需要有sudo权限安装RabbitMQ1.按照依赖软件1.1 安装erlang(1) 新建/etc/yum.repos.d/rabbitmq_erlang.repo# In /etc/yum.repos.d/rabbitmq_erlang.repo[rabbitmq_erlang]name=rabbitmq_erlangbaseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$ba

2020-09-08 14:41:05 158

原创 利用Jacob将word转换为pdf

最近一个项目中需要实现该功能,折腾了很久才弄出来。为了自己以后不用再折腾,特此将过程和遇到的问题记录下来。运行环境 window server2008 x64,tomcat,jdk6,word2007 说明:word2007需要安装SaveAsPDF插件,插件微软官网可以直接下载。大概步骤 (1)去jacob官网下载jacob程序包,包括两个dll文件和一个jar包文件 (2)将jaco

2015-11-13 13:04:35 1229

原创 JSONP实现跨域访问

出现的原因因为浏览器同源策略的限制,Ajax不能实现跨域获取数据。原理因为<script>不受同源策略限制,可以跨域加载脚本文件,加载完后执行脚本;所以我们可以在A域页面中事先定义回调函数callback,然后利用动态添加script元素的src属性,指定B域的一个请求地址,向B域发起一个请求;B域响应A域的请求,返回如下格式的数据:callback(json);其中json为B域返回的数据。A域页

2015-05-11 22:48:39 537

原创 JavaScript同源策略

Mozilla中文文档: https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policyW3C关于同源策略的规范: http://www.w3.org/Security/wiki/Same_Origin_Policy

2015-05-11 22:21:12 531

原创 eclipse启动Resin3配置

Resin Eclipse

2015-04-07 20:43:15 3206

原创 JSPWiki安装

官方指南:https://jspwiki-wiki.apache.org/Wiki.jsp?page=Getting%20Started下载地址最新版2.10:http://mirrors.cnnic.cn/apache/jspwiki 快速安装1.Install Tomcat from http://tomcat.apache.org/ (or any oth

2015-04-06 21:01:12 1786

原创 JavaScript面向对象学习小结

1.实例属性function O(x,y){  this.x = x;  this.y = y;}x和y为类O的实例属性,与Java的普通属性一样,实例属性只能通过类O的对象来访问,如o.x2.实例方法function O(x,y){  this.x = x;  this.y = y;  this.show = function() {     retu

2013-10-12 00:04:29 691

原创 JavaScript对象学习小结

1.对象的创建方法:(1)通过new运算符创建,new后面跟着一个构造函数名var object = new Object();构造函数直接调用时通常没有返回值,它只是初始化由this值传递进来的对象;但是与new一起使用时返回一个对象值作为new表达式的值(2)对象直接量对象直接量由属性说明列表构成,列表包含在大括号中,其中属性说明由逗号隔开。对象直接量的每个属性说明都由属性

2013-10-11 23:15:06 1412

原创 JavaScript函数学习小结

函数的定义方式:1.函数语句function f(x) {  return x*x;}2.调用构造函数var f = new Function('x', 'x*x');3.函数直接量var f = function(x) {  return x*x;}说明:以上三种方式都定义了函数f,但是对于方式2,3调用语句必须在函数定义之后JavaScr

2013-10-11 00:15:31 993

原创 Websphere补丁安装

1. 检查WAS安装版本是否是最新版本(WAS7.0.21)/usr/IBM/WebSphere/AppServer/bin/versionInfo.sh2. 停止WAS服务/usr/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/stopServer.sh server1/usr/IBM/WebSphere/AppServer/pr

2012-06-02 13:39:15 3596

原创 Programming Clojure学习笔记——多重方法

8.5 何时使用多重方法从Clojure的几个开源项目可以看出:1. 多重方法使用极少2. 很多多重方法都是基于类型(class)来分发使用以下一个通用原则来决定创建函数很是多重方法:1. 如果一个函数分支基于一种或多种类型,使用多重方法2. 不管它是什么,当你发现它是类别,而又不是Java类或数据标签时,使用多重方法3. 使用多重方法时,必须能够在没有多重方法定义

2012-02-28 20:42:58 831

原创 Programming Clojure学习笔记——多重方法

8.4 创建非正式类别多重方法让你可以创建非正式类别。举例说明,考虑一个财务应用,处理活期存款帐户和储蓄存款账户。为帐户定义一个Clojure结构,通过tag为标识这两种账户:(ns examples.multimethods.account)(defstruct account :id :tag :balance)接下来创建两种不同的账户,由::Checking和::Sa

2012-02-28 20:41:23 1045

原创 Programming Clojure学习笔记——多重方法

8.3 超越简单的分发定义一个打印集合的方法实现:(use '[clojure.contrib.str-utils :only (str-join)])(defmethod my-print java.util.Collection [c]     (.write *out* "(")     (.write *out* (str-join " " c))     (.wr

2012-02-28 20:40:31 749

原创 Programming Clojure学习笔记——多重方法

8.2 定义多重方法定义多重方法使用defmulti:(defmulti name dispatch-fn)name为多重方法的名字,Clojure将针对方法的参数调用dispatch-fn来选择多重方法的一个特定的方法(实现)。考虑前一节的my-print函数,它只有一个参数,即需要打印的东西,可以基于参数的类型选择特定的实现。因此dispatch-fn必须是一个能返回参数类

2012-02-28 20:39:30 1311

原创 Programming Clojure学习笔记——多重方法

8.1 没有多重方法的生活假定Clojure没有提供print和println方法,打印任何对象,println比print方法多输出一个换行符。我们自己构建一个通用的打印机制。为了输出字符串,空,向量我们需要如下编写代码:(use '[clojure.contrib.str-utils:only(str-join)])(defn my-print-vector [ob](.w

2012-02-28 20:38:40 981

原创 Programming Clojure学习笔记——宏

7.4 宏的分类Clojure的特殊形式通常只能通过宏来实现,满足使用宏的第二个原则,因此宏的第二个原则也称为特殊形式原则。特殊形式有一些特殊的功能:(1) 特殊形式提供了大部分基本的流控制结构,如if和recur等(2) 特殊形式提供了直接访问Java的途径(3) 命名的创建和绑定都是通过特殊形式,不管是通过def定义的变量,还是通过let创建一个词法绑定,或者是通过bind

2012-02-19 00:20:16 1244

原创 Programming Clojure学习笔记——宏

7.3 使宏简单化Clojure为宏作者提供的支持形式                描述foo#                在语法上被引号引起的区域内,创建一个以foo为前缀的唯一名称(gensym prefix?)            以可选的前缀prefix创建唯一名称(macroexpand form)        使用macroexpand-1递归展开form

2012-02-19 00:17:46 1567

原创 Programming Clojure学习笔记——宏

7.2 编写控制流宏实现unless功能,与if相反,条件不成立时执行unless后代码。先编写函数来实现:user=> (defn unless [expr form] (if expr nil form))验证一下,当表达式expr为false时正确执行user=> (unless false (println "this should print"))this sho

2012-02-05 11:15:09 1603

原创 Programming Clojure学习笔记——宏

7.1 什么时候使用宏使用宏的两个原则和一个例外:原则1:不要写宏。宏很复杂而且需要仔细考虑宏展开时间和编译时间的相互影响。如果你能用一个函数替代就不要用宏。原则2:只在当且仅当只有宏可以封装你的模式时才使用宏例外:如果相比等效的函数,宏能使你的调用者生活变得更简单,那就用吧

2012-02-05 11:14:33 710

原创 Programming Clojure学习笔记——并发

6.5 使用Vars管理线程本地状态当你调用def或defn创建一个动态变量时,只是创建了一个变量。当你传一个初始值给def时,该初始值就成了def创建变量的根绑定(root binding),如:(def foo 10)变量foo的根绑定被所有线程共享,验证如下:当前线程中user=> foo10新起的线程中user=> (.start (Thread. (f

2012-02-05 11:09:02 831

原创 Programming Clojure学习笔记——并发

6.4 使用Agents进行异步更新类似引用,可以使用代理(agent)包装初始状态。(agent initial-state)如创建counter代理包装初始计数0:(def counter (agent 0))可以send一个函数到agent修改agent的状态,该函数不会立即执行,而是存放到线程池的send队列中,稍后执行:(send agent update-f

2012-02-05 11:07:05 723

原创 Programming Clojure学习笔记——并发

6.3 使用Atoms进行非并发同步修改原子(Atoms)是一种比引用轻量的同步机制。创建原子语法:(atom initial-state options?)这里的选项options与引用refs的选项一样示例:使用atom存贮当前曲目代替引用ref(def current-track (atom "Venus, the Bringer of Pease"))同样的

2012-02-05 11:06:02 590

原创 Programming Clojure学习笔记——并发

6.2 引用和软件事务存贮在Clojure中,大部分对象都是不可变的。当你真的需要可变数据时,你必须明确说明,如创建一个可变的引用指向可变对象:(ref initial-state)如:(def current-track (ref "Mars, the Bringer of War")) 定义引用current-trackref包装并保护它内部的状态,控制对它内部状态的访问。

2012-02-05 11:04:54 825

原创 Programming Clojure学习笔记——并发

Clojure提供强大的并发库,由四个API组成,增强不同并发模型:引用(refs): 管理对共享状态的并发同步修改原子(atoms): 管理对共享状态的非并发同步修改代理(agents): 管理对共享状态的异步修改变量(vars): 管理线程本地状态6.1 锁的问题选择在什么上和在哪里加锁是一件很难的事。如果加锁出现问题,会带来一系列问题:(1) 线程之间竞争导致

2012-02-05 11:04:12 565

原创 Programming Clojure学习笔记——函数编程

5.4 再谈递归相互递归:两个或两个以上函数之间互相调用。如:(declare my-odd? my-even?)(defn my-odd? [n]     (if (= n 0)         false         (my-even? (dec n))))(defn my-even? [n]     (if (= n 0)         true

2012-02-05 10:50:15 748

原创 Programming Clojure学习笔记——函数编程

5.3 进一步延迟通过组合已有的序列函数,可以找到不需要显式序列的更加延迟的办法。举例说明,解决如下问题:统计硬币投掷结果序列中,连续两次出现正面的次数,其中:h表示正面,:t表示反面。如:[:h :t :t :h :h :h]第4、5连续两次,第5、6连续两次,一共出现2次第一种计算方法:使用loop/recur实现方式:(defn count-heads-p

2012-02-05 10:49:27 703

原创 Programming Clojure学习笔记——函数编程

5.2 如何延迟函数编程大量使用递归定义,递归定义由两部分组成:(1) 基础,明确列出序列的一些元素(2) 归纳,提供规则利用序列元素,生成更多的元素Clojure中有多种方法实现递归:(1) 简单递归,使用函数调用自己实现归纳步(2) 尾部递归,只在函数末尾调用函数自己实现归纳步(3) 延迟序列,消除实际的递归,延后直到需要时再计算值在Clojure中,采用延

2012-02-05 10:48:22 1132

原创 Programming Clojure学习笔记——函数编程

5.1 函数编程概念1. 纯函数函数式程序由纯函数构成。纯函数没有副作用,它只依赖与函数参数,只能通过函数返回值影响函数外部。纯函数常常与不可变数据一起工作。如:(defn mystery [input]    (if input data-1 data-2))如果data-1和data-2是可变的,则它们可能被外界改变,对相同的input参数,可能输出不同,这与纯函数的特

2012-02-05 10:47:28 886

原创 Programming Clojure学习笔记——使用序列统一数据

4.5 调用特定结构函数Clojure包含一些专门针对列表lists,向量vectors,映射maps,结构structs和集合sets的函数1. 针对列表Lists的函数(peek coll) 获取列表第一个元素,(peek '(1 2 3)) 返回1(pop coll) 获取除第一个元素外的其他元素,(pop '(1 2 3))返回(2 3)说明:如果列表coll为空,则p

2012-02-05 10:20:36 1557

原创 Programming Clojure学习笔记——使用序列统一数据

4.4 Clojure使Java可序列化1. 序列访问Java集合集合可以像序列一样操作称为可序列数组可序列user=> (first (.getBytes "hello"))104Hashtable和Map也可序列user=> (first (System/getProperties))#Clojure自动将集合包装成序列,但不会自动将集合还原为它们原来的

2012-02-05 09:57:39 1299

原创 Programming Clojure学习笔记——使用序列统一数据

4.3 延迟和无限序列大部分Clojure序列都是延迟的,即元素值直到使用时才计算。使用延迟序列有如下好处:1. 推迟可能不需要的昂贵计算2. 可以处理内存中无法存储的大数据集3. 可以延迟I/O操作,直到真正需要时延迟序列是Clojure函数编程的关键。强迫序列(forcing sequences)强迫延迟序列计算出所有序列元素值可以使用doall函数来强迫计

2012-02-05 09:56:14 1056

原创 Programming Clojure学习笔记——使用序列统一数据

4.2 使用序列库序列库函数可以分为以下四大类:1. 创建序列函数2. 过滤序列函数3. 序列谓词4. 序列转换函数这种分类很粗糙,由于序列不可改变,因此大部分序列函数都创建新的序列,一些序列函数既有过滤也有转换功能。1. 序列创建(1) (range start? end step?) 创建一个从start到end,步长为step的序列,start默认为0,s

2012-02-05 09:55:09 1179

原创 Programming Clojure学习笔记——使用序列统一数据

seq是一种逻辑列表。可以通过序列来访问的集合被称为可序列4.1 一切皆序列每一个聚集数据结构都可以看作序列,序列有三个核心操作:1. 取序列的第一个元素:(first aseq)如果参数为空或nil则返回nil2. 取第一个元素后的所有元素:(rest aseq)如果没有,则返回空,而不是nil3.在序列的头部添加一个元素构成一个新的序列(cons e

2012-02-05 09:53:46 994

原创 Programming Clojure学习笔记——与Java一起工作

3.4  异常处理异常处理的目的:(1) 包装检查异常(2) 使用finally块清理非内存资源如文件或网络句柄(3) 响应问题:忽略异常,重新操作,转换异常为非异常结果简化异常处理在Clojure中,检查异常不是必须进行try..catch处理,如果不处理则直接忽略异常资源清理如果需要是否的资源有close方法,则可以使用with-open宏:(wit

2011-12-18 09:31:48 842

原创 Programming Clojure学习笔记——与Java一起工作

3.3  使用Clojure创建和编译Java类Clojure的所有对象都实现了Java的特定接口:1. Clojure数据结构实现了Java集合接口2. Clojure函数实现了Runnable和Callable接口Clojure可以在需要时很方便地在磁盘上生成一次性的代理或类,使用必要的一些Java代码片段。创建Java代理在Clojure中,可以使用代理来扩展

2011-12-18 09:25:27 2689

原创 Programming Clojure学习笔记——与Java一起工作

3.2  性能优化使用原始类型示例:第一种计算方法:user=> (defn sum-to [n]   (loop [i 1 sum 0]     (if (       (recur (inc i) (+ i sum))       sum)))#'user/sum-touser=> (dotimes [_ 5] (time (sum-to 10000))

2011-12-18 09:22:29 1115

原创 Programming Clojure学习笔记——与Java一起工作

3.1  调用JavaClojure提供了简单直接的语法调用Java代码:创建对象,调用方法,访问静态方法和属性。访问构造函数,方法和属性Clojure提供了new形式调用构造函数创建实例(new classname)下面的代码创建Ramdom对象,赋给rnd变量:user=> (def rnd (new java.util.Random))#'user/rnd

2011-12-17 19:08:05 3352

原创 Programming Clojure学习笔记——探索Clojure

2.6  元数据在Clojure中,元数据(metadata) 是与对象逻辑值正交的数据。如person的firstname 和 lastname是普通旧数据。而person对象可以被序列化到XML文件的信息就是元数据。同样person对象被更改需要保存到数据库的信息也是元数据。可以使用with-meta给集合(collection)和符号(symbol)添加元数据:(with

2011-12-17 19:00:25 895

原创 Programming Clojure学习笔记——探索Clojure

2.5  流控制ifClojure的if计算第一个参数值,如果第一个参数值为true,则返回第二个参数值;如果为false,则返回nil或第三个参数值(如果有第三个参数)user=> (defn is-small? [number]              (if (#'user/is-small?user=> (is-small? 50)"yes"user=>

2011-12-17 18:58:23 1272

Log4j参考手册

Log4j使用参考手册,最全面的Log4j教程,帮助你深入了解Log4j的原理及各个组件(包括Appender,Layout等)和熟练使用Log4j进行日志记录

2017-09-07

Servlet-2.4技术文档 英文

这是介绍Servlet的官方文档,值得收藏

2007-09-29

JSTL.pdf 英文

一篇介绍JSP标准标签库的好文章,适合初学者学习,也可以作为开发者参考文档。

2007-09-29

空空如也

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

TA关注的人

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