zoukankan      html  css  js  c++  java
  • 面试经验合集-Web前端<一>

    面试一:MF
    时间:2019-1-2

    试题一

    // [mf: stringify-query-string]
    // 类型: x z
    // 时长: 15 分钟
    // 姓名:
    // 日期:
    
    // 实现下面的 stringify 函数, 用于将键值对数据序列化为 query string.
    
    // 提示:
    // 运行代码快捷键: Ctrl + S
    
    function stringify(data) {
    var str = '';
    //str = JSON.stringify(data);
    str = JSON.stringify(data);
    //str = encodeURIComponent(str);
    //str = JSON.toString(data)
    return str;
    }
    
    // 参考用例:
    
    const query = stringify({
    id: '123',
    subject: 'hello, world!'
    });
    
    console.log('输出结果:');
    console.log(query);
    
    // 输出结果参考
    
    // 输出结果:
    // id=123&subject=hello%2C%20world!
    

    附:

    function stringify(data){
        var str = '';
    	var keys = [];
    // 	if(typedof(data) == 'object'){
    // 		keys = data.keys();
    // 	}
    	for(var item in data) { 
    		if (data.hasOwnProperty(item)) 
    			keys.push(item);
    	}
    	
    	for(i=0;i<keys.length;i++){
    		str += "&" + keys[i] +"=" + escape(data[keys[i]]); 
    	}
    	str = str.substring(1);
    	return str;
    }
    
    q = stringify({
      id: '123',
      subject: 'hello, world!'
    });
    
    console.log('输出结果:');
    console.log(q);
    

    试题二:

    // [mf: string-template]
    // 类型: xz
    // 时长: 15 分钟
    // 姓名:
    // 日期:
    
    // 实现下面的 format 函数, 用于替换字符串模板中对应的占位符.
    
    // 提示:
    // 运行代码快捷键: Ctrl + S 
    
    function format(template, data) {
      //思路:正则匹配 + 提取
      var str = template;
      var keys = [];
      var values = [];
      for(var i in data){
        if(data.hasOwnProperty(i)){
          keys.push(i);
          values.push(data[i]);
        }
      }
      for(var item=0;item<keys.length;item++){
        str = str.replace(new RegExp("{" + keys[item]+"}","g"),values[item]);
      }
      return str;
    }
    
    // 参考用例:
    
    const output = format('{name}今年{age}岁了.', {
      name: '狮子大哥',
      age: 18,
    });
    
    console.log('输出结果:');
    console.log(output);
    
    // 输出结果参考
    
    // 输出结果:
    // 狮子大哥今年18岁了.
    

    试题三

    // [mf: async-task-queue]
    // 类型: xz
    // 时长: 30 分钟
    // 姓名:
    // 日期:
    
    // 修改下面的 start 函数, 使 execute 对应的 id 按顺序打印.
    
    // 提示:
    // 运行代码快捷键: Ctrl + S 
    
    var queue = [];
    var flag = false; //是否执行完
    
    function exe() {
      if (queue.length > 0) {
        execute(queue.shift(id)).then(() => {
          exe();
        }).catch(console.error);
      }
    }
    
    function start(id) {
      queue.push(id);
      if (!flag) {
        exe();
        flag = true;
      }
    }
    
    // 测试代码 (请勿更改):
    
    console.log('输出结果:');
    
    for (let i = 0; i < 5; i++) {
      start(i);
    }
    
    function sleep(duration) {
      return new Promise(resolve => setTimeout(resolve, duration));
    }
    
    function execute(id) {
      let duration = Math.floor(Math.random() * 500);
    
      return sleep(duration).then(() => {
        console.log('id', id);
      });
    }
    
    // 输出结果参考
    
    // 输出结果:
    // id 0
    // id 1
    // id 2
    // id 3
    // id 4
    

      

      

    参考文献

    《JavaScript高级程序设计》

  • 相关阅读:
    软工假期预习作业1
    2号团队-团队任务4:每日立会(汇总)
    2号团队-团队任务4:每日立会(2018-11-26)
    2号团队-团队任务4:每日立会(2018-11-27)
    第二小组首次会议记录
    第二次作业
    自我介绍+课后作业1:准备
    Linux安装redis
    Redis面试题
    Mybatis面试题
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/10207907.html
Copyright © 2011-2022 走看看