今日头条前端面试总结

1.行标签都有哪些?特点?
img、span、a、sub、sup、em、i、b、strong

设置width、heigh不起作用

margin、padding垂直方向不起作用,水平方向上有效

2.img标签
因为上面说了行元素设置宽高是不起作用的,所以才会被问到这个,我就解释了为什么它是行元素,因为在使用中,img元素中包含图片的话,它是按照一行排列的,下面的内容是我之后查阅得到的:

img元素是可替换内联元素,可替换就是浏览器根据元素的标签和属性,来决定元素的具体显示形式,img、input、textarea、select、object都是替换元素,替换元素一般有内在尺寸,所以具有width/height,可以设定,当不指定img的width和height的时候,就按照其内在尺寸显示,也就是图片被保存的时候的宽度和高度

参考这里

3.实现一个响应式的正方形
刚开始我答的是width、height设置为百分比,或者用em、rem这样的单位

然后面试官说的是,里面是有内容的,这样子呈现出正方形,哦,看来刚开始被自己想的拐跑了,然后我就想到了flex,flex中的项目的排列方式设置一下

4.跨域
跨域这个问题,jsonp、domain、webSocket、CORS(请求头Origin字段,服务器判断,返回三个Accept-control-*字段)

5.缓存了解吗?
跟缓存相关的HTTP请求头中有三个字段:Cache-control、Expires(指定具体过期日期)、Last-Modified(验证资源是否过期)。

关于优先级,Cache-Control比Expires可以控制的多一些, 而且Cache-Control会重写Expires的规则Cache-Control比Expires可以控制的多一些, 而且Cache-Control会重写Expires的规则,Cache-Control是关于浏览器缓存的最重要的设置,因为它覆盖其他设置,比如 Expires 和 Last-Modified

Mainfest可以缓存一个应用,pwa中有Mainfest和Service Worker可以实现缓存

参考这里

6.XSS是什么说一下?
跨站脚本攻击,这些可执行的脚本由攻击者提供,最终为用户浏览器加载,不同于大多数攻击,有存储型和反射型,防御方式,编码,过滤,解码

7.CSRF了解吗?
跨站请求伪造(攻击者盗用你的身份,以你的身份发送恶意请求),一次CSRF攻击的步骤:

登录受信任的网站A,并在本地生成cookie
在不登出A的情况下,访问危险网站B
防御的方法:

总的思想在客户端页面增加伪随机值

Cookie Hashing 所有的表单都包含一个伪随机值
验证码
不同的表单包含一个不同的伪随机值
8.一个列表,假设有100000个数据,这个该怎么办?
刚开始想到的就是分页的原理,就是每次服务器端返回一定数目的数据,然后面试官说假如到了100页,客户端要缓存这么多数据吗?这个数据多的话,浏览器肯定是吃不消的,然后我就说了这样的话,可以在显示某一屏的时候,缓存下一屏,这样体验好一点

9.倒计时怎么做?
利用Date对象

    <div>
        <span id="day"></span>天
        <span id="hour"></span>时
        <span id="minutes"></span>分
        <span id="second"></span>秒
    </div>

    setInterval(function() {
        timer();
    }, 1000);

    function timer() {
        var time = (new Date(2017, 8, 24, 14, 46, 0)) - (new Date());

        var day = parseInt(time / 1000 / 60 / 60 / 24, 10);
        var hour = parseInt(time/ 1000/ 60/ 60 % 24, 10);
        var min = parseInt(time / 1000 /60 % 60, 10);
        var second = parseInt((time / 1000) % 60, 10);

        document.getElementById('day').innerHTML = day;
        document.getElementById('hour').innerHTML = hour;
        document.getElementById('minutes').innerHTML = min;
        document.getElementById('second').innerHTML = second;
    }

其中,因为setInterval函数也是存在着延迟的,所以就需要矫正时间,关于矫正时间,我当时主要从客户端出发,但是后面想到可以利用与服务器沟通,获得时间

10.说说Vue框架,对于对象引用的情况呢?
说了双向绑定、vue-router、vue-resource,关于对象引用的情况说了数组的两种情况下的处理(设定值和改变长度)

11.算法题,对于一个数组,纯数字,求和等于m
当时在回答这道题的时候,可能表述的不够清楚,后面自己也重新做了思考,也出了它的代码

#include<stdio.h>
#include<stdlib.h>

#define N 1000
int a[N];
int c = 0;
int n;
int x[N] = {0}; 
int sum = 0;
int rest = 0;

int traceBack(int i) {
    if(sum == c) {
        return 1;
    }
    if(i > n) {
        return 0;
    } 

    rest -= a[i];
    if(sum + a[i] <= c) {
        x[i] = 1;
        sum += a[i];
        if(traceBack(i+1)) {
            return 1;
        }
        sum -= a[i];
    }

    if(sum + rest >= c) {
        x[i] = 0;
        if(traceBack(i + 1)) {
            return 1;
        }
    }

    rest += a[i];
    return 0;   
}

void main(void) {
    scanf("%d%d", &n, &c);
    int i;
    for(i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        rest += a[i];
    }

    if(traceBack(0)) {
        for(i = 0; i < n; i++) {
            if(x[i]) {
                printf("%d ", a[i]);    
            }
        }
    }
}
 

————————————————
版权声明:本文为CSDN博主「Dear_Mr」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dear_mr/article/details/77530154

发布了134 篇原创文章 · 获赞 401 · 访问量 162万+

猜你喜欢

转载自blog.csdn.net/sd19871122/article/details/105306303