阿里前端面试题(1)——解构异步markdown语法解析

Python021

阿里前端面试题(1)——解构异步markdown语法解析,第1张

a. 不完全解构,也会成功,不会报错

b. 只要支持 Iterator 接口,都可以被解构赋值

c. null 可以替代默认值,而成功的解构赋值

d. 解构中不定参数可以出现在除第一个以外的其他位置

e. 解构是先找到同名属性,然后再赋给对应的变量

f. 默认值可以引用解构赋值的其他变量,但该变量必须已经声明

(d)

迭代一个对象的属性

不定参数只能放在最后一个位置

a. 在JavaScript中,任务被分为两种,一种宏任务(MacroTask),一种叫微任务(MicroTask),setTimeout 属于微任务

b. setTimeout(func, 500) 会精确的在 500ms 后执行 func

c. Promise、generator、async/await 都是异步解决方案

d. process.nextTick、Promise 都属于 node 中的微队列

e. 浏览器的 Event Loop 和 node 的 Event Loop 是不同的,实现机制也不一样

f. 在 node 中setTimeout 和 setImmediate 执行阶段是一致的

(c,d,e)

解析:f 两者的执行顺序要根据当前的执行环境才能确定

(那怎么知道主线程执行栈为空啊?js引擎存在monitoring process进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数)

https://juejin.im/post/59e85eebf265da430d571f89

Markdown 是非常受技术人员喜欢的一种文本格式,请使用 JavaScript 来实现 marked 方法来进行 markdown 文本的 HTML 渲染,可以满足以下需求:

function marked(str) {

// your code here

}

marked('@@whatever@@').trim() // <p><blink>whatever</blink></p >

marked(' abc @@def@@ ghi ').trim() // <p><em>abc</em><blink>def</blink><strong>ghi</strong></p >

marked('@@ cool @@').trim() // <p><blink><strong>cool</strong></blink></p >

可以实现题目中的要求,但是还不能满足“@@abc”这样缺少对应字符串的情况

题目面试:桌面上有50枚硬币,一次可以拿2,4,6枚,另一位同学和你竞争,你拿一次,他拿一次,怎么保证最后一枚硬币是你拿到。

解题思路:这种问题可以从后往前推,如果要保证最后一枚硬币你拿到,那么你倒数第二次拿硬币后应该剩下8枚,此时另外一名同学不管是拿2枚,4枚,6枚,那么你肯定能拿到最后一枚。50-8=42 剩下42枚,怎么拿取?可以观察2 4 6 这几个数字的特点,4+4=8 2+6=8 6+2=8,不管另一位同学拿几枚,你都可以和他凑成8枚,42-5X8=2,最后剩下两枚,你先拿。

答案:你先拿2枚,另一个同学如果拿2枚,你拿6枚,另一个同学如果拿4枚,你也拿4枚,另一个同学如果拿6枚,你拿2枚,这样重复5个回合,最后剩下8枚,不管他怎么拿,你都能拿到最后一枚。