php面试准备之冒泡和快速排序以及文件目录读取

一.算法题目

1.冒泡排序

$arr=array(2,1,5,3,4);
for ($i=0;$i<count($arr)-1;$i++){
    for ($j=$i+1;$j<count($arr);$j++){
        if($arr[$j]<$arr[$i]){
            $temp=$arr[$i];
            $arr[$i]=$arr[$j];
            $arr[$j]=$temp;
        }
    }
}
var_dump($arr);

2.快速排序的原理,参考https://blog.csdn.net/pengzonglu7292/article/details/84938910,很实用。

function quicksort(& $arr,$left,$right){ //数组传引用
    $i=$left;
    $j=$right;
    $temp=$arr[$left];
    if($i>$j){
        return;
    }
    while ($i<$j){
        while ($arr[$j]>=$temp&&$i<$j){//注意要加上$i<$j  一定要$j先,也就是右边先开始
            $j--;
        }
        while ($arr[$i]<=$temp&&$i<$j){//注意要加上$i<$j
            $i++;
        }
        $t=$arr[$j];
        $arr[$j]=$arr[$i];
        $arr[$i]=$t;
    }
    $arr[$left]=$arr[$i];
    $arr[$i]=$temp;
    quicksort($arr,$left,$i-1);
    quicksort($arr,$i+1,$right);
}
$arr=array(5,2,3,7,6,4,1,8,9);
quicksort($arr,0,8);
print_r($arr);

?>

3.读取文件夹名称及文件夹下的子文件(递归)

function dir_all($path) {
    $handler = opendir($path);
    while (false !== ($tmp = readdir($handler))) {    // $tmp 第 1 次是 ".",第2次是 "..", 之后是文件名或目录名,和Linux中使用 ls 的效果一样
        if(is_dir("$path/$tmp")) {   // 如果是一个目录
            if ($tmp == "." || $tmp == "..")  // 不输出,也不递归调用
                continue;
            echo $tmp . "<br>";      // 输出目录名字
            dir_all("$path/$tmp");  // 把当前目录名接到 $path 上,递归调用
        }
        else {
            echo $tmp ."<br>";  // 如果是一个文件,直接输出
        }
    }
}

二.数据库题目

1.myisam和innoDb的区别和应用场景

(1)innoDb支持事务,myisam不支持

(2)innoDb可以使用外键,保证数据的完整性和一致性,myisam不支持使用外键

  (3)   innoDb支持行级锁,myisam支持表级锁

(4)如果只是读操作,建议使用myisam;又读又写建议innodb

2.char和varchar的区别

    varchar是变长,节省存储空间,char是固定长度。查找效率要char型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些。

3.mysql优化法则

(1)给经常查询的字段增加索引

(2)sql减少join,group,distinct(去掉重复记录)等操作

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值