05 2012 档案
PHP中的__clone()
摘要:php的__clone()方法对一个对象实例进行的浅复制,对象内的基本数值类型进行的是传值复制,而对象内的对象型成员变量,如果不重写__clone方法,显式的clone这个对象成员变量的话,这个成员变量就是传引用复制,而不是生成一个新的对象.如第28行注释所说 1 <?php 2 class Account { 3 public $balance; 4 5 public function __construct($balance) { 6 $this->balance = $balance; 7 ...
阅读全文
PHP的命令行脚本调用
摘要:1.使用PHP命令调用php脚本接受键盘输入然后输出1 <?php2 fwrite(STDOUT, "Please input your name:\t");3 $name = trim(fgets(STDIN));4 fwrite(STDOUT, 'Hello ' . $name);5 ?>2.使用PHP命令调用php脚本并接受参数 1 <?php 2 if($argc != 3) { //限定只能输入2个参数 3 die("Wrong input, please input 2 arguments"); 4 } 5
阅读全文
PHP中单引号双引号的区别
摘要:1.双引号可以解析变量表达式,单引号不能2.双引号会对换行符等转义字符进行解析,而单引号不能1 <?php2 $name = "Jack";3 echo '$nameJones, you are a good \t\tguy <br>';4 echo "{$name}Jones, you are a good \t\tguy";5 ?>页面输出$nameJones, you are a good \t\tguyJackJones, you are a good guy这里可以看到区别了,注意到我们对{$name}使
阅读全文
PHP的代理模式
摘要:代理模式与父类和接口的异同相同点:代理模式的作用和父类以及接口和组合的作用类似,都是为了聚合共用部分,减少公共部分的代码不同点:相比起父类,他们的语境不同,父类要表达的含义是 is-a, 而代理要表达的含义更接近于接口, 是 has-a,而且使用代理的话应了一句话"少用继承,多用组合",要表达的意思其实也就是降低耦合度了相比起接口,他们实现的功能又不太一样,语境都是has-a,不过接口是has-a-function,而代理对象时是has-a-object,这个object是has-a-function的object,此外,接口是为了说明这个类拥有什么功能,却没有具体实现,实
阅读全文
PHP中的参数提示
摘要:PHP为了解决自己是弱类型语言在调用方法是传参类型可能导致的问题,引入了参数提示,看代码 1 <html> 2 <body> 3 <?php 4 class Man { 5 private $name; 6 7 function getName() { 8 return $this->name; 9 }10 11 ...
阅读全文
PHP成员变量作用域的限制-private
摘要:使用PHP编写个类,我们应该尽量避免动态改变类的成员变量,而将成员变量作用于定位private,使用get和set方法来获取这些成员变量,如 1 <html> 2 <body> 3 <?php 4 class Man { 5 private $name; 6 7 function getName() { 8 return 'Mr/Mrs ' . $this->name; 9 ...
阅读全文
PHP的匿名函数与JAVA的匿名类的应用
摘要:一般来说匿名函数与匿名类用于回调,因为你可能并不知道回调函数或方法的具体实现,并且可能需要根据实际情况进行改变,并且匿名函数不需要使用具体的对象,也减少了开销下面看看PHP的匿名函数应用实现 1 <html> 2 <body> 3 <?php 4 interface Comparator { 5 function compare($i, $j); 6 } 7 8 function getResult($i, $j, $comparator...
阅读全文
JAVA中的泛型
摘要:泛型的作用在于限制参数类型,让代码更严谨,以后使用时对参数的调用不会出错来直接看看Java内部类泛型的实现 1 // IntelliJ API Decompiler stub source generated from a class file 2 // Implementation of methods is not available 3 4 package java.util; 5 6 public interface Map<K, V> { 7 8 int size(); 9 10 boolean isEmpty();11 12 ...
阅读全文
[转载]Linux设置网卡自动获取网络地址
摘要:第一步:激活网卡 Linux系统装好后默认的网卡是eth0,用下面的命令将这块网卡激活。# ifconfig eth0 up第二步:设置网卡进入系统时启动 想要每次开机就可以自动获取IP地址上网,就要设置网络服务在系统启动时也启动。Linux有一点与windows不同的是很多服务默认是停止的,而且你 在某次使用该服务时启动这个服务,但是没设置它为默认启动,则下次进入系统这个服务依然是停止的。下面是设置网络服务在系统启动时也启动的方法。 使用chkconfig命令让网络服务在系统启动级别是0123456时默认启动。# chkconfig --level 0123456 network on第..
阅读全文
Linux中的硬链接与软链接
摘要:inode: ext文件系统的每个目录与文件都有一个inode与之对应,inode里保存了文件和目录实际存储内容的data block的号码,简而言之就是inode是一个文件索引硬链接: 建立一个与源文件inode相同的文件,也就是说文件名不同,inode相同,data block也相同,运用编程语言的思想,一个文件和他的硬链接可以理解为是一个对象(文件)的两个引用(文件名)。所以我们修改其中一个文件,另一个文件看到的内容也会跟着变化,当我们删除其中一个文件,另一个文件的内容也不受影响。(ps: 目录是不可设置硬链接的,原因是对目录建立硬链接,会使的目录下的所有文件和目录也建立硬链接,造成很大
阅读全文
[转载] 关于MySQL中的行锁机制
摘要:先前介绍过SELECT … FOR UPDATE的用法,不过锁定(Lock)的资料是判别就得要注意一下了。由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。举个例子:假设有个表单products ,里面有id跟name二个栏位,id是主键。例1: (明确指定主键,并且有此笔资料,row lock)SELECT * FROM products WHERE id=’3′ FOR UPDATE;例2: (明确指定主键,若查无此笔资料,无l
阅读全文
死锁机制
摘要:介绍: 死锁是由于不同的进程拥有对方需要的被锁资源,又在相互请求对方的被锁资源造成的无限等待局面1 JAVA中的死锁1.1 死锁示例两个死锁类 1 package deadlock; 2 3 import java.util.List; 4 5 public class A extends Thread { 6 private List listA; //A,B两个类共享同一个listA和listB 7 private List listB; 8 9 public A(List listA, List listB) {10 this.listA =...
阅读全文
JAVA实现多线程生产者消费者模型
摘要:问题背景: 做一个爬虫,从网上爬书籍,爬下来以后插入数据库问题设计: 用多个线程同时从网上爬书,爬下来的书使用一个线程作为插入,这些线程共享同一个书籍队列,并且同时开始运行书籍POJO 1 package thread; 2 3 public class Book { 4 private Integer bookId; 5 private String bookName; 6 7 public Integer getBookId() { 8 return bookId; 9 }10 11 public void setBookId(I...
阅读全文
Linux bash入门
摘要:语法结构赋值语句 : var=value变量解析 : ${var}命令解析 : ${command}双引号 " " : 变量内容,并做转义单引号 ' ' : 变量内容,但不做转义反单引号 ` ` : 同 $()alexis@Smilodon:~$ version=v1.0alexis@Smilodon:~$ echo $versionv1.0alexis@Smilodon:~$ v2="$(uname) abc ${version}"alexis@Smilodon:~$ echo $v2Linux abc v1.0alexis@Smilo
阅读全文
Windows下使用VirtualBox的CentOS挂载windows分区
摘要:1.设置VirtualBox数据空间2.在Linux中使用命令挂载mount -o iocharset=gb2312 -t vboxsf H_DRIVE /mnt/windowsH3.卸载此分区umount -l /mnt/windowsH
阅读全文
PHP输出缓存(output_buffering)小记 -- 尚有疑问
摘要:首先明确一下PHP的输出顺序1.打开了php输出缓存: echo,print -> php output_buffring -> server buffering -> browser buffering -> browser display2.未打开php输出缓存: echo,print -> server buffering -> browser buffering -> browser display另外明确一下浏览器的输出缓存:IE为256Bytes, Chrome与FireFox为1000Bytes,只有输出数据达到了这个长度或者脚本结束浏览
阅读全文
数据库持久连接小记
摘要:本机环境:Apache+PHP+MySQL先了解一下背景知识,Apache采用父进程调度多个子进程模式处理请求,每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在使用了MySQL持久连接后,子进程会持有一个数据库持久连接,持久连接在脚本运行结束后不会关闭,可以通过mysqladmin -uroot -ppass processlist命令查看.如果在查询时Apache分配了持有这个持久连接的子进程来处理请求,则不需要重新建立新连接,否则新的子进程重新建立持久连接来处理数据库查询.下面说
阅读全文
关于敏感词过滤的一点想法
摘要:问题背景:有一个用户留言板,留言在100字内,另外有一个滤词表,现在需要对用户留言进行过滤,清楚留言中出现并且出现在滤词表中的单词针对留言长度相对于滤词表单词而言较短,可采用如下滤词法1.构建滤词表的HashMap(filterMap)对滤词表中的每个单词做一次Hash,以Hash散列值作为Key,单词内容作为Value2.构建滤词表单词的起始符表和结束符表2.1起始符表将滤词表中每个单词的起始字符构建成一个表,作为起始符表(startList)2.2结束符表将滤词表中每个单词的结束字符构建成一个表,作为结束符表(endList)3.搜索留言敏感词1)从留言第一个字开始,与startList中
阅读全文
PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁)
摘要:1 <html> 2 <body> 3 <?php 4 #数据库连接 5 $dbtype = 'mysql'; 6 $host = 'localhost'; 7 $db = 'test'; 8 $user = 'root'; 9 $psw = 'china0913';10 11 $dsn = $dbtype . ':host=' . $host . ';' . 'dbname='...
阅读全文
JAVA跨平台的个人理解
摘要:对于JAVA的跨平台和C的可移植性,一直存在疑惑,这里说说个人理解1.C的可移植性需要在不同的操作系统上多次编译成不同的目标代码,甚至需要为不同的操作系统编写不同的代码,而JAVA因为有JVM的支持,就免去了这个麻烦2.JAVA的跨平台是一次编译,依托JVM可以到处运行引用在论坛上看到一位仁兄的发言,觉得很有道理在java之前,跨平台是很痛苦的事情,主要是因为所有对于系统的调用,在不同的操作系统下结果都不一样,简单的来说,int的长度在不同操作系统里面就不一样,甚至于连字节排列的顺序都不同。调用同一个函数返回的格式也不同,因此,写程序的人自己要对不同的系统非常了解,如果真的需要对不同操作系统进
阅读全文
JAVA中Vector与ArrayList异同
摘要:Vector与ArrayList本质上都是一个变长数组,实现变长的方法是当长度不够时,在内存区新开辟一块更长的内存,并将原来的的元素Copy到新内存区.因为本质上是数组,所以对于查找和尾部插入与删除,相对于链表而言有优势,时间可以控制在O(1)内,所以两者的适用适用都是在对数据有多数的查找和表尾部操作的时候.不同点在于:Vector是线程安全的,也就是内部实现用了Synchronized,不能多线程同时操作Vector,这样会影响性能,而ArrayList则不是,具体使用哪个就依照具体情况而定了Vector每次扩容变为2倍内存,而ArrayList每次扩容变为1.5倍内存
阅读全文
PHP实现等差数列求和(不使用乘法,循环,递归)
摘要:<html> <body> <?php function sum_n($a1, $d, $an) { //$a1为首项,$d为公差,$an为最大项 $sum = 0; $i = $a1; a: $sum += $i; $i += $d; if($i <= $an) goto a; return $sum; } ...
阅读全文
字符编码小记
摘要:字符编码在内存中的存储字符编码在内存中存储决定于文件保存的格式,如UTF-8或ANSI对于UTF-8,在内存中每个中文字符占3个字节,每个英文字符占1个字节对于ANSI,在内存中每个中文字符占的字节数是变长的(中文在ANSI里代表GB2312编码),每个英文字符占1个字节字符编码在程序中的处理参看如下代码,这个文件保存的格式是UTF-8,也就是说$str在内存中占了15个字节,而$str2在内存中占 5个英文*1字节+1个中文*3字节=8字节 这是背景如图: 1 <html> 2 <body> 3 <?php 4 $str = '我擦了个去'...
阅读全文
MySQL实用语句 GROUP BY ... HAVING ...
摘要:问题背景:数据库内有两个表,user,message,message表中含有useId外键,现在需要统计发的message超过2条的user,并按发的消息条数从高到低排序SELECT user.userId, COUNT(msg.messageId) FROM user JOIN message as msg ON user.userId = msg.userId GROUP BY user.userId HAVING COUNT(msg.messageId) > 2ORDER BY COUNT(msg.messageId) DESC显示结果
阅读全文
常见HTTP状态码
摘要:100Continue初始的请求已经接受,客户应当继续发送请求的其余部分101Switching Protocols服务器将遵从客户的请求转换到另外一种协议200OK指示请求成功,且请求的信息包含在响应中。这是最常接收的状态代码201Created指示请求导致在响应被发送前创建新资源202Accepted指示请求已被接受做进一步处理203Non-Authoritative Information指示返回的元信息来自缓存副本而不是原始服务器,因此可能不正确204No Content指示已成功处理请求并且响应已被设定为无内容205Reset Content指示客户端应重置(或重新加载)当前资源20
阅读全文
Linux常用命令简记
摘要:ls: 查看文件夹下文件和文件夹列表 ls -lah -l: 列表形式显示 -a: 查看所有目录,包括隐藏目录 -h: 以易读的方式显示文件大小 -s: 显示文件占用的data block空间大小 -S: 按文件大小降序排列 -t: 按文件m/a/ctime降序排列 -r: 逆序排列 -R: 递归遍
阅读全文
PHP创建多级目录
摘要:<html> <body> <?php $path = '.\\sub1\\sub2\\sub3\\'; function mymkdir($dir){ return is_dir($dir) or (mymkdir(dirname($dir)) and mkdir($dir, 0777)); } #1.判断$dir是否是已经完全被创建好,如果创建好返回true #2.如果$dir没有完全创...
阅读全文
PHP 求n*m二维矩阵最大子矩阵 O(n*n*m)
摘要:1 <?php 2 #求二维矩阵的最大子矩阵 3 4 #构造求和表 5 #s[i][j]表示从1..i行,1..j列所有元素之和 6 #可以利用公式s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1]s[j - 1] + a[i][j]求得 7 function build_sum_tab($a) { 8 #初始化第0列和 9 for ($i = 0; $i < count($a); $i++) {10 $s[$i][0] = 0;11 for ($j = 0; $j <= $i; ...
阅读全文
PHP猴子选大王问题
摘要:问题简介:n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王. 这里使用一个递推公式: f[i] = 0 i = 1 f[i] = (f[i-1] + m) %
阅读全文
PHP冒泡排序
摘要:1 <html> 2 <body> 3 <?php 4 function bubble_sort($array) { 5 for($i = 0; $i < count($array) - 1; $i++) { //$i为已经排过序的元素个数 6 for($j = 0; $j < count($array) - 1 - $i; $j++) { //$j为需要排序的元素个数,用总长减去$i 7 if($...
阅读全文
PHP匹配email正则
摘要:1 <html> 2 <body> 3 <?php 4 $email_pattern = '/\w{6,16}@\w{1,}\.\w{2,3}/i'; 5 $email_valid = 'test_123@126.net'; 6 $email_invalid = 'test@test%@111@com'; 7 $matches = array(); 8 9 preg_match($email_pattern, $em...
阅读全文
PHP实现多线程读写文件
摘要:1 <html> 2 <body> 3 <?php 4 const MAX_RETRIES = 100; //最大重试数,此处注意,const变量不能写在function内 5 6 /** 7 * @param $file_path 文件路径 8 * @param $file_mode 打开文件模式(eg: r, r+, w, w+, a, a+, x, x+) 9 * @param $lock_mode 加锁模式(e...
阅读全文
PHP遍历文件夹及子文件夹所有文件
摘要:1 <html> 2 <body> 3 <?php 4 function traverse($path = '.') { 5 $current_dir = opendir($path); //opendir()返回一个目录句柄,失败返回false 6 while(($file = readdir($current_dir)) !== false) { //readdir()返回打开目录句柄中的一个条目 7 $sub_dir = $...
阅读全文
PHP查找当前URL文件扩展名
摘要:1 <html> 2 <body> 3 <?php 4 $paths[] = $_SERVER['REQUEST_URI']; //$_SERVER['REQUEST_URI']获取当前请求URI,不包括域名 5 $paths[] = $_SERVER['SCRIPT_NAME']; //$_SERVER['SCRIPT_NAME']获取当前执行脚本的名称,该路径从document_root开始 6 $paths[] = $_SERVER['SCRIPT_FILENAME']; ...
阅读全文
PHP中define的使用
摘要:1 <html> 2 <body> 3 <!-- define不可用于类内部 --> 4 <?php 5 define('COUNTRY', 'China'); 6 echo COUNTRY . '<br>'; 7 ?> 8 9 <!-- define的条件使用和变量赋值 -->10 <?php11 $i = 1;12 if($i > 0) { //define可以用于条件语句,cons...
阅读全文
PHP中static的使用
摘要:1 <html> 2 <body> 3 <!-- 在类中的使用 --> 4 <?php 5 class TestStatic { 6 public static $country = 'China'; //在类内static可以使用public修饰 7 8 public function getCountry() { 9 return self::$country; ...
阅读全文
PHP中const的使用
摘要:1 <html> 2 <body> 3 <!-- 类内声明及使用 --> 4 <?php 5 class TestConst { 6 const COUNTRY = 'China'; //const不能加public,static,也不需要$ 7 static $static = 'Static'; 8 9 public function getCountry() {10...
阅读全文
PHP计算两个路径的相对路径
摘要:1 <html> 2 <body> 3 <?php 4 function relativePath($aPath, $bPath) { 5 $aArr = explode('/', $aPath); //explode函数用于切分字符串,返回切分后的数组,此处用'/'切分字符串 6 $bArr = explode('/', $bPath); 7 $aDiffToB = array_diff_assoc($aArr, $bArr); //a...
阅读全文