面试基础(2018-03-16)

1、 Doctype作用?标准模式与兼容模式各有什么区别?

1、声明位于位于HTML文档中的第一行,处于 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
2、标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行); 而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

2、 viewport

<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">

width:设置viewport的宽度,值为正整数或者device-width(设备宽度);
initial-scale:设置默认缩放比例;
minimum-scale:允许用户缩放的最小比例;
maximum-scale:允许用户缩放的最大比例;
user-scalable:是否允许手动缩放;
延伸提问:怎样处理 移动端 1px 被渲染成 2px 问题?
1、局部处理
meta 标签中的 viewport 属性 ,initial-scale 设置为 1rem 按照设计稿标准走,外加利用 transfrome 的 scale(0.5) 缩小一倍即可;
2、全局处理
meta 标签中的 viewport 属性 ,initial-scale 设置为 0.5rem 按照设计稿标准走即可
可能用到的meta标签:

3、 实现跨域的几种方式

同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

1、 通过jsonp跨域,原生实现:

var script = document.createElement('script');
script.type = 'text/javascript';
// 传参并指定回调执行函数为onBack
script.src = 'http://www.....:8080/login?user=admin&callback=onBack';
document.head.appendChild(script);
// 回调执行函数
function onBack(res) {
   alert(JSON.stringify(res));
}

2、nginx 代理跨域

3、nodejs 中间件代理跨域

4、后端在头部信息里面设置安全域名

4、块级元素有哪些?行内元素有哪些?空元素有哪些?

块级元素:div、ul、ol、li、dl、dt、dd、p、h1~h4
行内元素:span、img、b、strong(强调)、input、select
空元素:<br>、<hr>、<img>

5、 link和@import有什么区别?

1、link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
2、页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
3、import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;

6、HTML语义化的理解?

用正确的标签做正确的事情。html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解

7、 cookies,sessionStorage 和 localStorage 的区别?

cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。存储大小: cookie数据大小不能超过4k。 sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。有期时间: localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据; sessionStorage 数据在当前浏览器窗口关闭后自动删除。 cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。

8、如何实现浏览器内多个标签页之间的通信? (阿里)

WebSocket、SharedWorker;也可以调用localstorge、cookies等本地存储方式;localstorge另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,我们通过监听事件,控制它的值来进行页面信息通信;注意quirks:Safari 在无痕模式下设置localstorge值时会抛出 QuotaExceededError 的异常;

9、介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

1、有两种, IE 盒子模型、W3C 盒子模型;
2、盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);
3、区 别: IE的content部分把 border 和 padding计算了进去;

10、 CSS选择符有哪些?哪些属性可以继承?

1.id选择器( # myid)
 2.类选择器(.myclassname)
 3.标签选择器(div, h1, p)
 4.相邻选择器(h1 + p)
 5.子选择器(ul > li)
 6.后代选择器(li a)
 7.通配符选择器( * )
 8.属性选择器(a[rel = "external"])
 9.伪类选择器(a:hover, li:nth-child)

可继承的样式: font-size font-family color, UL LI DL DD DT;
不可继承的样式:border padding margin width height ;

11、CSS优先级算法如何计算?

优先级就近原则,同权重情况下样式定义最近者为准;载入样式以最后载入的定位为准;

!important > id > class > tag
important 比 内联优先级高

12、CSS3新增伪类有那些?

p:first-of-type 选择属于其父元素的首个元素的每个元素。
p:last-of-type 选择属于其父元素的最后元素的每个元素。 

p:only-of-type 选择属于其父元素唯一的元素的每个元素。
p:only-child 选择属于其父元素的唯一子元素的每个元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每个元素。
:after 在元素之前添加内容,也可以用来做清除浮动。
:before 在元素之后添加内容
:enabled
:disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中。

13、 css定义的权重

以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:
/*权重为1*/
div{}
/*权重为10*/
.class1{}
/*权重为100*/
#id1{}
/*权重为100+1=101*/
#id1 div{}
/*权重为10+1=11*/
.class1 div{}
/*权重为10+10+1=21*/
.class1 .class2 div{}

14、介绍js的基本数据类型。

Undefined、Null、Boolean、Number、String

15、js有哪些内置对象?

Object 是 JavaScript 中所有对象的父对象
数据封装类对象:Object、Array、Boolean、Number 和 String其他对象:Function、Arguments、Math、Date、RegExp、Error

16、 JavaScript原型,原型链 ? 有什么特点?

每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。关系:instance.constructor.prototype = instance.__proto__

特点:JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。

当我们需要一个属性的时,Javascript引擎会先看当前对象中是否有这个属性, 如果没有的话, 就会查找他的Prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。 function Func(){} Func.prototype.name = "Sean"; Func.prototype.getInfo = function() { return this.name; } var person = new Func();//现在可以参考var person = Object.create(oldObject); console.log(person.getInfo());//它拥有了Func的属性和方法 //"Sean" console.log(Func.prototype); // Func { name="Sean", getInfo=function()}

17、JavaScript有几种类型的值?,你能画一下他们的内存图吗?

栈:原始数据类型(Undefined,Null,Boolean,Number、String) 堆:引用数据类型(对象、数组和函数)两种类型的区别是:存储位置不同;原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体


18、Javascript如何实现继承?

1、构造继承2、原型继承3、实例继承4、拷贝继承原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。
 function Parent(){
                 this.name = 'wang';
         }
         function Child(){
                 this.age = 28;
         }
         Child.prototype = new Parent();//继承了Parent,通过原型
         var demo = new Child();
         alert(demo.age);
         alert(demo.name);//得到被继承的属性
 }

19、eval

它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')');

20、 js常会问的问题:找出字符串中出现次数最多的字符。

let testStr = 'asdasddsfdsfadsfdghdadsdfdgdasd';

        function getMax(str) {

            let obj = {};

            for(let i in str) {

                if(obj[str[i]]) {

                    obj[str[i]]++;

                }else{

                    obj[str[i]] = 1;

                }

            }

            let keys = Object.keys(obj); // 获取对象中所有key的值返回数组

            let values = Object.values(obj); // 获取所有value返回数组

            let maxVal = Math.max(...values);// Math.max可以找出传入参数的最大值,如:Math.max(1,2);这里可使用es6中的解构,

        也可以使用Math.max.apply(Math,values)可认为是apply(Math.max, arr)

        然后,arr是一个参数列表,对于max方法,其参数是若干个数,即Math.max(a, b, c, d, ...)

            console.log(keys[values.indexOf(maxVal)],maxVal);

        }

        getMax(testStr);

// obj值:{a: 5, s: 7, d: 12, f: 4, g: 2,  h: 1, s: 7,}

keys[values.indexOf(maxVal)] => value里面最大的数字的位置,最大数字位置对应的key。

maxVal最大的数,也就是出现做多的次数。str[i]是对应字符串中的第i个字符,obj[str[i]] 就是对应的每个字母for循环就是把里面出现了的字母作为obj这个对象的key,然后循环的时候判断obj里面有没有以str[i]为key的对象,如有,就把它的value加一,说明这个字母在obj中出现的次数多了一次;刚开始i是键名,str[i]是键值,用这个键值再做obj的键名,然后赋值,或累加

eg:
obj[str[i]] = 1;  =>  var obj={};obj.aa = 1;console.log(obj)

//正则

let stringMax = (str) => {

            str = str.split('').sort().join('');

            var s = str.match(/(\w+)(\1)/g);

            if(s === null) {

                return str[0];

            }

            s = s.map(e => e=e+e[0]);

            var out = s.sort((a,b) =>b.length - a.length);

            console.log(out[0][0],out[0].length);

        };

        stringMax(testStr)

30、渲染优化

1.禁止使用iframe(阻塞父文档onload事件)

iframe会阻塞主页面的Onload事件;

搜索引擎的检索程序无法解读这种页面,不利于SEO;

iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。

使用 iframe 之前需要考虑这两个缺点。如果需要使用 iframe,最好是通过 javascript 动态给 iframe 添加 src 属性值,这样可以绕开以上两个问题。

2.禁止使用gif图片实现loading效果(降低CPU消耗,提升渲染性能);

3、使用CSS3代码代替JS动画(尽可能避免重绘重排以及回流);

4、对于一些小图标,可以使用base64位编码,以减少网络请求。但不建议大图使用,比较耗费CPU;

小图标优势在于:

1.减少HTTP请求;

2.避免文件跨域;

3.修改及时生效;

5、页面头部的 会阻塞页面;(因为 Renderer进程中 JS线程和渲染线程是互斥的);

6、页面头部 会阻塞页面;(因为 Renderer进程中 JS线程和渲染线程是互斥的);

7、页面中空的 href 和 src 会阻塞页面其他资源的加载 (阻塞下载进程);

8、网页Gzip,CDN托管,data缓存 ,图片服务器;

9、前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

10、用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

11、当需要设置的样式很多时设置className而不是直接操作style。

12、少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

13、避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。

14、图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。

15、 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。

对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。 向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法"优化"的。

31、快速的让一个数组乱序

var arr = [1,2,3,4,5,6,7,8,9,10];
arr.sort(function(){  
     return Math.random() - 0.5;
})
console.log(arr);

32、 字体font-family

@ 宋体      SimSun

@ 黑体      SimHei

@ 微信雅黑   Microsoft Yahei

@ 微软正黑体 Microsoft JhengHei

@ 新宋体    NSimSun

@ 新细明体  MingLiU

@ 细明体    MingLiU

@ 标楷体    DFKai-SB

@ 仿宋     FangSong

@ 楷体     KaiTi

@ 仿宋_GB2312  FangSong_GB2312

@ 楷体_GB2312  KaiTi_GB2312  @

@ 说明:中文字体多数使用宋体、雅黑,英文用Helvetica

body { font-family: Microsoft Yahei,SimSun,Helvetica; }

33、消除 transition 闪屏

css {    -webkit-transform-style: preserve-3d;    -webkit-backface-visibility: hidden;    -webkit-perspective: 1000;

}

过渡动画(在没有启动硬件加速的情况下)会出现抖动的现象, 以上的解决方案只是改变视角来启动硬件加速的一种方式;启动硬件加速的另外一种方式:

.css {    -webkit-transform: translate3d(0,0,0);    -moz-transform: translate3d(0,0,0);    -ms-transform: translate3d(0,0,0);    transform: translate3d(0,0,0);

}

启动硬件加速

最常用的方式:translate3d、translateZ、transform

opacity 属性/过渡动画(需要动画执行的过程中才会创建合成层,动画没有开始或结束后元素还会回到之前的状态)

will-chang 属性(这个比较偏僻),一般配合opacity与translate使用(而且经测试,除了上述可以引发硬件加速的属性外,其它属性并不会变成复合层)。

弊端:硬件加速会导致 CPU 性能占用量过大,电池电量消耗加大 ;因此尽量避免泛滥使用硬件加速。

34、JS 判断设备来源

/ 判断移动端设备

function deviceType(){

   var ua = navigator.userAgent;

   var agent = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];

   for(var i=0; i0){        

           break;        }    }

}

deviceType();

window.addEventListener('resize', function(){    deviceType();

})

// 判断微信浏览器

function isWeixin(){    var ua = navigator.userAgent.toLowerCase();    if(ua.match(/MicroMessenger/i)=='micromessenger'){        return true;    }else{        return false;    }

}

35、 audio元素和video元素在ios和andriod中无法自动播放

原因:因为各大浏览器都为了节省流量,做出了优化,在用户没有行为动作时(交互)不予许自动播放;

//音频,写法一

<audio src="music/bg.mp3" autoplay loop controls>你的浏览器还不支持哦 </audio>

//音频,写法二

<audio controls="controls">  

    source src="music/bg.ogg" type="audio/ogg">

    source src="music/bg.mp3" type="audio/mpeg">

         优先播放音乐bg.ogg,不支持在播放bg.mp3

</audio>

//JS绑定自动播放(操作window时,播放音乐)

$(window).one('touchstart', function(){    music.play();

})

//微信下兼容处理

document.addEventListener("WeixinJSBridgeReady", function () {    music.play();

}, false);

//小结

//1.audio元素的autoplay属性在IOS及Android上无法使用,在PC端正常;

//2.audio元素没有设置controls时,在IOS及Android会占据空间大小,而在PC端Chrome是不会占据任何空间;

//3.注意不要遗漏微信的兼容处理需要引用微信JS;

36、css实现单行文本溢出显示 ...

overflow: hidden;

text-overflow:ellipsis;

white-space: nowrap;

37、实现多行文本溢出显示...

display: -webkit-box;

-webkit-box-orient: vertical;

-webkit-line-clamp: 3;

overflow: hidden;

38、让图文不可复制

-webkit-user-select: none;-ms-user-select: none;

-moz-user-select: none;

-khtml-user-select: none;

user-select: none;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容