不行,我还是要多废话几句,就是我走下来感觉就两条路,要么你就猛刷题,不一定是ACM的,但是ACM对智商的提高确实是有好处的,像PAT,Leetcode都是不错的;另外一个就是你有蛮丰富的项目实战经验,这个不是说你抱了一个腿参加了写上去就有加分的,你要讲的出所以然来,不然一定是减分,不减除非那是你舅或者你长得花一样。
好啦上题目,今天江涛哥哥给大家带来的是一道关于URL字符串解析的面试题,这个题目你在小厂不一定碰得到,反正据我所知,你去百度、有赞这些大厂有很大机率撞上这种类型的题目的,因为它考察的知识点真的是太好了,很看得出一个人的基础。这里就以我的档案库里百度的题目为砖头,我们一起来引玉吧。
面试题(ataolaGT_A_0001):编写一个queryURLParameter方法,实现将一个URL地址的后面的问号信息的传参部分,解析成键值对的方式显示。
示例:
Input:阿涛啦
代码语言:javascript复制https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=阿涛啦&rsv_pq=c545708700033b4f&rsv_t=9ad4IUKfnPSCyGMfTfPurz2hYEdv5gyeNTM3pwRuRKv0D9hKCB9HE8tZujc&rqlang=cn&rsv_enter=1&rsv_sug3=18&rsv_sug1=9&rsv_sug7=100&rsv_sug2=0&prefixsug=%E9%98%BF%E6%B6%9B%E5%95%A6&rsp=2&inputT=8604&rsv_sug4=8603
Output:
代码语言:javascript复制
{
ie: 'utf-8',
f: '3',
rsv_bp: '1',
rsv_idx: '1',
tn: 'baidu',
wd: '阿涛啦',
rsv_pq: 'c545708700033b4f',
rsv_t: '9ad4IUKfnPSCyGMfTfPurz2hYEdv5gyeNTM3pwRuRKv0D9hKCB9HE8tZujc',
rqlang: 'cn',
rsv_enter: '1',
rsv_sug3: '18',
rsv_sug1: '9',
rsv_sug7: '100',
rsv_sug2: '0',
prefixsug: '%E9%98%BF%E6%B6%9B%E5%95%A6',
rsp: '2',
inputT: '8604',
rsv_sug4: '8603'
}
知识点:首先我们打开浏览器,输入https://www.baidu.com,然后我们在输入框里去提交我们输入的内容,例如阿涛啦,这个时候,浏览器就会向百度的某个服务器上发送一个GET请求,那么我们试想后台百度服务器,接收到了我们传过去的这个GET请求,它又看不懂,这啥玩意,一坨屎一样的,这个时候它就需要它后台的service层的业务方法去处理这串东东,把它解析成键值对形式的JSON,这样处理起来就方便多了,Javascript的对象直接拿过来,用到哪个取哪个,这里只是简单地概括了下这样子的一个业务场景,把生活中的人们的行为方式用计算机语言去描述。
考点:它这边考了些啥知识点呢,首先那一坨东西,它是一个字符串,那么就要涉及到一些ES5、ES6的基础API,然后第二个就是一个Javascript中Object对象的理解,除了Baba.son这种写法,很多时候在操作Object对象,Baba[son]也是经常用到的,这其中肯定会涉及到拆除来的东西的遍历,那么很容易联想到数组了,最后就是一个分类讨论,我要是啥都没输入提交你能不能介绍?学有余力的其实还是可以从正则的方法入手,代码会短很多,这里就放以拆分字符串,然后把它转换成数组进行遍历,最后返回我们想要的结果的思路代码。
代码语言:javascript复制/**
* From: Baidu Interview
* Input: "https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=阿涛啦&rsv_pq=c545708700033b4f&rsv_t=9ad4IUKfnPSCyGMfTfPurz2hYEdv5gyeNTM3pwRuRKv0D9hKCB9HE8tZujc&rqlang=cn&rsv_enter=1&rsv_sug3=18&rsv_sug1=9&rsv_sug7=100&rsv_sug2=0&prefixsug=%E9%98%BF%E6%B6%9B%E5%95%A6&rsp=2&inputT=8604&rsv_sug4=8603"
* Output: " {
ie: 'utf-8',
f: '3',
rsv_bp: '1',
rsv_idx: '1',
tn: 'baidu',
wd: '阿涛啦',
rsv_pq: 'c545708700033b4f',
rsv_t: '9ad4IUKfnPSCyGMfTfPurz2hYEdv5gyeNTM3pwRuRKv0D9hKCB9HE8tZujc',
rqlang: 'cn',
rsv_enter: '1',
rsv_sug3: '18',
rsv_sug1: '9',
rsv_sug7: '100',
rsv_sug2: '0',
prefixsug: '%E9%98%BF%E6%B6%9B%E5%95%A6',
rsp: '2',
inputT: '8604',
rsv_sug4: '8603'
}"
* Description: "将输入的url字符串进行解析并以JSON格式输出"
* By zjt613
*/
let url = 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=阿涛啦&rsv_pq=c545708700033b4f&rsv_t=9ad4IUKfnPSCyGMfTfPurz2hYEdv5gyeNTM3pwRuRKv0D9hKCB9HE8tZujc&rqlang=cn&rsv_enter=1&rsv_sug3=18&rsv_sug1=9&rsv_sug7=100&rsv_sug2=0&prefixsug=%E9%98%BF%E6%B6%9B%E5%95%A6&rsp=2&inputT=8604&rsv_sug4=8603';
/**
* @description 字符串拆分法: 利用字符串方法,把地址进行拆分,最后获取需要的信息
* @method queryURLParameterByStr
* @for run
* @param {string} url 传入的url地址
* @return {object} res 返回的结果
*/
function queryURLParameterByStr(url) {
let res = {};
if (url.indexOf('?') == -1) {
return res;
} else {
let ArrTmp = url.split('?');
let ArrTmp2 = ArrTmp[1].split('&');
Array.from(ArrTmp2, item => {
let cur = item.split('=');
res[cur[0]] = cur[1];
})
return res;
}
};
/**
* Test: 测试
*/
let result = queryURLParameterByStr(url);
console.log("result: ", result);
至此,我们今天的题目就讲完了,下期再会!
如果您觉得江涛哥哥写的文章对您有用或者对您的朋友也有用,麻烦您动动小指头,推荐一下呗,谢谢啦!