May 18, 2012
| 作者:白菜
|
分类:php
以下错误和遗漏大多来自网友的提问,然后回答时从手册中发现的几个问题。
1.抽象类翻译。错误。
在语言参考→类与对象→抽象类一节的开头,有这样的描述"抽象类中 至少要包含一个抽象方法。"(
http://www.php.net/manual/zh/language.oop5.abstract.php) .很明显,这是错误的,因为可以定义空的抽象类,也可以定义包含非抽象方法的抽象类。
英文原文是“any class that contains at least one abstract method must also be abstract. ”(
http://www.php.net/manual/en/language.oop5.abstract.php)。翻译过来就是“任何含有抽象方法的类必须定义为抽象类”。这跟之前的描述完全是两码事,中文手册的翻译属于典型的翻译错误。
2.日期函数date的z参数。错误。
http://cn.php.net/manual/en/function.date.php
英文“z the day of the year (starting from 0)
0 through
365”
中文手册:“
z 年份中的第几天 0到366”(
http://cn.php.net/manual/zh/function.date.php)
。。另外,还有很多函数遗漏了一些重要的注意事项或版本信息,不过很多都已在最新版手册中得到了修正。以及部分翻译晦涩的地方。以上问题大多已反馈。如果有遇到类似困惑的地方,先首先看下是不是你看的中文手册有误。
May 13, 2012
| 作者:白菜
|
分类:C语言
要想在WIN下编译CURL和libcurl,真是件麻烦事。要编译curl,就得先编译openssl和zlib,因为curl依赖这两个库。分别到其官方网站下载三个软件的源代码
到http://curl.haxx.se/download.html下载 curl-7.25.0
到http://www.zlib.net/ 下载 zlib-1.2.7
到http://www.openssl.org/source/ 下载 openSSL最新版2.1.0j,以上皆为最新版。本机环境WIN7,VS2010,把这三个软件解压到H:\TDDOWNLOAD\lib目录下。
开始干活。
1.编译ZLIB
curl依赖openssl和zlib,而openssl又依赖zlib,所以得先编译zlib
(1)由于zlib部分模块为了追求速度,使用了汇编来编写,所以在编译ZLIB之前,还需要先编译两个汇编程序,先来编译masmx86模块。
(2)从visual studio-工具-visual studio命令提示下进入命令行,VS自动设置命令行环境。进入contrib/masmx86目录下,执行bld_ml32.bat,调用汇编器编译汇编代码。在H:\TDDOWNLOAD\lib\zlib-1.2.7\contrib\masmx86下应该生成了几个obj文件.
(3)打开contrib\vstudio\vc10\zlibvc.sln文件,选择zlibstat模块,添加一个缺少的文件zlib-1.2.7\contrib\minizip\iowin32.c,解决方案配置选择release,当然也可以选择debug版本,但是编译后的体积会略大一些(附带了debug信息),编译此方案。

(4)复制H:\TDDOWNLOAD\lib\zlib-1.2.7\contrib\vstudio\vc10\x86\ZlibStatRelease\zlibstat.lib文件到H:\TDDOWNLOAD\lib\zlib\lib文件夹,同时在H:\TDDOWNLOAD\lib\zlib文件夹下新建include目录,复制H:\TDDOWNLOAD\lib\zlib-1.2.7和H:\TDDOWNLOAD\lib\zlib-1.2.7\contrib\minizip下的头文件到此目录。
到这里,ZLIB编译完毕。
2.编译openssl
阅读剩余部分...
May 9, 2012
| 作者:白菜
|
分类:JAVA
Tomcat 在 7.0 以前的版本都是使用commons-dbcp做为连接池的实现,但是 dbcp存在一些问题:
(1)dbcp 是单线程的,为了保证线程安全会锁整个连接池
(2)dbcp 性能不佳
(3)dbcp 太复杂,超过 60 个类,发展滞后。
因此,通常J2EE中还会使用其它的高性能连接池,如C3P0,还有阿里系的druid 等。为此,Tomcat 从 7.0 开始引入一个新的模块:Tomcat jdbc pool
tomcat jdbc pool 近乎兼容 dbcp ,性能更高
异步方式获取连接
tomcat jdbc pool 是 tomcat 的一个模块,基于 tomcat JULI,使用 Tomcat 的日志框架
使用 javax.sql.PooledConnection 接口获取连接
支持高并发应用环境
超简单,核心文件只有8个,比 c3p0 还少
更好的空闲连接处理机制
支持 JMX
支持 XA Connection。
tomcat jdbc pool 可在 Tomcat 中直接使用,也可以在独立的应用中使用。
阅读剩余部分...
May 7, 2012
| 作者:白菜
|
分类:心情与文字
今天已经离职,可以去干我喜欢干的事情了。
修生养性,努力钻研,为我所好也。
May 4, 2012
| 作者:白菜
|
分类:JAVA
1.javaFx中引入CSS报错
使用如下代码
scene.getStylesheets().add(this.getClass().getResource("login.css").toExternalForm());为JavaFX引入CSS,结果报
Exception in Application start method Exception in thread "main" java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source).
....
Caused by: java.lang.NullPointerException
很明显,这样的问题是由于CSS文件找不到造成的。很可能是由于你的IDE不会自动把CSS文件从工程的SRC目录拷贝到build目录造成的。可以手工拷贝一下,或者清理项目重新生成。
参考网址:
http://stackoverflow.com/questions/9862113/javafx-2-0-xychart-and-css
2..javaFx中引入CSS无效果
症状描述:使用代码
scene.getStylesheets().add(this.getClass().getResource("login.css").toExternalForm());
引入CSS,没有报错,但是也没有CSS效果,而是用下面的方式却是可行的:
grid.setStyle("-fx-background-image: url(\"ThghN.png\"); -fx-background-repeat: stretch; -fx-background-size: 300 250;");问题原因:(1)可能你是用的是较早的javaFx版本,这是其中的一个BUG,解决办法就是升级版本(相关帖子:
https://forums.oracle.com/forums/thread.jspa?threadID=2229859)。
(2)还有可能的原因就是CSS写错了。注意CSS中,选择器是.root,而不是root。在使用IDE生成代码时容易忽略,这个小问题害我排查了将近两个多小时。。。郁闷了
最后,附上手册地址:
http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html
长话短说。php项目里最常见的安全漏洞就是SQL注入了人,这也是php项目和其他语言开发的项目相比最容易出问题的地方。
PHP程序员不太了解预编译是很正常也很普遍的。这个主要是由于MYSQL的预编译和变量绑定比较弱造成的,因为90%的php代码搭配的是mysql数据库,所以大部分php程序员也就不清楚这块的知识了。而oracle,MSSQL这比MYSQL要强的多,相比通常搭配这两个数据库的语言来说,JAVA和NET程序员更了解这块知识。而PDO和MYSQLI在php开发里还没普及,不少技术人员产生惰性,容易引发不少潜在的漏洞。
主要结论:
(1)MYSQL是支持预编译的。
(2)MYSQL的预编译很弱,如仅仅是session级别,对执行效率提升不明显。
(3)程序是否支持预编译,除了数据库支持外,还需要驱动支持。PDO和MYSQLI均支持。
(4)预编译干两件事,转义和软解析提速。
(5)即使是在oracle中,预编译和变量绑定也不一定就能提速,反而有可能会因为执行计划被改变造成效率低下。有些数据库预编译反而会造成效率下降。
(6)预编译和绑定变量是什么关系?其实二者是同一回事的不同阶段的叫法。
--------------------------附---------------------------------
在MYSQL里怎么用预编译:
create table ttest (ID int(4) auto_increment primary key, name varchar(20),age int(4));
insert into ttest (name,age) values ('li',10);
prepare mysqlpre from 'select * from ttest where name = ?';
set @name='li';
execute mysqlpre using @name;
查看反馈结果:
show status like '%prepare%';
April 26, 2012
| 作者:白菜
|
分类:编程算法
刚刚在某论坛看到有人问MYSQL的注释,按照小概率事件不会发生的道理,想必这个问题肯定还是有不少人没有关注过,或者也没仔细思考。
常见的两种注释 -- 和 # 都很简单,需要注意的就是两个 -- 后面是有一个空格字符(可以是空格或者tab等)的。
接下来,让我们困惑的就是类似下面的注释了,通常在一些工具导出的SQL文件里会有,如
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
和我们常见的C风格的注释不一样,有的/**/里面有个感叹号,这是什么原因呢?
原来mysql除了支持普通的/**/注释外,也支持/!**/风格的条件注释。这种风格的注释里的SQL代码都会被MYSQL执行,但是其它SQL服务器不认识这种注释,因此这种注释也就成了mysql专用的注释了,同时具备了兼容性。因此下面这种语句也是可以执行的:
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
那还有一个疑问,文章开头的那段注释里的40101是什么意思,这实际上是MYSQL的版本号,也就是形同4.01.01这样的版本号,4是大版本号,接下来的是小版本号。也就是说注释里的代码只有在当前MYSQL的版本大于等于4.01.01时才会被执行。
其实这样的小知识点,只要是有一点点好奇心和学习精神的,我想都不会放过任何组丝马迹的,多保持好奇心就够了。详细的解释可以参见官方手册。
http://dev.mysql.com/doc/refman/5.5/en/comments.html。
还有最后一个问题,@是什么意思呢,@就是session变量,只在当前会话中有效。
April 24, 2012
| 作者:白菜
|
分类:php
注:本文非技术文章。
什么叫继父类:在php里,父类就是父类,子类就是子类,二者都属于人(这不废话么~这就是弱类型的概念),虽有继承关系,但没有血缘关系,无法在需要时进行合体(转型)。因此,PHP里的父类也叫继父类,当然了,子类就叫继子类。这是什么意思呢,也就是说,像C,JAVA里这样的转型语法 father *pf=new son; 是不存在的。这就是典型的多态特征。对于没有转型概念的php而言,也就没有了类型的界定,“同一类型”也无从谈起,子类和父类被生生的割裂了,子类就是子类,父类就是父类,是两个完全不同的类型,无法互转。当然,你硬要说两者都是同一种类型-弱类型,也不是不可。这也是你可以说PHP有多态,也可以说无多态的一个原因。
什么叫义父类:stdClass是一个保留类,类似JAVA里的OBJECT,但是这个类并不是PHP里其他类的基类,和object又不一样,但这个类又能被继承,而且还能把其它类型的数据转换成这个类。如果把一个标量转为object类型,那么就是转成它了。我不承认我和你有任何瓜葛,但是你要是无路可走,叫我声义父,我就能收留你。因此此类又叫义父类。
继父和义父有啥区别呢?继父抚养继子,有被继承权;而义父只是单纯的收留而已。
(*^__^*) 嘻嘻……