摘要: 1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。 2. 定址 可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3 阅读全文
posted @ 2013-12-07 23:20 残剑_ 阅读(858) 评论(0) 推荐(0) 编辑
摘要: mysqld程序--目录和文件basedir = path 使用给定目录作为根目录(安装目录)。character-sets-dir = path 给出存放着字符集的目录。datadir = path 从给定目录读取数据库文件。pid-file = filename 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程。socket = filename 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般是/var/lib/mysql/my 阅读全文
posted @ 2013-11-29 12:49 残剑_ 阅读(11197) 评论(0) 推荐(2) 编辑
摘要: 题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个线程, 按顺序输出ABC, 循环10次。解题思路:要按顺序输出ABC, 循环10次,就要控制三个线程同步工作,也就是说要让三个线程轮流输出,直到10个ABC全部输出则结束线程。这里用一个Lock对象来控制三个线程的同步。用一个int型变量state标识由那个线程输出。 1 package com.thread; 2 3 import java.util.concurrent.locks.Lock; 4 import java.util.concurrent.locks.ReentrantLock;. 阅读全文
posted @ 2013-09-13 20:53 残剑_ 阅读(18357) 评论(6) 推荐(2) 编辑
摘要: 1、首先下载MySQL的安装文件,我这里安装的是MySQL5.1.7版本的, 下载链接:http://pan.baidu.com/share/link?shareid=255483056&uk=924063144 http://pan.baidu.com/share/link?shareid=269901909&uk=9240631442、安装MySQL数据库服务器 进入安装包所在文件夹,执行命令 rpm -ivh MySQL-server-5.1.7-0.i386.rpm 安装MySQL服务器。 如果报了与原先版本冲突的话,就执行rpm -qa|grep -i mysql命. 阅读全文
posted @ 2013-08-31 10:19 残剑_ 阅读(8415) 评论(3) 推荐(0) 编辑
摘要: 无论是在平时的练习还是项目当中,HashMap用的是非常的广,真可谓无处不在。平时用的时候只知道HashMap是用来存储键值对的,却不知道它的底层是如何实现的。一、HashMap概述 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronize... 阅读全文
posted @ 2013-08-22 20:21 残剑_ 阅读(4736) 评论(4) 推荐(5) 编辑
摘要: 在使用Iterator来迭代遍历List的时候如果修改该List对象,则会报java.util.ConcurrentModificationException异常,下面看一个例子演示: 1 package com.others; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 import java.util.concurrent.CopyOnWriteArrayList; 7 8 public class ArrayListTest { 9 10 p... 阅读全文
posted @ 2013-08-21 19:20 残剑_ 阅读(19797) 评论(3) 推荐(4) 编辑
摘要: Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁! ReentrantReadWriteLock会使用两把锁来解决问题,一个读锁,一个写锁线程进入读锁的前提条件: 没有其他线程的写... 阅读全文
posted @ 2013-08-21 11:12 残剑_ 阅读(52629) 评论(6) 推荐(4) 编辑
摘要: 两个线程可以交换对象的同步点。每个线程都在进入 exchange 方法时给出某个对象,并接受其他线程返回时给出的对象。 用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。构造方法摘要Exchanger() 创建一个新的 Exchanger。 方法摘要 Vexchange(V x) 等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。 Vexchange(V x, long timeout, TimeUnit unit) 等待另一个线程到达此交换点(... 阅读全文
posted @ 2013-08-21 10:33 残剑_ 阅读(1301) 评论(0) 推荐(0) 编辑
摘要: CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。 CyclicBarrier类似于CountDownLatch也是个计数器, 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数, 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线... 阅读全文
posted @ 2013-08-21 10:10 残剑_ 阅读(19240) 评论(4) 推荐(2) 编辑
摘要: Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。Semaphore的主要方法摘要: void acquire():从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。 void release():释放一个许可,将其返回给信号量。 int availablePermits():返回此信号量中当前可用的许可数。 boolean hasQueuedThreads():查询是否有线程正在等待获取。下面是一个例子: 1 package ... 阅读全文
posted @ 2013-08-20 23:20 残剑_ 阅读(12789) 评论(1) 推荐(4) 编辑
摘要: CountDownLatch是一个同步辅助类,犹如倒计时计数器,创建对象时通过构造方法设置初始值,调用CountDownLatch对象的await()方法则处于等待状态,调用countDown()方法就将计数器减1,当计数到达0时,则所有等待者或单个等待者开始执行。 1 package com.thread; 2 import java.util.concurrent.CountDownLatch; 3 import java.util.concurrent.CyclicBarrier; 4 import java.util.concurrent.ExecutorService; 5 im.. 阅读全文
posted @ 2013-08-20 22:28 残剑_ 阅读(17746) 评论(1) 推荐(0) 编辑
摘要: 本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间才会被唤醒继续操作. 使用BlockingQueue的关键技术点如下: 1.BlockingQueue定义的常用方法如下: 1)add(anObject):把anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,... 阅读全文
posted @ 2013-08-20 21:44 残剑_ 阅读(65723) 评论(0) 推荐(1) 编辑
摘要: 下面列出一些在笔试中常出现的对字符串操作的题目,都是本人自己写的,如果哪里不对或者有更好的实现欢迎大家指出!如果有其他题目也欢迎大家贴出来!谢谢!一、实现字符串的反转,如输入"abc",返回"cba" 1 package com.others; 2 3 public class 字符串反转 { 4 5 public static void main(String[] args) { 6 System.out.println(inverse("liuling")); 7 } 8 9 public static String invers 阅读全文
posted @ 2013-08-11 17:00 残剑_ 阅读(6958) 评论(4) 推荐(3) 编辑
摘要: Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 我这里的struts2源码是从官网下载的一个最新的struts-2.3.15.1-src.zip,将其解压即可。里面的目录页文件非常的多,我们只需要定位到struts-2.3.15.1\src\core\src\main\java\org\apache\struts2查看源文件。目录结构如下图 ... 阅读全文
posted @ 2013-08-10 11:15 残剑_ 阅读(23983) 评论(6) 推荐(12) 编辑
摘要: 这两天初次接触shell编程,所谓shell编程其实就是用一定的语法将各种基本的命令组合起来,让shell程序去解释执行。如果对windows的dos有了解,可以这样理解,其实shell脚本文件和.bat批处理文件差不多,不过linux下的shell比起windows的dos强大很多。 shell有很多种,如bash、sh 、tcsh、 ksh等,linux系统里面默认使用的是bash。 下面看一下学习shell的第一个程序: 输入命令vi my_01.sh,创建一个my_01.sh文件并用vi编辑器打开。编辑内容如下:1 #!/bin/bash2 echo "aaaa"3 阅读全文
posted @ 2013-08-04 00:48 残剑_ 阅读(8065) 评论(2) 推荐(2) 编辑
摘要: 在mysql中创建两个存储过程,如下:1、根据id查找某条数据:1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3 select * from emp where empId=id;4 end;2、根据id查找某个字段... 阅读全文
posted @ 2013-07-29 16:08 残剑_ 阅读(14144) 评论(1) 推荐(0) 编辑
摘要: HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息,包括浏览器端,中间缓存服务器端(如:squid等),Web服务器端。本文讨论头信息 中带缓存控制信息的HTML页面(JSP/Servlet生成好出来的也是HTML页面)在中间缓存服务器中的缓存情况。 HTTP协议中关于缓存的信息头关键... 阅读全文
posted @ 2013-07-25 15:42 残剑_ 阅读(149127) 评论(6) 推荐(10) 编辑
摘要: 排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一下。 排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以分为以下几类: (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。 (2)、选择排序:简单选择排序、堆排序。 (3)、交换排序:冒泡排序、快速排序。 (4)、归并排序 (5)、基数排序一、插入排... 阅读全文
posted @ 2013-07-24 18:04 残剑_ 阅读(126625) 评论(19) 推荐(34) 编辑
摘要: 文件的压缩有两大好处:1、可以减少存储文件所需要的磁盘空间;2、可以加速数据在网络和磁盘上的传输。尤其是在处理大数据时,这两大好处是相当重要的。 下面是一个使用gzip工具压缩文件的例子。将文件/user/hadoop/aa.txt进行压缩,压缩后为/user/hadoop/text.gz 1 package com.hdfs; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.URI; 7 8 import or... 阅读全文
posted @ 2013-06-19 20:28 残剑_ 阅读(32576) 评论(1) 推荐(2) 编辑
摘要: 在单个操作中处理一批文件,这是很常见的需求。比如说处理日志的MapReduce作业可能需要分析一个月内包含在大量目录中的日志文件。在一个表达式中使用通配符在匹配多个文件时比较方便的,无需列举每个文件和目录来指定输入。hadoop为执行通配提供了两个FIleSystem方法:1 public FileStatus[] globStatus(Path pathPattern) throw IOException2 public FileStatus[] globStatus(Path pathPattern, PathFilter filter) throw IOException glob... 阅读全文
posted @ 2013-06-18 22:04 残剑_ 阅读(8262) 评论(0) 推荐(0) 编辑