JS面试押题(20190707)

2023-05-27 10:51:24 浏览数 (1)

为什么要写关于JS的面试题呢?是这样子的,因为我目前从事的工作和Javascript有关,因为有了JS才有了我的一口饭,我能说它不好吗?难道它不值得写吗?为什么又是写面试题呢?因为其他的暂时还没完全消化整理,暂时打通不了我的任督二脉哈哈,再者说,面试是你滚出学校,走向社会的第一步,说滚可能有些人觉得太残忍了,但现状就是这样,你要是面试都过不了,更不可能去见主管和hr小姐姐啥的了,迎面而来的可不就是一个滚吗?就我目前知道的,可能学校对这块并不是特别重视,因为大学就那样吧,读过的都晓得,不多说了,培训机构是会抓一下的。后面为什么又是押题呢?时隔近4年,我上一次听到这个词,还是我的中学时代,在今年4月份在一次机缘巧合,我又听到了这个词,我觉得我有点对不起它,因为大学我几乎不会押题,我自己都不太能确定我到底干了啥就读完了,变相的来说,我认为那些啥考研考公它就是押题,啥王江涛啊告诉你这个要考的,可能性很大你赶紧背吧,结果还真是的,所以押题很重要,毕业后我还是倡导一种“押题思维”的方式吧。故事就介绍到这里,下面我们进入正题。

不行,我还是要多废话几句,就是我走下来感觉就两条路,要么你就猛刷题,不一定是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);

至此,我们今天的题目就讲完了,下期再会!

如果您觉得江涛哥哥写的文章对您有用或者对您的朋友也有用,麻烦您动动小指头,推荐一下呗,谢谢啦!

0 人点赞