第十一套

1.请用PHP 实现一个函数

将一个二进制数的无符号非负电位字符串非浮点字符串转成一个十进制数,返回该十进制数。不许使用BIN等系统内置函数

function bin2dec($bin){
        $temp = strrev($bin);
        $result = 0;
        for ($i=0,$len = strlen($temp); $i < $len; $i++) {
            $result += pow(2,$i) * $temp[$i];
        }
        return $result;
}
$a = '10100010';
echo bin2dec($a);//结果162

2.请使用PHP写一个函数

对一层正整数求以2为底的对数,返回该对数。请不要使用LOG等系统内置函数。

3.请使用PHP设计一个函数

对学生英语考试得分从高到低排序,输入时所有学生的学号和考试得分,返回排好序的考试得分和对应学生的学号。考试满分为100,得分可能会有小数,由于考试评分要求,小数位只会是0或0.5要求:请不要使用qsort等系统内置排序函数,请使用你认为最快最优的方法实现该函数并使排序的性能最高。

$arr = array(
        array('sid'=>1,'score'=>76),
        array('sid'=>2,'score'=>93),
        array('sid'=>3,'score'=>68.5),
        array('sid'=>4,'score'=>82.5),

    );
function quick($arr){
    $left = array();
    $right = array();
    if(count($arr)<=1){
        return $arr;
    }
    for ($i=1; $i $arr); $i++) { 
        if($arr[0]['score']>$arr[$i]['score']){
            $left[]=$arr[$i];
        }else{
            $right[]=$arr[$i];
        }
    }
    $left = quick($left);
    $right = quick($right);
    return array_merge($left,array($arr[0]),$right);
}
echo "
";
var_dump(quick($arr));
echo "
"
;

4.现在有一个mysql数据库表visits记录用户访问情况,表结构如下:

 Table visits(
        Id int unsigned auto_increment,
        User_id int unsigned comment  “本次访问页面数”,
        Visit_time timestamp comment ‘本次访问开始时间’,
        Primary key (id)
);
用户每访问过一次网站(从进入到离开),会增加一条记录。

记录用户的ID(user_id),以及访问的页面总数。比如:
1,208,2, //208 这个用户访问2个页面
2,207,3,//207 这个用户访问了3个页面
3,208,1, //208用户访问了1个页面

1.请写一个SQL语句挑出你是累计访问页面数最多的10个用户(user_id)和对应的访问页面数。
从题目的描述来看,表结构貌似有些问题,user_id 应为用户 ID,而不是访问页面数,增加一个字段 pages 表示访问页面数。
select user_id ,sum(pages) as total from visits group by user_id order by total desc limit 10
2.请写一个SQL语句,输出累计访问页面数分别等于1,2,3,4,5,6,7,8,9,10的唯一用户的数量如果某个数量对应的用户数为0,可以不输出。
SELECT total,count(user_id)
FROM (
SELECT user_id, sum(pages) AS total
FROM visits
GROUP BY user_id) AS temp
WHERE total IN (1,2,3,4,5,6,7,8,9,10)
GROUP BY total ;

你可能感兴趣的:(PHP-面试题总集)