阿里面试总结

我的简历经常经常被系统捞起来面试,目前是第三次,所以一定要单独写一篇
一面(2小时):
1、介绍自己,主要是技术栈,近年来的项目
2、自学前端入门,如何自学的,GitHub,小项目
3、平移动画,有几种实现,优劣,css3transition,transform
4、是如何在面试过后知道自己回答得好不好,平时如何学习进步(项目,源码,看书),项目做了哪些优化
5、pc端移动端占比,移动端css有什么区别,rem为什么16px
6、webpack如何构建工程,用过哪些工具(gulp,parcel)
7、es5和6、7区别,如何把es6转成es5,babel,polyfill
8、回调,promise,async await
9、自己比较满意的项目,给你时间的话你会怎么对待这个项目(优化,总结写文章),如何用canvas画出图表
10、孙节点通信,context,redux等,context具体实现和接收
11、如果不涉及页面渲染,变量怎么办。static等
12、未来的规划,想成为什么样的前端
13、有没有什么要问他的(在闲鱼做社区鱼塘公众号架构,运营后台,活动页面;加班适中没有很闲也没有996,对项目负责;闲鱼ctoc有很大用户和新挑战,是淘宝技术旗下,做很多尝试)
14、反馈说感觉比我一年多以前的简历还要好

笔试+问问题(1小时)
笔试是用内部共享编辑器,面试官可以实时看到面试者写代码,ide不能调试,写完会问问题

第一题

// 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

// 示例 1:

// 输入: "abcabcbb"
// 输出: 3 
// 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
// 示例 2:

// 输入: "bbbbb"
// 输出: 1
// 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
// 示例 3:

// 输入: "pwwkew"
// 输出: 3
// 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

// 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

function findNoRepeatStr(str){
    if(str.length===0) return 0
    let res = str[0]
    let finRes = res;
    for(let i=1;i<str.length;i++){
        let index = res.indexOf(str[i]);
        if(index===-1){
            res= res + str[i]
            if(res.length>finRes.length){
                finRes = res;
            }
        } else {
            res = res.slice(index + 1)+str[i]
        }
    }
  return finRes.length
}

1、还有什么思路
2、判空
3、出bug解决
4、时间复杂度

第二题

// 请实现 `makeGroups` 方法,使得数组数据按 `groupId` 分组,并以 `value` 为排序字段,达到如下效果:
const dataSource = [
  {value: "1", groupId: 'a'},
  {value: "15", groupId: 'b'},
  {value: "7", groupId: 'a'},
  {value: "9", groupId: 'c'},
  {value: "5", groupId: 'b'},
  {value: "11"}
];

const groups = makeGroups(dataSource);

console.log(groups);
/* 输出数据如下:
[
  [
    {value: "1", groupId: 'a'},
    {value: "7", groupId: 'a'}
  ],
  [
    {value: "5", groupId: 'b'},
    {value: "15", groupId: 'b'}
  ],
  [
    {value: "9", groupId: 'c'}
  ],
  [
    {value: "11"}
  ]
]
 */

function makeGroups(dataSource){
    let res = []
    dataSource.forEach(x=>{
        let index = res.findIndex(item=>item[0].groupId === x.groupId)
        if(index===-1){
            res.push([x])
        } else {
            res[index].push(x)
        }
    })
      
      return res.map(x=>
        x.sort((m,n)=>+m.value-(+n.value))
      )
}

1、+操作,字符转数字,NaN
2、forEach,map
3、其它思路

二面面试官服务端:(40分钟)

  • 有没有做过服务端
  • 用没用过强类型语言,为什么js是弱类型语言
  • js如何在浏览器运行
  • 说说项目,c++编译
  • 单线程如何工作
  • 未来规划
  • 对象的生命周期
  • 闭包是怎么回事

之后

  1. 看下webpack
  2. 编译原理
  3. context redux
  4. leetcode hard
  5. ts,vue3源码
  6. 复盘passport·,flow , charts等项目
  7. js工作原理到浏览器,到机器码

天猫海外

1、关闭动画为什么会优化
2、smooth
3、请求在哪个生命周期
4、update怎么用

lazada

依然是共享编辑器笔试

  constructor(){
    this.subs = {} 
  }
  on(event, callback){
    if(this.subs[event] === 'undefined'){
        this.subs[event] = []
    } else {
        this.subs.push(callback)
    }
  }
  off(event,callback){
    let index = this.subs[event].indexOf(callback)
    if(index>-1)this.subs[event].splice(index,1)
    if(this.subs[event].length === 0){
     delete this.subs[event]
    }
  }
  trigger(event, options){
    this.subs[event].forEach(x=>{
        x(options)
    })
  }
}

2. 写个转换函数,把一个JSON对象的key从横杠形式(Pascal)转换到小驼峰形式(Camel),即{“a_b”:1}——>{“aB”:1}
var trans = function(obj){
    let resObj = {}
    for(let i in obj){
          console.log(i)
        resObj[pascalToCamel(i)] = obj[i]
    }
    function pascalToCamel(str){
        let arr = str.split('_')
        let resarr =arr.slice(1).map(x=>{
            let camel = x.slice(0,1).toUpperCase()+x.slice(1)
            return camel
        })
        return [arr[0],...resarr].join('')
    }
  return JSON.stringify(resObj)
}

let test = {a_b:1}
console.log(trans(test))

3. 2个正整数字符串的相加,即 '1'+'19'——>'20'(考虑超长字符串相加)

var addBigInt = function(a,b) {
    if(a.length<b.length){
        [a,b] = [b,a]
    }
    b = Array(a.length-b.length).fill(0).join('') + b
    console.log(a,b)
    let carry = 0
    let res = ''
    for(let i=a.length-1;i>=0;i--){
        let sum = parseInt(a[i])+parseInt(b[i])+carry
        if(sum>9){
            carry = 1
        } else {
            carry = 0
        }
        res = (sum)%10 + res
    }
    if(carry === 1) res = 1 + res
    return res
}

console.log(addBigInt('1','19'))

问答:

http头部有哪些

分为通用,请求,响应,实体

BFC,display属性

diff,唯一key,dirty compnent

前端缓存,cache,session 区别

egg koa

隐藏元素方式,区别

UDP TCP

TCP:可靠,要握手连接,有流量控制拥塞控制
UDP:高效不可靠,适合直播视频等

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

推荐阅读更多精彩内容