那些年,几道”老生常错“的前端面试题(四)

  • 4.在一个Web页面中有很多的链接和图片,例如:

  • 5.已知用户输入手机号的时候可能是通过粘贴输入,此时就会带上不需要的信息,例如:

1. 请生成一个16位的随机数字;


可以 String(Math.random()).split(‘.’)[1].slice(0, 16);  当然,还有很多其他一些方法。使用new Date().getTime()或类似方法的不得分。

2.所有题目公用一个上下文,已知数组:


let arr = [1,2,3];

  1. arr的长度是多少?

  2. 去除arr中的空数组项;

  3. arr2 = arr.map(parseInt),请写下arr2的内容;

  4. arr和arr2合并成数组arr3。

  5. 去除数组arr3中重复内容

答案:

第一题,空数组项也会作为length的一部分;空数组项和空字符串项是有区别的。结果是4。

第2题 本题只是过滤空数组项,不包括null, undefined这类,去除空数组项两个比较好的回答:

数组中的 empty 元素不会参与数组项遍历,故只需返回 true 即可过滤掉 empty 元素(而不会牵连 0、NaN、null、undefined、‘’ 这些)

arr.filter(it => true)

注意走for循环,还是会遍历empty数组项。或者filter方法参数直接就是一个function即可。例如:arr.filter(Number), arr.filter(String)

上面并不会最好的方法。数组有个API,天然去除空数组项,arr.flat()。flat()可以让数组扁平化的方法。

第3题标准答案应该是[1, NaN, NaN],map里面Function支持参数(value, index, arr)。

第4题就是concat,可以数组合并,arr3 = arr.concat(arr2)。如果不考虑兼容,可以[...arr, ...arr2]。其他参考方法:Array.prototype.push.apply(arr3, arr2),也可以[].push.apply(arr3, arr2),此时arr3是合并后的数组。

第五题,数组去重。使用Array.from(new Set(arr3)),或者[...new Set(arr3)]

3.关于字符串处理:


  1. 写一个名为toCamelCase的方法,实现把类似’abc-def-ghi’的字符转换成’abcDefGhi’。

  2. 写一个名为toDashJoin的方法,实现把驼峰形式字符串’abcDefGhi’转换成’abc-def-ghi’。

  3. 写一个名为toCapitalize的方法,实现首字母大写功能(原来字母就是大写的不处理),如’i like css’转换成’I Like Css’。

  4. 写一个名为toBetterUrl的方法,实现把类似’CSS value type’转换成’css-value-type’(只需考虑空格和大小写处理)。

「参考答案:」

function toCamelCase(str){

return str.replace(/-(.)/g,function($0,$1){

console.log($0,$1)

return $1.toUpperCase()

})

}

console.log(toCamelCase(“abc-def-ghi”));

function toDashJoin(str){

return str.replace(/[A-Z]/g,function($0){

return ‘-’+$0.toLowerCase()

})

}

console.log(toDashJoin(“abcDefGhi”));

function toCapitalize(str){

return str.replace(/(\s+|^)(\w)/g,function($0,$1,$2){

return $1+$2.toUpperCase()

})

}

console.log(toCapitalize(‘i like css’));

function toBetterUrl(str){

return str.replace(/[A-Z]/g,function($0){

return $0.toLowerCase()

}).replace(/\s+/g,‘-’)

}

console.log(toBetterUrl(‘CSS value type’));

4.在一个Web页面中有很多的链接和图片,例如:


文末

如果30岁以前,可以还不知道自己想去做什么的话,那30岁之后,真的觉得时间非常的宝贵,不能再浪费时间在一些碎片化的事情上,比如说看综艺,电视剧。一个人的黄金时间也就二,三十年,不能过得浑浑噩噩。所以花了基本上休息的时间,去不断的完善自己的知识体系,希望可以成为一个领域内的TOP。

同样是干到30岁,普通人写业务代码划水,榜样们深度学习拓宽视野晋升管理。

这也是为什么大家都说30岁是程序员的门槛,很多人迈不过去,其实各行各业都是这样都会有个坎,公司永远都缺的高级人才,只用这样才能在大风大浪过后,依然闪耀不被公司淘汰不被社会淘汰。

269页《前端大厂面试宝典》

包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。

前端面试题汇总

JavaScript

前端开发面试中,关于高并发场景的见问题主要围绕性能瓶颈、资源管理、异步处理和用户体验等方面展开。以下是几个典型问题及其应对策略: ### 一、在高并发请求场景下,如何避免浏览器崩溃或响应缓慢? 在处理大量并发请求时,浏览器可能会因为资源耗尽而崩溃或响应变慢。可以通过限制并发请求数量、使用请求队列机制来控制负载[^2]。例如,使用自定义的 `RequestQueue` 类,限制最大并发请求数,确保浏览器在处理大量请求时不会过载。 ```javascript class RequestQueue { constructor(maxConcurrent) { this.maxConcurrent = maxConcurrent; this.currentConcurrent = 0; this.queue = []; } add(request) { return new Promise((resolve, reject) => { this.queue.push({ request, resolve, reject }); this.processQueue(); }); } processQueue() { if (this.queue.length > 0 && this.currentConcurrent < this.maxConcurrent) { const { request, resolve, reject } = this.queue.shift(); this.currentConcurrent++; request() .then(resolve) .catch(reject) .finally(() => { this.currentConcurrent--; this.processQueue(); }); } } } ``` ### 二、如何优化前端页面加载速度以应对高并发访问? 前端页面加载速度直接影响用户体验和服务器压力。见的优化策略包括: - **资源压缩与懒加载**:压缩 JavaScript、CSS 和图片资源,使用懒加载技术延迟加载非关键资源。 - **CDN 加速**:通过内容分发网络(CDN)将静态资源分发到全球节点,减少用户访问延迟。 - **浏览器缓存**:合理设置 HTTP 缓存策略,减少重复请求。 - **服务端渲染(SSR)或静态生成(SSG)**:提升首屏加载速度,减轻客户端渲染压力。 ### 三、高并发场景下如何防止重复请求或重复提交? 在用户频繁点击按钮或刷新页面时,可能会导致重复请求,影响系统性能和数据一致性。解决方案包括: - **防抖(Debounce)与节流(Throttle)**:限制高频事件的触发频率,避免短时间内多次请求。 - **请求去重机制**:在请求队列中加入唯一标识符,避免相同请求重复发送。 - **按钮禁用机制**:在请求发出后禁用提交按钮,待响应返回后再恢复。 ### 、如何在前端处理异步任务以提高系统吞吐量? 前端可以通过异步编程模型提高并发处理能力,见的做法包括: - **Promise 和 async/await**:利用现代 JavaScript 的异步特性,编写清晰、易维护的异步逻辑。 - **Web Worker**:将耗时任务(如图像处理、复杂计算)移至后台线程,避免阻塞主线程。 - **使用消息队列思想**:借鉴后端消息队列的机制,将任务分批处理,缓解系统压力。 ### 五、如何应对高并发下的内存泄漏问题? 在高并发场景下,内存管理尤为重要。前端开发中应注意: - **及时释放无用对象**:避免全局变量滥用,及时解除事件监听器和定时器。 - **使用内存分析工具**:如 Chrome DevTools 的 Memory 面板,帮助识别内存泄漏点。 - **合理使用缓存**:避免缓存过多数据导致内存占用过高。 JavaScript 的内存堆分为新生代和老生代两个区域,前者用于存储生命周期较短的对象,后者用于长期存在的对象。通过优化垃圾回收策略,可以提升程序运行的连贯性[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值