楚楚街php面试题,面试题总结

/**

* Created by PhpStorm.

* User: qishou

* Date: 2015/8/29

* Time: 9:29

*/

header("content-type:text/html;charset=utf-8");

/*===============================众荟网技术部=====================================*/

//截取中文字符串

$str = "中国hello world !";

echo substr($str,0,6)."
";

echo mb_substr($str,0,6,'utf8')."
";

echo strlen($str)."
";

echo mb_strlen($str,'utf-8')."
";

//cookie 禁用后session是否还能使用?

//答:可以通过url,表单进行提交

//如何设计数据库

//1.为数据库选择合适的存储引擎

//2.遵循三范式建立合理的表结构

//3.添加适当的索引

//垂直分割和水平分割的依据是什么?

//答:根据实际的业务需求

//常用的数据库索引

//1.主键索引

//2.唯一索引

//3.联合索引

//4.普通索引

//常用的数据库引擎

//1.MYISAM

//2.INNODB

//3.heap

//4.BDB

//MYISAM 和 INNODB的区别

//1.MYISAM 不支持事务,innodb支持事物

//2.myisam 是表级锁,innodb 是行级锁

//3.msIsam 支持全文索引,innodb 不支持全文索引

//4.myisam 常用于select较多的数据库,innodb 常用于更新较多的数据库

//git 如何回退历史版本

//git log 查看版本历史

//git reset --hard 39458493859;

/*===============================e袋洗=====================================*/

// 打印出昨天的的日期

echo date('Y-m-d H:i:s',strtotime("-1 day"))."
";

//写出三种以上常用的开源数据库

//mysql , sqllite, BDB ,firebird

//写出三种以上的数据库引擎

//myisam, innodb, BDB, heap

//js写出三种创建image标签的方式

//var image = new image();

//var image = document.createElemetById('image'); //createElementById();用来创建对象

//image.innerHTML("");

//写出你所见过的PHP文件的后缀

//.php , .inc , .conf , .tpl ,

//写出你所用过的PHP的扩展

//mb_string , PDO , mysql , GD, socket ,curl

//排序都是有哪些,写出一种排序

//排序有:冒泡排序,简单选择排序,直接插入排序,shell排序,堆排序,归并排序,快速排序

//例如:快速排序

function quick_sort($array){

$length = count($array);

if($length<=1){

return $array;

}

$privotkey = $array[0];

$left_array = array();

$right_array = array();

for($i=0;$i

if($array[$i]<=$privotkey){

$left_array[] = $array[$i];

}else{

$right_array[] = $array[$i];

}

}

$left_array = quick_sort($left_array);

$right_array = quick_sort($right_array);

return array_merge($left_array,array($privotkey),$right_array);

}

//PHP 遍历指定目录下所有文件

function get_all_file($path){

$files = array();

if(is_dir($path)){

if($handle = opendir($path)){

while($file = readdir($handle)){

if($file!='.' && $file!='..'){

$child_path = $path.'/'.$file;

if(is_dir($child_path)){

$files[$file] = get_all_file($child_path);

}else{

$files[] = $child_path;

}

}

}

}

closedir($handle);

return $files;

}

}

$path = "f:";

//echo "

";

//print_r(get_all_file($path));

//解释下列网络协议

//1.SMTP:简单邮件协议

//2.POP3:邮局协议

//3.HTTP:超文本协议

//4.FTP:文件传输协议

//5.DNS:域名解析服务

/*

var image1 = new Image(); //面向对象的方法

var image2 = document.createElement("image"); //document.createElement()方法

//image1.innerHTML('

//单击A改变B并禁用AB

var btn_A = document.getElementById('A');

var btn_B = document.getElementById('B');

btn_A.onclick = function(){

//btn_B.setAttribute('text','cc');

btn_B.innerHTML = "loading...";

btn_A.setAttribute('disabled','false');

btn_B.setAttribute("disabled",'false');

}

*/

//正则表达式匹配邮箱和URL

$email = 'qishouzhang@marchsoft.cn.com';

$url = 'http://baidu.com.cn';

$grep_email = '/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/';

var_dump(preg_match($grep_email,$email,$matches));

var_dump($matches[0]);

$grep_url = '/^http:\/\/[\w]+(\.[\w]+)+[\S]*/';

var_dump(preg_match($grep_url,$url,$matches));

var_dump($matches[0]);

/*===============================汇通天下物流=====================================*/

//写出你常用的Linux命令

//ls , cat ,vi ,mv ,cp , rm, chmod, find , ps, top,sudu

//写出常用的魔术方法

//__construct(),__destruct(),__call(),__isset(),__get(),__clone(),__sleep(),__weakup()

//多服务器如何实现session共享?

//答:存数据库(当然还有其他的方式上)

//单击按钮A修改按钮B的显示为loading...且禁用按钮A和按钮B

/*var btnA = document.getElementById('A');

var btnB = document.getElementById('B');

btnA.onclick = function(){

btnB.innerHTML = "loading";

btnA.setAttribute('disabled','true');

btnB.setAttribute('disabled','true');

}*/

//正则表达式匹配邮箱

preg_match('/^[a-zA-Z0-9_-]+@[a-zA-Z_-]+(\.[a-zA-Z0-9_-]+)+$/',$email,$matches);

var_dump($matches[0]);

//include 和 require 的区别

//1.include 包含的文件如果出错了,给出一个警告但不会终止脚本

//2.require 包含的文件如果出错了,给出一个致命错误会终止脚本

//3.include 什么时候使用什么时候引入,require 通常在文件的开始处

//4.require 不能放到if条件中,include可以放到if条件中

//MVC的优缺点

//优点:

//1.快速开发

//2.分工明确

//3.松耦合,重用性高

//缺点:

//1.需要维护大量的文件

//2.增加了结构的复杂性

//最后一题:N个数,写一个高效的算法判断是否存在两个数的和是P

function check($array,$p){

$length = count($array);

for($i=0;$i

echo "a";

for($j=$i+1;$i

if($array[$i]+$array[$j] == $p){

echo "存在!$p = {$array[$i]}+ {$array[$j]}
";

return ;

}

}

}

echo "不存在!
";

}

$array = range(1,10);

shuffle($array);

//var_dump($array);

//check($array,112);

/*===============================壹号车=====================================*/

//斐波那契数列的递归和非递归实现

//斐波那契数列-递归

function feibo($n){

if($n<0)return;

if($n<2)return $n;

for($i=2;$i<=$n;$i++){

return feibo($n-1)+feibo($n-2);

}

}

var_dump(feibo(6));

//斐波那契数列-非递归

function feibo2($n){

if($n<0)return;

if($n<2)return $n;

$x=0;$y=1;$z=0;

for($i=2;$i<=$n;$i++){

$z = $x+$y;

$x = $y;

$y = $z;

}

return $z;

}

var_dump(feibo2(6));

//一组数字要求奇数在前偶数在后

function adjust(&$array){

$length = count($array);

$pre = 0;

$end = $length-1;

while($pre

while($pre

$pre++;

}

while($pre

$end--;

}

list($array[$pre],$array[$end]) = array($array[$end],$array[$pre]);

}

}

$array = range(1,10);

shuffle($array);

//var_dump($array);

//adjust($array);

//var_dump($array);

//多维数组取值的其他方式例如;$array[a][b][c] => get_array_value($array,$path)

function get_array_value($array,$path){

$path = explode(',',$path);

$length = count($path);

if($length<=0)return;

$tmp = array();

for($i=1;$i

$tmp = $array[$path[$i-1]]; //上一维度

$tmp = $tmp[$path[$i]]; //当前维度

$array[$path[$i]] = $tmp; //当前维度用作下一次循环的开始

}

return $tmp;

}

$array = array('a'=>array('b'=>array('c'=>array('d'=>'This is a test!'),'c1'=>'c1')));

$path = 'a,b,c,d';

var_dump(get_array_value($array,$path));

//随机生成100个元素,要求不能重复,尽可能高效

function insert_value(){

$array = array_fill(0,100,0);

for($i=0;$i<100;$i++){

$val = rand($i,100);//key生成的值

while(in_array($val,$array)){

$val = rand(1,100);//key生成的值

}

$array[$i] = $val;

}

return $array;

}

//var_dump(insert_value());

/*===============================360=====================================*/

//1.PHP 的构造方法和析构方法是什么,如何显示的调用析构方法

//__construct() ;构造方法用来初始化对象

//__destruct():对象销毁前进入该方法

//用unset():显示的调用__destruct()析构方法

//2.PHP打印出前一天的

echo date('Y-m-d H:i:s',strtotime('-1 day'))."
";

//3.以下打印出什么

$a1 = null;

$a2 = false;

$a3 = 0;

$a4 = '';

$a5 = '0';

$a6 = 'null';

$a7 = array();

$a8 = array(array());

echo empty($a1) ? 'true' : 'false';echo "
"; //true

echo empty($a2) ? 'true' : 'false';echo "
"; //true

echo empty($a3) ? 'true' : 'false';echo "
"; //true

echo empty($a4) ? 'true' : 'false';echo "
"; //true

echo empty($a5) ? 'true' : 'false';echo "
"; //true

echo empty($a6) ? 'true' : 'false';echo "
"; //false

echo empty($a7) ? 'true' : 'false';echo "
"; //true;

echo empty($a8) ? 'true' : 'false';echo "
"; //false;

//3.shell脚本中获取当前命令的所有参数

//4.使用awk命令输出/etc/passwd 下的所有用户

//awk -F":" '{print $7}' /etc/passwd | uniq -c

//5.svn对比index.php版本1000和1001的区别

//svn diff -r1000:1001

//6.请使用vim 命令替换文本中所有的hello 为world;

//%s/hello/world/g

//7.定义vim快捷键mm,一键删除所有行

//方法1: 按ggdG

//方法2: :%d

//10.写出程序的执行结果

error_reporting(E_ALL);

$a1 = array('1.0.3.1111','1.1.3.1111','2.0.3.1111','2.1.3.1111');

var_dump(in_array(1,$a1)); //true

var_dump(in_array('2',$a1));//false

var_dump(in_array(2,$a1,true)); //false

var_dump(in_array('1',$a1,true));//false

//11.写出程序的输出结果

$a1 = "1 a 3 d";

$b1 = explode('\t',$a1);

$b2 = explode("\t",$a1);

echo in_array('a',$b1) ? 1 : 0;echo "
"; //0

echo in_array("d",$b2) ? 1 : 0;echo "
";//1 ?不能明白为啥执行结果为:0

echo in_array("1",$b1) ? 1 : 0;echo "
";//0

echo in_array(3,$b2) ? 1 : 0;echo "
";//1 ?不明白为哈结果为:0

//12.请用原生js输出浏览器类型

//nagotive.userAgent;

//13.设计一个函数,打开一个页面并获取页面中所有的邮箱

function open_page($path,$grep){

if(is_file($path)){

$handle = file_get_contents($path); //打开文件

preg_match_all($grep,$handle,$matches);//过滤邮箱

return $matches[0];//返回匹配的结果

}

}

$path = "mymst.html";

$grep_email = '/[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+/';

var_dump(open_page($path,$grep_email));

//14.遍历指定目录的所有文件

function get_all_files($path){

$files = array();

if(is_dir($path)){

if($handle = opendir($path)){

while($file = readdir($handle)){

if($file!='.' && $file!='..'){

$child_path = $path.'/'.$file;

if(is_dir($child_path)){

$files[$file] = get_all_files($child_path);

}else{

$files[] = $child_path;

}

}

}

}

closedir($handle);

return $files;

}

}

//var_dump(get_all_files('f:'));

//14. 写一个最简单的RBAC中的所有数据表及关键字段

//1.用户表(user_id)

//2.角色表(role_id)

//3.权限表(node_id,action)

//4.用户角色表(id,role_id,user_id)

//5.角色权限关联表(id,role_id,node_id)

//15.HTTP请求报文和应答报文

/*

请求头:

Accept: text/html,image(浏览器可以接收的类型)

Accept-Charset: ISO-8859-1(浏览器可以接收的编码类型)

Accept-Encoding: gzip,compress(浏览器可以接收压缩编码类型)

Accept-Language: en-us,zh-cn(浏览器可以接收的语言和国家类型)

Host: www.it315.org:80(浏览器请求的主机和端口)

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(某个页面缓存时间)

Referer: http://www.it315.org/index.jsp(请求来自于哪个页面)

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)(浏览器相关信息)

Cookie:(浏览器暂存服务器发送的信息)

Connection: close(1.0)/Keep-Alive(1.1)(HTTP请求的版本的特点)

Date: Tue, 11 Jul 2000 18:23:51 GMT(请求网站的时间)

响应头:

Location: http://www.it315.org/index.jsp(控制浏览器显示哪个页面)

Server:apache tomcat(服务器的类型)

Content-Encoding: gzip(服务器发送的压缩编码方式)

Content-Length: 80(服务器发送显示的字节码长度)

Content-Language: zh-cn(服务器发送内容的语言和国家名)

Content-Type: image/jpeg; charset=UTF-8(服务器发送内容的类型和编码类型)

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务器最后一次修改的时间)

Refresh: 1;url=http://www.it315.org(控制浏览器1秒钟后转发URL所指向的页面)

Content-Disposition: attachment; filename=aaa.jpg(服务器控制浏览器发下载方式打开文件)

Transfer-Encoding: chunked(服务器分块传递数据到客户端)

Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务器发送Cookie相关的信息)

Expires: -1(服务器控制浏览器不要缓存网页,默认是缓存)

Cache-Control: no-cache(服务器控制浏览器不要缓存网页)

Pragma: no-cache(服务器控制浏览器不要缓存网页)

Connection: close/Keep-Alive(HTTP请求的版本的特点)

Date: Tue, 11 Jul 2000 18:23:51 GMT(响应网站的时间)

*/

//16.POST 和 GET的区别,以及POST常用的数据封装格式

//post和get的区别:

/*

1.get请求的参数附加到url中,post不会显示在url中

2.get请求的参数有长度限制,post没有长度限制

3.get请求类型只能为ASCII ,post d对数据类型没有限制

4.get请求可以被缓存可以存书签,post请求不可以缓存不可以存书签

*/

//post常用的数据封装格式

/*

1.

2.json

3.text/html

4.multipart/form-data

*/

//17.简述SQL注入与XSS攻击的原理

//SQL注入:通过出传入非法参数,和sql语句拼接后,构成对数据库进行攻击的语句(SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的)

//XSS(跨站脚本攻击):将恶意代码植入到用户使用的页面中(通过插入恶意脚本,实现对用户游览器的控制)

/*===============================豆果美食(*)=====================================*/

//file()//返回函数

//eval() //把一个字符串当做代码执行

//统计数组中字符出现的次数,并按升序将统计后的元素进行排序

$array = array(4,6,3,'a','d',5,7,3,7,9,'e','s','c',9,'w','x',2,'x');

$tmp = array_count_values($array);

arsort($tmp);

//var_dump($tmp);

//计算两个路径的相对路径

function relative_path($path1,$path2){

$path1 = explode('/',dirname($path1));

$path2 = explode('/',dirname($path2));

$length = count($path2);

for($i=0;$i

if($path2[$i] != $path1[$i]){

break;

}

}

if($i == 0){ //不在同一个目录下

$split = array();

}

if($i!=0 && $i

$split = array_fill('..',0,$length-$i);

}

if($i==$length){

$split = array('.');

}

return implode('/',array_merge($split,array_slice($path1,$i)));

}

//从URL取出.php为扩展名的文件名如:index.php

$url1 = 'http://club.sohu.com/abc/de/index.html';

$url2 = 'http://club.sohu.com/ef/hi/page.php?id=1';

$url3 = 'http://club.sohu.com/xy/read.php?key=123&board=456';

var_dump(pathinfo(parse_url($url2)['path'],PATHINFO_BASENAME));

var_dump(basename(parse_url($url3)['path']));

//匹配URL:/^http:\/\/[\w]+(\.[\w]+)+$/

/*===============================好收网(*)=====================================*/

//1.列举PHP的变量类型

//四种标量:integer string float boolean

//两种复合:array object

//两种特殊:resource null

//2.简述PHP的常用函数类型,并写出常用的函数

//数组函数:sort,rsort,asort,arsort,array_num,array_count_value,array_pop,array_push,array_shift,array_unshift,shuffle

//字符串函数:substr,strlen,str_split,explode,implode,md5,strstr,strpos,strrev

//数学函数:max,min,rand,abs

//日期函数:data,strtotime,mktotime

//3.列举链接mysql数据库方法的实现

//mysql连接:mysql_connect($host,$user,$pwd);

//mysqli连接:new mysqli($host,$user,$pwd,$db);

//4.PHP实现创建多级目录的函数

function create_dir($path,$mode = 0777){

if(is_dir($path)){

echo "目录已经存在!
";

return ;

}

if(mkdir($path,$mode,true)){

echo '目录创建成功!
';

}else{

echo '目录创建失败!
';

}

}

//5.谈谈你对分层的理解

//首先视图接受用户输入请求,然后将请求传递给控制器,

//控制器再调用某个模型来处理用户的请求,

//在控制器的控制下,再将处理后的结果交给某个视图进行格式化输出给用户.这是经典的MVC设计执行的基本流程。

//MVC不仅实现了功能模块和显示模块的分离,同时它还提高了系统的可维护性、可扩展性和组件的可复用性,是一个优秀的创建软件的途径。

//7.接口和抽象类的理解

//1.抽象类是特殊的类,接口是特殊的抽象类

//2.抽象类是单继承extends,接口可以多实现implements

//3.抽象不能被实例化

//4.接口没有构造函数,抽象类可以有构造函数

//5.接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰

//8.写出知道的设计模式,和对设计模式的理解

//简单工场模式,工厂方法模式,单例模式,策略模式,观察者模式,命令模式,适配器模式

//1.写出url组成部分

//URL链接的组成部分:协议 主机 端口 路径 四个部分组成

//2.写出常用状态码及含义

//http状态码的标志:200请求成功,502网关错误,500服务器内部错误,404资源找不到

//3.cookie和session的区别

//1.cookie是存储在客户端的,session是存储在服务器端的,都是用来解决HTTP协议无状态的

//2.基于cookie的session,需要cookie传递session_id,进行会话跟踪

//4.写出web的请求流程

//web的请求流程:

// 建立TCP连接-》

// Web浏览器向Web服务器发送请求命令 -》Web浏览器发送请求头信息 -》

// Web服务器应答-》Web服务器发送应答头信息 -》 Web服务器向浏览器发送数据 -》

// Web服务器关闭TCP连接

//5.myqsl 的数据表引擎有哪些?区别是什么?

//mysqlde 的索引myisam ,innodb,BDB,heap

//MYISAM 和 INNODB的区别

//1.MYISAM 不支持事务,innodb支持事物

//2.myisam 是表级锁,innodb 是行级锁

//3.msIsam 支持全文索引,innodb 不支持全文索引

//4.myisam 常用于select较多的数据库,innodb 常用于更新较多的数据库

//6.mysql的索引类型有哪些?创建索引的优缺点,如何创建索引?

//常见索引类型有:

//1.主键索引

//2.唯一索引

//3.联合索引

//4.普通索引

//创建索引的有优缺点:

//优点:

//创建索引可以大大提高系统的性能。

//第一, 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

//第二, 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

//第三, 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

//第四, 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

//第五, 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

//

//缺点:

//第一, 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

//第二, 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

//第三, 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

//如何创建索引:

//一般来说,应该在这些列上创建索引。

//第一, 在经常需要搜索的列上,可以加快搜索的速度;

//第二, 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

//第三, 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;

//第四, 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

//第五, 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

//第六, 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值