美文网首页
西洋汇后端工程师面试题目

西洋汇后端工程师面试题目

作者: 沙蒿同学 | 来源:发表于2020-03-30 19:04 被阅读0次

    本人于上周五(2020.3.27)离职,近期居家反思学习,思考往后的路该怎么走?是按部就班找个差不多薪资的工作呆在,还是做好个人职业规划,确定方向,规划未来,又或走一步看一步,随波逐流....不管怎样,面对未知、迷茫和困难,应未雨绸缪,学习着充实自己,故分享两道西洋汇官网上的在线题目。当然不是最优解,只是本人的答题过程。(如侵权可联系作者删除)


    1、【必答】数据结构与算法

    有 JSON 数据如链接所示:点击查看JSON数据

    请实现方法:输入类目的 id,输出类目的层级结构。


    示例一:输入 1120,输出 女士 > 服装 > 针织衫

    示例二:输入 2221,输出 男士 > 鞋履 > 运动鞋 > 篮球鞋


    要求:

    1. 实现语言不限,但代码要简洁。
    2. 请确保代码无语法错误,并无运行时错误。
    3. 请说明代码的运行环境。
    <?php
    
    namespace App\Controller;
    /**
     * 运行环境
     * PHP 7.3.8 (cli) (built: Aug 19 2019 11:36:13) ( NTS )
     * Copyright (c) 1997-2018 The PHP Group
     * Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
     * Class Category
     * @package App\Controller
     */
    class Category
    {
        //获取类目数据源
        protected $url = 'https://job.xiyanghui.com/api/q1/json';
    
        /**
         * 查找指定类目id类目归属顺序
         * @param $id
         * @return string
         */
        public function getCategoryOrder($id)
        {
            $result     = '';
            $categories = $this->getUrlContent($this->url);
            $this->findCategory($categories, $id, $result);
            return $result;
        }
    
        /**
         * 查看目标类目
         * @param $categories
         * @param $id
         * @param $result
         * @return bool
         */
        public function findCategory($categories, $id, &$result)
        {
            foreach ($categories as $category) {
                if (isset($category['children'])) {
                    if ($this->findCategory($category['children'], $id, $result)) {
                        $result = $category['name'] . ' > ' . $result;
                        return true;
                    }
                } else {
                    if ($category['id'] == $id) {
                        $result = $category['name'];
                        return true;
                    }
                }
            }
        }
    
        /**
         * url请求获取内容
         * @param $url
         * @return mixed
         */
        public function getUrlContent($url)
        {
            $ch      = curl_init();
            $timeout = 5;
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $contents = curl_exec($ch);
            curl_close($ch);
            return json_decode($contents, true);
        }
    }
    

    2、【必答】软件工程规范

    有汇率接口如链接所示:点击查看汇率接口

    请根据汇率接口实现 SDK 类,可提供方法,输入币种与价格,输出人民币相应的实时价格。


    示例一:输入 $1,999.00,输出 14044.37

    示例二:输入 HKD2399,输出 2150.94

    示例二:输入 EUR499.99,输出 3890.77

    示例二:输入 €499.99,输出 3890.77


    只考虑币种:美元(USD, ),英镑(GBP, £),欧元(EUR, €),港币(HKD, HK),日元(JPY, ¥)

    接口示例(PHP代码)如下:
    interface RateConverter
    {
        /**
         * 输入由币种价格组成的字符串,输出人民币的实时价格
         * @param string $price
         * @return float
         */
        public function convertToCNY(string $price): float;
    }
    

    要求:

    1. 实现语言不限,但代码要简洁。
    2. 请确保代码无语法错误,并无运行时错误。
    3. 请说明代码的运行环境。
    4. 请施展你所掌握的设计模式和软件工程规范。
    <?php
    
    namespace App\Controller;
    /**
     *  * 运行环境
     * PHP 7.3.8 (cli) (built: Aug 19 2019 11:36:13) ( NTS )
     * Copyright (c) 1997-2018 The PHP Group
     * Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
     * Interface RateConverter
     * @package App\Controller
     */
    interface RateConverter
    {
        /**
         * 输入由币种价格组成的字符串,输出人民币的实时价格
         * @param string $price
         * @return float
         */
        public function convertToCNY(string $price): float;
    }
    
    class RateConverterToCNY implements RateConverter
    {
        protected $reg = '/^[a-zA-Z$£€¥]$/';    // 正则句
        protected $CNY = 'CNY';                 // 人民币
        protected $url = 'https://app-cdn.2q10.com/api/v2/currency';                 //请求url内容
    
        /**
         * 输入由币种价格组成的字符串,输出人民币的实时价格
         * @param string $price
         * @return float
         */
        public function convertToCNY(string $price): float
        {
            //单元,金额
            list($unit, $num) = $this->divisionPrice($price);
            //获取汇率转换表
            $rateContent = $this->getUrlContent($this->url);
            $toCNYRate   = $rateContent['rates'][$this->CNY];
            $toUSDRate   = $rateContent['rates'][$unit];
            //当前货币金额 / USD汇率 * CNY汇率
            $toCNYPrice = ($num / $toUSDRate) * $toCNYRate;
            return round((float)$toCNYPrice, 2);
        }
    
        /**
         * 查分金额的单元和数额
         * @param $price
         * @return array
         */
        public function divisionPrice(string $price): array
        {
            $reg     = $this->reg;
            $proArr  = str_split($price);               // 将字符串切割成数组
            $proLen  = count($proArr);                  // 计算该数组的长度
            $wordStr = $numStr = '';                    // 申请两个变量用于分别存放'字母'和'数字'
    
            // 通过循环去核对数组中每个数据是否满足正则句
            for ($iCount = 0; $iCount < $proLen; $iCount++) {
                if (preg_match($reg, $proArr[$iCount], $match)) {
                    $wordStr .= $proArr[$iCount];
                } else {
                    $numStr .= $proArr[$iCount];
                }
            }
            switch ($wordStr) {
                case '$':
                    $wordStr = 'USD';
                    break;
                case '£':
                    $wordStr = 'GBP';
                    break;
                case '€':
                    $wordStr = 'EUR';
                    break;
                case 'HK$':
                    $wordStr = 'HKD';
                    break;
                case '¥':
                    $wordStr = 'JPY';
                    break;
                default:
                    break;
            }
            return array($wordStr, (float)$numStr);
        }
    
        /**
         * url请求获取内容
         * @param $url
         * @return mixed
         */
        public function getUrlContent($url)
        {
            $ch      = curl_init();
            $timeout = 5;
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $contents = curl_exec($ch);
            curl_close($ch);
            return json_decode($contents, true);
        }
    }
    

    相关文章

      网友评论

          本文标题:西洋汇后端工程师面试题目

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