当年我做过的面试题目

刚刚看了bobhero准备的考试题, 是做留言本的, 所以想起了我以前做的一套面试题.

个人觉得这套题还是不错的, geel花了不少心思出的, 题先发出来, 答案整理过后再跟上.

__ 1.php __

__ 试题 __

XHTML和CSS方面的问题不允许借用dreamweaver之类的工具。

一、php方面

1、打开1.php,在文件里写一个类Test实现ITest接口。(如果不会实现接口可以直接改写成类)
2、在当前目录下写一个文件 1-1.php,依次调用你刚才写的Test类的所有method。
3、上述代码(interface ITest)中,public修饰符是什么意思?同类修饰符还有哪些?各有什么意义?
4、上述代码中,function前面为什么要加static关键字?php的关键字和函数区别大小写吗?
4.1、文件 1.php 中不添加结尾的 “?>” 可以运行吗?不添加 “?>” 有什么作用吗?
5、=== 和 == 有什么区别?
6、引用的利弊?一般来说各自在什么情况下用?function如何返回引用?如何给一个function传递引用?
7、一个典型web程序(例如一个论坛)的性能瓶颈通常来说在什么地方?一般采用什么什么方法来提高执行效率?
8、一般用什么办法判断当前页面是用户 post而不是get?

二、XHTML和CSS以及javascript方面
9、简述两条w3c关于XHTML1.0的规范
10、访问过的超链接样式不再具有css里定义的hover和active了,问题的原因可能是?解决方法是?
答案::visited
11、定义一个层,用css实现下列样式:高200px,宽300px,其边框宽度为1px,边框颜色为红色,背景颜色为蓝色,文字颜色为白色,文字水平和垂直居中,文字大小14px,粗体
12、设有 <ul><li>aaa</li><li>bbb</li></ul>,用css使aaa和bbb显示在同一行上。
答案:display:inline;
13、onblur事件在什么时机被触发?
答案:失去焦点
14、请指出body是什么元素的子元素?
答案:document
15、设有如下HTML代码:
<input type=”text” id=”companyName” />
<p id=”company”></p>
<input type=”button” onclick=”setCompanyName()” value=”设置公司名” />
请完成 setCompanyName() 方法,使点击按钮的时候,将<p>中的文字设置为输入框中的文字。如果点击按钮时输入框里没有文字,弹出“请输入文字”的提示。
16、使用过哪些js类库?

三、其他部分
17、使用过哪些发行版本的Linux?喜欢他们的哪些地方?
18、在linux下面你一般用什么方法安装一个软件?
19、bash下面 ls -lah 代表什么意思?
19、rm -i 代表什么意思?rm -f 呢?
20、你用什么办法登录到一台 linux 主机?21、一个文件的权限为 764,表示什么意思?用什么命令将这个文件的权限改为 700?
22、FTP传输过程中binary和ascii模式有什么区别?
23、一个ftp服务器ip为1.2.3.4,端口为123,用户名是 andy,密码是 xyz,要求下载 movie 目录下的 1.rm,请写出可以直接下载这个文件的 URL
24、HTTP返回代码中404代表什么含义?302呢?
25、<script src=”a.js?0607”></script>,请问为什要写问号及其后面的内容?
答案:防止缓存
26、假设第1题中某一个方法你不知道怎么实现,一般情况下你会通过哪些途径来解决?

CentOS+Apache+PHP+MYSQL+Python+Trac

这个是我给公司配服务器时候做的记录, 先占个位置, 以后补全.

CentOS 4.5

操作系统用的是CentOS 4.5 , 主要是因为CentOS不会有版权问题.

MYSQL 5.0.5la

root@localhost

shell> groupadd mysql
shell> useradd -g mysql mysql

shell> ./configure –prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> bin/mysql_install_db –user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> bin/mysqld_safe –user=mysql &

#echo '/usr/local/mysql/bin/mysqld_safe –user=mysql &' >> /etc/rc.local

Apache没有用2.2, 而是用了2.0, 比较稳定也足够用.

APACHE 2.0.63

DocumentRoot /usr/local/apache2/htdocs

shell> ./configure –prefix=/usr/local/apache2 –enable-dav –enable-dav-fs –enable-so –enable-rewrite
shell> make
shell> make install

PHP 5.2.5

shell> ./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=/usr/local/mysql –prefix=/usr/local/php5

shell> make
shell> make install
shell> cp php.ini-dist /usr/local/php5/lib/php.ini

shell> vim /usr/local/apache2/conf/httpd.conf

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

DirectoryIndex index.php index.html index.htm

AllowOverride All

/etc/rc.d/rc5.d/S97lamp

/usr/local/mysql/bin/mysqld_safe –user=mysql &
/usr/local/apache2/bin/apachectl start

下面这些东西是给php提供gd支持的.

zlib 1.2.3

freetype 2.1.10

libpng 1.2.25

jpeg-6b

gd 2.0.33

tar zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make
make install

tar zxvf freetype-2.1.10.tar.gz
cd freetype-2.1.10
./configure –prefix=/usr/local/modules/freetype
make
make install

tar zxvf libpng-1.2.8-config.tar.gz
cd libpng-1.2.8-config
./configure
make
make install

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure –prefix=/usr/local/modules/jpeg6 –enable-shared –enable-static
make
make install

tar zxvf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure –prefix=/usr/local/modules/gd –with-jpeg=/usr/local/modules/jpeg6 –with-png –with-zlib –with-freetype=/usr/local/modules/freetype
make
make install

先把目录建了, 要不编译的时候会找不到文件夹.

mkdir jpeg6

mkdir jpeg6/include

mkdir jpeg6/lib

mkdir jpeg6/bin

mkdir jpeg6/man

mkdir jpeg6/man/man1

shell> ./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=/usr/local/mysql –prefix=/usr/local/php5 –with-iconv –with-mbstring –enable-mbstring –with-jpeg-dir=/usr/local/jpeg6/ –with-zlib –with-png –with-freetype-dir=/usr/local/freetype/ –with-gd=/usr/local/gd/

Subversion 1.4.6

shell>./configure –prefix=/usr/local/subversion

一开始打算用mysql来存放账号密码的, 建好了数据表但是没有用.

CREATE DATABASE svn;
CREATE TABLE user (
username varchar(25) collate utf8_unicode_ci NOT NULL default ‘’,
passwd varchar(25) collate utf8_unicode_ci NOT NULL default ‘’,
groups varchar(25) collate utf8_unicode_ci NOT NULL default ‘’,
PRIMARY KEY (username),
KEY groups (groups)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

mod_python 3.3.1

./configure –with-apxs=/usr/local/apache2/bin/apx
make
make install

clearsilver-0.10.5

shell>./configure –disable-apache –disable-csharp –disable-ruby –prefix=/usr/local/clearsliver –with-python

shell>make

shell>make install

shell>cd python/

PYTHON_SITE='python -C
“import sys; print [path for path in sys.path if path.find('site-packages') != -1][0]”'

shell>python setup.py install

mysql-python 1.2.2

set.cfg
修改mysql_config绝对路径
安全线程->false
shell>python setup.py build
shell>puthon setup.py install

trac 0.11b2

tar zxvf trac-0.10.4.tar.gz

python ./setup.py install

trac-admin /usr/local/trac/order initenv    (/usr/loca/trac 目录会自动创建)

#Project Name [My Project]> test
#Database connection string [sqlite:db/trac.db]> mysql://trac:trac@localhost/trac  //前面创建数据库所用的到信息
#Repository type [svn]>     //这里为空,直接回车
#Path to repository [/path/to/repos]> /var/svn/order   //SVN仓库地址

<Location /trac>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /usr/local/trac
SetEnv PYTHON_EGG_CACHE /tmp
PythonOption TracUriRoot /trac
AuthType Basic
AuthName “test's trac”
AuthUserFile /var/svn/passwd
Require valid-user

说说现在的办公环境

以前都是自己写东西, 没有注意到团队上的问题, 上班之后发现团队合作和工具的使用是很重要的.

硬件不说, 公司没有很大财力, 我觉得比较理想的是一个人有两台以上的办公电脑, 那样工作效率会比较高, 现在一台电脑用起来很吃力, 特别是最近的项目都用windows 2007 的onenote来写开发文档, 不能跑到linux下写代码了.

版本控制公司用的是svn, 版本控制, 好处不多说, 用起来的确很方便, 只是配的时候不太方便, 现在用的服务器是我配的, 当时配了svn+apache, 还配了trac(一款python的项目管理系统, 可以在web下查看svn记录, 还有bug跟踪等等功能), 但是很少用.

写开发文档目前在用office 2007 的onenote, 这个东西很不错, 可以多人同时修改同一个文档, 而且功能也很强大, 以后准备架设一个office的服务器, 因为onenote使用时必须有一台电脑开共享, 不是很方便.

开发工具大家都用ZDE, 后来有用ZDE for Eclipse的, 功能的确很强大, 还架设了Zend Server, 用来调试php, 功能非常棒, 只是我不喜欢IDE, 所以一直在用EditPlus, 不过用EditPlus的确是有好处的, 因为用ZDE的人普遍反映会记不住很多东西, 因为ZDE太强大了,同事特别推荐我用Emeditor,也很不错, 感觉比EditPlus更强大, 更通用, 只是两款软件都有通病,就是都是收费软件, 其实ZDE也是.

服务器用的是CentOS, 因为不会有版权问题, 公司的打卡系统是自己开发的, 用起来不是很舒服.

我和同事之间经常用用VNC, 就是远程桌面, 这样就免得来回跑了, 公司内部聊天室用IPMSG的, 很小很强大, 开源免费.

同事设计数据库和程序结构的时候用 Enterprice Architect, 这个东西我不太用, 只是用来看别人的设计, 不过这个东西功能还是很好的, 结构关系一目了然, 设计完毕可以直接生成程序代码和sql.

我的电脑上装的东西比较少, 开发环境是Xampp, 以前是AMPXE, 但是后来感觉的确太精简了…

因为经常要测试网页兼容性, 所以IE, Firefox2, Firefox3, Opera都有装, 我应该算装的比较少的, 以前比较喜欢Opera, 因为opera有同步收藏夹功能, 不过后来又回到firefox下了, 现在firefox3出道beta5了, 的确很不错.

ftp软件装了filezilla,  , 管理服务器用的是putty, 还装了pidgin,这个很方便, 开机自启动, QQ,MSN,G-Talk全都齐全了, QQ音乐, 基本上这是工作时候唯一的娱乐,只要一开机, 音乐一定会响起.

桌面是google日历, 平时把计划都写在上面,还有个鱼鱼桌面秀的天气预报放在桌面上.

还有就是我从来不装杀毒软件, 后来装了个安全卫士360, 感觉还不错, 防火墙也够用, 可以做一些清理和防护, 还有简单的杀毒. 前一阵子和磁碟机干上了, 又装了一个usb Cleaner的usb监控.

就写这些, 想起其他的再补上.

debian下编译pidgin2.4.0

edited on March 7, 2008 3:50 PM, 这篇文章是在服务器down掉的日子里写在google doc里的.

终于在debian下成功编译了pidgin2.4.0,简单记录一下.

多数情况下编译不成功或者不能编译都是因为缺少库文件, 下面是编译pidgin2.4.0用到的库,我的debian版本是4.*

  • gcc

  • autoconf

  • gdb

  • automake1.9

  • libgtk2.0-dev

  • libxml2-dev

  • gettext

  • libnss3-dev

  • libnspr4-dev

  • build-essential

  • libxml-parser-perl

  • libglib2.0-dev

  • libglib2.0-dev

  • libgstreamer0.10-dev

  • libnss-dev(用来解决msn的ssl支持问题)

然后
./configure   make make install

后记: 刚刚用linux的时候在网上找编译相关的教程, 一个网友说解决编译失败最简单的方法是把光盘中全部的库都装上… 不过由于我比较懒, 并没有那么长时间来试.

关于错误消息的跳转

下午在做项目的后期测试, 发现错误消息那里会出现一些问题.

为了能保存用户出错之前输入的数据,错误页使用了javascrtp中的history.go(-1)返回出错的页面. 但今天发现在ie下返回页面显示页面已过期,火狐3.0下要求重新发送请求.

在网上找了一下,用

1
session_cache_limiter('private');

可以解决, 但是究竟为什么还没有看明白, 这个函数没有中文版的讲解.

大概这么用:

1
2
3
session_cache_limiter('nocache');  // 清空表单
session_cache_limiter('private');   //不清空表单,只在session生效期间
session_cache_limiter('public');   //不清空表单,如同没使用session一般

不过这样做有一点不妥, 就是原页刷新表单也不会被清空, 验证码在ie下会被缓存.

还有就是错误跳转那里

1
2
3
<script>
window.onload = setTimeout('history.go(-1)',3000);
</script>

这样写ie下会有一个错误, 没深究, 因为opera不支持onload方法,所以一般用下面这样.

1
2
3
4
<script>
jumpto = function(){setTimeout('history.go(-1)',3000);};
window.onload = jumpto;
</script>

还好没有什么错误, 只是不标准而已.