css:1:display:none和visibility:hidden的区别:都是隐藏,一个占位,一个不占位2:伪类一:和二:的区别:一个冒号是伪类,两个是伪元素3:css选择器有哪些:1.id选择器(#myid)2.类选择器(.myclassname)3.标签(元素)选择器(div,h1,p)4.相邻选择器(h1+p)5.子选择器(ul>li)6.后代选择器(lia)7.通配符选择器(*)8.属性选择器(a[rel="external"])9、伪类选择器(a:hover,li:nth-child)4:divspanp属于什么选择器:标签选择器5:如何用css实现三角形?当然用边界实现。6:如何用css实现垂直居中?实现垂直居中的七种方式7:如何实现响应式布局?什么是响应式布局?什么是响应式布局?1.同一个页面不同的尺寸和比例应该看起来舒服。2、同一个页面在不同分辨率下应该看起来合理。3、同一页面在不同操作方式(如鼠标、触摸屏)下的体验要统一。4、同一个Pages在不同类型的设备(手机、平板、电脑)上,交互方式要习惯。如何实现响应式布局?1.可扩展的内容块:内容块可以在一定程度上自动调整,保证整个页面被填满。2.自由排列的内容块:当页面大小变化较大时,可以减少/增加栏目数。3、适应页面大小的边距:当页面大小变化较大时,块的边距也应该变化。4.可适应比例变化的图片:对普通宽度进行调整,隐藏两边的部分,图片依然美观可用6.可自动折叠的导航和菜单:是否展开或折叠应该根据页面大小来判断7.放弃使用像素作为大小单位:使用dp大小等方式保证页面在分辨率差异较大的设备上也能保持一致。同时也要求提供的图片要大于预期,以适应高分辨率屏幕js8:WhatistheBFCspecification:block-levelformattingcontext,overflow:hiddenclearsfloating。(方方一直用.clearfix清除浮动,坚决不使用overflow:hidden清除浮动)overflow:hidden取消了父子边距合并。http://jsbin.com/conulod/1/edit?html,css,js,output38(方方使用padding-top:1px;)9:节流防抖:我们平时开发的时候,会有很多场景会频繁触发事件,比如搜索框的实时请求,onmousemove,resize,onscroll等,有时候,我们不能或者不想频繁触发事件,怎么办?这时候就要用到功能防抖和功能节流了!函数debounce(去抖动) 在短时间内多次触发同一个事件,只执行最后一个,或者只执行第一个,中间的不执行。Throttle 是指连续触发事件,但在n秒内只执行一次功能。即在2n秒内执行...2次。throttling,字面意思就是会稀释函数的执行频率10:同源策略:同协议,同端口,同域名11:newanobject的进程怎么了?1.新建一个对象,如:varperson={};2、新对象的_proto_属性指向构造函数的原型对象。3.将构造函数的范围分配给新对象。(这就是this对象指向new对象的原因)4.执行构造函数里面的代码,亲自给this对象添加属性。5.返回新对象person。12:js的事件委托和事件代理?假设父元素有4个儿子。我没有听4个儿子,而是听父元素,看哪个儿子是触发事件的元素。这就是事件委托。可以听未出生的儿子(动态生成的元素)。保存听众。13:js事件捕获和事件冒泡?事件捕获是指从文档到触发事件的节点,即从上到下触发事件。相比之下,事件冒泡是自底向上触发事件。14:什么是闭包,它用在什么地方?闭包是函数外部可以访问的变量1:通过闭包,可以在setTimeout中实现参数传递的效果。2:作为事件绑定的回调,参考解释:closed包(匿名函数)15:JS中substr和substring有什么区别?js中的substr和substring都是截取字符串中的子串,非常相似,可以有一个或两个参数。语法:substr(start[,length])第一个字符的索引为0,start是必需的,length是可选的 substring(start[,end])第一个字符的索引是0,start是必需的,并且end是可选的选择相同点:当有参数时,两者的作用是一样的,返回从start指定的位置到字符串结尾的子串16:原型和原型链?每个对象都有一个__proto__内置属性。而这个内置属性等于构造函数的原型对象prototype。原型和原型链是JS继承的一种模式。原型链的形成是基于内置属性而不是原型对象。原型链直接存在于实例的原型对象和构造函数之间,而不是存在于实例和构造函数之间。17:jssplice,slice,splitdifferencesplice()方法在数组中添加/删除项目,并返回删除的项目。slice()方法返回从现有数组中选择的元素。slice()方法提取字符串的一部分并将提取的部分作为新字符串返回。可以作用于数组和字符串split()方法用于将字符串拆分为字符串数组。提示:如果使用空字符串("")作为分隔符,那么stringObject中的每个字符都会被拆分。18:js基本类型和复杂类型?stringnumberboolundefinednullobjectsymbolobjectincludesarray,function,regular,dateandotherobjectsonceappeared(array,function,regular,date,NaN)直接0分react19:react即将被销毁取消时可以做什么监听事件?20:react16生命周期?初始化阶段构造函数构造函数getDefaultPropsprops默认值getInitialStatestate默认值挂载阶段staticgetDerivedStateFromProps(props,state)rendercomponentDidMount更新阶段staticgetDerivedStateFromProps(props,state)shouldComponentUpdaterendergetSnapshotBeforeUpdate(prev,prevState)componentDidUpdate卸载阶段componentWillUnmount错误处理componentDidCatch21:react虚拟dom节点?方法?VirtualDOM,虚拟DOM对象,是React中的DOM对象。React使用JSX编写虚拟DOM对象,经过Babel编译后生成真实的DOM。然后真正的DOM将被插入(渲染)到页面中。由于更新dom开销很大,所以我们读取virtualdom这种低成本的对象,然后通过js渲染virtualdom到界面上。如果我们操作dom或者更新dom,可以使用diff方法比较新旧虚拟dom,找到不同的地方,然后只更新变化的部分。通过这种方式更新dom可以节省大量成本,并提供良好的用户体验。22:reactsetState是同步的还是异步的?为什么?它可以是同步的或异步的。准确的说,在React内部机制可以检测到的地方,setState是异步的;在React检测不到的地方,比如setInterval和setTimeout,setState是同步更新的。23:React亲子兄弟传值?父子通讯道具,子父通讯回调。兄弟通信子组件1---“父组件---”子组件2【其中子组件1和2是兄弟组件】这样兄弟组件就达到了通信的目的。24:react如何渲染list和key的作用?React将逐一列出并渲染数组中的元素。使用表达式集合数组列出页面上的元素,并为每个元素添加一个key属性,这个key必须是每个元素的唯一标识。当添加或删除DOM中的某些元素时,键帮助React识别哪些元素发生了变化。所以需要给数组的每个元素加上一个唯一的标识。25:w3c标准?W3C标准不是一个标准,而是一个标准的集合,包括三个部分:1.结构标准,代表语言是xHTML2。性能标准,代表语言是CSS3。Action标准,代表语言是JavaScriptSpecificspecification26:输入URL和页面显示之间会发生什么?DNS查询DNS缓存建立TCP连接(三次握手)连接复用发送HTTP请求(四部分请求)后台处理请求监听80端口路由渲染HTML模板生成响应发送HTTP响应关闭TCP连接(四次挥手)解析HTML下载CSS(Cache,parse,CSS,下载JS(cache,parse,JS,download,image,parse,image,renderDOMtree,renderstyletree,executeJS27:es6features?es6的新特性写在这里太棒了,随便戳28:CSS3新特性?CSS3实现圆角(border-radius)、阴影(box-shadow)、文字效果(text-shadow)、线性渐变(gradient)、旋转(transform)transform:rotate(9deg)scale(0.85,0.90)translate(0px,-30px)skew(-9deg,0deg);//旋转、缩放、定位、倾斜添加更多CSS选择器Multi-backgroundrgbaCSS3中唯一引入的伪元素is::selection.Mediaquery,multi-columnlayoutborder-image28:promiseasyncawait?第一个解释是第二个解释,哪个感觉更好29:常用的设计模式?单例模式、代理模式、策略模式、装饰模式、观察者模式、命令模式、组合模式、简单工厂、模板方法模式。30:如何理解高内聚和低耦合?耦合度:是衡量模块之间关联程度的指标。耦合的强弱取决于模块间接口的复杂程度,模块被调用的方式,以及通过接口传输的数据量。模块之间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系和数据传递关系。模块之间的连接越多,耦合越强,独立性越差。降低模块之间的耦合度,可以减少模块之间的影响,防止因修改某个模块而导致的“牵一发而动全身”的水波效应,保证了系统设计的顺利进行。耦合度是一个模块(类)与其他模块(类)之间的关联、感知、依赖程度,是代码独立性的一个指标。内聚:故名思义,意思是内部之间的聚合和关联的长度,所以高内聚指的是高度的聚合和关联。高内聚是指类与类之间的关系。high是指他们之间的关系要简单明了,不能有很强的关系,否则操作起来会出问题。一个类的运行会影响其他类。由于高内聚具有可靠性、可复用性、可读性等优点,因此推荐在模块设计中使用高内聚。高内聚低耦合的系统具有更好的可重用性、可维护性和可扩展性。可以更高效的完成系统维护和开发,持续支持业务发展,不成为业务发展的阻碍。31:你知道六大设计原则吗?单一职责原则:一个类值负责一个函数的职责。里氏替换原则:可以使用父类的地方,可以使用子类对象依赖倒置原则:对于接口编程,接口隔离原则:不同部分使用特殊接口,不是通用接口,需要哪些接口就使用DimitRule:对于软件实体类,尽量不要和其他实体类交互。对外统一暴露接口就可以了。微任务队列和宏任务队列)。同步任务完成后,先处理微任务,再处理宏任务。33:margin:auto和margin:0auto有什么区别;1.含义不同。margin:auto=margin:autoautoautoauto,表示上下左右都是auto;margin:0auto=margin:0auto0auto,表示top和bottom为0,left和right为auto;2、对中方法不同。margin:auto表示水平和垂直居中,margin:0auto表示水平居中,垂直不居中;margin后面通常跟4个参数,比如margin:1px,1px,1px,1px,分别表示topmargin为1px,rightmargin为1pxpadding为1px,bottommargin为1px,leftmargin是1px。如果后面只写2个参数,比如margin:1px,2px,表示上下边距都是1px,左右边距都是2px。34:如何理解react高层组件?如何使用和使用场景。简单的理解就是:高阶组件就是一个函数,它的参数是一个组件,返回值是一个新的组件。高层组件的两种形式:PropsProxy可以说是组件的封装,在封装过程中对封装好的组件做了一些处理(props处理,将基础组件与其他元素组合),然后返回,这就变成了一个高阶组件;反向继承(InheritanceInversion)可以理解为组装,和propertyproxy不同,反向继承是继承自基础组件,自然可以直接获取基础组件的props来操作基础组件的状态。以反向继承的形式,可以结合compose(通过一系列的骚操作,实现任意的、多个的、不同的功能模块的组合,强化组件。)将具有不同功能模块的高层组件组装成上基础部件,强化基础部件。35:如何改变js的this点。首先简单理解一下this的意思:函数中的this是在运行时确定的,而不是定义函数时确定的。调用普通函数有几种情况。此时this指向窗口构造函数Call,此时this指向实例对象的方法调用,此时this通过事件绑定指向方法所属对象的方法,此时this指向事件绑定对象的定时器函数,此时this指向window改变this方法的要点:call()方法的第一个参数表示this应该指向的新目标,第二个而后面的参数其实就相当于传递参数。参数之间用(比apply性能略好)用法:a.call(b,1,2);表示要把a函数的this点改成b的this点,运行函数a,传入的参数为(1,2)apply()方法的第一个参数相同如上,第二个参数接受一个数组,同样传递参数,只是以数组的形式,相当于arguments的用法:a.apply(b,[1,2]);意思是把a函数的this点改成b的this点,运行一个函数,传入的参数是(1,2)注意:即使只有一个参数,也必须是an的形式大批。bind()方法bind()创建一个新函数(称为绑定函数),它与调用函数具有相同的函数体。调用目标函数时,将this的值绑定到bind()的第一个参数上36:react的状态管理。如何处理多个状态。最基本的就是用redux来处理.dva37:redux的使用。Redux就是创建一个store来管理所有的状态,并触发改变store的动作。redux的使用场景非常灵活,可以和各种库结合使用。习惯了react,使用的时候需要配合react-redux。38:版本兼容性。1、不同的浏览器对于不同的解决方案默认的margin和padding是不同的:在css中添加通配符*{margin:0;填充:0;}2.IE6doublemarginproblem;如果在IE6中设置了float,同时设置了margin,就会出现margin问题。:对于超过高度的label设置overflow:hidden,或者设置line-height的值小于你设置的高度4.图片有默认间距解决方法:img布局使用float5.IE9以下浏览器不能使用opacity解决方法:opacity:0.5;filter:alpha(opacity=50);filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=50);6.边距重叠问题;当相邻的两个元素都设置了margin时,margin取最大值,舍弃最小值;解决办法:为了不让边重叠,可以在子元素上加一个父元素,将父元素设置为overflow:hidden;7、cursor:hand在safari中显示手形上面不支持的解决方法:统一使用cursor:pointer8,两个块级元素,父元素设置overflow:auto;position:relative是为子元素设置的;并且高度大于父元素,在IE6、IE7中会被隐藏而不是溢出;解决方法:父元素设置位置:relative39:如何使用promise同时发送多个请求。异步转同步Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值不同。成功时返回结果数组,失败时返回最先被拒绝的值。Promse.all在处理多个异步进程时非常有用。比如一个页面需要等待两个或多个ajax数据返回才能正常显示。在此之前,只显示加载图标。Promse.race是race的意思,即Promise.race([p1,p2,p3])中无论哪个结果很快得到,都会返回那个结果,不管结果本身是成功状态还是失败状态。Promise.prototype.then()方法返回一个新的Promise对象,因此它可以被链接起来,即一个then后面跟着另一个then。如果前一个回调函数返回一个Promise对象,后一个回调函数会等待第一个Promise对象的结果,然后再调用。40:如何用js创建一个类。方法一:varobj=newObject();方法二:varobj={};41:onclick事件的实现方式有几种?响应点击事件,通过点击事件监听点击事件42:说出以下代码的执行顺序?console.log(1);setTimeout(function(){console.log(2);},0)newPromise(resolve=>{console.log(3);}).then(function(){console.log(4);});console.log(5)测试点:Promise.resolve方法返回一个promise的实例,就是直接执行的队列执行顺序。先同步,再微观,那么宏setTimeout属于宏队列pomise就是microtask运行结果:1354243:命名下面代码的运行结果?函数O(年龄){this.age=age;}varo=newO(1);变量年龄=3;O.prototype.age=2;setTimeout(function(){age=4;O(5);console.log(o.age,age)},1000)运行结果为1544:js的深拷贝浅拷贝和深拷贝的区别如何区分深拷贝和浅拷贝之间?简单的说就是假设B复制了A,当A被修改的时候,看B会不会改变。如果B也发生变化,则说明这是一个浅拷贝。短手,如果B没变,就是深拷贝,自给自足。深拷贝的实现:使用递归拷贝所有层次属性。通过JSON对象实现深拷贝。如果对象的值是基本类型,也可以使用Object.assign来实现深拷贝,但是需要赋值给一个空对象。浅拷贝实现:Object.assign方法直接使用=赋值45:有状态组件和无状态组件有状态组件:属于类类,具有继承性,可以通过this接收状态和属性如果要使用的生命周期react,你要对一些数据进行增删改查。使用有状态组件。无状态组件:一个函数没有继承功能,也没有生命周期。它的动态数据是通过父组件传递的。子组件通过props接收和渲染一些简单的逻辑。判断等,选择无状态组件46.JS的typeof返回哪些数据类型?string,number,object,boolean,function,undefined瞬间发生;而并发是指两个或多个事件在同一时间间隔内发生。解释2:并行是不同实体上的多个事件,并发是同一实体上的多个事件。解释3:并发是在多个处理器上同时处理多个任务。比如Hadoop分布式集群,并行就是在一个处理器上“同时”处理多个任务。48:letvarconst和变量定义有什么区别?let声明的变量只在let命令所在的代码块中有效。(块级作用域)没有变量提升,存在临时死区。const声明一个只读常量。一旦声明,常量的值就不能改变。一旦const声明了一个变量,就必须立即对其进行初始化,不能保留以备后用。const的作用域与let命令相同:它只在声明所在的块级作用域内有效。var在函数作用域或者全局作用域中用var声明的变量会被视为在当前作用域顶部声明的变量,这就是变量提升机制48:JS原生3种绑定事件?//1.在label中直接绑定
