9.25youzan面试总结

// =====================================================
// 欢迎参加有赞前端 Coding 面试
// =====================================================
// 界面介绍:
//   上方设置按钮可以切换语言、字体大小、主题
//   右侧控制台可以显示代码执行结果,可用于编码过程中的 DEBUG
// =====================================================
// Coding 须知:
//   本次 Coding 时间限制为 30 分钟,共 2 道题目
//   题目难度自上向下递增,请量力答题
// =====================================================

/**
 * ## 问题 1
 * 大数相加
 * 
 * JS 中最大整数安全范围是 9007199254740991
 * 实现 add 方法,求解 9007199254740991 + 1234567899999999999
 * 输入 add('9007199254740991', '1234567899999999999')
 * 输出 '1243575099254740990'
 */

function add(num1, num2) {
    var l1 = num1.length;
    var l2 = num2.length;
    var k = 0;
    var arr = [];
    var l = Math.max(l1,l2);
    for(let i = 0;i <l;i++){
        k += Number(num1.charAt(l1-i-1))+Number(num2.charAt(l2-i-1));
        if(k > 9){
            arr.unshift(k%10);
            k = 1;
        }else{
            arr.unshift(k);
            k=0;
        }
    }
    arr=arr.join("");
    return arr;
}
console.log(add('9007199254740991', '1234567899999999999'))

/**
 * ## 问题 2
 * 实现 getValue 函数来获取path对应的值
 */

var object = {
    'a': [{
        'b': {
            'c': 3
        }
    }]
}; // path: 'a[0].b.c'
var array = [{
    "a": {
        'b': [1]
    }
}]; // path: '[0].a.b[0]'

function getValue(obj, path, defaultValue) {
    // coding here ...
    p = path.split('.');
    var arr = new Array(p.length);
    for(let i = 0; i<p.length;i++){

    for(let j = 0; j<p[i].length;j++){
        var c ='';
        c+=p[i].charAt(j);
var arr2 =[];
        if(p[i].charAt(j)==='['||p[i].charAt(j)==='['){
            arr2.push
            j++;
        }
    }


        if(p[i].length>1){

        }else{
            arr[i]=p[i];
        }

    }
    
}
console.log(getValue(object, 'a[0].b.c', 0)); // 输出3
console.log(getValue(array, '[0].a.b[0]', 12)); // 输出 1
console.log(getValue(array, '[0].a.b[0].c', 12)); // 输出 12
function getValue(obj, path, defaultValue) {
    let arr = path.split('.');
    // console.log(arr)
    try {
        for (let item of arr) {
            // console.log(item)
            if (item.endsWith(']')) {
                let temp = item.split('[');
                let index = parseInt(temp[1].substring(0, temp[1].length - 1));
                if (temp[0] === '') {
                    obj = obj[index];
                } else {
                    obj = obj[temp[0]][index];
                }
            } else {
                obj = obj[item];
            }
            if (obj === undefined) {
                return defaultValue;
            }
        }
        return obj
    } catch (e) {
        return defaultValue;
    };
}

var object = {
    'a': [{
        'b': {
            'c': 3
        }
    }]
};

var array = [{
    'a': {
        'b': [1]
    }
}]

console.log(getValue(object, 'a[0].b.c', 0))  //3
console.log(getValue(array, '[0].a.b[0]', 12))  // 1
console.log(getValue(array, '[0].b[0].c', 12))  //12

电商后台管理系统包含哪些部分?整个系统包含哪些部分?整个架构是怎样的?
数据提供?API?UI层,数据接口现成?
用户管理登录登出退出逻辑?
VUE开发和小程序开发,差异点?
HTTP状态码?
200 404 403 301 302 304 500
301和302差异点?永久临时含义?
302重定向配合哪个HTTP请求头进行重定向?
访问a.com,状态码是302,a.com跳到另外一个地址,那调到哪个地址,肯定有个东西来提供?这个东西由哪一部分提供?这个路径是跳转过去的路径,目标路径是谁提供的吗?
403禁止访问,涉及到一个权限的概念,你认为和权限相关的,就是鉴权相关的,会涉及到哪些部分的知识点?用户登录的时候肯定不能进行一些操作,下单的时候如果没有登陆,肯定是会说你没有权限或者你没有登录,相应的状态码就不是200了,可能是403,一个用户是谁,通过什么方式进行存储,或者说服务端怎么知道这个请求是由哪个用户带上的?
具体讲讲token的含义?
token是服务端颁发的?一定会带上吗?做什么样的操作请求会带上token?token放在请求头的哪个部分?
token里面会带上什么信息呢?服务端为什么可以把这串数字,对应的人或者对应的登录状态是什么?你知道这里面背后的流程是怎样的吗?
如果让你来设计这个token的话?你觉得token的明文会存哪些东西?
你了解到的前端页面的攻击方式有哪些?
跨脚本攻击
xss和csrf
xss是一种怎样的攻击手段?
web页面有哪些地方可以被攻击者利用注入?哪些元素或者说哪些组件?然后被渲染出来?
假设你是攻击者,你要想用xss去攻击一个网站的话,你会在哪里选择下手?或者说你的攻击手段会是怎样?
把攻击代码放到url参数里面,当客户端或者服务端,前端浏览器去解析参数的时候,它会被带到前端代码里面储存起来,然后进行攻击。
特殊字符放到url里面,浏览器会对其进行转码,比如说你在浏览器里面输入一个括号,或者参数里面带上一个括号,它实际上显示的是括号本身吗?
有没有尝试过你在浏览器某一个query里面去输入一些特殊字符,比如说括号,一些尖括号之类的东西?然后它其实会被转成一个特殊的编码,你有了解过这个特殊的编码是个什么样的编码吗?
xss的攻击方式,除了url,用户给你的信息,输入框,文本框,留言板等一些东西。给攻击者注入点。你打算采取什么样的手段去规避xss攻击注入到你的系统中?有哪些手段可以进行防御。
转义就是将一种编码转成另一种编码。
常用的编码方式有哪些?utf8,unicode
csrf攻击利用了浏览器的什么特性?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值