前言背景:一年半前端经验,今年3月初提出辞职,想着看争取金三银四时期的好工作机会。不幸的是,3月初,包括上海在内的全国疫情爆发,直接导致不少企业开始收缩、锁定HC。4月,上海疫情越来越严重,最终导致全城封城,只能在家准备线上面试。(送!)疫情之初,整个社会的气氛都非常消极。没办法,只能投简历,准备面试题,调整心情。疫情封锁期间,只能在家闲着,所以就利用这段时间巩固了JS的基础,刷了Leetcode上的一些算法题。幸运的是,这期间收到了携程和字节跳动的面试邀请(非常感谢)。废话那么多,下面是具体面试过程:携程(旅游研发部)技术端常见的ReactHooks有哪些?useMemo是如何实现性能优化的?useRef的应用场景?如何做到【一套代码,多端操作】,表达你的想法?Taro实现跨终端的底层机制?您能谈谈您将如何优化前端性能吗?LCP在ChromeDevtools的Lighthouse中是什么意思?如何减少LCP时间?前端性能优化解决方案两面技术?React.memo和shouldComponentUpdate是做什么的?ReactDOM.render的流程?算法题:实现数组去重(要求时间复杂度最优)functionunique(arr){constmap=newMap();for(leti=arr.length-1;i>=0;i--){if(map.has(arr[i])){arr.splice(i,1);}}else{map.set(arr[i],true);}}returnarr;}第二大数(需要时间复杂度O(n))functiongetSecond(arr){if(arr.length<2)returnnull;让最大=arr[0];让第二=arr[0];for(leti=0;imax){second=max;最大值=arr[i];}elseif(arr[i]>second){second=arr[i];}}returnsecond;}业务三边介绍项目及主要使用场景。你做了哪些前端性能优化?您认为项目中主要的性能瓶颈是什么?你们的项目进展如何?您如何进行项目时间管理和规划?你如何与项目经理、后端同事和项目中的其他同事建立联系?字节跳动(抖音电商)技术项目介绍你实现了哪些自定义Hooks?实现自定义Hooks:使用LocalStorageTypeScript泛型在extends关键字的作用下,CSSposition属性的取值是多少?相对和绝对相对于谁?如何修复页面顶部的Header?使用fixed导致内容崩溃怎么办?实现一个请求函数,功能如下:功能一:支持缓存功能二:支持异步(返回Promise)功能三:支持并发请求技术第二方有一个列表,然后为列表中的每一项添加一个响应事件,你会怎么做?描述DOM事件流e.target指向哪个元素?如何防止事件冒泡,如何防止事件捕获?React事件机制下面说说用户登录的流程。token和cookie+session有什么区别?下面说说微信扫描二维码登录的过程。让我们谈谈虚拟列表。虚拟列表的列表项不能有固定高度吗?手写useMyStateconstuseMyState=(initial)=>{const[state,setState]=useState(initial);constcallbackRef=useRef(null);const_setState=(_state,callback)=>{setState(_state);callbackRef.current=回调;};useEffect(()=>{callbackRef.current(state);},[state]);返回[状态,_setState];};this指向问题constobj={a:10,add(x){returnthis.a+x;},减少:(x)=>this.a-x,};console.log(obj.add(2));console.log(obj.reduce(2));实现sum(1)(2,3)(4,5,6)...()constsum=(...args)=>{constresult=args.reduce((pre,cur)=>pre+当前);return(...args)=>{if(args.length===0)返回结果;返回总和(结果,...args);};};console.log(sum(1)(2,3)(4,5,6)());从技术的三个方面选一个你认为比较复杂的项目,描述一下它在TCP连接建立之后,HTTP传输数据之前,中间发生了什么?我看你的文章有点讲TypeScript和集合论的关系,我简单描述一下。让我们谈谈ReactFiber。如果让你实现Scheduler,你会如何实现?算法题:买股票的最佳时机(Leetcode121)算法题:买股票的最佳时机Ⅱ(Leetcode122)总结几轮面试后最大的感受就是面试官会在你的项目上展开,然后广泛的检查你的基础知识。携程更注重性能优化的检查。三个方面通过后,会有综合评价和英语评价(综合评价的基本逻辑不是很难,通过英语六级可以免考英语评价)。字节更侧重于一些原理和算法的考察,但是字节的算法题并没有你想的那么难。准备Leetcode前200个简单和中等难度的题应该问题不大。最终顺利拿到了携程的offer,字节却倒在了三面。字节面试官的反馈是:【选一个你觉得比较复杂的项目,描述一下它的难点】这个问题的答案太简单了,需要加深技术深度,挖掘项目的难点.以上就是本次面对面分享的全部内容,希望对大家有所帮助。本文参加了SegmentFault思维面试突破挑战赛,正在阅读的欢迎加入。