作业帮 PHP 社招二面面经
一面
-
优惠券排序:一个优惠券有面额和到期时间两种属性,按照面额从大到小排列,如果面额相同,按照到期时间的从小到大的顺序排列
好久没有做过白板编程了,拿到题目的瞬间有点懵,想了好久才想出做法,真是对不起自己吹的牛逼,想到的是最简单最基本的快排(重点:快排的时间复杂度是O(nlogn))
<?php class Discount { public $money; public $time; function __construct($money, $time) { $this->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);
目前没有想到更好的方法,以后想到了或者遇到了在回来修改
-
MySQL联合索引
一直做得东西数据量都不大,所以没怎么用过索引,这次就正好被问到了,没答出来,这里记录一下
联合索引的好处,一是一个联合索引能抵好几个索引,二是联合索引可以根据最左原则当成单个索引去用 -
Linux日志分析
这一块是原来完全没有接触过的内容,面试官说了awk之后才知道有这么个好东西,比我平时用的grep好用多了,这里就不多做介绍了,感觉自己还是只记住了名字
二面
-
有一个文件,里面每一行都是一个url,写一个算法,读取出现最多的五条,及其出现的次数
白板编程,又懵了,硬着头皮写了一个
<?php function make_file() { $urls = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p']; $num = count($urls); $file = fopen('data.txt', "w"); for ($i = 0; $i < 1000; $i++) { fwrite($file, $urls[rand(0, $num - 1)] . "\n"); } fclose($file); } //make_file(); function get_result($filename, $num) { $arr = []; $file = fopen($filename, 'r'); while (!feof($file)) { $key = fgets($file); if ($key != "") { array_push($arr, $key); } } fclose($file); $counts = array_count_values($arr); $results = []; $keys = array_keys($counts); print_r($keys); for ($i = 0; $i < $num; $i++) { $key = $keys[0]; foreach ($keys as $k) { if ($counts["$k"] > $counts["$key"]) { $key = $k; } } $results["$key"] = $counts["$key"]; unset($counts["$key"]); } print_r($results); } get_result('data.txt', 5);
写完面试官问还有没有更好的办法,没有回答上来,然后面试官给我指了指大门的位置……
作业帮,败北
牛客网的markdown编辑器太烂了,忍不了的童鞋可以去我的博客上看https://www.jianshu.com/p/e765e3822676
