一面
- 优惠券排序:一个优惠券有面额和到期时间两种属性,按照面额从大到小排列,如果面额相同,按照到期时间的从小到大的顺序排列
好久没有做过白板编程了,拿到题目的瞬间有点懵,想了好久才想出做法,真是对不起自己吹的牛逼,想到的是最简单最基本的快排(重点:快排的时间复杂度是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);
写完面试官问还有没有更好的办法,没有回答上来,然后面试官给我指了指大门的位置……
作业帮,败北
网友评论
if(is_array($arrays)){
foreach ($arrays as $array){
if(is_array($array)){
$key_arrays[] = $array[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_arrays,$sort_order,$sort_type,$arrays);
return $arrays;
}