腾讯笔试遇到的一道题,百思不得其解,求助大牛们解答

实现一个 HardMan:
HardMan("jack") 输出:
I am jack

HardMan("jack").rest(10).learn("computer") 输出
I am jack
//等待10秒
Start learning after 10 seconds
Learning computer

HardMan("jack").restFirst(5).learn("chinese") 输出
//等待5秒
Start learning after 5 seconds
I am jack
Learning chinese

我的答案:
function HardMan(name){
var fucntionTarget = '';
this.rest = function(minnus){
var timer = setInterval(function(){
console.log("Start learning after "+ minnus +" seconds");
console.log('Learning '+fucntionTarget);
clearInterval(timer);
},minnus*1000);
return this;
};
this.learn = function(target)
{
fucntionTarget = target;

};
this.restFirst = function(minnus){
        这个不会写。

};
console.log('I am '+ name);
return this;
}
#腾讯#
全部评论
function hardMan(str) { this.queue = [] this.name = str this.queue.push(() => { console.log(this.name); this.next() }); } hardMan.prototype.rest = function (wait) { const func = () => { setTimeout(() => { console.log(`Start learning after ${wait} seconds`) this.next() }, wait * 1000) } this.queue.push(func) return this } hardMan.prototype.restFirst = function (wait) { const func = () => { setTimeout(() => { console.log(`Start learning after ${wait} seconds`) this.next() }, wait * 1000) } this.queue.unshift(func) return this } hardMan.prototype.learn = function (str) { const func = () => { console.log(`Learning ${str}`) } this.queue.push(func) this.next() } hardMan.prototype.next = function () { if (this.queue.length === 0) return const func = this.queue.shift() func() } const HardMan = (name)=>{ return new hardMan("jack"); }
4 回复 分享
发布于 2023-08-09 17:56 北京
class HardMan {constructor(name) {this.name = name;this.taskQueue = Promise.resolve();//考察执行栈和事件循环 setTimeout(() => {this.execute();})}execute() {if (this._restFirst) {this.realRest(this._restFirst);this._restFirst = 0;}this.outName();if (this._rest) {this.realRest(this._rest)}if (this._learn) {this.taskQueue = this.taskQueue.then(() => {console.log(`Learning ${this._learn}`)});}}outName() {this.taskQueue = this.taskQueue.then(() => {console.log(`I am ${this.name}`)});return this;}rest(seconds) {this._rest = seconds;return this;}realRest(seconds) {this.taskQueue = this.taskQueue.then(() => { return new Promise(resolve => {setTimeout(() => {console.log(`After rest ${seconds} seconds`);resolve();}, seconds * 10);});});return this;}restFirst(seconds) {this._restFirst = seconds;return this;}learn(subject) {this._learn = subject;return this;}}
1 回复 分享
发布于 2024-04-17 22:35 湖南
function Hard(str){     var that = {};     that.__proto__ = arguments.callee.prototype ;     that.str = "I am " + str;     setTimeout(that.settime.bind(that));     return that; } Hard.prototype.yanchi = function(m){     console.log("sleep")     var d = new Date();     var n = this._restFirst*1000;     for(var i = 0; i < d; i++){         if( new Date() - d > n ){             console.log("sleep end")             return false;         }     } } Hard.prototype.learn = function( sr ) {     this._learn = sr;     return this; } Hard.prototype.rest = function( num ){     this._rest = num;     return this; } Hard.prototype.restFirst = function ( n ) {     this._restFirst = n;     this._rest = 0;     return this; } Hard.prototype.settime = function(){     var { str, _learn, _rest, _restFirst} = this;     var num = _rest || _restFirst;     if( _restFirst !== undefined ){         this.yanchi();     }else{         console.log(str);     }     if(num){         setTimeout(function(){             console.log( `Start learning after ${ num } seconds` );             if( _restFirst !== undefined ){                 console.log(str);             }             if( _learn ){                 console.log( "Learning " + _learn )             }         },_rest*1000)     } }
1 回复 分享
发布于 2018-04-18 23:28
去年腾讯面试遇到了这道题,当时没写出来,后来想了想写出来了,给大家两个种满分解题代码吧:https://mp.weixin.qq.com/s/-hEjxY0yI6ZBTzAlc3xwAw
点赞 回复 分享
发布于 2024-08-23 09:50 广东
跟lazyman一摸一样的呀
点赞 回复 分享
发布于 2018-04-18 23:31
微信小程序事业群的
点赞 回复 分享
发布于 2018-04-17 23:03
哪个事业群的面试题
点赞 回复 分享
发布于 2018-04-17 10:43

相关推荐

一、面试基本情况本次面试主要围绕&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;{function&nbsp;compare(num1,&nbsp;num2)&nbsp;{if&nbsp;(num1.length&nbsp;&amp;gt;&nbsp;num2.length)&nbsp;return&nbsp;1;if&nbsp;(num1.length&nbsp;&amp;lt;&nbsp;num2.length)&nbsp;return&nbsp;-1;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;lt;&nbsp;num1.length;&nbsp;i++)&nbsp;{if&nbsp;(num1[i]&nbsp;&amp;gt;&nbsp;num2[i])&nbsp;return&nbsp;1;if&nbsp;(num1[i]&nbsp;&amp;lt;&nbsp;num2[i])&nbsp;return&nbsp;-1;}return&nbsp;0;}const&nbsp;sign&nbsp;=&nbsp;compare(num1.split(''),&nbsp;num2.split(''));let&nbsp;larger&nbsp;=&nbsp;sign&nbsp;&amp;gt;=&nbsp;0?&nbsp;num1&nbsp;:&nbsp;num2;let&nbsp;smaller&nbsp;=&nbsp;sign&nbsp;&amp;gt;=&nbsp;0?&nbsp;num2&nbsp;:&nbsp;num1;let&nbsp;result&nbsp;=&nbsp;'';let&nbsp;carry&nbsp;=&nbsp;0;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;lt;&nbsp;larger.length;&nbsp;i++)&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;if&nbsp;(diff&nbsp;&amp;lt;&nbsp;0)&nbsp;{diff&nbsp;+=&nbsp;10;carry&nbsp;=&nbsp;1;}&nbsp;else&nbsp;{carry&nbsp;=&nbsp;0;}result&nbsp;=&nbsp;diff&nbsp;+&nbsp;result;}while&nbsp;(result[0]&nbsp;===&nbsp;'0'&nbsp;&amp;amp;&amp;amp;&nbsp;result.length&nbsp;&amp;gt;&nbsp;1)&nbsp;{result&nbsp;=&nbsp;result.slice(1);}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;{const&nbsp;[time,&nbsp;setTime]&nbsp;=&nbsp;useState(initialTime);const&nbsp;[isRunning,&nbsp;setIsRunning]&nbsp;=&nbsp;useState(true);let&nbsp;intervalId;useEffect(()&nbsp;=&amp;gt;&nbsp;{if&nbsp;(isRunning&nbsp;&amp;amp;&amp;amp;&nbsp;time&nbsp;&amp;gt;&nbsp;0)&nbsp;{intervalId&nbsp;=&nbsp;setInterval(()&nbsp;=&amp;gt;&nbsp;{setTime(prevTime&nbsp;=&amp;gt;&nbsp;prevTime&nbsp;-&nbsp;1);},&nbsp;1000);}&nbsp;else&nbsp;{clearInterval(intervalId);}return&nbsp;()&nbsp;=&amp;gt;&nbsp;clearInterval(intervalId);},&nbsp;[isRunning,&nbsp;time]);const&nbsp;start&nbsp;=&nbsp;()&nbsp;=&amp;gt;&nbsp;{setIsRunning(true);};const&nbsp;pause&nbsp;=&nbsp;()&nbsp;=&amp;gt;&nbsp;{setIsRunning(false);};return&nbsp;{time,start,pause};
查看6道真题和解析
点赞 评论 收藏
分享
评论
3
13
分享

创作者周榜

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