📅  最后修改于: 2023-12-03 15:21:30.974000             🧑  作者: Mango
作为一名程序员,我们经历了各种各样的面试,有的顺风顺水,有的则充满了挑战。今天,我要分享的是一次不可思议的面试经历,这次面试塑造了我对编程的理解,并且帮助我提高了解决问题的能力。
我申请的是一家中型互联网公司的前端工程师职位,这是一家总部在国外的公司,具有很强的技术实力和先进的研发理念。在面试之前,我已经做好了充分的准备,完成了前端方面的所有学习和预习工作,准备应对所有可能出现的技术问题。
面试开始,技术面试官首先向我提出了一道非常棘手的问题:如何实现一个字符计数器,该计数器可以统计页面上所有 h1
到 h6
标签中出现过的字符数,并且要求保留标签格式。这道问题一下子让我感觉很头疼,因为对于以前的我来说,处理字符串和文本的问题一直是一个比较棘手的问题。
经过思考,我想到了一种不可思议的解决思路:利用正则表达式将整个文本替换为 h1
到 h6
标签中的内容,并且在其中嵌入计数器使用的 data-*
属性,之后再将 h1
到 h6
标签中的内容,再替换回原来的字符串。这样,我们就可以在处理过程中保留标签的格式,并正确计算出指定标签内的字符数。
function countChars(elem) {
const regex = /<\s*(h[1-6])[^>]*>(.*?)<\s*\/\s*\1\s*>/gi;
const boundary = '<span class="count-container"></span>';
const matches = elem.innerHTML.match(regex) || [];
matches.forEach((match) => {
const countElem = document.createElement('span');
const tag = match.match(/<\s*(h[1-6])/i)[1];
const content = match.replace(/<\s*(h[1-6])[^>]*>/i, '').replace(/<\s*\/\s*\1\s*>/i, '');
const count = content.replace(/<[^>]+>/g, '').length;
countElem.className = 'char-count';
countElem.setAttribute('data-tag', tag);
countElem.setAttribute('data-count', count.toString());
countElem.innerHTML = boundary.repeat(count);
elem.innerHTML = elem.innerHTML.replace(match, `${match}${countElem.outerHTML}`);
});
}
这种解决方案既不晦涩难懂,又具有扩展性和可重用性。技术面试官感到十分满意,表示我在技术方面表现出色,并与我签订了录用合同。不可思议的解决方案,让我在这次面试中备受肯定,也让我对编程的理解更加深刻。
作为程序员,我们永远不要停止对技术的探索。不要畏惧困难,不要害怕挑战,只有不停地学习,锻炼自己的解决问题的能力,才能在职业生涯中越走越远。