本人于上周五(2020.3.27)离职,近期居家反思学习,思考往后的路该怎么走?是按部就班找个差不多薪资的工作呆在,还是做好个人职业规划,确定方向,规划未来,又或走一步看一步,随波逐流....不管怎样,面对未知、迷茫和困难,应未雨绸缪,学习着充实自己,故分享两道西洋汇官网上的在线题目。当然不是最优解,只是本人的答题过程。(如侵权可联系作者删除)
1、【必答】数据结构与算法
有 JSON 数据如链接所示:点击查看JSON数据
请实现方法:输入类目的 id,输出类目的层级结构。
示例一:输入 1120,输出 女士 > 服装 > 针织衫
示例二:输入 2221,输出 男士 > 鞋履 > 运动鞋 > 篮球鞋
要求:
- 实现语言不限,但代码要简洁。
- 请确保代码无语法错误,并无运行时错误。
- 请说明代码的运行环境。
<?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, ),日元(JPY, ¥)
接口示例(PHP代码)如下:
interface RateConverter
{
/**
* 输入由币种价格组成的字符串,输出人民币的实时价格
* @param string $price
* @return float
*/
public function convertToCNY(string $price): float;
}
要求:
- 实现语言不限,但代码要简洁。
- 请确保代码无语法错误,并无运行时错误。
- 请说明代码的运行环境。
- 请施展你所掌握的设计模式和软件工程规范。
<?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);
}
}
网友评论