字节提前批前端tiktok三面
1. 实现一个模板语法 underscore _.template:
function template(tmplStr, data) { // } template(`Hello, <%= name%>, I am a <%= role %> > <% if (name === 'a') { %><% } %>`, {name: 'stephen', role: 'engineer'}) // Hello, stephen, I am a engineer大概就是字符串的切割提取替换,用了slice切割和replace+正则两种方式实现,中间巨尴尬的一点是,我忘了slice Api和split Api了,然后切出去看了一眼,被发现了。。。面试官说要看可以跟他说,他会让我看的。。。 希望大家注意
解答:
function template(tmpStr, data) { let l = tmpStr.indexOf('<%='); let r = tmpStr.indexOf('%>'); if(l === -1 || r === -1) { return tmpStr; } let key = tmpStr.slice(l+3, r).trim(); tmpStr = tmpStr.slice(0, l) + data[key] + tmpStr.slice(r+2); return template(tmpStr, data); } function template2(tmpStr, data) { return tmpStr.replace(/<%=\w*%>/g, (match)=>{ return data[match.slice(3, -2)] }) } `${}` console.log(template('Hello, <%= name %>, I am a <%= role %>', {name: 'stephen', role: 'engineer'}))
2. 压缩字符串 'aaaaaabbbbbcccca' => 'a6b5c4a1'
function compress(str) { let pre = str[0]; let curNum = 1; let res = '' for(let i=1;i<str.length;i++) { if(str[i] === pre) { curNum++; } else { res += pre; res += curNum; pre = str[i]; curNum = 1; } } res += pre; res += curNum; return res; } console.log(compress('aaaaaabbbbbcccca'))
3. 第一题因为优点紧张,忘了api,花了可能有15分钟,第二题秒答,大概过去了20分钟的样子,后来问了很多实习相关,就一直聊实习的工作内容,你做的事情,我当时答的也不算特别好。。。
顺利通过,希望下周可以顺利通过hr面
#字节跳动##校招##面经#