一面
- 優(yōu)惠券排序:一個(gè)優(yōu)惠券有面額和到期時(shí)間兩種屬性,按照面額從大到小排列,如果面額相同,按照到期時(shí)間的從小到大的順序排列
好久沒(méi)有做過(guò)白板編程了,拿到題目的瞬間有點(diǎn)懵,想了好久才想出做法,真是對(duì)不起自己吹的牛逼,想到的是最簡(jiǎn)單最基本的快排(重點(diǎn):快排的時(shí)間復(fù)雜度是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);
目前沒(méi)有想到更好的方法,以后想到了或者遇到了在回來(lái)修改
- MySQL聯(lián)合索引
一直做得東西數(shù)據(jù)量都不大,所以沒(méi)怎么用過(guò)索引,這次就正好被問(wèn)到了,沒(méi)答出來(lái),這里記錄一下
聯(lián)合索引的好處,一是一個(gè)聯(lián)合索引能抵好幾個(gè)索引,二是聯(lián)合索引可以根據(jù)最左原則當(dāng)成單個(gè)索引去用 - Linux日志分析
這一塊是原來(lái)完全沒(méi)有接觸過(guò)的內(nèi)容,面試官說(shuō)了awk之后才知道有這么個(gè)好東西,比我平時(shí)用的grep好用多了,這里就不多做介紹了,感覺(jué)自己還是只記住了名字
二面
- 有一個(gè)文件,里面每一行都是一個(gè)url,寫(xiě)一個(gè)算法,讀取出現(xiàn)最多的五條,及其出現(xiàn)的次數(shù)
白板編程,又懵了,硬著頭皮寫(xiě)了一個(gè)
<?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);
寫(xiě)完面試官問(wèn)還有沒(méi)有更好的辦法,沒(méi)有回答上來(lái),然后面試官給我指了指大門(mén)的位置……
作業(yè)幫,敗北