作业帮PHP面试

一面

  1. 优惠券排序:一个优惠券有面额和到期时间两种属性,按照面额从大到小排列,如果面额相同,按照到期时间的从小到大的顺序排列
    好久没有做过白板编程了,拿到题目的瞬间有点懵,想了好久才想出做法,真是对不起自己吹的牛逼,想到的是最简单最基本的快排(重点:快排的时间复杂度是O(nlogn))
money = $money;
        $this->time = $time;
    }
}

$discounts = [];
for ($i = 0; $i < 10; $i++) {
    $discount = new Discount(rand(1, 10), time() - rand(1111, 9999));
    array_push($discounts, $discount);
}
print_r($discounts);

function quick_sort($ds)
{
    if (count($ds) <= 1) {
        return $ds;
    } else {
        $left = [];
        $right = [];
        for ($i = 1; $i < count($ds); $i++) {
            if ($ds[$i]->money > $ds[0]->money) {
                array_push($left, $ds[$i]);
            } else if ($ds[$i]->money < $ds[0]->money) {
                array_push($right, $ds[$i]);
            } else {
                if ($ds[$i]->time <= $ds[0]->time) {
                    array_push($left, $ds[$i]);
                } else {
                    array_push($right, $ds[$i]);
                }
            }
        }
        $left = quick_sort($left);
        $right = quick_sort($right);
        return array_merge($left, [$ds[0]], $right);
    }
}

$result = quick_sort($discounts);
print_r($result);

目前没有想到更好的方法,以后想到了或者遇到了在回来修改

  1. MySQL联合索引
    一直做得东西数据量都不大,所以没怎么用过索引,这次就正好被问到了,没答出来,这里记录一下
    联合索引的好处,一是一个联合索引能抵好几个索引,二是联合索引可以根据最左原则当成单个索引去用
  2. Linux日志分析
    这一块是原来完全没有接触过的内容,面试官说了awk之后才知道有这么个好东西,比我平时用的grep好用多了,这里就不多做介绍了,感觉自己还是只记住了名字

二面

  1. 有一个文件,里面每一行都是一个url,写一个算法,读取出现最多的五条,及其出现的次数
    白板编程,又懵了,硬着头皮写了一个
 $counts["$key"]) {
                $key = $k;
            }
        }
        $results["$key"] = $counts["$key"];
        unset($counts["$key"]);
    }
    print_r($results);
}

get_result('data.txt', 5);

写完面试官问还有没有更好的办法,没有回答上来,然后面试官给我指了指大门的位置……
作业帮,败北

你可能感兴趣的:(作业帮PHP面试)