前端面试题10-20

11-.网页上哪里可以看到请求的所有信息

12-继承的方法

1、原型链继承
	function Woman(){ 
	}
	Woman.prototype= new People();
	Woman.prototype.name = 'haixia';
	let womanObj = new Woman();
优点:简单易实现
缺点:无法实现多继承
2、构造函数继承
	function Woman(name){
	 //继承了People
	  People.call(this); //People.call(this,'wangxiaoxia'); 
	  this.name = name || 'renbo'
	}
	let womanObj = new Woman();
优点:可以实现多继承
缺点:方法无法复用,不能继承父类属性和方法,只能继承父类实例对象属性和方法
3、extends关键字继承

13-call apply bind

		this指向问题:
			1、普通函数中this指向 ---> window
			2、事件函数中this指向 ---> 事件源
			3、构造函数中this指向 ---> 实例对象
			4、具体对象中this指向 ---> 当前对象
			5、箭头函数的this指向 ---> 定义时所在的对象
		修改函数this指向:
			1、call: 函数.call(参数1,参数2,参数3)
				第一个参数是所要指向的对象,其余参数为函数的实参
			2、apply: 函数.apply(参数1,[参数2,参数3])
				第一个参数是所要指向的对象,其余参数为函数的实参,用数组的方式呈现
			3、bind: 函数.call(参数1,参数2,参数3)
				不能直接被调用,返回的是一个新的函数
			call和apply都可以直接调用函数,只是传递实参的方式不同
			bind不可以直接调用函数,返回的是一个新的函数

14-const用法

const用来声明常量,一旦声明,其值就不能更改
1.const声明的常量不能改变,意味着const一旦声明常量,就必须同时初始化。不能先声明,后初始化,这样会报错
2.与let一样。const声明的常量也只在块级作用域内有效
3.与let一样,必须先声明,后使用
4.与let一样,在同一作用域,const不能重复声明同一常量
注:const声明的对象属性是可以修改的

15-Utf-8编码汉字占多少个字节

英文字母:

字节数 : 1;编码:GB2312
字节数 : 1;编码:GBK
字节数 : 1;编码:GB18030
字节数 : 1;编码:ISO-8859-1
字节数 : 1;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE
中文汉字:

字节数 : 2;编码:GB2312
字节数 : 2;编码:GBK
字节数 : 2;编码:GB18030
字节数 : 1;编码:ISO-8859-1
字节数 : 3;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE

utf-8英文占一个字节,中文站3个字节

16-http和https的区别

http的全称是Hypertext Transfer Protocol Vertion (超文本传输协议),说通俗点就是用网络链接传输文本信息的协议
HTTPS的全称是Secure Hypertext Transfer Protocol(安全超文本传输协议),是在http协议基础上增加了使用SSL加密传送信息的协议。
所以http和https之间的区别就在于其传输的内容是否加密和是否是开发性的内容。
1、https协议需要到ca申请证书,一般免费证书很少,需要交费。
2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的。
5、 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全
HTTPS解决的问题:
	1、信任主机的问题. 采用https 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 改证书只有用于对应的server 的时候,客户度才信任次主机。所以目前所有的银行系统网站,关键部分应用都是https 的,客户通过信任该证书,从而信任了该主机,其实这样做效率很低,但是银行更侧重安全。这一点对我们没有任何意义,我们的server 采用的证书不管自己issue 还是从公众的地方issue,客户端都是自己人,所以我们也就肯定信任该server。
	2、通讯过程中的数据的泄密和被窜改
	详细请参考文案:https://blog.csdn.net/weixin_34128411/article/details/92399542

16-HTML5的新特性

1、绘画canvas
2、用于媒介回放的 video和audio元素
3、本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失
4、sessionStorage的数据在浏览器关闭后自动删除
5、语意化更好的内容元素,比如article、footer、header、nav、section
6、表单控件,calendar、date、time、email、url、search
7、新的技术webworker、websocket、Geolocation
8、移除的元素:
9、纯表现的元素:basefont、big、center、font、s、strike、tt、u
10、对可用性产生负面影响的元素:frame、frameset、noframes
11、支持HTML5新标签

17-ajax

1、什么是Ajax和JSON,它们的优缺点
  Ajax是全称是asynchronous JavaScript andXML,即异步JavaScript和xml,用于在Web页面中实现异步数据交互,实现页面局部刷新
  优点:可以实现异步通信效果,页面局部刷新,带来更好的用户体验
  JSON是一种轻量级的数据交换格式,看着像对象,本质是字符串
  优点:轻量级、易于人的阅读和编写,便于js解析,支持复合数据类型
2、ajax的交互流程有哪几步?
  1)创建ajax对象
    xhr = new XMLHttpRequest
  2)规定请求地址
    xhr.open(method,url,async)
  3)等待服务器相应
    xhr.onload
  4)向服务器发送请求
    xhr.send()
  5)监听事件
3、AJAX应用和传统Web应用有什么不同
  在传统的Js中,如果想发送客户端信息到服务器,需要建立一个HTML 表单然后GET或者POST数据到服务器端
  用户需要点击提交按钮来发送数据信息,然后等待服务器响应请求,页面重新加载
  使用AJAX技术,就可以使Javascript通过XMLHttpRequest对象直接与服务器进行交互
4、XMLHttpRequest对象在IE和Firefox中创建方式有没有不同?
  IE中通过new ActiveXObject()得到,Firefox中通过newXMLHttpRequest()得到
  使用jquery封装好的ajax,会避免这些问题
5、ajax如何解决浏览器缓存问题
  1)在ajax发送请求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0")
  2)在ajax发送请求前加上 anyAjaxObj.setRequestHeader("Cache-Control","no-cache")
  3)在URL后面加上一个随机数: "fresh=" + Math.random();
  4)在URL后面加上时间戳:"nowtime=" + new Date().getTime()
  5)在jq ajax下,使用 $.ajaxSetup({cache:false}) 这样就不会保存缓存记录
6、简述ajax的优缺点
  优点:
  1)无刷新更新数据(在不刷新整个页面的情况下维持与服务器通信)
  2)异步与服务器通信(使用异步的方式与服务器通信,不打断用户的操作)
  3)前端和后端负载均衡(将一些后端的工作交给前端,减少服务器与宽度的负担)
  4)界面和应用相分离(ajax将界面和应用分离也就是数据与呈现相分离)
  缺点:
  1)ajax不支持浏览器back按钮
  2)安全问题 Aajax暴露了与服务器交互的细节
  3)对搜索引擎的支持比较弱
  4)破坏了Back与History后退按钮的正常行为等浏览器机制
7、阐述一下异步加载JS
  1)异步加载的方案: 动态插入 script 标签
  2)通过 ajax 去获取 js 代码,然后通过 eval 执行
  3)script 标签上添加 defer 或者 async 属性
  4)创建并插入 iframe,让它异步执行 js
8、json字符串与对象如何相互转换
  把JSON格式转成对象:JSON.parse()
  把对象转成标准json:JSON.stringify()
  使用eval能够把字符串尽量转成js运行的代码 eval('(' + jsonstr + ')') 
  eval是不安全的(可能会注入不必要的东西),通过new Function('','return'+json)();可以解决该问题
9、get与post的区别,什么时候使用post?
  get和post在HTTP中都代表着请求数据,其中get请求相对来说更简单、快速,效率高些
  get相对post安全性低
  get有缓存,post没有
  get体积小,post可以无限大
  get的url参数可见,post不可见
  get只接受ASCII字符的参数数据类型,post没有限制
  get请求参数会保留历史记录,post中参数不会保留
  get会被浏览器主动catch,post不会,需要手动设置
  get在浏览器回退时无害,post会再次提交请求
  post一般用于修改服务器上的资源,对所发送的信息没有限制。比如
  1. 无法使用缓存文件(更新服务器上的文件或数据库)
  2. 向服务器发送大量数据(POST 没有数据量限制)
  3. 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
10、介绍一下XMLHttpRequest对象,他有哪些常用方法和属性
  XMLHttpRequest是ajax的核心,通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新
  常用的方法:
  open(get/post,url,是否异步)创建http请求
  send()发送请求给服务器
  setRequestHeader()设置头信息(使用post才会用到,get并不需要调用该方法)
  常用的属性:
  onreadystatechange 用于监听ajax的工作状态(readyState变化时会调用此方法)
  readyState 用来存放XMLHttpRequest的状态
  status 服务器返回的状态码
  responseText 服务器返回的文本内容
11、说下readyState属性是干嘛的,都有哪几个状态
  readyState属性用来存放XMLHttpRequest的状态,监听从0-4发生不同的变化
  0:请求未初始化(此时还没有调用open)
  1:服务器连接已建立,已经发送请求开始监听
  2:请求已接收,已经收到服务器返回的内容
  3:请求处理中,解析服务器响应内容
  4:请求已完成,且响应就绪
12、jquery ajax怎么实现,你认为他有什么不足之处
		不足之处:
  (1)针对MVC的编程,不符合现在前端MVVM的浪潮
  (2)基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
13、说一下同步和异步的区别
  同步会阻塞,异步不会阻塞
  同步:程序运行从上而下,浏览器必须把这个任务执行完毕,才能继续执行下一个任务
  异步:程序运行从上而下,浏览器任务没有执行完,但是可以继续执行下一行代码
14、解释一下 JavaScript的同源策略
  同源策略是客户端脚本的安全度量标准,为了防止某个文档或脚本从多个不同源装载
  同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性
  所谓同源就是同域名、同协议、同端口,只有同源的地址才能相互通过ajax方式请求
15、如何解决跨域问题?
  跨域的概念:协议、域名、端口都相同才同域,否则都是跨域
  解决跨域问题:
  1)使用JSONP(json+padding)把数据内填充起来
  2)CORS方式(跨域资源共享),在后端上配置可跨域
  3)服务器代理,通过服务器的文件能访问第三方资源
16、解释jsonp的原理
  ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,
  而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。
17、请问jsonp是不是ajax中实现跨域访问的技术
  jsonp不是AJAX中实现跨域访问的技术
  jsonp没有使用XMLHttpRequest对象
  jsonp只是一种跨域的协议
  jsonp只支持Get方式
18、页面编码和被请求的资源编码如果不一致如何处理?
  对于ajax请求传递的参数,如果是get请求,参数传递中文,在有些浏览器会乱码
  不同的浏览器对参数编码的处理方式不同,所以对于get请求的参数需要使用 encodeURIComponent函数对参数进行编码处理
19、AJAX请求总共有多少种CALLBACK
  总共有八种Callback
  onSuccess、onFailure、onUninitialized、onLoading
  onLoaded、onInteractive、onComplete、onException 
20、拿到数据怎么区分是ajax还是jsonp
  ajax: {}
  jsonp:fn({})
  ajax的数据jsonp不能用,jsonp的数据ajax是可以用的
  jsonp本质是通过URL的方式进行请求的,所以它是get方式请求,没有post

18-js对数组的操作,包括向数组中插入删除数据

1、Array.isArray(arr) :
2、filter((item, index, array) => {}): 返回一个新数组, 其包含通过所提供函数实现的测试的所有元素,不改变原数组。
3、forEach( (item, index, array) => {}): 对数组的每个元素执行一次给定的函数。 
4、indexOf(): 数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1;
5、 toString():  返回一个字符串,用逗号隔开,表示指定的数组及其元素
6、toLocaleString() : 返回一个特定语言环境的字符串.
7、 shift()  : 删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined (前删,返回值,改变原数组)   
8、pop() :删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined (后删,返回值,改变原数组)
9、 unshift() :将参数添加到原数组开头,并返回数组的长度 (前增,返回长度,改变原数组)
10、 push() :将参数添加到原数组末尾,并返回数组的长度 (后增,返回长度,改变原数组)
11、 concat(元素1,元素2) :返回一拼接新数组,是将参数添加到原数组中构成的 
12、 splice(start,deleteCount,val1,val2,...) : 从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...,(返回裁剪后的新数组,改变原数组)
13、 slice(start,end): 返回从原数组中指定开始下标到结束下标之间的项 组成的切割新数组 
14、join(separator, mapFn可选): 将数组的元素组起一个分隔符拼接字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
15、reverse :将数组反序 ,返回反序后的数组(反序,改变原数组)
16、 sort(order function) :按指定的参数对数组进行排序
17、 reduce(function(accumulator, currentValue)): 累计器,迭代器。对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值,  即, 由reduce返回的值将是最后一次回调返回值
18、reduceRight: 接收一个函数作为累加器,和数组的每个值(从右到左)
19、some(function(ele,index可选,array可选)): 判断测试数组中,是不是至少有1个元素通过了被提供的函数测试, 返回布尔值Boolean.
20、 every(function(ele)) : 和some一起记忆。 判断测试数组中,是不是每个元素通过了被提供的函数测试, 返回布尔值Boolean.
21、Array.from(arryLike): 把一个类数组或者可迭代对象( Map和 Set )创建为一个新的浅拷贝的数组实例.   兼容性:不支持IE,支持edge. 
22、 find : 返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
23、findIndex:方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
24、 fill(ele,startIndex,endIndex(可选)):用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引的那一个,会改变原数组。
25、 flat() : 扁平化数组,按照一个可指定的深度depth(默认是1)递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。不改变原数组。
26、flatMap(function):首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。 flatMap 通常在合并成一种方法的效率稍微高一些
27、 entries() : 返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。
28、 keys() :  返回一个包含数组中每个索引键的Array Iterator对象。
29、values() :方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值
30、copyWithin(target, start = 0, end = this.length): 浅部分数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。

19-讲下你做轮播图的思路,无缝轮播

实现轮播其实就是是通过控制img_ul的left值来控制显示某张图片, 为了实现“滚动”的效果,
我们需要逐渐改变img_ul的left值,而不能直接使该值变化图片宽度的倍数。这里我们定义
一个动画效果函数autoPaly()。
css部分:
			*{
				mask-image: 0;
				padding: 0;
				list-style: none;
			}
			.box{
				width: 1000px;
				height: 300px;
				position: relative;
				margin: 50px auto;
				overflow: hidden;
			}
			.box ul{
				width: 600%;
				height: 100%;
				position: absolute;
			}
			.box ul li{
				float: left;
			}
			.box ul li img{
				width: 1000px;
				height: 300px;
			}
			.box p{
				position: absolute;
				bottom: 1px;
				width: 1000px;
				text-align: center;
			}
			.box p span{
				padding: 5px 10px;
				margin: 5px;
				background-color: #3399FF;
				color: #FFFFFF;
				cursor: pointer;
			}
			.box p span.active{
				background-color:  #6666FF;
			}
html部分:可以使用js形成布局
<div class="box">
			<!-- <ul>
				<li><img src="image/01.jpg" ></li>
				<li><img src="image/02.jpg" ></li>
				<li><img src="image/03.jpg" ></li>
				<li><img src="image/04.jpg" ></li>
				<li><img src="image/05.jpg" ></li>
			</ul>
			<p>
				<span>1</span>
				<span>2</span>
				<span>3</span>
				<span>4</span>
				<span>5</span>
			</p> -->
		</div>
js部分:
/* 基本页面布局 */
		var box = $('.box');
		var imgArr = ["image/01.jpg" ,"image/02.jpg" ,"image/03.jpg" ,"image/04.jpg" ,"image/05.jpg" ];
		var ul = $('<ul></ul>');
		var p = $('<p></p>');
		box.append(ul);
		box.append(p);
		for (var i = 0; i < imgArr.length; i++) {
			var liAndImg =(`<li><img src=${imgArr[i]} ></li>`);
			ul.append(liAndImg);
			var span = $(`<span>${i+1}</span>`);
			p.append(span);
		}
		/* ? */
		var liAndImg =(`<li><img src=${imgArr[0]} ></li>`);
		ul.append(liAndImg);
		/* 初始化指示器 */
		var allSpan = $('.box p span');
		$(allSpan[0]).addClass('active');
		/* 自动轮播 */
		var n = 0;
		var timer = setInterval(autoPaly,2000)
		function autoPaly(){
			n++;
			/* 当图片位移到第六张时 */
			if(n == imgArr.length + 1){
				/* 第六张图实际上是第一张图,所以我们将它的左边距设置为0 */
				ul.css({left:0});
				/* 第七张图从n=1开始 */
				n = 1;
			}
			ul.animate({
				left:-1000*n
			},1000)
			switchTap()
		}
		/* 鼠标事件 */
		ul.hover(function(){
			clearInterval(timer);
		},function(){
			timer = setInterval(autoPaly,2000)
		})
		/* 手动切换 */
		allSpan.click(function(){
			var index = $(this).index();
			console.log(index);
			n = index;
			ul.animate({
				left:-960 * index
			},1000)
			switchTap()
		})
		function switchTap(){
			$(allSpan).removeClass('active');
			if(n == imgArr.length){
				$(allSpan[0]).addClass('active');
			}else{
				$(allSpan[n]).addClass('active');
			}
		}
自动轮播用到了定时器setinterval
手动轮播用到了点击事件onclick
鼠标放入停止轮播用到了鼠标移入移除事件onhover
要想实现轮播效果大致为一下几点:
1、利用定时器 移动ul的left值(负数)
2、当移动到最后一张图的时候,利用css样式修改ul的left值,使其瞬间回到第一张图的位置
3、轮播中的过度效果使用了animate动画过渡效果
4、当鼠标移入关闭定时器,自动停播,当鼠标移除,开始定时器,自动开始
5、点击标识,通过span标签获取下标从而计算出ul的left值,且更改css样式

20-css3新特性

1、CSS3实现圆角(border-radius),阴影(box-shadow),
2、对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
3、transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋转,缩放,定位,倾斜
4、增加了更多的CSS选择器 多背景 rgba
5、在CSS3中唯一引入的伪类是 ::selection.
6、媒体查询,多栏布局
7、border-image
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值