作业帮前端实习二面面经

1.自我介绍
2.介绍下项目
3.vue双向绑定,缺陷,vue3的改进
4.算法:二叉树深度, var和let的区别
5.算法题:单次合并,当时程序没有运行成功,后来检查是一个地方单词拼写错了,最后的返回结果没有拼接
function WordsMerge(Words) {
    if (Words.length <= 1) {
        return JSON.stringify(Words);
    } else {
        let prev = [...Words[0]];
        let i = 1;
        while ( i < Words.length) {
            let cur = [...Words[i]];
            while (prev.length && cur.length && prev[prev.length - 1] === cur[0]) {
                prev.pop();
                cur.shift();
            }

            if (prev.concat(cur)) {
                prev = prev.concat(cur);
                i++;
            } else {
                prev = Words[i+1];
                i += 2;
            }
        }

        return JSON.stringify(prev.join(''))
    }
}

var words = ['aab', 'bac', 'ccd', 'dde', 'efg'];
var res = WordsMerge(words);
console.log(res); // "acdfg"
一二面+HR面整理到一起啦 

#作业帮2020春招简历投递开始##作业帮##实习##前端工程师##面经#
全部评论
今天作业帮二面算法题和楼主一样,感觉问的也差不多
点赞 回复 分享
发布于 2020-05-20 15:38
楼主,我跟你应该一个面试官,题出的差不多,你是二面之后多久hr面的
点赞 回复 分享
发布于 2020-04-21 16:37
楼主,撕代码的时候能用自己本地IDE吗?
点赞 回复 分享
发布于 2020-04-20 09:58
有没有推荐的vue面经
点赞 回复 分享
发布于 2020-04-10 22:35
能问下,一面和二面隔多久呀?
点赞 回复 分享
发布于 2020-04-10 22:15
🤐我估计没了,算法作业帮竟然没手撕
点赞 回复 分享
发布于 2020-04-09 18:44
你的作业帮是投了多久就面的呀
点赞 回复 分享
发布于 2020-04-09 01:14

相关推荐

之前技术面过了约的主管面,虽然这次面试官也稍微迟到了一下,但是还能接受,不像上次那个压力面,再次鞭尸他,还给我发offer了,在武汉(最近出的事是不是真的啊,反正不打算接了),这次主管面纯聊天面啊嘻嘻1、开局说之前的技术面面试官对我评价挺好的相信我的技术能力,所以今天不问技术(但是我觉得其实我面成了粑粑,第一个有点规模的厂的面试也是第三次面试)2、面试官的自我介绍和目前组内的业务基本介绍(like,like,主要是react+ts的低代码)3、自我介绍(由于是主管面我觉得可能更看综合能力就把校内职务奖项技术栈项目等都阐述了一下)4、实习时间5、个人的优缺点(肯定吹自己能力和抗压吃苦耐劳啊,缺点只能说自己是油专双非了呜呜呜)6、问实习想学到什么,对公司团队的期望(公司业务恰好和我下一步想学的契合上了)7、聊到了技术方面面试官直接批了我的简历上项目说管理系统类似的没有多少技术含量(哭了,能被我和后端十来天搓出来的确实没啥技术含量,加点性能优化吹一吹不得了了)8、反问:目前的公司业务产品,给我介绍了目前他们做得三个产品,全是低代码啊(途中还介绍了用到的技术和我目前可以做得出来的部分)介绍也很细致9、反问:刚刚的产品全是react+ts的吗?我用vue做过类似的拖拽低代码。现在大部分公司都是react啊以后Vuer还是得转战react感悟:投了一周多简历了,大部分厂根本不看大二的,还有就是react+一个有含金量的管理系统或者小程序+一个低代码这种有技术含量项目组合的简历好投进去啊,面几家厂80%都是react,当然不是说Vue不行毕竟我也是Vue,只是说我面下来感觉大一点的厂都是大部分react,所以还是得学react做个项目当敲门砖(菜鸡的感悟不必理会,如果Vue大佬看到别骂我,Vue学好一点面大厂也是没问题的,其实面试问框架也没有特别特别多了)总结:今天面试体验很好的,面试官表达了想要我,约了明天的终面(是人力的面,一般会有什么问题啊求求牛友帮帮我),公司目前的业务虽然不契合我现在的技术但是刚好是我接下来准备学的技术和做的项目只不过base有点远消费还挺高,今天的面试也没啥有技术含量的分享了,只能祝愿大家早日oc(我也想oc)ps:大佬勿喷,有错评论区评论速改
查看6道真题和解析
点赞 评论 收藏
分享
一、面试基本情况本次面试主要围绕&nbsp;React&nbsp;相关技术、流式传输以及算法与&nbsp;React&nbsp;Hook&nbsp;实现展开,包含技术原理问答和两道代码实现题。二、技术问题回顾与解答1.&nbsp;React&nbsp;Router&nbsp;的实现机制React&nbsp;Router&nbsp;基于&nbsp;HTML5&nbsp;的&nbsp;history&nbsp;API&nbsp;实现单页面应用的路由功能。它通过监听浏览器的&nbsp;popstate&nbsp;事件(当用户点击浏览器的前进、后退按钮时触发)以及手动调用&nbsp;history.pushState()、history.replaceState()&nbsp;方法来更新&nbsp;URL&nbsp;地址,同时不触发页面刷新。在&nbsp;React&nbsp;组件中,通过&nbsp;BrowserRouter(基于&nbsp;history&nbsp;API)、HashRouter(基于&nbsp;URL&nbsp;的&nbsp;hash&nbsp;部分,兼容性更好)等组件包裹应用,结合&nbsp;Route&nbsp;组件定义不同路径对应的渲染组件。当&nbsp;URL&nbsp;变化时,React&nbsp;Router&nbsp;会根据当前路径匹配相应的&nbsp;Route&nbsp;并重新渲染对应的组件,从而实现页面内容的更新&nbsp;。不过在本次面试中,我对这块知识掌握不够扎实,未能完整清晰作答。2.&nbsp;React&nbsp;memo&nbsp;是做了什么React.memo&nbsp;是一个高阶组件,用于对函数式组件进行性能优化。它会对组件的&nbsp;props&nbsp;进行浅比较,如果前后两次传入的&nbsp;props&nbsp;浅比较结果相同,就直接复用之前渲染的结果,不再重新执行组件函数,从而避免不必要的重复渲染。但需要注意,它仅对&nbsp;props&nbsp;变化进行比较,当组件内部状态(如通过&nbsp;useState&nbsp;创建的状态)变化时,即使&nbsp;props&nbsp;未变,组件仍会重新渲染。3.&nbsp;React&nbsp;Suspense&nbsp;怎么实现的React&nbsp;Suspense&nbsp;用于处理组件的异步加载情况,让开发者可以指定在异步操作(如数据获取、动态导入组件)进行时显示的加载状态。它通过在组件树中标记一个“等待”区域,当子组件中有异步操作未完成时,会先渲染&nbsp;Suspense&nbsp;组件指定的&nbsp;fallback&nbsp;内容(如加载动画),直到异步操作完成,再渲染实际的子组件内容。内部实现依赖于&nbsp;React&nbsp;的&nbsp;Fiber&nbsp;架构,利用&nbsp;Fiber&nbsp;的可中断、可恢复特性,在等待异步操作完成期间释放&nbsp;CPU&nbsp;资源,不阻塞主线程,提高应用的响应性能&nbsp;。4.&nbsp;流式传输相关讨论在讨论流式传输时,我提出可以在前端利用&nbsp;Server-Sent&nbsp;Events(SSE)实现。SSE&nbsp;是一种单向的、由服务器向客户端推送数据的技术,适合用于实时数据传输场景。同时,对于&nbsp;JSON&nbsp;数据的处理,采用流式解析会更加高效,比如在处理阶乘等数据量较大且逐步生成的场景下,流式解析无需一次性将所有数据加载到内存中,而是边接收数据边解析处理,减少内存占用,提升数据处理效率。三、代码题实现1.&nbsp;大数相减(考虑负数结果)function&nbsp;subtractLargeNumbers(num1,&nbsp;num2)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;compare(num1,&nbsp;num2)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(num1.length&nbsp;&amp;gt;&nbsp;num2.length)&nbsp;return&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(num1.length&nbsp;&amp;lt;&nbsp;num2.length)&nbsp;return&nbsp;-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;lt;&nbsp;num1.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(num1[i]&nbsp;&amp;gt;&nbsp;num2[i])&nbsp;return&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(num1[i]&nbsp;&amp;lt;&nbsp;num2[i])&nbsp;return&nbsp;-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;sign&nbsp;=&nbsp;compare(num1.split(''),&nbsp;num2.split(''));&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;larger&nbsp;=&nbsp;sign&nbsp;&amp;gt;=&nbsp;0?&nbsp;num1&nbsp;:&nbsp;num2;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;smaller&nbsp;=&nbsp;sign&nbsp;&amp;gt;=&nbsp;0?&nbsp;num2&nbsp;:&nbsp;num1;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;result&nbsp;=&nbsp;'';&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;carry&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;lt;&nbsp;larger.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;diff&nbsp;=&nbsp;parseInt(larger[larger.length&nbsp;-&nbsp;1&nbsp;-&nbsp;i])&nbsp;-&nbsp;(parseInt(smaller[smaller.length&nbsp;-&nbsp;1&nbsp;-&nbsp;i])&nbsp;||&nbsp;0)&nbsp;-&nbsp;carry;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(diff&nbsp;&amp;lt;&nbsp;0)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diff&nbsp;+=&nbsp;10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;carry&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;carry&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;diff&nbsp;+&nbsp;result;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(result[0]&nbsp;===&nbsp;'0'&nbsp;&amp;amp;&amp;amp;&nbsp;result.length&nbsp;&amp;gt;&nbsp;1)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;result.slice(1);&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sign&nbsp;&amp;lt;&nbsp;0?&nbsp;'-'&nbsp;+&nbsp;result&nbsp;:&nbsp;result;}2.&nbsp;实现一个可暂停、继续的倒计时&nbsp;React&nbsp;Hookimport&nbsp;{&nbsp;useState,&nbsp;useEffect&nbsp;}&nbsp;from'react';function&nbsp;useCountdown(initialTime)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;[time,&nbsp;setTime]&nbsp;=&nbsp;useState(initialTime);&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;[isRunning,&nbsp;setIsRunning]&nbsp;=&nbsp;useState(true);&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;intervalId;&nbsp;&nbsp;&nbsp;&nbsp;useEffect(()&nbsp;=&amp;gt;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isRunning&nbsp;&amp;amp;&amp;amp;&nbsp;time&nbsp;&amp;gt;&nbsp;0)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intervalId&nbsp;=&nbsp;setInterval(()&nbsp;=&amp;gt;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTime(prevTime&nbsp;=&amp;gt;&nbsp;prevTime&nbsp;-&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(intervalId);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;()&nbsp;=&amp;gt;&nbsp;clearInterval(intervalId);&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;[isRunning,&nbsp;time]);&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;start&nbsp;=&nbsp;()&nbsp;=&amp;gt;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setIsRunning(true);&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;pause&nbsp;=&nbsp;()&nbsp;=&amp;gt;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setIsRunning(false);&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pause&nbsp;&nbsp;&nbsp;&nbsp;};
查看6道真题和解析
点赞 评论 收藏
分享
评论
2
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务