前端面试

1.什么是跨域?如何解决跨域问题?
跨域是浏览器出于对js施加的安全限制,它保证了浏览器不能执行其他网站的脚本,是由浏览器的同源限制造成的,同源指的是协议,ip/域名,端口号都必须一致
解决方法有三种
1.更改headers请求头设置,更改为指定地址或者所有人都能访问
2.代理,我们在不跨域的情况下写接口,在后台里拿到返回值,通过该接口返回给前端
3.Jsonp的方式,它实际上是通过get方式发送一个请求,请求里包含前端 脚本里 的一个函数名,后台返回给前端的时候只需要返回这个函数名以及参数。

2.Nodejs和java的比较
首先说说我对node的理解,node.js是实际上是javascript可以在后台运行的一个环境,相当于浏览器,它里面有若干个模块,比如path模块,querystring模块,url模块,
fs模块,在nodejs中一切皆模块。Java是后台开发语言,已经火了多年了,由于本身的开源性,语言本身很强大,后台现在一般都是用java写,前端一般就是html,css,js组合使用,或者运用一些成熟的框架

3.谈谈vue和jquery的区别
先说说两者,前者是当今最火的纯前端框架,它有三个特点,数据驱动,轻量级,纯前端
它是由我国的技术大牛尤雨溪开发的,它 于其他第三方插件的组合使用也非常方便
Jquery是当前最流行的前端js库,它是对底层DOM的封装,在DOM的操作,事件的绑定,ajax前后台交互,动画上有一点的建树,但是现在这种模型驱动正逐渐被数据驱动所取代

4.谈谈对ES6的认识
Es6是对ecmascript5的革新,它在对象和函数,以及语法上有一定的扩展和简化,比如说定义了set,map两种新的存储结构,类似java中的集合,
在对象上,对Object对象,和数组方法有一些扩展,方便了我们对数组和对象的操作,在语法上,如箭头函数,let,const的使用。

5.Promise的了解
Promise是es6出现的构造函数,它的实例是一种承诺,如果成功则执行then()里的方法,如果失败则执行catch()里的方法,无论如何都会执行finally里的方法

6.前后交互的状态码
200成功发送请求到数据,304成功通过请求,但后台文件并没有改变,从缓存中取到数据。
404请求链接地址发生错误,403跨域拒绝访问,500后台代码错误,400请求发生错误,域名不存在
7.响应码
0 未初始化 1正在加载 2 已加载 3.交互中 4.完成

8.npm node的包管理工具
我们平常可以通过它现在一些模块,如npm install express ,npm install body-parser,它会到你npm注册中心去下载模块,下载到当前文件的node_modules中


9.Git版本管理工具
Git是开源的分布式版本控制系统,能够有效高速的管理项目,当多个人一起开发同一个项目时,我们只需要用git管理项目,远程服务器上也用git管理,我们通过git add *管理文件,用git commit提交项目,通过绑定远程仓库,先拉git pull origin master项目,然后处理冲突,最后我们在上传项目推git push origin master推送到远程

10.写一个回调函数
[].map((a)=>{return a;})

11.mysql数据库
sql是标准化查询语言,mysql是一种数据库管理系统,我们用它管理关系型数据库,它是免费的,我们用它来储存数据,通过mysql的语法可以实现对数据的增删改查,它的语法较为简单。
增 insert into xk_student() values(null);语法
删 delete from xk_student where id = 1;
改 update xk_student set name=1,gender=’男’ where id= 1;
查 select * from xk_student where id=1;

联合查询 select sc.*, c.* ,s.* from xk_chooseCourse as sc left join xk_student as s,xk_course as c on sc.course_id = c.id and sc.student_id = s.id;

排序 select sc.*, c.* ,s.* from xk_chooseCourse as sc left join xk_student as s,xk_course as c on sc.course_id = c.id and sc.student_id = s.id order by sc.id asc;

In select * from xk_student where id in join([1,2]) ;
Like select * from xk_student where name like %keys%;

12.手写jsonp
<javascript src=”http://127.0.0.1:3000/jsonp?callback=handler&name=’larry’”><javascript>
<Javascript>
Function handler(data){
Console.log(data);
}
<javascript>

Var router = express.Router();
Router.get(‘’,function(req,res){
Var handler= req.query.callback;
Res.send(handler”(‘“+”我是后台”+”’)”;);
});

13.数组的方法 18
查询索引 indexOf() lastIndexOf();
序列化方法 join() toString();
栈与队列方法 pop();取栈顶元素,返回值为栈顶; push()压栈方法 shift();取队列元素, unshift();插入元素到队列,可插入多个
迭代方法 map(); forEach(); every(); some(); filter();
拼接方法 concat(); slice(); splice();
排序方法 reverse(); sort();

14.string实例方法 15
查询方法 indexOf(); lastIdexOf(); charAt(); charCodeAt();
拼接方法 concat(); slice(); substr(); subString(); trim();
正则相关的方法 search(); split(); match(); replace();
转为大写小写 toUpperCase(); toLowerCase();

正则表达式 ^ $ \d \s \w . *多次 + ? g全局匹配 i会忽略大小写 [a-z]字符匹配 {n,}
身份证:340421199604246013 六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码
^[1-9]\d{5}(18|19|20)\d{2}((0[0-9]{1})|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9xX]$

15.事件三要素
事件源 ,事件对象event,事件处理函数

16.事件代理
利用事件的冒泡机制,将多个子元素上的事件绑定在父元素上,当子元素触发事件的时候,父元素也会发生事件,然后父元素处理事件,来解决多个子元素的绑定问题,如果想找到真正的事件对象只需要event.target;

17.onclick 事件
在Dom0级中只需要在标签中<div onclick="handler()"></div>或者$div.onclick=function(){alert(1);}
在Dom2级中 ie attachEvent('onclick'); detach('onclick');
w3c addEventListen('click',function(){},boo); removeEventListen('click');
jquery $().click();
$().on('click',function(){})
$().bind('click',function(){});
$().submit() $().onchang $.load();

Vue: @click="handler"
new Vue({
el:'#app',
methods:{
handler:function(){

}
}
})

18.let暂时性死区和块级作用域
块级作用域:if(){
let a = 1; //a只在大括号内有效
}
Console.log(a);

不存在变量的提升,所有一定要先声明后使用

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
var temp=0;
if(1){
temp = 1;
let temp;
}

不允许重复的声明

19. 实现深拷贝的方法
DOM div.cloneNode();克隆节点,参数为true,深度复制,克隆所有子节点和后代节点
jquery $().clone();//true克隆所有的事件处理

20. 类数组有哪些
arguments实参对象 jquery包装集

21.for in的缺点
可以遍历对象和数组
for(key in obj){
console.log(obj[key]);
}
不能找到对象的隐藏属性

22.原型链继承
很早之前js被认为是一种基于对象的语言,原因是它没有继承多态的特点,而现在普遍认为它是面向对象的,因为它可以定义构造函数,构造函数可以产生实例,
实例不仅可以调用自己的方法,也可以调用构造函数原型中的方法。构造函数可以通过prototype访问原型,原型函数可以通过constructor访问构造函数;
实例中也会有一个__proto__属性访问原型

23.Dom中如何获取节点,操作节点,
doucument.getElementById();
doucument.getElementsByTagName(); 标签名
doucument.getElementsByClassName(); 类名
doucument.getElementsByName(); 表单
document.
parent();父节点
nextElementsibling();下一个兄弟节点
previousElementsibling();下一个兄弟节点
children() 孩子节点;

24.Dom访问元素内容
div.innerHTML
div.innerText

25.Dom访问属性
div.setAttribute();
div.getAttribute();
div.removeAttribute();


26.jquery的操作元素

27.ajax交互 jquery

28.ajax交互 axios

29.node的http模块

30.express模块

31.webpack主要解决了什么问题,有哪些优点

32.vue-router
页面内路由
33.vuex
状态管理机制

34.new发生了什么和this对象的指向类别
new 执行构造函数,返回一个实例对象,
this指向调用当前函数执行的对象,只和调用方式有关

35.apply和call
apply接受两个参数,第一个参数为一个对象,指定调用该函数的对象,而第二个参数为一个实参数组
call接受多个参数,第一个参数为一个对象,指定调用该函数的对象,其他参数为实参列表
两者都可以用于函数的调用

36.cookie和sessionStorage、localStorage的区别

1)存储空间不同 。
a)      Web Storage 能提供 5MB 的存储空间(不同 浏览器 的提供的空间不同)
Cookie 仅 4KB 。
b)      Web Storage 每个域(包括子域)有独立的存储空间,各个存储空间是完全独立的,因此不会造成数据混乱。
2)      与服务器交互 。
Web Storage 中的数据则仅仅是存在本地,不会与服务器发生任何交互。
Cookie 的内容会随着请求一并发送的服务器(带宽浪费)。

3)      接口 。
Web Storage 提供更多丰富易用的接口,拥有 setItem , getItem , removeItem , clear 等方法,操作数据更方便。
Cookie 需要前端开发者自己封装 setCookie , getCookie 。

4)跨域问题 。
cookie 需要指定作用域,不可以跨域调用。
 
说明: Cookie 也是不可以或缺的: Cookie 的作用是与服务器进行交互,作为 HTTP 规范的一部分而存在 ,而 Web Storage 仅仅是为了在本地“存储”数据而生。

37.什么是标签语义化
所谓标签语义化就是,标签的名称实际上代表标签的意义,例如strong标签就是粗体强调,em就是斜体强调,
经可能少的使用无意义的标签,如div,span,而使用有意义的标签,如header,nav代替
而在H5中语义化更加明显比如header标签,nav标签,使得代码结构清晰,更容易被搜索引擎抓取

38.es语法,对象的合并
Object.assign();
两个参数时,第一个为空,相当于拷贝出一个新对象,多个参数时,将后面的属性合并到第一个对象中,第一个对象也可以提供一些默认值

39.什么是mvvm,mvc
mvc模型-视图-控制器的简写,模型对象负责在数据库存储数据,视图是数据在应用程序的显示部分,使用mvc的目的是将m和v的目的代码分离开来,从而实现同一个程序有不同的表现形式,而控制器的目的是确保二者的同步
mvvm可以说是wpf版的mvp,使用此模式可以将ui和业务逻辑分离开来,ViewModel层的主要责任是表现逻辑和状态。即ViewModel层是连接View层和Model层的。Model层的一些业务逻辑的状态是需要通过ViewModel层暴露给View层来反映给软件使用者的。

40.webpack为什么要有加载器
把其他的文件资源转为模块,webpack默认只能将js文件当作模块处理,而对于css,图片,vue文件,不能当作模块处理,所以需要加载器

41.css动画
transition过度效果

animation 定义动画如:@keyframes name{
form{} 0%{}
to{} 100%{}
}
使用动画 animation:
animation-name: 动画名称
animation-duration infinite无限次
animation-timing-function 速度 ease linear
animation-delay 延迟
animationp-iteration-count 次数
animation-direction 方向
42.组件通信
父组件向子组件传值
props:['list']期待收到list
v-bind:list="students" 传值

子组件向父组件发射
this.$emit('counter','param'); 发射
@counter='handler' 接收

43.sql中聚集函数
avg() sum() max() min() count();

44.简述px,em,rem的区别
px 像素,相对屏幕分辨率,
em 相对于父元素的大小,一般em用来设置字体大小,在移动端使用广泛
rem 和em类似,相对于根元素的大小
百分比 有一定的响应性

45.post和get方式
get方式请求的数据附着在地址栏,形成查询字符串,浏览器对其有一定长度限制,安全性低。
post方式,请求的数据包含在请求体中,数据大小没有限制,安全性也更高。
两者在后台中数据的获取方式自然也不一样。

46.考验new关键字 ,this
function fn() {
this.a = 0;
this.b = function() {
alert(this.a)
}
//d=
}
fn.prototype = {
b: function() {
this.a = 20;
alert(this.a);
},
c: function() {
this.a = 30;
alert(this.a);
}
}
var myfn = new fn();
myfn.b();
myfn.c();
0,30
47.考验this
var length = 5;
function fn(){
console.log(this.length);
};
var obj = {
length: 3,
method: function(fn) {
fn();
arguments[0](); [fn]
console.log('a'+this.length);
}
};
obj.method(fn);
var arr= [fn,1,fn,3,fn,5,fn,7,fn];
arr[4]();
数组里的函数在调用时,this指向数组,对象里的函数在调用时,this指向对象;
虚拟dam渲染
MVVM模型
双向绑定
单向数据流

 

上一篇:spring boot 采坑


下一篇:深度解析vue.js响应式原理解析与实现