文档章节

面试总结

gtandsn
 gtandsn
发布于 10/15 14:10
字数 1194
阅读 23
收藏 0

一、2019.10.15日上午交子大道中海国际艾迪泰科面试总结

1、领导比较有亲合力,就是办公环境没有隔挡,不是很喜欢办公环境

2、成都这边人员太少,感觉不到规模

3、离家太远

 

1、实现clone();

   涉及知识点:

   1)、typeof 判断类型

   2)、精确的判断类型:因为type null是object,type []是object,无法通过typeof来达到精确的判断          

          obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样,这是为什么?

这是因为toString为Object的原型方法,而Array 、Function等类型作为Object的实例,都重写了toString方法。不同的对象类型调用toString方法时,根据原型链的知识,调用的是对应的重写之后的toString方法(Function类型返回内容为函数体的字符串,Array类型返回元素组成的字符串.....),而不会去调用Object上原型toString方法(返回对象的具体类型),所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;因此,在想要得到对象的具体类型时,应该调用Object上原型toString方法。

console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]

 代码实现:          

  function clone(source) {

    //如果不是object类型的话,证明是基本数据类型,直接返回
    if( typeof source != "object") {
      return source;
    }
    //给targetObj赋值,因为typeOf []和typeOf {} 返回的结果是一样的所以要用以下的方式
    var targetObj = Object.prototype.toString.call(source) == '[Object Array]' ? [] :{};
    for(var key in source) {
      //hasOwnProperty用于判断是否这个属性是这个对象的,不是原型上的,因为不复制原型上的东西
      if(source.hasOwnProperty(key)) {
        targetObj[key] = typeof source[key] == 'object' ? clone(source[key]) : source[key];
      }
    }
    return targetObj;
  }

 

    Json的实现

  function cloneByJson (source) {
    return JSON.parse(JSON.stringify(source));
  }

   

2、去除数据中的重复元素 arr = [1,1,2,3,4,4,5,5,6,6]

    1)、用es5的方式 splice


  function removeDuplicateEs6(arr) {
    //会返回一个新的数组,原数组不变
    var temparr = Array.from(new Set(arr));
  }

           

    2)、用es6中的set

  function removeDuplicateEs5(arr) {
    for(var i=0;i<arr.length;i++) {
      for(var j=i+1;j<arr.length;j++) {
        if(arr[i] === arr[j]) {
          arr.splice(j,1);
          j--
        }
      }
    }
    console.log(arr.toString())
  }

      3、Promise

            1)三种状态: promise有三种状态:pending/reslove/reject 。pending就是未决,resolve可以理解为成功,reject可以理解为拒绝。

            2)用法: Promise是javascript中异步编程的一种解决方案,和传统的异步编程方案(回调、事件)相比,使用更加简洁,功能更加强大。ES6将其写 进了语言标准,统一了语法

Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。

function runAsync(){
    let p = new Promise((resolve,reject)=>{
        if(/*异步操作成功*/){
            resolve(value);
        }else{
            reject(error);
        }
    })
    return p;
}

//情况1
runAsync()
    .then(data=>{},error=>{})
//情况2
runAsync()
    .then(data=>{})

//指定reject的回调 捕捉then方法的异常,防止阻塞。
runAsync()
    .then(data=>{})//可能出现异常错误
    .catch(error=>{})

           3)promise 与 rxjs的区别

1、rxjs可以取消subscribe,promise不可以
  setTimeout( () => {
       str.unsubscribe();
   },1000)



2、rxjs可以发射多次,promise只能发射一次
let setTime2;
    let start2 = new Observable( (observable) => {
      let count = 0;
      setTime2 = setInterval( () => {
        observable.next(count++);
      },1000)
    })
    let str2 = start2.subscribe( (num) => {
        console.log(num);
        if(num > 10){
          str2.unsubscribe();
          clearInterval(setTime2);
        } 
    })

3、rxjs 自带了许多的工具函数,如filter等


代码示例
let promise = new Promise( (resolve) => {
      setTimeout(() => {
          resolve('chen');
      },2000)
    });
    promise.then((value) => {
      console.log(value);
    })

let start = new Observable( (observer) => {
      let timeOut = setTimeout( () => {
        observer.next('chen2');
      },4000)
      
    })
    let str = start.subscribe( (value) => {
      console.log(value);
    })

          Promise 新建后就会立即执行。

let promise = new Promise(function(resolve, reject) {
  console.log('Promise');
  resolve();
});

promise.then(function() {
  console.log('resolved.');
});

console.log('Hi!');

// Promise
// Hi!
// resolved

     下面是一个用Promise对象实现的 Ajax 操作的例子。

const getJSON = function(url) {
  const promise = new Promise(function(resolve, reject){
    const handler = function() {
      if (this.readyState !== 4) {
        return;
      }
      if (this.status === 200) {
        resolve(this.response);
      } else {
        reject(new Error(this.statusText));
      }
    };
    const client = new XMLHttpRequest();
    client.open("GET", url);
    client.onreadystatechange = handler;
    client.responseType = "json";
    client.setRequestHeader("Accept", "application/json");
    client.send();

  });

  return promise;
};

getJSON("/posts.json").then(function(json) {
  console.log('Contents: ' + json);
}, function(error) {
  console.error('出错了', error);
});

关于更多的Promise的知识点,请参考阮一峰ES6: http://es6.ruanyifeng.com/#docs/promise

 

3、怎么样让一个div居中

div{
    width: 100px;
    height: 100px;
    position: absolute;
    left: 50%;
    top: 50%;
    margin: -50px 0 0 -50px;
}


//css自动计算
margin: 0 auto

 

4、怎么样在html中插入10000个元素,考虑新效率

       思路: document.createDocumentFragment()  虚拟的节点对象

var d=document.createDocumentFragment();
d.appendChild(document.getElementsByTagName("LI")[0]);
d.childNodes[0].childNodes[0].nodeValue="Milk";
document.getElementsByTagName("UL")[0].appendChild(d);

      

 

© 著作权归作者所有

上一篇: Promise原理
gtandsn
粉丝 0
博文 85
码字总数 44859
作品 0
成都
私信 提问
2018 前端面试准备

前端面试常见问题按知识点分类整理 前端面试常考问题整理,按模块知识点分类,持续完善中... Front-end-Developer-Questions by Modules and knowledge 前端面试经典问题:CSS 中居中的几种方...

掘金官方
2017/12/14
0
0
程序员面经:面试前到底该不该刷题以及面试前该如何准备

引言      首先要说声抱歉,LZ前段时间刚入职,这几天一直在参加新人培训,每天到家都是晚上10点多,因此有关Java教程的文章和视频,只写了篇开头,没有按照计划进行后续Java教程相关的文...

zuoxiaolong8810
2017/03/23
0
0
Android知识体系总结(全方面覆盖Android知识结构,面试&进阶)

Android知识体系总结(全方面覆盖Android知识结构,面试&进阶 Version-1.0.1 时间:2018.09) 基本内容 : Android基础知识:基本涵盖Android所有知识体系,四大组件,Fragment,WebView,事件分发...

Java高级架构
2018/11/01
0
0
面试技巧

持续集成是什么 互联网软件的开发,已经成熟、标准化,其中最重要的组成部分就是持续集成(Continuous integration,简称CI)。 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工...

掘金官方
2018/01/08
0
0
ios面试总结(二)

前言 本文目的有二: 写下最近一段时间面试的过程与心得,是本人生活的一种记录,仅供参考; MarkDown语法测试。 最近一直在学习使用markdown语法,此文用作测试; 小结 ============ 去年底...

CeeYang
2016/02/24
207
0

没有更多内容

加载失败,请刷新页面

加载更多

入坑-双鹰咔哒C61016保时捷919赛车积木

原帖于ZDM首发 https://post.smzdm.com/p/amm53q8k/ 前几天 无意中逛ZDM 发现有条好价, C61016 标准版(无动力组件)狗东店家双十一活动, 原价249元, 现价219元, 还有199-100专享卷.到手119. ...

云逸清风
21分钟前
5
0
Centos7安装Redis5

一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc  二、下载...

小致Daddy
22分钟前
5
0
软件开发和用户体验结合——Cresense和Symbio达成战略合作伙伴关系

软件开发和质量保证公司Symbio和用户体验设计机构Cresense达成战略合作伙伴关系。通过创新的软件开发和用户体验结合,打造以客户为核心的优质服务。 Symbio与Cresense已经合作多年。联合技术...

symbiochina88
28分钟前
5
0
Sass 简介

概念 Sass由hampton catlin设计,natalie weizenbaum于2006年开发,它可以免费下载和使用。 Sass是一个将脚本解析成CSS的脚本语言(SassScript),也是一款CSS预处理器,它减少了CSS的重复,...

凌兮洛
30分钟前
5
0
Java自学指南五、编码工具

工欲善其事,必先利其器... 想要高效率编码输出和快速处理文本,需要 熟悉编程语言的语法 盲打 至少需要熟练使用一种文本编辑器 至少熟练熟练使用一种 IDE (集成开发环境) 现实中,看到过二指...

ConstXiong
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部