深圳市法本信息技术股份有限公司(套题)
选择题 | 填空题 | 问答题 | 编程题 | 试题难度 |
---|---|---|---|---|
0 | 0 | 17 | 0 | 比较难 |
问答题
1、css中position有几种布局
1、static(静态定位):默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
2、relative(相对定位):生成相对定位的元素,通过top,bottom,left,right的设置相对于其正常(原先本身)位置进行定位。
3、absolute(绝对定位):生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定,如果父级元素没有定位则相对于浏览器来偏移
4、fixed(固定定位):生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
2、简述bfc
BFC(block formatting context):简单来说,BFC 就是一种属性,这种属性会影响着元素的定位以及与其兄弟元素之间的相互作用。中文常译为块级格式化上下文。是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。 在进行盒子元素布局的时候,BFC提供了一个环境,在这个环境中按照一定规则进行布局不会影响到其它环境中的布局。比如浮动元素会形成BFC,浮动元素内部子元素的主要受该浮动元素影响,两个浮动元素之间是互不影响的。 也就是说,如果一个元素符合了成为BFC的条件,该元素内部元素的布局和定位就和外部元素互不影响(除非内部的盒子建立了新的 BFC),是一个隔离了的独立容器。(在 CSS3 中,BFC 叫做 Flow Root)
3、讲一下less,sass异同
相同点:
首先sass和less都是css的预编译处理语言,他们引入了mixins,参数,嵌套规则,运算,颜色,名字空间,作用域,JavaScript赋值等 加快了css开发效率,当然这两者都可以配合gulp和grunt等前端构建工具使用;
不同点:
sass和less主要区别:在于实现方式 less是基于JavaScript的在客户端处理 所以安装的时候用npm,sass是基于ruby所以在服务器处理。
4、模态框遮罩层和居中实现是怎么做的
1.遮盖层只需要设置一个div让它铺满全页面,并且z-index 属性设置元素的堆叠顺序设置一下就可以。
2.弹框始终居中需要设置position:fixed. top:50%; left:50%;
_position:absolute;这句代码的意思是“位置:绝对定位”,也就是说元素的位置是相对于整个浏览器窗口的,而不是相对于父元素。一般要配合top、left属性使用。
3.position:absolute; 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
position:fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。
元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
4.document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度
5、讲述js1.angular,vue,react异同
与Angular.js的区别
相同:
都支持指令:内置指令和自定义指令。
都支持过滤器:内置过滤器和自定义过滤器
都支持双向数据绑定。
都不支持低端浏览器。
不同点:
1、Angular.js的学习成本高,比如增加了Dependency Injection特性,而Vue.js本身提供的API都比较简单、直观。
2、在性能上,Angular.js依赖对数据做脏检查,所以watcher越多越慢。
3、Vue.js使用基于依赖追踪的观察并且使用异步队列更新。所有的数据都是独立出发的。
对于庞大的应用来说,这个优化差异还是比较明显的。
与React的区别
相同点:
1、React采用特别的JSX语法,Vue.js在组件开发中推崇编写.vue特殊文件格式,对文件内容都有一些约定,两者都需要编译后使用。
2、中心思想相同:一切都是组件,组件实例之间可以嵌套。
3、都提供合理的钩子函数,可以让开发者定制化地去处理需求。
4、都不内置列数AJAX,Route等功能到核心包,而是以插件的方式加载。
5、在组件开发中都支持mixins的特性。
不同点:
React 依赖Virtual DOM,而Vue.js使用的是DOM模板。React采用的Virtual DOM会对渲染出来的结果做脏检查。
Vue.js在模板中提供了指令,过滤器等,可以非常方便,快捷地操作Virtual DOM。
6、描述数据双向绑定实现原理
实现数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器Observer,用来监听所有属性。如果属性发上变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个,所以我们需要有一个消息订阅器Dep来专门收集这些订阅者,然后在监听器Observer和订阅者Watcher之间进行统一管理的。接着,我们还需要有一个指令解析器Compile,对每个节点元素进行扫描和解析,将相关指令对应初始化成一个订阅者Watcher,并替换模板数据或者绑定相应的函数,此时当订阅者Watcher接收到相应属性的变化,就会执行对应的更新函数,从而更新视图。因此接下去我们执行以下3个步骤,实现数据的双向绑定:
1.实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。
2.实现一个订阅者Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。
3.实现一个解析器Compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相应的订阅器。
7、讲述js原型继承
JavaScript是基于原型继承的,任何对象都有一个prototype属性。Object.prototype是所有对象的根,并且不可改变.原型链是实现原型继承的主要方法,基本思想就是利用原型让一个引用类型继承另一个引用类型的属性和方法。
10、promise是什么?
Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
11、简述一下解析赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)这句话的解释:第一步从数组或者对象中提取值,第二步将提取到的值对变量进行赋值;
1、简单语法;
2、模式匹配
注释:可以从数组中提取值,按照对应位置,对变量赋值,本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值
3、可以设置默认值
4、对象的解构赋值
对象解析与数组解析的不同点在于,数组的按照一定的顺序的,变量的取值取决于他的位置;而对象的属性没用顺序,变量必须与对象的属性名相同,才可以正确的取到值
5、注意点:注意是模式还是变量,变量采用的是逗号分开,模式后面紧跟的是冒号,我们只对变量赋值,不对模式赋值
12、谈谈生命周期钩子
1.beforeCreate:这个时期,this变量还不能使用,在data下的数据,和methods下的方法,watcher中的事件都不能获得到;
2.created:这个时候可以操作vue实例中的数据和各种方法,但是还不能对"dom"节点进行操作;
3.beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。
4.mounted:挂载完毕,这时
dom
节点被渲染到文档内,一些需要dom
的操作在此时才能正常进行
14、比较thinkphp和其他框架优劣
ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易上手,适合PHP框架初学者。 ThinkPHP的宗旨是简化开发、提高效率、易于扩展,其在对数据库的支持方面已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有着丰富的文档和示例,框架的兼容性较强,但是其功能有限,因此更适合用于中小项目的开发。
优点
1.易于上手,有丰富的中文文档;
2.框架的兼容性较强,PHP4和PHP5完全兼容、完全支持UTF8等。
3. 适合用于中小项目的开发
缺点
1.对Ajax的支持不是很好;
2.目录结构混乱,需要花时间整理;
3.上手容易,但是深入学习较难。
15、前端优化方法
1.减少http请求
HTTP协议是无状态的应用层协议,意味着每次HTTP请求都需要简历通信链路,进行数据传输,而在服务器端,每个HTTP都需要启动独立的线程去处理,这些通信和服务的开销都很昂贵,减少HTTP请求的数目可有效提高访问性能。
减少HTTP请求的主要手段是合并CSS,合并JavaScript,合并图片。将浏览器一次访问需要的JavaScript,CSS合并成一个文件,这样浏览器就只需要一次请求。多张图片合并成一张,如果每张图片都有不同的超链接,可通过CSS偏移响应鼠标点击操作,构造不同的URL。
(2)使用浏览器缓存
对一个网站而言,CSS,JavaScript,Logo,图标等这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次HTTP请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。通过设置HTTP头中Cache-Control和Expires属性,可设定浏览器缓存,缓存时间可以是数天甚至是几个月。有时候,静态资源文件变化需要及时应用到客户端浏览器,这种情况可以通过改变文件名实现,比如一般会在JavaScript后面加上一个版本号,使浏览器刷新修改的文件。
(3)启用压缩
在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效较少通信传输的数据量。文本文件的压缩效率科大80%以上。
(4)CSS放在页面最上面,JavaScript放在页面最下面
浏览器会在下载完全部CSS之后对整个页面进行渲染,因此最好的做法是将CSS放在页面最上面,让浏览器尽快下载CSS。JS则想法,浏览器在加载JS后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此JS最好放在页面最下面。