1.获取文件后缀,遍历目录层次
/**
* 这道题其实就是考函数substr() strrchr() array_pop() strrpos() strpos() strrev() explode() pathinfo()
* @param string $filename 要处理的文件名 1.jpg/1.png/1.html/1.php
* @return string .php/php
*/
function get_ext1($filename)
{
return strrchr($filename,'.');
}
function get_ext2($filename){
return substr($filename,strrpos($filename,'.'));
}
function get_ext3($filename){
return array_pop(explode('.',$filename));
}
function get_ext4($filename){
return pathinfo($filename,PATHINFO_EXTENSION);
}
function get_ext5($filename){
return strrev(substr(strrev($filename),0,strpos(strrev($filename),'.')));
}
$filename = "1.php";
echo get_ext1($filename)."\n";
echo get_ext2($filename)."\n";
echo get_ext3($filename)."\n";
echo get_ext4($filename)."\n";
echo get_ext5($filename)."\n";
/**
* 遍历目录(递归)
* @param string $dir 目录名且最后没有/
* @return array $files 整个目录结构
*/
function myScandir($dir)
{
$files = array();
if($handle = opendir($dir)){
while (($file = readdir($handle)) != false){
if($file != "." && $file != ".."){
$newDir = $dir."/".$file;
if(is_dir($newDir)){
$files[$file] = myScandir($newDir);
}else{
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
$dir = "/dirname";
print_r(myScandir($dir));
2.使用PHP描述冒泡排序和快速排序,对象可以是一个数组
/**
* 冒泡排序算法实现(从小到大)
*/
functionmaopaoSort (&$array)
{
$count=count($array);
for($i= 0;$i<$count- 1;$i++) {
for($j= 0;$j<$count-$i- 1;$j++) {
if($array[$j] >$array[$j+ 1]) {
$tmp=$array[$j];
$array[$j] =$array[$j+ 1];
$array[$j+ 1] =$tmp;
}}}}
/** * 快速排序 */
function pivotParation (&$array, $start, $end)
{ $stand = $array[$start];
while ($start < $end)
{ while ($start < $end && $array[$end] >= $stand)
{ $end --; }
if ($start < $end) { $array[$start ++] = $array[$end]; }
while ($start < $end && $array[$start] <= $stand) { $start ++; }
if ($start < $end) { $array[$end --] = $array[$start]; } }
$array[$start] = $stand; return $start; }
function quickSort (&$array, $begin, $end)
{
if ($begin < $end) { $pivot = pivotParation($array, $begin, $end);
quickSort($array, $begin, $pivot - 1);
quickSort($array, $pivot + 1, $end); } }
$arr = array( 5, 1, 3, 2, 19, 11, 25, 12, 100, 10000, 12 );
// 冒泡排序
maopaoSort($arr);
print_r($arr); echo "";
// 快速排序
$count = count($arr);
quickSort($arr, 0, $count - 1);
print_r($arr);
3.使用php描述顺序查找和二分查找
/**
* 顺序查找
*/
functionseqSearch ($arr,$needle)
{
for($i= 0,$len=count($arr);$i<$len;$i++) {
if($arr[$i] ==$needle) {
return$i;
}
}
return- 1;
}
/**
* 二分查找
*/
functionmidSearch ($arr,$start,$end,$needle)
{
while($start<=$end) {
$mid= (int)($start+ ($end-$start) / 2);// 防止超出整数表示范围
if($arr[$mid] ==$needle) {
return$mid;
}elseif($arr[$mid] >$needle) {
$end=$mid- 1;
}else{
$start=$mid+ 1;
}
}
return- 1;
}
$arr=array(1,2,3,4,5,6,7,8,9,10);
$needle= 5;
echoseqSearch($arr,$needle);
echo "";
echomidSearch($arr, 0,count($arr) - 1,$needle);
4.PHP变量的内部实现
编程语言的系统类型分为强类型和弱类型两种:
强类型语言是一旦某个变量被申明为某个类型的变量,在程序运行过程中,就不能将该变量的类型以外的值赋予给它,c/c++/java等语言就属于这类
php及ruby,javascript等脚本语言就属于弱类型语言:一个变量可以表示任意的数据类型
5.php变量类型及存储结构
php在声明或使用变量的时候,并不需要显式指明其数据类型
php是弱类型语言,这不并表示php没有类型,在php中,存在8种变量类型,可以分为三类:
标量类型:boolean,integer,float,string
复合类型:array,object
特殊类型:resource,NULL
6.计算两个日期之间的天数
/**
* 求两个日期之间相差的天数(针对1970年1月1日之后,求之前可以采用泰勒公式)
* @param string $day1
* @param string $day2
* @return number
*/
functiondiffBetweenTwoDays ($day1,$day2)
{
$second1=strtotime($day1);
$second2=strtotime($day2);
if($second1<$second2) {
$tmp=$second2;
$second2=$second1;
$second1=$tmp;
}
return($second1-$second2) / 86400;
}
$day1="2013-07-27";
$day2="2013-08-04";
$diff= diffBetweenTwoDays($day1,$day2);
echo$diff."\n";
7.能够使HTML和PHP分离开使用的模板
smarty,phplib
8.MYSQL取得当前时间的函数是?,格式化日期的函数是
CURRENT_TIMESTAMP()
DATE_FORMAT()
select DATE_FORMAT("2011-11-21 10:10:10","%Y-%m-%d");
8.实现中文字串截取无乱码的方法。
mb_substr($str, 1, 1,"GB2312");
9.如何实现字符串翻转?
英文:
strrev($a)
中文或其他文字:
中文:GB2312, 代码是使用GB2312编码
functionreverse($str)
{
$ret="";
len=mbstrwidth(str,"GB2312");
for(i=0;i< len;i++)
{
arr[]=mbsubstr(str,$i, 1,"GB2312");
}
returnimplode("",array_reverse($arr));
}
print_r(reverse("你好"));
10.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?
$a= <
good test
EOD;
11.写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)
select top 10 id,username from members order by posts desc
12.请写一个函数验证电子邮件的格式是否正确
$str="[email protected]";
$pattern="([a−z0−9\.−]+)@([\da−z\.−]+)\.([a−z\.]2,6)";//正则
//$pattern="/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i";
return preg_match($pattern,$str);
13. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
$url="http://www.sina.com.cn/abc/de/fg.php?id=1";
arr=parseurl(url);
pathArr=pathinfo(arr['path']);
print_r($pathArr['extension']);
14.写一个函数,算出两个文件的相对路径
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
计算出 b相对于a 的相对路径应该是 http://www.jb51.net/12/34/c.php将添上
$a='/a/b/c/d/e.php';
$b='/a/b/12/34/c.php';
//获取path相对于conpath的相对路径
functionsGetRelativePath(path,conpath)
{
pathArr=explode("/",path);
conpathArr=explode("/",conpath);
$dismatchlen= 0;
for(i=0;i
{
if(conpathArr[i] != pathArr[i])
{
dismatchlen=count(pathArr) -$i;
arrLeft=arrayslice(pathArr,$i);
break;
}
}
ret=strrepeat("../",dismatchlen).implode("/",$arrLeft);
return$ret;
}
print_r(sGetRelativePath(b,a));
15.简单说明PHP的垃圾收集机制是怎样的?
对变量有个引用计数,计数到0时变量被销毁。
16.请大致的说说Session的工作原理
参考:http://www.cnblogs.com/kucongzhi/archive/2010/07/13/1776728.html
17.写出三种以上MySQL数据库存储引擎的名称
MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎
18.说出你所知道的三种以上开源数据库的名称
MySQL、SQLite、BDB(Berkeley DB)、PostgreSQL、Firebird
19.说说下面这些这些协议的全称和中文解释(提示:都是工作在应用层)
SMTP、POP3、HTTP、FTP、DNS
SMTP (Simple Mail Transfer Protocol) 简单邮件传输协议
POP3 (Post Office Protocol 3) 邮局协议第3版
HTTP (Hypertext Transfer Protocol) 超文本传输协议
FTP (File Transfer Protocol)文件传输协议
DNS (Domain Name System and Domain Name Service protocol) 域名系统(服务)协议
20.使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?
Memcahce是把所有的数据保存在内存当中,采用hash表的方式,每条数据又key和value组成,每个key是独一无二的,当要访问某个值的时候先按照找到
值,然后返回结果。Memcahce采用LRU算法来逐渐把过期数据清除掉。
21.说说你所了解的搜索引擎包含那些技术?
爬虫(采集)、切词(分词)、索引(存储)、查询以及其他相关技术