前端学习27 相关面试题1

1.前端工程化

项目构建工具:使用自动化构建(Webpack, Vite)来处理和打包前端资源(JavaScript, CSS, 图片),从而简化开发流程,提升开发体验。这些工具通常支持模块化开发、代码压缩、混淆、热更新等功能。

模块化开发:采用模块化的开发模式(如 ES6 模块、CommonJS、AMD 等),可以将代码拆分为更小、更易于管理的部分,有助于团队协作和代码复用。每个模块负责单一功能,并且通过明确的接口与其他模块交互。

组件化开发:基于组件的思想构建用户界面,比如 React、Vue中的组件。组件是独立且可复用的 UI 构建块,它们封装了自身的逻辑和样式,可以在不同的页面或应用之间共享。

2.手写快排

function quickSort(arr){
	if(arr.length<=1) return arr;
  	const p = arr[0];
  	const left = arr.slice(1).filter(item => item <=p);
  	const right = arr.slice(1).filter(item => item>p);
  return [...quickSort(left),p,...quickSort(right)];
}

3.手写开发订阅模式

class emitter{
	constructor(){
		this.events = {};
	}
    on(eventsName,callback){
        if(!this.events[eventsName]) {this.events[eventsName] = [];}
        this.events[eventsName].push(callback);
    }
    emit(eventsName,value){
        if(this.events[eventsName]){
            this.events[eventsName].forEach((callback)=>{
                callback(value);
            })
        }
    }
  // 订阅一次
	once(eventName, callback) {
	  const wrapper = (...args) => {
		callback(...args);
		this.off(eventName, wrapper);
	  };
	  this.on(eventName, wrapper);
	}
	off(eventName, callback) {
	  const callbacks = this.events[eventName];
	  if (!callbacks) return;
	  if (!callback) {
		// 清除所有
		delete this.events[eventName];
	  } else {
		// 清除指定回调
		this.events[eventName] = callbacks.filter(cb => cb !== callback);
	  }
	}
  
}
function greet(name) {
  console.log(`Hello, ${name}`);
}
const bus = new emitter();
bus.$on('hello', greet);
bus.$emit('hello', 'Tom'); // Hello, Tom

3.前端模块化

在前端开发中,模块化是指将代码按照功能划分成独立、可复用的模块,避免变量冲突、提高代码可维护性。早期主要通过 IIFE 实现模块封装,后来逐渐发展出了多种模块化方案。

  • CommonJS:主要用于 Node.js,使用 require 引入,module.exports 导出,特点是同步加载。
  • AMD / RequireJS:适用于浏览器,使用 define 和 require,支持异步加载模块。
  • ES Module(ESM):现代浏览器和前端框架主流使用,采用 import / export,支持静态分析和 Tree Shaking,适用于构建工具优化。
  • UMD:一种兼容 CommonJS、AMD、全局变量的通用模块定义规范,适合类库发布。
  • 全部评论

    相关推荐

    虾皮前端一面总结一、八股文考察1.&nbsp;箭头函数◦&nbsp;核心问题:需明确箭头函数特性(无this、arguments、prototype,不能用new)。◦&nbsp;未答关键点:◦&nbsp;this继承自外层词法作用域,非构造函数因无prototype且new时无法绑定this。◦&nbsp;new过程需创建实例、绑定this、返回实例,箭头函数无[[Construct]]内部方法。2.&nbsp;性能优化◦&nbsp;问题:不熟悉相关知识,需补充学习(如防抖节流、SSR、CDN、懒加载等)。3.&nbsp;浏览器内存与缓存◦&nbsp;Local/Session&nbsp;Storage:数据存储于磁盘,读取时从内存缓存或磁盘获取(取决于是否常驻内存)。◦&nbsp;协商缓存:◦&nbsp;max-age=0与no-cache区别:前者强制验证缓存,后者需服务器确认。◦&nbsp;ETag与Last-Modified并存:前者更精准(文件内容变化),后者依赖时间戳(可能误判)。4.&nbsp;React&nbsp;Hook◦&nbsp;问题:对useMemo、useCallback、memo使用场景模糊。◦&nbsp;改进点:结合项目举例(如子组件高频渲染时用memo缓存,避免函数重复创建导致的重渲染)。二、代码题•&nbsp;动态规划背包问题:用最少砝码数量组合目标重量,需明确状态转移方程(如dp[i]&nbsp;=&nbsp;min(dp[i],&nbsp;dp[i&nbsp;-&nbsp;w]&nbsp;+&nbsp;1))。三、面试官交流1.&nbsp;AI看法:强调合理利用AI辅助解决复杂问题,提升效率。2.&nbsp;性能优化建议:结合具体场景(如电商首屏优化、可视化图表性能),参考谷歌Lighthouse、Web&nbsp;Vitals等工具。四、改进方向1.&nbsp;基础巩固:深入理解箭头函数原理、浏览器存储机制、HTTP缓存策略。2.&nbsp;性能专题:系统学习优化手段,结合实际项目案例分析。3.&nbsp;React实践:梳理Hook使用场景,通过项目练习巩固(如列表渲染优化)。4.&nbsp;算法训练:强化动态规划题型,掌握背包问题变种解法。
    点赞 评论 收藏
    分享
    评论
    1
    7
    分享

    创作者周榜

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