一.算法题目
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(去掉重复记录)等操作