以下是我最近面试遇到的一些面试题目,是我做完后用手机拍下回来整理出来的。绝大部分题目都是直接在网上可以很容易找到原题。
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