【2021秋招_前端开发】跟谁学一面 2020.10.16

1.自我介绍,实习经历
2.react和vue的区别,class和function区别,优缺点
3.项目中很多state,有没有方法对这些state进行管理 (放到一个对象里面),某个state发生变化,如何更新
扩展运算符,后面添加要修改的变量以及内容,为什么要这样做?...是进行浅拷贝
3.typescript中interface和type的不同,interface和class的不同
4.koa的优势,中间件执行两次,为什么还选用Koa
5.浏览器存储, localStorage, sessionStorage, cookie区别
6.cookie每次请求都会携带吗,跨域cookie如何发送
7.要保存多于10M的缓存,如何实现?PC端和移动端对存储大小的限制一样吗?
存储大小是相对于某个域来讲的,放不下可以开一个子域;不一样
8.let, const, var的本质区别,判断输出?
var a = 'abc';

if (true) {
  a = 123;
  let a = 4;
  console.log(a);  
}
报错,因为暂时性死区

9.状态码
1XX:
2XX:200
3XX:304
4XX:400,401,403,404,405
5XX:
200 from disk/from memory (加载图片等静态资源时出现)
200与304的区别
强制缓存和协商缓存
10.算法:标准化输出
let sNodes = [ {id:"1-1",pid:1,name:'第一节'}, {id:"1",pid:0, name:'第一章'}, {id:"2-1",pid:2,name:'第一节'}, {id:"2",pid:0, name:'第二章'} ];
Output:
[{id:"1",pid:0, name:'第一章',children: [{id:"1-1",pid:1,name:'第一节'}]}, {id:"2",pid:0, name:'第二章',children: [{id:"2-1",pid:2,name:'第一节'}]} ];
function transformTozTreeFormat(sNodes) {
    let res = [];
    sNodes.sort((a, b) => a.id.length - b.id.length);
    for (let i = 0; i < sNodes.length; i++) {
        let cur = sNodes[i];
        if (cur.id.length == 1) {
            res.push(cur);
        } else {
            let ids = cur.id.split('-');
            for (let j = 0; j < res.length; j++) {
                if (res[j].id == ids[0]) {
                    if (!res[j].children) {
                        res[j].children = [];
                    }
                    res[j].children.push(cur);
                }
            }
        }
    }
    return res;
}

let sNodes = [ {id:"1-1",pid:1,name:'第一节'}, {id:"1",pid:0, name:'第一章'}, {id:"2-1",pid:2,name:'第一节'}, {id:"2",pid:0, name:'第二章'} ];
let res = transformTozTreeFormat(sNodes);
console.log(res);
刚开始写的太着急了,以为有深层嵌套,写了个递归,后来面试官姐姐说你调试一下,改好了
错误示范:
function helper(sNodes, res, index){
    if (index == sNodes.length) return;
    for (let i = index; i < sNodes.length; i++) {
        let cur = sNodes[i];
        if (cur.id.length == 1) {
            res.push(cur);
        } else {
            let ids = cur.id.split('-');
            for (let j = 0; j < res.length; j++) {
                if (res[j].id == ids[0]) {
                    if (!res[j].children) {
                        res[j].children = [];
                    }
                    res[j].children.push(cur);
                }
            }
        }
        helper(sNodes, res, i + 1);
    }
}
面试体验98分,极好#高途##前端工程师##面经##校招#
全部评论
点赞,优秀~,问的很多感觉
点赞 回复 分享
发布于 2020-10-22 15:27
加油,期待成为同事🙃,有需要内推的同学私聊我哦
点赞 回复 分享
发布于 2020-10-24 19:54
同学,给你oc了吗?
点赞 回复 分享
发布于 2020-10-26 21:19
跨域cookie如何发送: 跨域Cookie的发送需要通过特定的设置和配置来实现。‌ 在默认情况下,由于浏览器的同源策略,跨域请求是不会携带Cookie的。但是,通过适当的配置,可以在跨域请求中发送Cookie。 首先,需要在服务端进行设置。服务器需要在响应头中包含以下两个字段: Access-Control-Allow-Credentials: true:这个字段表示允许跨域请求携带认证信息,包括Cookie。 Access-Control-Allow-Origin: 请求域名:这个字段指定了哪些域名的请求被允许访问资源。 例如: Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: http://www.example.com 这样设置后,只有来自http://www.example.com的请求才能携带Cookie‌1。 在客户端,也需要进行相应的配置。前端在发送跨域请求时,需要在请求中设置withCredentials属性为true。这样,浏览器在发送请求时才会携带Cookie‌1。 例如,使用Fetch API发送请求时,可以这样设置: fetch(url, { method: 'GET', credentials: 'include' // 允许携带Cookie });
点赞 回复 分享
发布于 10-10 10:56 北京
PC端和移动端对浏览器缓存的存储大小限制不一样。‌ PC端和移动端在浏览器缓存存储大小限制上存在显著差异。具体来说: ‌PC端‌:浏览器存储cookie的最大容量通常为4KB,很多浏览器都限制一个站点最多保存20个cookie。而sessionStorage和localStorage虽然也有存储大小的限制,但能提供5MB的存储空间(不同浏览器可能有所不同),这比cookie的存储空间要大得多‌1。 ‌移动端‌:由于移动设备的存储空间相对有限,浏览器缓存的大小限制更为严格。例如,Chrome浏览器在移动端的缓存大小设置可以通过修改注册表来调整,但默认情况下,缓存大小可能受到设备存储容量的限制‌2。 这些差异主要是由于PC端和移动端设备的存储能力和使用场景的不同所导致的。PC端通常有更大的存储空间和更高的性能,因此能够支持更大的缓存存储。而移动端由于便携性和电池寿命的考虑,缓存大小受到更严格的限制
点赞 回复 分享
发布于 10-10 11:05 北京

相关推荐

无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
3 11 评论
分享
牛客网
牛客企业服务