个人总结php笔试题四

来源:互联网 发布:杭州市行知小学 编辑:程序博客网 时间:2024/06/02 04:01

14.分别写出解压file.tar和压缩test目录的命令(Linux)

1、压缩当前目录下文件夹/文件test到test.tar.gz:

tar -zcvf test.tar.gz test


2、解压缩当前目录下的file.tar.gz到file:

tar -zxvf file.tar.gz

3、查看

在不解压的情况下查看压缩包的内容:

tar -tf test.tar.gz


15.有一个备份程序mybackup.crontab配置mybackup在周一至周五下午1点和晚上8点各运行一次(Linux)

0 13,20** 1,2,3,4,5 mybackup

16.计算今天是今年的第多少天(拓展计算某一天是今年的第几天)

1.
date("z")//(从 0 到 365)
2.
$d = getdate(); dump($d["yday"]);//(从 0 到 365)
3.
public function get_days($date) {        $date_start = strtotime(date('Ymd', strtotime($date)));        $year_start = strtotime(date('Y0101', strtotime($date)));        return ($date_start - $year_start) / 86400 +1;//1月1日是第0天, 所以要+1    }        dump($this->get_days('2017-08-08'));        dump($this->get_days('2017-08-08 10:00:00'));        dump($this->get_days('20170808'));

17.我们的程序运行过程中每分钟会采集一个整数的数据指标。

持续采集n分钟就得到一个有n个元素的整数数组a[n]。
现在我们需要一个简单的算法,检测采集到的数据指标中,是否有异常。
异常的检测标准是:如果在连续m分钟内的指标的平均值大于w,则说明有异常。
输入:数组a[n], 正整数m, 整数w
返回:有异常返回 1,没有异常返回 0
例如:对于a={1, 5, 1, 3, 2}, m=2, w=2, 返回:1

附加说明:不同的实现方式执行效率不一样,如果能找到一个很高效的算法就更好了。

/*     1.用一个循环队列保存最近n次的采样,效率是最高的。  */    /**     * 检测函数     * @param $a     array 待测数组     * @param $start int   检测时间起点     * @param $m     int   检测时间范围     * @param $w     int   平均指标标准     * @return int 状态     */    public function check($a, $start, $m, $w) {        $n = count($a);        $m > $n && $m = $n;        $arr = array_slice($a, $start - 1, $m);        $s = array_sum($arr);        if ($s / $m > $w) {            return 1;        } else {            return 0;        }    }    /**     * 测试1     */    public function checkTime() {        for ($i = 0; $i < 1000; $i++) {            $a[] = rand(1, 4);        }        $aLenth = count($a);        $m = 5;        $w = 3;        echo '检测时间范围:' . $m . '分钟,检测指标:' . $w . '<br><hr>';        for ($i = 1; $i <= $aLenth; $i++) {            $arr = array_slice($a, $i - 1, $m);            $n = count($arr);            $avg = array_sum($arr) / $n;            echo '时间:' . $i . '~' . ($i + $m - 1) . ',数据:{' . implode(',', $arr) . '},平均值:' . $avg;            $return = $this->check($a, $i, $m, $w);            if ($return == 1) {                echo '<font color="red">【异常】</font>';            }            echo '<br>';        }    }

18.我们的程序运行过程中用到了一个数组a,数组元素是一个Map/Dictionary。

数组元素的“键”和“值”都是字符串类型。在不同的语言中,对应的类型是:
PHP的array, Java的HashMap, C++的std::map, Objective-C的NSDictionary, Swift的Dictionary, Python的dict, JavaScript的object, 等等
示例:
a[0]["key1"]="value1"
a[0]["key2"]="value2"
a[1]["keyA"]="valueA"
...
为了方便保存和加载,我们使用了一个基于文本的存储结构,数组元素每行一个:
text="key1=value1;key2=value2\nkeyA=valueA\n..."

要求:请实现一个“保存”函数、一个“加载”函数。
text=store(a);
a=load(text);
这两个函数分别用于把数组保存到一个文本字符串中、把文本字符串中的内容读取为数组。
必须自己手写代码实现保存/加载逻辑,严格按照上述的“每行一个、key=value”的格式保存。

附加说明:基于上述格式,如果value中有特殊字符,比如有换行符/分号等怎么办?

如果有思路,请基于上述的格式设计并实现一个完美的方案。

    /*     2.数组转成字符串,去除换行和空格,再去保存  */    /**     * 存储数组为文本.     * @param  $a   array   待存储数组     * @return $str string  存储文本     */    public function store($a) {        $str = '';        foreach ($a as &$v) {            foreach ($v as $k => &$z) {                $str .= urlencode($k) . '=' . urlencode($z) . ';';            }            $str = substr($str, 0, strlen($str) - 1) . '\n';        }        $str = substr($str, 0, strlen($str) - 2);        return $str;    }    /**     * 加载文本为数组.     * @param  $text     string  待转换文本     * @return $tempArr array   数组     */    public function load($text) {        $mainArr = explode('\n', $text);        $tempArr = array();        foreach ($mainArr as &$v) {            $arr = explode(';', $v);            $arr3 = array();            foreach ($arr as &$z) {                $arr2 = explode('=', $z);                if (!empty($arr2) && count($arr2) == 2) {                    $arr3[urldecode($arr2[0])] = urldecode($arr2[1]);                }            }            if (!empty($arr3)) {                $tempArr[] = $arr3;            }        }        return $tempArr;    }    /**     * 测试2     */    public function checkArray() {        $a = array(            0 => array('key1' => 'value1', 'key2' => 'value2'),            1 => array('keyA' => 'valueA'),            2 => array('\n' => 'value;', ';' => 'value\n')        );        echo '<pre>';        echo '<br />【原始数据】<br />';        print_r($a);        $str = $this->store($a);        echo '<br />【存储文本】<br />';        print_r($str);        $str = $this->load($str);        echo '<br />【加载文本】<br />';        print_r($str);    }