前端面试的葵花宝典

打算三月中旬开始找一份合适的工作,现在开始整理些面试题,也是顺便对于自己知识系统的整理

css部分

(1)css3选择器

子元素选择器:> 、 nth-child(n)、nth-of-type(n)
>比较常见,用于选择当前标签的所有子元素
:nth-of-type为什么要叫:nth-of-type?因为它是以"type"来区分的,
也就是说:ele:nth-of-type(n)是指父元素下第n个ele元素,
而ele:nth-child(n)是指父元素下第n个元素且这个元素为ele
复制代码

nth-child(n)、nth-of-type(n)区别这里附上一个小例子: 代码如下:


<ul class="demo"> 
  <p>zero</p> 
  <li>one</li> 
  <li>two</li> 
</ul> 
上面这个例子,li:nth-child(2)选择的是<li>one</li>节点
,而 li:nth-of-type(2)则选择的是<li>two</li>节点
复制代码

兄弟选择器:+和~

+用于选择当前标签后面一个同级元素

li:nth-child(2) + li{}   //选择第二个元素之后的一个同级元素
复制代码

~用于选择当前标签后面的所有同级元素

li:nth-child(2) ~ li{}   //选择第二个元素之后所有的同级元素
复制代码

(2)盒子垂直水平居中

定位

1.盒子宽高已知,position:absolute;left:50%;top:50%;margin-left:-自身一半的宽度;margin-top:-自身一半的高度
2.盒子宽高未知,position:absolute;left:0;top:0;right:0;bottom:0;margin:auto
复制代码

table-cell布局

父级
 display:table-cell;vertical-align:middle;子级 margin 0 auto;
复制代码

定位 + transform;适用于盒子宽高不定

 position:relative/absolute;left:50%;top:50%; transform: translate(-50%, -50%); 注意这里启动了3D硬件加速哦 会增加耗电量的 
复制代码

flex布局

父级:
   display: flex;align-items: center;justify-content: center;

复制代码

浏览器问题

1.同源策略与跨域

首先介绍下浏览器的策略
● 端口相同
● 域名相同
● 协议相同
复制代码

按照阮老师的说法,目前,如果非同源,共有三种行为受到限制。

Cookie、LocalStorage 和 IndexDB 无法读取。
Dom无法获取
Ajax请求
如何实现跨域,在有些必要的场合突破这些限制呢
复制代码

AJAX请求的跨域

针对AJAX请求,有两种跨域方式

  • JSONP 只支持get请求,不支持post请求;兼容性较好

  • CORS 支持所有请求;不兼容老旧浏览器

jsonp跨域

jsonp是利用script标签可以跨域访问资源的特性,在页面动态插入script标签,向服务器发出数据请求,服务器接到请求后将数据放在一个指定名字的回调函数中传回

function addScriptTag(src) {
  var script = document.createElement('script');
  script.setAttribute("type","text/javascript");
  script.src = src;
  document.body.appendChild(script);
}

window.onload = function () {
  addScriptTag('http://example.com/ip?callback=foo');
}

function foo(data) {
  console.log('Your public IP address is: ' + data.ip);
};
复制代码

cors跨域 cors请求的局限就小很多了,它是一个W3C标准,允许向跨源服务器,发起XMLHttpRequest请求。支持IE10及其以上。

整个CORS通信过程,都是浏览器自动完成,不需要用户参与。

对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信

js方面

1.数组的排序算法-冒泡排序

思想:冒泡排序思想:每一次对比相邻两个数据的大小,小的排在前面,如果前面的数比后面的大就交换这两个数的位置 要实现上述规则需要用到两层for循环,外层从第一个数到倒数第二个数,内层从外层的后面一个数到最后一个数

var times=0;  
var bubbleSort=function(arr){  
    for(var i=0;i<arr.length-1;i++){  
        for(var j=i+1;j<arr.length;j++){  
            if(arr[i]>arr[j]){//如果前面的数据比后面的大就交换  
                var temp=arr[i];  
                arr[i]=arr[j];  
                arr[j]=temp;  
            }  
        console.log("第"+(++times)+"次排序后:"+arr);  
        }  
    }   
    return arr;  
}  
console.log("The result is:"+bubbleSort(arr));  
复制代码

项目问题:

这个是最重要的感觉每次回答的都不好;实际项目中遇到的问题;

1.滚动穿透问题

滚动穿透是指在移动端当有fixed遮罩背景和弹出层时,在屏幕上滑动能够滑动背景下面的内容,原因click事件的300毫秒延迟造成的

解决方案:position:fixed
body.modal-open{
    position:fixed;
    width:100%;
}
复制代码

这种方式同样会当弹出层弹出时滚动条会丢失,所以还需要是使用js来保存滚动条的位置,在关闭弹出层时将滚动条还原

var ModalHelper = (function(bodyCls){
    var scrollTop;//在闭包中定义一个用来保存滚动条的变量
    return {
        afterOpen:function(){//在弹出之后记录保存滚动条的位置,并且给body添加,modal-open
            scrollTop = document.scrollingElement.scrollTop;
            document.body.classList.add(bodyCls);
            document.body.style.top = -scrollTop + 'px'
        },
        beforeClose:function(){//关闭时将,modal-open一处并还原之前保存的位置
            document.body.classList.remove(bodyCls);
            document.scrollingElement.scrollTop = scrollTop;
        }
    }
})('modal-open')
复制代码
移动端输入框被键盘挡住问题

由于页面没有滑动到底部: 解决方案如下

setTimeout(function(){
    document.body.scrollTop = document.body.scrollHeight;
},300);
复制代码

未完待续。。。。。等面试回来再补充

1、 JavaScript 的基本类型有哪些?引用类型有哪些?null 和 undefined 的区别?(必 会) 76 2、如何判断 JavaScript 的数据类型?(必会) JavaScript 数据类型一共有 7 种: 77 2、 创建对象有几种方法(必会) 79 4、简述创建函数的几种方式? (必会) 79 5、Javascript 创建对象的几种方式? (必会) 79 6、请指出 JavaScript 宿主对象和原生对象的区别?(必会) 81 7、 JavaScript 内置的常用对象有哪些?并列举该对象常用的方法?(必会) 82 8、 === 和 ==的区别?(必会) 87 9、 null,undefined 的区别(必会) 88 10、JavaScript 中什么情况下会返回 undefined 值?(必会) 88 11、如何区分数组和对象?(必会) 89 12、怎么判断两个对象相等?(必会) 89 13、列举三种强制类型转换和两种隐式类型转换?(必会) 91 14、 JavaScript 中怎么获取当前日期的月份?(必会) 91 15、 什么是类数组(伪数组),如何将其转化为真实的数组?(必会) 92 16、如何遍历对象的属性?(必会) 92 17、src 和 href 的区别是?(必会) 94 18、如何使用原生 JavaScript 给一个按钮绑定两个 onclick 事件?(必会) 95 19、 如何在 JavaScript 中比较两个对象?(必会) 95 20、JavaScript 中的作用域、预解析变量声明提升? (必会) 97 21、变量提升函数提升的区别?(必会) 99 22、 什么是作用域链?(必会) 99 23、如何延长作用域链?(必会) 99 23、 判断一个值是什么类型有哪些方法?(必会) 100 25、JavaScript 变量按照存储方式区分为哪些类型,并描述其特点?(必会) 100 26、如何实现数组的随机排序?(必会) 100 27、 Function foo() {}和 var foo = function() {}之间 foo 的用法上的区别?(必会) 101 28、索引有哪几种类型,有什么区别?(了解) 102 29、简述 Array.form 和 Array.of 的使用及区别?(了解) 103 30、根据你的理解,请简述 JavaScript 脚本的执行原理(了解) 104 WebAPI 105 1、 什么是 dom?(必会) 105 2、dom 是哪种基本的数据结构?(必会) 105 3、 dom 操作的常用 api 有哪些?(必会) 105 4、 dom 节点的 Attribute 和 Property 有何区别?(必会) 106 5、dom 结构操作怎样添加、移除、移动、复制、创建和查找节点?(必会) 106 6、dom 事件的级别?(必会) 107 7、dom 事件模型?(必会) 107 8、dom 事件流?(必会) 107 9、什么是事件冒泡,它是如何工作的?如何阻止事件冒泡?(必会) 108 10、JavaScript 动画和 CSS3 动画有什么区别?(必会) 108 11、event 对象的常见应用?(必会) 109 12、自定义事件/ 模拟事件?(必会) 109 13、通用事件绑定/ 编写一个通用的事件监听函数?(必会) 110 14、dom 和 bom 的区别(必会) 111 15、事件三要素(必会) 111 16、事件执行过程(必会) 111 17、获取元素位置(必会) 112 18、封装运动函数(必会) 112 19、绑定事件和解除事件的区别(必会) 113 20、谈谈事件委托的理解?(必会) 114 21、 JavaScript 中的定时器有哪些?他们的区别及用法是什么?(必会) 114 22、比较 attachEvent 和 addEventListener?(必会) 115 23、document.write 和 innerHTML 的区别?(必会) 115 24、 什么是 window 对象?什么是 document 对象?(必会) 116 25、Js 拖动的原理?(必会) 118 26、描述浏览器的渲染过程,DOM 树和渲染树的区别(必会) 119 27、dom 树和 render 树之间的关系?(高薪常问) 119 28、获取到页面中所有的 CheckBox 怎么做(不适用第三方框架)?(高薪常问) 119 29、 简单说一下页面重绘和回流?(高薪常问) 119 30、如何最小化重绘(repaint)和回流(reflow)(高薪常问) 120 31、Js 延迟加载的方式有哪些?(了解) 120 32、IE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值