ali面试笔记


1.函数式编程和面向对象最大 的区别在于?

面向对象主要是数据和算法耦合在对象中,造成对象过大

函数式编程最基础的在于λ演算,λ演算的函数可以接受函数当做输入或者输出

2.antd和forg的区别?

如 modal组件 若antd中的modal不想写在jsx中,antd是无法实现的,单forg基于antd又封装了一层方法,如modal.show等方法,使得运用更加简单

3.js实现圆形区域可点击

a.设置border-radious属性

b.获取鼠标点击位,判断其到原点的距离是否不大于圆的半径,来判断点击位置是否在圆内

4.拖拽

a.通过三个事件完成 onmousedown onmouseup onmousemove

b.鼠标按下时,需记录鼠标按下时相对于操作元素内部的偏移量 offsetX/Y || layerX/Y

c.鼠标移动时,需设置鼠标移动的left值和top值

    left:pageX - offsetX

    top:pageY - offsetY

d.鼠标抬起时,取消拖拽,取消鼠标移动

5.响应式技术有哪些?

a.媒体查询

b.移动端的meta标签

6.typeof返回值

number  boolean  string  object  undefined  fuction

7. diff算法

a. 把树形结构按照层级分解,只比较同级元素

b. 给列表结构的每个单元添加唯一的key属性,方便比较

c. 合并操作,调用component 和setState 方法时, react 将其标记为 dirty ,到每一个事件循环结束, react检查所有标记dirty的component重新绘制

d. 选择性子树渲染。 开发者可以重写shouldComponentUpdate来提高diff性能

react生命周期render中:

render函数第一次执行完毕就会将虚拟DOM在缓存中存储起来,当this.state/this.props发生改变时,会将缓存中的虚拟Dom和需要更新的Dom做对比,这种对比叫做diff算法

8. PureComponent(纯组件)

纯组件是通过控制shouldComponentUpdate生命周期函数,减少render调用次数来减少性能损耗的。这相对于Component来说,减少了手动判断state变化的繁琐操作,但该组件也具有一定的缺陷,因为它只能进行一层浅比较,简单来说,它只比较props和state的内存地址,如果内存地址相同,则shouldComponentUpdate生命周期就返回false。PureComponent的使用场景应该是局部数据发生改变的场景,比如带有输入框、switch开关等的UI组件就可以使用PureComponent组件封装。PureComponent中如果有数据操作最好配合一个第三方组件——Immutable一起使用,Immutable需要使用npm安装该插件才可以使用,因为Immutable可以保证数据的不变性。

9. React    super(props) ,super() ,不写super()的区别

constructor()和super()的基本含义

constructor() —— 构造方法

这是ES6对类的默认方法,通过new命令生成对象实例自动调用的方法。并且,该方法是类中必须要有的,如果没有显示定义,则会默认添加空的constructor()方法。

super() —— 继承

在class方法中,继承是使用extends关键字来实现继承的。子类必须在constructor()中调用super()方法,否则新建实例时会报错。

报错的原因是,子类是没有自己的this对象的,它只能继承父类的this对象,然后对其进行加工,而super()就是将父类中的this对象继承给子类的。没有super,子类就得不到this对象。


如果你用到了constructor就必须写super(),是用来初始化this的,可以绑定事件到this上

如果你在constructor中要使用this.props,就必须给super加参数,super(props)

注意:无论有没有constructor,在render中this.props都是可以使用的,这是react自动附带的

如果没用到constructor,是可以不写的,react会默认添加一个空的constructor

9. 判断变量的数据类型

a. Object.prototype.toString.call()

可以通过toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,传递要检查的对象作为第一个参数,称为thisArg。

封装一个获取变量准确类型的函数

function gettype(obj) {

  var type = typeof obj;

  if (type !== 'object') {

    return type;

  }

  //如果不是object类型的数据,直接用typeof就能判断出来

  //如果是object类型数据,准确判断类型必须使用Object.prototype.toString.call(obj)的方式才能判断

  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');

}

b. constructor

constructor是prototype对象上的属性,指向构造函数。根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,因此,实例对象也是能使用constructor属性的。

如果输出一个类型的实例的constructor,就如下所示:

console.log(newNumber(123).constructor)//ƒ Number() { [native code] }

可以看到它指向了Number的构造函数,因此,可以使用num.constructor==Number来判断一个变量是不是Number类型的。

c. instanceof

除了使用typeof来判断,还可以使用instanceof。instanceof运算符需要指定一个构造函数,或者说指定一个特定的类型,它用来判断这个构造函数的原型是否在给定对象的原型链上。

d.typeof

Array,Object,null,Date,RegExp,Error这几个类型都被typeof判断为object,所以如果想要判断这几种类型,就不能使用typeof了。

Number,String,Boolean,Function,undefined,如果想判断这几种类型,那就可以使用typeof。

10. reduce(数组方法)

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

注意: reduce() 对于空数组是不会执行回调函数的。

语法

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

参数描述

function(total,currentValue, index,arr)必需。用于执行每个数组元素的函数。

函数参数描述:

total必需。初始值, 或者计算结束后的返回值。

currentValue必需。当前元素

currentIndex可选。当前元素的索引

arr可选。当前元素所属的数组对象。

initialValue可选。传递给函数的初始值

返回值

返回计算结果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353