前端学习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、全局变量的通用模块定义规范,适合类库发布。
  • 全部评论

    相关推荐

    岗位:游戏测试工程师形式:腾讯会议线上面试(约40分钟)时间:2025年10月1.&nbsp;实习中对接口的测试与调优(重点追问)问题:你说用JMeter把接口从320ms优化到110ms,具体是怎么做的?我的回答:先明确压测目标:“创建订单”接口,日均5k+调用;用JMeter模拟500并发用户,持续10分钟,监控TPS、平均响应时间、错误率;发现数据库QPS高达3000,成为瓶颈;配合后端引入Redis缓存用户Token和商品热点数据;重新压测对比:响应时间降至110ms,数据库QPS下降65%;输出测试报告,包含图表和结论,用于技术评审决策。2.&nbsp;Linux&nbsp;软链接&nbsp;vs&nbsp;硬链接问题:说说软链接和硬链接的区别?硬链接:指向&nbsp;inode,与原文件共享数据块,删除原文件不影响硬链接;不能跨文件系统,不能链接目录。软链接(符号链接):类似快捷方式,存储的是目标路径;原文件删除后软链接失效;可跨文件系统,可链接目录。测试场景应用:在部署测试环境时,常用软链接快速切换不同版本的配置文件或日志目录。4.&nbsp;Python&nbsp;在测试中的应用问题:你提到用&nbsp;Python,能说说在测试中怎么用吗?自动化脚本:用&nbsp;requests&nbsp;+&nbsp;pytest&nbsp;写接口回归脚本;数据生成:用&nbsp;Faker&nbsp;生成大量测试账号、订单数据;日志分析:用正则+文件读取,快速定位错误日志中的异常堆栈;工具开发:曾写过一个&nbsp;CSV&nbsp;解析器,自动将关卡配置转为测试用例输入。5.&nbsp;登录密码字段测试设计(6-12位字符)问题:用户密码要求6-12个字符,如何设计等价类和边界值?有效等价类&quot;123456&quot;、&quot;abcdefghijk&quot;6~12位合法字符无效等价类&quot;&quot;、&quot;12345&quot;、&quot;1234567890123&quot;、&quot;123&nbsp;456&quot;(含空格)&lt;6位、&gt;12位、含非法字符边界值5位、6位、7位、11位、12位、13位重点测5/6/12/13补充:还会考虑特殊字符(如!@#$%)、全角/半角、复制粘贴绕过前端校验等场景。三、个人发展&nbsp;&amp;&nbsp;岗位理解问题:你有开发能力,为什么选择测试?未来3年怎么规划?
    查看5道真题和解析
    点赞 评论 收藏
    分享
    评论
    1
    8
    分享

    创作者周榜

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