网易老陈大前端高薪就业

十二,数组元素的字符串化
答案:
arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。

let NumberLists = [10,5,30,25,1000,1,6];
NumberLists.join(","); //输出结果 “10,5,30,25,1000,1,6”
十三,将字符串分割成数组
答案:
split()方法,用于把一个字符串分割成数组。

split(“s”,“d”),
s代表字符串或正则表达式,从该参数指定的地方分割。
d代表返回的数组的最大长度,返回的长度不会多余这个值得长度
看例子:
var str=“How are you doing today?”
str.split(" ")
[“How”, “are”, “you”, “doing”, “today?”]
十四,编写一个方法,去掉一个数组的重复元素(有多种后期不断更新)
第一种方法:/使用indexof()如果检索到值则返回1,如果检测不到则返回-1,的方法,和push()向数组的末尾添加一个或多个元素的方法。

var arr = [1,1,1,2,2,3,45,45,65,76]
function quchong(){
//new一个新的数组来存放去重后的数组
var newarr = [];
//循环遍历需要去重的数组,如果数组中中已有值,就继续循环,如果没有值就添加到新的数组中
for(var i = 0;i<arr.length;i++){
if(newarr.indexOf(arr[i])==-1){
newarr.push(arr[i]);
}
}
document.write(newarr)
}
quchong(arr);
第二种方法双重循环,每次比较与他相邻的数,如果有相等的就删除相等的那个,如果不相等就继续循环。不做操作

var arr = [1,23,43,54,1,32,43,54,54,32]
//循环遍历这个数组中每一个数然后与他相邻的数做比较,
for (var i = 0; i < arr.length; i++) {
for (var a = i + 1; a < arr.length; a++) {
if (arr[i] === arr[a]) {
arr.splice(i, 1);
i–;
}
}
}
js比较两个数组对象,取出不同的值

var array1 = [ {“Num”: "A " },{“Num”: “B” }];
var array2 = [ {“Num”: "A ",“Name”: "t1 " }, {“Num”: “B”,“Name”: “t2”}, {“Num”: "C " ,“Name”: "t3 "}];
var result = [];
for(var i = 0; i < array2.length; i++){
var obj = array2[i];
var num = obj.Num;
var isExist = false;
for(var j = 0; j < array1.length; j++){
var aj = array1[j];
var n = aj.Num;
if(n == num){
isExist = true;
break;
}
}
if(!isExist){
result.push(obj);
}
}
console.log(result);
十五,JS创建函数的方法
答案:
(1)声明函数:function name(){}
(2)匿名函数:function(){} 首先创建一个变量,变量是一个没有名字的函数
(3) 具名函数:首先创建一个变量,变量时一个有名的函数,var a = function bb(){}
(4)构造函数 new function
(5)立即函数(自动执行函数) 有四种写法:

1, (function(){})() 2, (function(){} ()) 3 !function(){}() 4 void function()
十六,http请求状态码?也就是常见的HTTP协议状态?
答案:

200 请求成功,
4开头的是前端(客户端)的错误
400 错误的请求(bad request)
404 not found 未找到 页面未响应,
403服务器了解客户的请求,但是拒绝处理
5开头的一般是服务器的事
500服务器内部错误 不能发完成客户的请求
502 服务器作为网关或者代理收到了无效的响应
503 service unavailable 服务不可用 服务器由于维护或 者负载过重未能应答。
十七,编写一个方法 ,写出系统时间,年/月/日/时/分/秒/
答案

var time = new Date();
var xitongshijian = time.tolocalestring(); // 得到本地的系统时间
十八,谈谈你对This对象的理解?
1、this总是指向函数的直接调用者(而非间接调用者);
2、如果有new关键字,this指向new出来的那个对象;
3、在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象
Window;
看看下边几个例子,或许可以更好的理解this对象
this的指向

this表示当前对象,this的指向是根据调用的上下文来决定的,默认指向window对象
全局环境
全局环境就是在里面,这里的this始终指向的是window对象,

指向window对象

局部环境

在全局作用域下直接调用函数,this指向window

对象函数调用,哪个对象调用就指向哪个对象

<input type="button"id=“btnOK” value=“OK”>

使用 new 实例化对象,在构造函数中的this指向实例化对象。

使用call或apply改变this的指向

十九,请用js写一个判断某个字符在该字符串中出现了几次?
答案:

//经测试好使。

about at Ajax , HTTP协议

一,.Ajax 是什么? Ajax的工作原理是什么?Ajax的优缺点是什么?
答案:

Ajax其核心有 JavaScript、XMLHTTPRequest、DOM对象组成,通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据。是一种创建交互式网页应用的网页开发技术。
(1)使用XMLHttpRequest对象与Web服务器进行异步数据通信。
(2)使用Javascript操作Document Object Model进行动态显示及交互。
(3)使用JavaScript绑定和处理所有数据。
Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给 Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。
优点
(1)可以实现异步通信效果,实现页面局部刷新,带来更好的用户体验;按需获取数据,节约带宽资源。
(2)前端和后端负载平衡
(3)界面与应用分离。

缺点
<1>.AJAX干掉了Back和History功能,即对浏览器机制的破坏。
<2>.AJAX的安全问题。
<3>.对搜索引擎支持较弱。
<4>.破坏程序的异常处理机制。
<5>.违背URL和资源定位的初衷。
<6>.AJAX不能很好支持移动设备。
<7>.客户端过肥,太多客户端代码造成开发上的成本。

二.简述ajax 的过程。
答案:
(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
(3)设置响应HTTP请求状态变化的函数
(4)发送HTTP请求
(5)获取异步调用返回的数据
(6)使用JavaScript和DOM实现局部刷新

三,请简述ajax中get()和post()的区别
(1)get请求,参数会显示在url中,将参数添加在请求的url路径后面,进行传参,(受url的限制)发送的数据量小,会被客户端的浏览器缓存起来,会带来严重的安全问题,一般在获取数据时使用get。
(2)post请求,需要添加HTTP请头,来发送到服务器,传送得数据量大,一般在上传数据时使用post。

区别一:get重点在从服务器上获取资源,post重点在想服务器发送数据;
区别二:get传输数据是通过URL请求,以filed(字段)=value的形式,置于URL后,并用"?"连接,多个请求数据之间用
"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的
区别三:get传输量小,因为受URL长度限制,但效率较低
post可以传输大量数据,所以上传文件时只能用post方式
区别四:get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等
post较get安全

四,什么是HTTP协议?
答案:
超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

五,请说一下从输入 URL到加载出页面过程中都发生了什么?(问这个问题首先会考察你对HTTP协议的理解,而来知道你知识的深度以及扩展面)
答案:

step1,输入URL,
step2,浏览器查找域名的IP地址
step3,查找完成之后浏览器向web服务器发送一个HTTP请求,
step4,服务器的永久重定向相应
step5,浏览器跟踪重定向地址
step6,服务器处理请求
step7,服务器返回一个http响应。
step8,浏览器显示HTML
step9,浏览器发送异步请求
六,浏览器是如何渲染页面的?
答案:

step1,解析HTML文件,创建DOM树(自上而下的创建),
step2,解析CSS,解析的优先级(浏览器默认––内联样式–行内标签)
step3,将CSS与DOM合并,构建渲染树,(Render Tree)
step4,布局与绘制,重绘(repaint)与重排(reflow)
接下来聊一聊常见的跨域问题。

一,说一下什么是跨域?为什么会出现跨域问题?
答案:

跨域,指的是浏览器不能执行其他网站的脚本.
出现跨域问题是因为受浏览器的同源策略(下边会有介绍)的影响,是浏览器对[JavaScript])施加的安全限制。出现跨域主要是为了用户的上网安全。
二,什么是同源策略?
答案:
浏览器只允许访问同一协议,域名,端口相同的网页。

三,解决跨域的几种办法?
答案:

CORE跨域资源共享cross-origin-resource-sharing
服务器端对于 CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问–也就是常说的服务器加请求头。
不过后台用了spring boot 加一个注解就好了。框架里边自带的@CrossOrigin
JSONP解决跨域
原理:借助不受同源策略的影响进行数据请求。动态插入script标签,通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。注意,只支持GET请求不过兼容性比较好,无法判断请求是否失败,安全性不高。
js原生写法的JSONP

Jquery版本的jsonp
KaTeX parse error: Expected '}', got '&' at position 110: …her?output=json&̲ak=0A5bc3c4fb54…("#city").val()||“上海”
},
dataType:“jsonp”,
success: function (data) {
//渲染模版
var html = template(‘template’,{list:data.results[0].weather_data})
$(‘tbody’).html(html);
}
});
现在衍生出来的vue-cli脚手架项目里的Npm模块http-proxy-middleware也可以解决跨域,详细的教程请看Vue面试题详解

再者谈谈经常遇到的问题,多数情况下只是理解他的解释,但并未实际理解,也就是做题做不出来,自己写也写不好的那种,还是需要好好理解理解。

一,什么是闭包?谈谈你对闭包的了解?
答案:

闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。

函数内部可以直接读取全局变量,但在函数外部无法读取到内部的变量,(定义在一个函数内部的函数),闭包是反垃圾回收机制的,这就是所谓的作用链域,闭包的特性是私有性,这种特性是闭包得变量存在内存中,内存消耗很大,造成网页性能问题,(在ie中会造成内存泄漏问题)在退出函数之前将全部变量清除。私有化变量
回答重点的四句话:
1,作用链域(子对象一级一级向上寻找父对象的变量,父对象的所有变量对子对象是可见的,反之不成立)
2,垃圾回收机制(违背)
3,私有化变量
4, 闭包会在父函数外部改变父函数内部变量的值
二,什么是垃圾回收机制?
答案:

javascript具有自动垃圾回收机制,执行环境会负责管理代码执行过程中使用的内存。原理就是找出那些不再继续使用的变量,然后释放其占有内存。
找出程序中不在使用的变量,然后释放掉其占用的内存,垃圾回收机制会按照固定的时间周期来执行。不在使用的变量是局部变量,(生命周期结束的变量),全局变量的生命周期只有在浏览器页面关闭后才会结束。
垃圾回收机制的好处和坏处
好处:大幅简化程序的内存管理代码,减轻程序猿负担,并且减少因为长时间运转而带来的内存泄露问题。
坏处:自动回收意味着程序猿无法掌控内存。ECMAScript中没有暴露垃圾回收的借口,我们无法强迫其进行垃圾回收,更加无法干预内存管理。
三,Javascript作用链域?
答案:
当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,直至全局函数,这种组织形式就是作用域链。
全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。

JS面向对象,创建对象,事件委托,原型链,前端性能优化等的有关的问题

一,Javascript面向对象?
答案:
一切事物皆对象
对象具有封装和继承特性
JavaScript 语言是通过一种叫做 原型(prototype)的方式来实现面向对象编程的
基于原型的面向对象方式中,对象(object)则是依靠 构造器(constructor)利用 原型(prototype)构造出来的。然而原型方式中的构造器 (constructor) 和原型 (prototype) 本身也是其他对象通过原型方式构造出来的对象。

二,Javascript原型链?
答案:回答重点
在调用某个对象的属性或方法时,js引擎会优先在该对象自身上查找该属性或方法,如果没有便去该对象的构造函数中去查找,如此逐级递归的查找,直到原型链的顶端,(向上一级一级查找)

三,Javascript创建对象的几种方式?
答案:

1、对象字面量的方式
    person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};

2、用function来模拟无参的构造函数
    function Person(){}
    var person=new Person();//定义一个function,如果使用new"实例化",该function可以看作是一个Class
    person.name="Mark";
    person.age="25";
    person.work=function(){
    alert(person.name+" hello...");
    }
    person.work();

3、用function来模拟有参构造函数来实现(用this关键字定义构造的上下文属性)
    function Pet(name,age,hobby){
       this.name=name;//this作用域:当前对象
       this.age=age;
       this.hobby=hobby;
       this.eat=function(){
          alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
       }
    }
    var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
    maidou.eat();//调用eat方法

4、用工厂方式来创建(内置对象)
     var wcDog =new Object();
     wcDog.name="旺财";
     wcDog.age=3;
     wcDog.work=function(){
       alert("我是"+wcDog.name+",汪汪汪......");
     }
     wcDog.work();

5、用原型方式来创建
    function Dog(){
     }
     Dog.prototype.name="旺财";
     Dog.prototype.eat=function(){
     alert(this.name+"是个吃货");
     }
     var wangcai =new Dog();
     wangcai.eat();

6、用混合方式来创建
    function Car(name,price){
      this.name=name;
      this.price=price;
    }
     Car.prototype.sell=function(){
       alert("我是"+this.name+",我现在卖"+this.price+"万元");
      }
    var camry =new Car("凯美瑞",27);
    camry.sell();

四,浅谈前端性能优化的问题?
这里我简单列出一部分,详情请移步前端小白浅谈seo优化以及web性能优化方案
答案:

step1,使用CDN加速,
step2,静态资源的压缩合并,
step3,减少HTTP请求,
step4,尽可能的减少DOM操作,
step5,由于浏览器渲染机制的影响,JS,CSS文件放在页面最底部
step6,使用懒加载,
step7,使用浏览器缓存,本地存储,减少请求数量
step8,使用SSR(server side rendering)后端渲染,数据直接输出到HTML
step9,项目中采用按需加载
渲染类的一些方法:
step1,压缩图片,
step2,尽量使用CSS动画,开启GPU加速
step3,Iconfont代替图片
step4, 精简代码,压缩代码
五,DOM操作——怎样添加、移除、移动、复制、创建和查找节点?
(1)创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
(2)添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子节点前插入一个新的子节点
(3)查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
getElementById() //通过元素Id,唯一性
结束语
每天进步一点

猜你喜欢

转载自blog.csdn.net/lsttwo/article/details/113060433