以下是我最近面试遇到的一些面试题目,是我做完后用手机拍下回来整理出来的。绝大部分题目都是直接在网上可以很容易找到原题。
1、写一个排序算法,可以是冒泡排序或者是快速排序,假设排序对象是一个一维数组。
//冒泡排序(数组排序)
function bubble_sort($array) {
$count = count($array);
if ($count <= 0) return false;
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i; $j--){
if ($array[$j] < $array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
//快速排序(数组排序)
function quicksort($array) {
if (count($array) <= 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<count($array); $i++){
if ($array[$i] <= $key) $left_arr[] = $array[$i];
else $right_arr[] = $array[$i];
}
$left_arr = quicksort($left_arr);
$right_arr = quicksort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
2、实现一个字符串截取的函数,类似于substr,必须能够截取中文这种多字节字符串(假设每个中文也是一个字符,普通的数字、字号、字母也是一个字符,GB2312中文字符高位范围是0x81-0xFE)。
/**
* 中文字符串截取(3)(支持GB2312/GBK/UTF-8/BIG5)
* @param string $str 要截取的字串
* @param int $start 截取起始位置
* @param int $length 截取长度
* @param string $charset 字符串的字符集,包括有 utf-8|gb2312|gbk|big5 编码
* @param bool $suffix 是否加尾缀
* @return string 返回接续字符串的结果
*/
function CSubstr($str, $start=0, $length, $charset="gbk", $suffix=false){
if(function_exists("mb_substr")){
return mb_substr($str, $start, $length, $charset);
}
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
$slice = join("", array_slice($match[0], $start, $length));
if($suffix) {
return $slice ."…";
}
return $slice;
}
3、写一个遍历指定目录下所有子目录和子文件的函数(提示:可以使用递归的方法)。
/**
* 递归的遍历一个指定目录
*/
function dir_all ( $path ) {
$handler = opendir($path);
while (false !== ($tmp = readdir($handler))) {
if(is_dir( "$path/$tmp" )) {
if ($tmp=="." | $tmp=="..") continue;
echo $tmp."<br>\n";
dir_all ("$path/$tmp");
} else {
echo $tmp ."<br>\n";
}
}
}
4、写出匹配邮箱地址和URL的两个正则表达式,类似下面的:
邮箱地址: user_name.first@example.com.cn
URL地址:http://www.example.com.cn/user_profile.php?uid=100
(提示:使用标准的正则表达式,就是php中preg_*类的正则处理函数能够解析的正则)
邮箱:/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ URL:/^http:\/\/[\w]+\.[\w]+[\S]*/
5、写出三种以上MySQL数据库的存储引擎的名称。不名分大小写
MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。 MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。 MEMORY存储引擎提供“内存中”表。 InnoDB和BDB存储引擎提供事务安全表。 NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。
6、说出你所知道的三种以上开源数据库的名称。
MYSQL PostgreSQL Firebird Berkeley DBSQLite PostgreSQL
7、MySQL数据库中的字符类型varchar和char的主要区别是什么?哪种字符查询效率要高?为什么?
varchar是可变长度,而char为固定长度。 char效率要高。
8、MySQL数据库基本的三个优化法则是什么?(提示:从服务配置、应用、开发三个角度考虑)。
系统服务优化,把mysql的key_buffer、cache_buffer、query_buffer等增加容量 给所有经常查询的字段适当增加相应的索引 优化sql语句,减少Distinct,Group,Join等语句的操作
9、请使用JavaScript写出三种产生一个Image标签的方法。(提示:从方法、对象、HTML角度考虑)
var img = new Image();
var img = document.createElementById('image');
img.innerHTML = '<img src=xxx.jpg />';
10、请使用CSS样式,描述两种方法在当前列中只显示一个div对象。
<div style='width:199999px;'></div> <div style='clear:both;'></div>
11、请描述两点以上XHTML和HTML最显著的区别。
(1)XHTML必须强制指定文档类型DocType,HTML不需要 (2)XHTML所有标签必须闭合,HTML比较随意
12、说出五种以上你使用过的php扩展的名称。
MB_String Curl GD socket Mysql PDO mongo gearman oauth apc
13、写出三种以上目前php流行的MVC框架名称。
CodeIgniter FleaPHP、Zend Framework、CakePHP、Symfony、Plite、php.MVC、PHP on Trax、Smarty 等等
14、写出十五个以上你所知道的常用Linux命令和它的功能。
15、说说Linux下的find命令和grep命令的区别。
16、请简单的描述Memcache缓存的工作原理。
17、请大致的描述一下Session的工作原理。(提示:与cookie有相应的关系)
18、你用什么方法检查php脚本的执行效率(通常是脚本执行时间)和mysql查询效率(通常是数据 库Query时间),并定位和分析脚本执行和数据库查询的瓶颈。
19、假设给你五台服务器,请大致的描述一下,如何使用你所熟悉的开源软件,搭建日PV 300万左右的中型网站。
=========================================================
1、你使用过的php插件、框架?
2、如何解决jquery ajax的跨域问题?
jsonp
3、mysql_fetch_row()和mysql_fetch_array()之间有什么区别?
这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,我们只能$row[0],$row[1],这样以数组下标来读取数据, 而MySQL_fetch_array()返回的数组既包含第一种,也包含键值对的形式,我们可以这样读取数据: $row['username'], $row['passwd']
4、如何使用php获取一个url的html内容?
用curl扩展,或 file_get_contents($url)
5、$uptime = ‘2013-01-06 08:12:33’,写出php计算$uptime三天后方法?
$newt = strtotime('+3 days', strtotime('2013-01-06 08:12:33'));
echo date('Y-m-d H:i:s', $newt);
6、php如何将数组 array(‘b’, ‘a’, ‘c’)转变成array([1]=>’a’,[0]=>’b’,[2]=>’c’)?
7、preg_match(“/^(http:\/\/)?([^\/]+)/i”, “http://www.php.net/index.html”, $matches); echo $matches[0];
http://www.php.net
8、执行将输出?
2
9、linux的远程拷贝命令?
scp
10、linux修改文件filename及其子目录的拥有者为username
chown filename username
11、linux中批量杀死mysql为sleep的连接
echo "`date` killing mysql sleep process..." >> /tmp/crontab.log
for id in `mysql -u root -pYourPassword, -e "show processlist"|grep -i -E 'sleep|locked' | awk '{if($6>100){print $1}}'`
do
echo "killing pid $id" >> /tmp/crontab.log
echo `mysql -u root -pYourPassword, -e "kill $id"`
done
12、mysql中有哪些存储引擎
13、mysql修改表test主键为id?
添加唯一键 ALTER TABLE `test2` ADD UNIQUE ( `userid`) 修改主键 ALTER TABLE `test2` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `id` ) 增加索引 ALTER TABLE `test2` ADD INDEX ( `id` )
14、mysql计算日期’2013-01-14 20:34:47’向前推三天是哪一天?
select date_sub('2013-01-14 20:34:47', interval 3 day);
15、$str1 = null; $str2 = false; echo $str1 == $str2 ? ‘相等’ : ‘不相等’;
相等
16、下面程序的输出结果
//A.php
<?php
function Test_Global(){
include 'B.php';
Test();
}
$a = 0;
Test_Global();
echo $a;
?>
//B.php文件
<?php
function Test(){
global $a;
$a -= 1;
}
?>
答案为-1
17、下面程序的输出结果
function getCount(){
static $count = 3;
return $count++;
}
function getCounts(&$count){
unset($count);
$count = 1;
}
$count = 5;
getCounts($count);
echo $count;
++$count;
echo $count;
echo getCount();
echo getCount();
5 6 3 4
18、使用php的二分法查找算法输出数组 $arr = array(1,2,3,4,5,6,7,8,9,12,23,33,35,56,67,89,99)中33的下标。
19、简述mysql的分区和分表。
么是分表,从表面意思上看呢,就是把一张表分成N多个小表 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上
20、假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。
window.onload = function (){
setTimeout(function(){window.location.href = 'b.html'}, 5000)
}
=========================================================
1、Python如何实现单例模式?
Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模式:
class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls, *args, **kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
__metaclass__ = Singleton
print MyClass()
print MyClass()
使用decorator来实现单例模式
def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class MyClass:
…
2、什么是lambda函数?
Python允许你定义一种单行的小函数。定义lambda函数的形式如下:labmda 参数:表达式lambda函数默认返回表达式的值。
你也可以将其赋值给一个变量。lambda函数可以接受任意个参数,包括可选参数,但是表达式只有一个:
>>> g = lambda x, y: x*y >>> g(3,4) 12
3、Python是如何进行类型转换的?
Python提供了将变量或值从一种类型转换成另一种类型的内置函数。int函数能够将符合数学格式数字型字符串转换成整数。否则,返回错误信息。
>>> int(“34″) 34 >>> int(“1234ab”) #不能转换成整数 ValueError: invalid literal for int(): 1234ab
4、Python如何定义一个函数?
函数的定义形式如 下: def (arg1, arg2,… argN): .... return ...
5、Python是如何进行内存管理的?
Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
6、如何反序的迭代一个序列?
a = [1, 2, 3, 4, 5] for x in a[::-1]: print x,
7、Python里面如何实现tuple和list的转换?
使用tuple()和list()就直接可以转换了
>>>tuple([1,2]) (1, 2) >>> list((1,2)) [1, 2]
8、请写出一段python代码实现删除一个list里面的重复元素。
使用set
>>>a=[1, 2, 2, 3, 2, 1, 5, 4] >>>list(set(a)) [1, 2, 3, 4, 5]
9、如何用python删除一个文件?
import os 删除文件: os.remove() 删除空目录: os.rmdir() 递归删除空目录: os.removedirs()
10、python如何copy一个文件?
shutil.copyfile:如何复制文件 os.path.exists:如何判断文件夹是否存在 shutil.copytree:如何复制目录树
11、python里面如何生成随机数?
使用random库
>>>import random >>>random.random() 0.65210770661102258 >>> random.randint(1, 100) 93
12、如何用python来发邮件?
主要使用smtplib库
smtp = smtplib.SMTP()
try :
smtp.set_debuglevel( 1 )
smtp.connect(" server ")
smtp.login(" user ", " password")
except :
print " smtp login exception! "
smtp.sendmail(fromaddr, toaddrs, msg)
smtp.quit()
13、python里面如何拷贝一个对象?
标准库中的copy模块提供了两个方法来实现拷贝.一个方法是copy,它返回和参数包含内容一样的对象.
import copy new_list = copy.copy(existing_list)
有些时候,你希望对象中的属性也被复制,可以使用deepcopy方法:
import copy new_list_of_dicts = copy.deepcopy(existing_list_of_dicts)
14、有没有一个工具可以帮助查找python的bug和静态的代码分析?
有,PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个工具可以进行coding standard检查。
15、如何在一个function里面设置一个全局变量?
global 语句。在function的开始插入一个global声明:
def f():
global x
16、有两个序列a,b,大小都为n,序列元素的值为任意整形数,无序。要求交换a、b中的元素,使[序列a元素的和]与[序列b元素的和]之间差最小。
* 将两序列合并为一个序列,并排序,为序列Source * 拿出最大元素Big,次大的元素Small * 在余下的序列S[:-2]进行平分,得到序列max,min * 将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。
17、用python匹配html tag的时候,和有什么区别?
贪婪与非贪婪
18、python里面search()和match()的区别?
match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none 例如: print(re.match(‘super’, ‘superstition’).span())会返回(0, 5) 而 print(re.match(‘super’, ‘insuperable’))则返回None search()会扫描整个字符串并返回第一个成功的匹配 例如:print(re.search(‘super’, ‘superstition’).span())返回(0, 5) print(re.search(‘super’, ‘insuperable’).span())返回(2, 7)
19、如何用python来进行查询和替换一个文本字符串。
a = 'hello word'
我把a字符串里的word替换为python
1用字符串本身的replace方法
a.replace('word','python')
输出的结果是hello python
2用正则表达式来完成替换:
import re
strinfo = re.compile('word')
b = strinfo.sub('python',a)
print b
输出的结果也是hello python
20、介绍一个except的用法和作用。
Python的except用来捕获所有异常, 因为Python里面的每次错误都会抛出 一个异常,所以每个程序的错误都被当作一个运行时错误。
try:
foo = opne(“file”) # 这时候except只捕获IOError
except IOError:
sys.exit(“could not open file”)
21、python中pass语句的作用是什么。
什么都不做,空操作。
22、介绍一下python下range()函数的用法。
>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> range(0, 30, 5) [0, 5, 10, 15, 20, 25] >>> range(0, 10, 3) [0, 3, 6, 9] >>> range(0, -10, -1) [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] >>> range(0) [] >>> range(1, 0) []
=========================================================
1、运行下面程序,输出结果为?
<?php
$global_obj = null;
class my_class {
var $value;
function my_class(){
global $global_obj;
$global_obj = &$this;
}
}
$a = new my_class();
$a->my_value = 50;
$global_obj->my_value = 100;
echo $a->my_value;
?>
答案为50
2、运行下面程序,输出结果为?
<?php
class my_class {
var $value;
}
$a = new my_class();
$a->my_value = 5;
$b = $a;
$b->my_value = 10;
echo $a->my_value;
?>
答案为10
3、运行下面程序,输出结果为?
<?php
define('myvalue', '10');
$var = 'abs_system';
$myarray[10] = 'Dog';
$myarray[] = 'Human';
$myarray['myvalue'] = 'Cat';
$myarray['Dog'] = 'Cat';
print 'The value is:';
print $myarray[myvalue].$var{2}.'\n';
?>
答案为 The value is:Dogs\n