作业帮PHP面试

作者: 血之君殇 | 来源:发表于2018-01-05 13:30 被阅读315次

一面

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

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

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

二面

  1. 有一个文件,里面每一行都是一个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);

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

相关文章

  • 作业帮PHP面试

    一面 优惠券排序:一个优惠券有面额和到期时间两种属性,按照面额从大到小排列,如果面额相同,按照到期时间的从小到大的...

  • golang作业帮面试

    1.channel实现 go调度原理 select和epoll的区别 redis分布式锁 redis缓存穿透,缓存...

  • 作业帮面试题

    作业帮的面试官是做python的,所以java基本也没怎么问,主要是问了最近做的项目,更多的是redis和算法、l...

  • 中级面试

    PHP中级面试经历 - 耕毅 - 博客园 PHP中级程序员常见面试题 - CSDN博客 初中级 PHP 面试基础汇...

  • php面试:NULL

    php在线面试题集:http://cainiaophp.com/php面试讨论群:536633782

  • 1.1课程介绍

    这是基于慕课网 360大牛 讲解的PHP面试视频 各大企业常见php面试题 面试考点 考官考查思路 复习PHP...

  • PHP面试题汇总希望对PHPer们有所帮助

    PHP面试题汇总 视频版: 1.《最新PHP面试视频教程》 http://www.php.cn/course/87...

  • 零碎知识点

    PHP面试整理

  • PHP的垃圾回收机制-PHP高级面试题+详解

    面试10家公司,收获9个offer,2020年PHP 面试问题 ps:本篇内容包括精选面试题与知识篇。 PHP面试...

  • PHP面试相关知识树

    以下是自己根据《PHP程序员面试笔试宝典》、《PHP程序员面试笔试真题解析》书籍整理到的一些关于PHP面试相关的知...

网友评论

  • 47e254842752:my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC){
    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;
    }

本文标题:作业帮PHP面试

本文链接:https://www.haomeiwen.com/subject/flmjnxtx.html