面试题总结

第一波:众荟网技术部

  1. cookie禁用后session是否还能使用?(回答:可以)接着问:可以通过哪些方式?
  2. 解释__call(),__construct(),__isset(),__get()
  3. 获取中文字符串的长度,实现截取中文字符串
  4. 如何设计数据库
  5. 垂直分割和水平分割依据是什么
  6. 说出常用的数据库索引,并作相应的解释
  7. 说出常用的数据库引擎
  8. 接着问:MyISAM和INNODB的区别
  9. 然后是一个读程序写结果(这道题不难,考的是PHP中的念想对象相关的知识)
  10. git常用命令,git的分支操作命令
  11. git 如何回退版本
  12. 后面balabala..忘得差不多了,但大部分问的深的都是数据库方面的问题,因为他们是携程下处理大数据的一家公司,这个面的还行,就是我要工资要的太高了。。。不知道还有后续没有。。好了就到这了

第二波:e袋洗

  1. 打印出昨天的日期2015-08-18 08:08:18;
  2. 写出三种常用的三种开源的数据库
  3. 写出三种以上的数据库引擎
  4. 用js写出3种创建image标签的写法
  5. 写出你见过的PHP 文件的后缀
  6. 排序方法有哪些,写出一种排序方法
  7. PHP遍历一个目录下的目录子目录和文件(提示:可以递归)
  8. 解释以下协议:SMTP、POP3、HTTP、FTP、DNS
  9. 如何实现即时通信?给出至少给出两种方案
  10. 在网站注册登录的基础上,第三方接入登录数据库如何设计,消息推送如何实现?推送到哪?
  11. zendFramework
  12. PHP7有哪些新技术
  13. 你通过哪些渠道获取新技术
  14. 还有一道数据库方面的问题(简单)
  15. 正则表达匹配邮箱和url
  16. nginx、FPM
  17. 解释下session的机制
  18. 这家面试感觉有种被虐的感觉,问的好多东西我都没有接触过,感觉很受单击。。。。不过这又让认识到我的不足。。。感谢e袋洗

第三波:汇通天下物流

  1. 写出你常用的Linux命令
  2. 写出你知道的魔术方法并解释
  3. 写出常用的设计模式,并实现其中的一个
  4. 多服务器如何实现session共享
  5. js 实现单击按钮A(id='a')修改按钮B(id='b')的显示为loading...并禁用按钮A,B
  6. 正则表达式匹配邮箱
  7. include和require的区别
  8. MVC优点和缺点
  9. 解释:什么是面向对象?
  10. 一道数据库设计题,当时让写sql忘得差不多了,但是感觉写的还行
  11. 最后一题:N个数,写一个高效的算法判断是否存在两个数的和是P
  12. 。。。。额。。。忘了。。总得来说答的还行

第四波:壹号车

>一面:技术

  1. 写出斐波那契数列中第N个数的的值(要求:递归和非递归分别实现)
  2. 用MVC(tp)描述登录的实现
  3. 数据库方面的问题:一个用户信息表,实现按指定方式(从当前日期开始:按月,按季度,按年。。)显示出即将过生日的人都是谁,(当用between时候,跨年是是否会存在问题?)
  4. 。。。。。

>二面:技术(这一面都是数据结构和算法)

  1. 一组数字要求奇数在前,偶数在后要求空间复杂度O(1);
  2. 多维数组$arr[a][b][c]现在换种形式封装一个函数test($arr,$path)参数path就是数组的深度例如:a,b,c
  3. 。。。

>三面:复试(CTO)

  1. ORM
  2. 一个一维数组下标0-99,随机函数生成1-100的数插入数组要求不能重复(要求高效)
  3. 。。。。

第五波:易车网

  1. 这是面试中最简单的一家了,感觉面的不错,改天在总结

第六波:360

这个部门是云引擎部门,首先做了一套面试题,然后技术面,面了很久,到HR面了但是hr下班了,不过不太喜欢哪个部门,拿到offer

第七波:楚楚街

>技术面:

  1. 先说几个魔术方法并解释
  2. PHP数组底层是什么数据结构?
  3. hash 的时间复杂度是多少?
  4. PHP5.3之前有一个请求时候产生的bug知道是什么吗?
  5. hash如何解决冲突?,
  6. 线性探测后hash的时间复杂度是多少?
  7. 知道什么是原子性吗?解释下
  8. 一个场景:当一个接口用来处理访问次数,请问如何统计请求是次数,(Redis的原子性函数)
  9. 了解git吗?

>hr面:

谈了下我什么时候能入职,来北京多长时间了,有没有收到其他公司的offer,她给offer我没有马上同意接受,说下周一给回复,薪资很诱人,拿到offer

8.新浪微博

>一面:

  1. 很和蔼的一个 程序员,拿到我的简历后问,你简历上的这些项目哪些是让你印象深刻的或者说让你学到很多的东西的,简单说一下
  2. 说一下常用的PHP数组函数并讲一下都是干嘛用的,然后又让写了一些常用的字符串处理函数
  3. 一道简单的算法题:合并两个有序数组
  4. 又一道简单的算法题:汉诺塔(这不是重点,写完后让你讲讲处理流程,最后竟然又让我在纸上画出一步步如何挪的,三个盘子、四个盘子、五个盘子!!!!真是服了)
  5. 讲一下什么是递归,递归用来处理哪些问题?
  6. 然后是一些数据库的题问的很杂,这里就不一一总结了
  7. 这一面的问题问的挺广泛地 ,问的很杂,具体的一些细节想不起来了这是5天前面的今天才总结。。。这一面我感觉面的很不错

>二面:经理

  1. 很有气场的一个人,那人嚼着口香糖长的又高又胖当时那十足的气场还真把我给镇住了。见到我后二话不说上去写了个PHP语句:
  2. <? echo "aa",$_GET['r'],'"bb" ?>然后问我:这样写有没有问题?都是有哪些问题一一说出来
  3. php.ini中如何配置短标签?属性点名字是什么?
  4. 说一下你对memchace和redis的理解
  5. 然后问了PHP的一些扩展和php.ini文件的配置
  6. mysql单表的最大容量是多少?
  7. char(10)和int(10)的含义
  8. GBK和UTF8各占多少个字符?
  9. 如何优化高并发大流量的数据库?
  10. 现有表A(id,url,time) 现需要查询出A表中每个用户发的访问第一个url并同时创建表B,表B的结构和表A完全相同内容为查询的结果,要求用一条SQL语句实现
  11. 新浪微博的主页可以做哪些优化?如果让你想你能想到哪些?
  12. 。。。
这一面面的很吃力,但是总体还是不错的,给了口头offer让回去等hr电话

>hr

hr是在面试两天后才给我打的电话,是中午1点多那是我正睡觉,谈了薪资说150/1天,当时我的心哇凉哇凉的。。我说我有个同学(赵亚飞童鞋)也是在微博人家都是200/1天,hr说那可能是产品我说他就是开发的,hr说她不清楚。。。
然后他要我的身份证号录信息,我说我在考虑考虑就给她挂了。。。。新浪再见

9.百度音乐

>一面:技术

  1. 好吧,先来个简单的自我介绍
  2. 看了简历后就问那个项目你印象最深说一下,讲讲项目的特色
  3. memchache、redis的理解
  4. PHP 数组函数都是有哪些你知道的,写一下;字符串函数都是有哪些,写一下
  5. 写了一大堆后他从中挑了几个让我解释什么意思,然后又给场景如何利用函数实现,easy
  6. 搭建过lamp环境吗?简单说说搭建流程
  7. 说说常用的linux命令,问的还真是多
  8. 如何反转数组?不用PHP的函数要求时间复杂度最低
  9. 二叉树的特性都是有哪些?说一下
  10. 写一下树的遍历,前序遍历(我用的递归),非递归会写吗?然后又写了非递归
  11. 然后是一大堆的数据库方面的问题。。。

>二面:leader

  1. PHP底层的扩展是如何加载的?
  2. redis的底层是如何实现的
  3. php.ini中常用配置都是有哪些?说你知道的
  4. php.ini中的safe_mode 是干什么用的
  5. 一道算法题:字符串中出现次数最多的子串,以及出现次数
  6. 一道算法题:n阶楼梯,一次可以上一阶、上二阶、上三阶问共有多少种上法(剑指offer上的)

>三面:经理

  1. 说给实习offer,等公司分出去后再发校招offer,回去等hr电话,好吧今天是周五

未完待续~~~~

-----------------------------------------------------------------------------------------华丽的分割线------------------------------------------------------------------------------------------

参考答案

<?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)."<br/>";
echo mb_substr($str,0,6,'utf8')."<br/>";
echo strlen($str)."<br/>";
echo mb_strlen($str,'utf-8')."<br/>";

//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"))."<br/>";

//写出三种以上常用的开源数据库
//mysql , sqllite, BDB ,firebird

//写出三种以上的数据库引擎
//myisam, innodb, BDB, heap

//js写出三种创建image标签的方式
//var image  = new image();
//var image = document.createElemetById('image'); //createElementById();用来创建对象
//image.innerHTML("<image src=''>");

//写出你所见过的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<$length;$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 "<pre>";
//print_r(get_all_file($path));

//解释下列网络协议
//1.SMTP:简单邮件协议
//2.POP3:邮局协议
//3.HTTP:超文本协议
//4.FTP:文件传输协议
//5.DNS:域名解析服务

/*<script>
    var image1 = new Image(); //面向对象的方法
    var image2 = document.createElement("image"); //document.createElement()方法
    //image1.innerHTML('<image src=""');

    //单击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');
    }

</script>*/

//正则表达式匹配邮箱和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<$length;$i++){
        echo "a";
        for($j=$i+1;$i<$length;$j++){
            if($array[$i]+$array[$j] == $p){
                echo "存在!$p = {$array[$i]}+ {$array[$j]}<br/>";
                return ;
            }
        }
    }
    echo "不存在!<br/>";
}
$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<$end){
        while($pre<$end && $array[$pre]%2!=0){
            $pre++;
        }
        while($pre<$end && $array[$end]%2==0){
            $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<$length;$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'))."<br/>";

//3.以下打印出什么
$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = '';
$a5 = '0';
$a6 = 'null';
$a7 = array();
$a8 = array(array());

echo empty($a1) ? 'true' : 'false';echo "<br/>"; //true
echo empty($a2) ? 'true' : 'false';echo "<br/>"; //true
echo empty($a3) ? 'true' : 'false';echo "<br/>"; //true
echo empty($a4) ? 'true' : 'false';echo "<br/>"; //true
echo empty($a5) ? 'true' : 'false';echo "<br/>"; //true
echo empty($a6) ? 'true' : 'false';echo "<br/>"; //false
echo empty($a7) ? 'true' : 'false';echo "<br/>"; //true;
echo empty($a8) ? 'true' : 'false';echo "<br/>"; //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 "<br/>"; //0
echo in_array("d",$b2) ? 1 : 0;echo "<br/>";//1 ?不能明白为啥执行结果为:0
echo in_array("1",$b1) ? 1 : 0;echo "<br/>";//0
echo in_array(3,$b2) ? 1 : 0;echo "<br/>";//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<$length;$i++){
        if($path2[$i] != $path1[$i]){
            break;
        }
    }
    if($i == 0){  //不在同一个目录下
        $split = array();
    }
    if($i!=0 && $i<$length){
        $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 "目录已经存在!<br/>";
        return ;
    }
    if(mkdir($path,$mode,true)){
        echo '目录创建成功!<br/>';
    }else{
        echo '目录创建失败!<br/>';
    }
}

//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子句中的列上面创建索引,加快条件的判断速度。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值