刷前端面经笔记(五)

栏目: Html5 · 发布时间: 5年前

内容简介:1)数据体积方面2)数据描述方面

1.XML和JSON的区别?

1)数据体积方面

JSON 相对于 XML 来讲,数据的体积小,传递的速度更快些

2)数据描述方面

JSONJavaScript 交互更加方便,更容易解析处理,更容易交互

3)数据描述方面

JSON 对数据的描述性比 XML

4)传输速度方面

JSON 的速度要远远快于 XML

2.前端需要注意哪些SEO?

合理的 titledescriptionkeywords :搜索对着三项的权重逐个减少, title 值强调重点即可,重要关键词不要超过两次,而且要靠前,不同页面的 title 要有所不同;

description 把页面的内容高度概括,长度合适,不可过分分堆砌关键词,不同页面的 description 有所不同;

keywords 列举重要关键词即可;

// title标题
<title>标题</title>
// keywords 关键词
<meta name="description" content="关键词1,关键词2,关键词3">
// description 内容摘要
<meta name="description" content="网页的简述">

语义化的 HTML 代码,符合 W3C 规范:语义化代码让搜索引擎容易理解网页;

重要内容的 HTML 代码放在最前:搜索引擎抓取 HTML 顺序是从上到下,有的搜索引擎对抓取长度有限制,所以要保证重要内容一定会被抓取;

重要内容不要用 JS 输出:爬虫不会执行 JS 获取内容;

少用 iframe :搜索引擎不会抓取 iframe 中的内容;

非装饰性图片必须加 alt

提高网站速度:网站速度是搜素引擎 排序 的一个重要指标;

3.HTTP的几种请求方法用途?

1) GET 方法

发送一个请求来取得服务器上的某一资源

2) POST 方法

URL 指定的资源提交数据或附加新的数据

3) PUT 方法

POST 方法很像,也是想服务器提交数据。但是,它们之间有不同。 PUT 指定了资源在服务器上的位置,而 POST 没有

4) HEAD 方法

只请求页面的首部

5) DELETE 方法

删除服务器上的某资源

6) OPTIONS 方法

它用于获取当前 URL 所支持的方法。如果请求成功,会有一个 Allow 的头包含类似 “GET,POST” 这样的信息

7) TRACE 方法

TRACE 方法被用于激发一个远程的,应用层的请求消息回路

8) CONNECT 方法

把请求连接转换到透明的 TCP/IP 通道

4.如何进行网页性能优化?

1) content 方面

减少 HTTP 请求:合并文件、CSS精灵图

减少 DNS 查询:DNS缓存、将资源分布到恰当数量的主机名

减少 DOM 元素数量

2) Server 方面

使用 CDN
配置 ETag

对组件使用 Gzip 压缩

3) Cookie 方面

减少 cookie 大小

4) CSS 方面

将样式表放到页面顶部

不使用 CSS 表达式

使用 <link> 不使用 @import

5) JavaScript 方面

将脚本放到页面底部

JavaScriptCSS 从外部引入

压缩 JavaScriptCSS

删除不需要的脚本

减少 DOM 访问

6)图片方面

优化 CSS 精灵

不要再 HTML 中拉伸图片

5.语义化的理解

HTML 语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;

在没有 CSS 样式情况下也以一种文档格式显示,并且是容易阅读的;

搜索引擎的爬虫依赖于标记来确定上下文的各个关键字的权重,利于 SEO

使阅读源代码的人更容易将网站分块,便于阅读维护理解;

6.WEB标准以及W3C标准是什么

标签闭合、标签小写、不乱嵌套、使用外链 CSSJS 、结构行为表现的分离

7.说说对作用域链的理解

作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到 window 对象即被终止,作用域链向下访问变量是不被允许的;

即作用域就是变量与函数的可访问范围,即作用域控制这变量与函数的可见性和生命周期;

8.如何实现瀑布流

1)瀑布流布局的要求要进行布置的元素等宽;

然后计算元素的宽度,

与浏览器宽度之比,得到需要布置的列数;

2)创建一个数组,长度为列数,

里面的值为以已布置元素的总高度(最开始为 );

3)然后将未布置的元素的依次布置到高度最小的那一列,

就得到了瀑布流布局;

4)滚动加载, scroll 事件得到 scrollTop

与最后盒子的 offsetTop 对比,

符合条件就不断滚动加载。

瀑布流布局核心代码:

/**
 * 实现瀑布流的布局
 * @param {string}parentBox
 * @param {string}childBox
 */
function waterFull(parentBox, childBox) {
    // 1. 求出父盒子的宽度
    //  1.1 获取所有的子盒子
    var allBox = $(parentBox).
         getElementsByClassName(childBox);
    // console.log(allBox);

    // 1.2 求出子盒子的宽度
    var boxWidth = allBox[0].offsetWidth;
    // console.log(boxWidth);

    // 1.3 获取窗口的宽度
    var clientW = document.
        documentElement.clientWidth;
    // console.log(clientW);

    // 1.4 求出总列数
    var cols = Math.floor(clientW / boxWidth);
    // console.log(cols);

    // 1.5 父盒子居中
    $(parentBox).style.width = cols * boxWidth + 'px';
    $(parentBox).style.margin = '0 auto';

    // 2. 子盒子定位
    //  2.1 定义变量
    var heightArr = [], boxHeight = 0, 
        minBoxHeight = 0, minBoxIndex = 0;

    // 2.2 遍历所有的子盒子
    for (var i = 0; i < allBox.length; i++) {
        // 2.2.1 求出每一个子盒子的高度
        boxHeight = allBox[i].offsetHeight;
        // console.log(boxHeight);
        // 2.2.2 取出第一行盒子的高度放入高度数组中
        if (i < cols) { // 第一行
            heightArr.push(boxHeight);
        } else { // 剩余行的盒子
            // 2.2.3 取出数组中最矮的高度
            minBoxHeight = _.min(heightArr);
            // 2.2.4 求出最矮高度对应的索引
            minBoxIndex = getMinBoxIndex(heightArr, minBoxHeight);
            // 2.2.5 盒子定位
            allBox[i].style.position = 'absolute';
            allBox[i].style.left = minBoxIndex * boxWidth + 'px';
            allBox[i].style.top = minBoxHeight + 'px';
            // 2.2.6 更新最矮的高度
            heightArr[minBoxIndex] += boxHeight;

        }
    }
}

/**
 * 根据内容取出在数组中对应的索引
 * @param {object}arr
 * @param {number}val
 * @returns {boolean}
 */

function getMinBoxIndex(arr, val) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] === val) return i;
    }
}

/**
 * 判断是否具备加载子盒子的条件
 * @returns {boolean}
 */
function checkWillLoadImage() {
    // 1. 获取最后一个盒子
    var allBox = $('main').getElementsByClassName('box');
    var lastBox = allBox[allBox.length - 1];

    // 2. 求出高度
    var lastBoxDis = lastBox.offsetHeight * 0.5 + lastBox.offsetTop;

    // 3. 求出窗口的高度
    var clientH = document.documentElement.clientHeight;

    // 4. 求出页面滚动产生的高度
    var scrollTopH = scroll().top;

    // 5. 对比
    return lastBoxDis <= clientH + scrollTopH;
}

9.原生JS都有哪些方式可以实现两个页面间的通信?

1)通过 url 地址栏传递参数;

例如:点击列表中的每一条数据,跳转到一个详情页面,在 URL 中传递不同的参数区分不同的页面;

2)通过本地存储 cookielocalStoragesessionStorage

例如京东的登陆,把登陆后获得的页面信息存储到本地,其他页面需要用户信息的话就从本地的存储数据中获取;

3)使用 iframe

例如在 页面中嵌入 页面,在 中可以通过一些属性和实现方法和 页面的通信;

4)利用 postMessage 实现页面间的通信

例如父窗口往子窗口传递信息,子窗口往父窗口传递信息

刷前端面经笔记(五)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Webbots、Spiders和Screen Scrapers

Webbots、Spiders和Screen Scrapers

斯昆克 / 2013-5 / 69.00元

《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》共31章,分为4个部分:第一部分(1~7章),系统全面地介绍了与Webbots、Spiders、Screen Scrapers相关的各种概念和技术原理,是了解和使用它们必须掌握的基础知识;第二部分(8~16章),以案例的形式仔细地讲解了价格监控、图片抓取、搜索排名检测、信息聚合、FTP信息、阅读与发......一起来看看 《Webbots、Spiders和Screen Scrapers》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码