面试题答案
一键面试架构设计
- HTTP服务器框架选择:可以使用常见的如Node.js的Express框架、Python的Flask框架等。以Node.js和Express为例进行说明。
- 业务逻辑封装:将复杂业务逻辑封装在闭包回调函数中,闭包可以访问其定义时所在作用域的变量。
- 路由注册:把闭包回调函数注册到特定的HTTP路由上,以便服务器接收到对应请求时执行该逻辑。
- 资源管理:对于涉及到的外部资源(如数据库连接、文件句柄等),要确保在使用完毕后正确释放,防止资源泄漏。
关键代码示例(Node.js + Express)
- 安装依赖:
npm install express
- 定义闭包回调函数:
const express = require('express'); const app = express(); // 定义闭包回调函数,假设这里的业务逻辑依赖于一个外部变量 const complexLogic = function () { let externalVariable = '一些数据'; return function (req, res) { // 这里执行复杂业务逻辑,比如操作数据库、处理文件等 console.log('执行复杂业务逻辑,访问外部变量:', externalVariable); res.send('业务逻辑执行完毕'); }; };
- 注册到HTTP路由中:
// 注册闭包回调函数到特定路由 app.get('/specific - request', complexLogic()); const port = 3000; app.listen(port, () => { console.log(`服务器在端口 ${port} 上运行`); });
- 处理资源管理问题:
// 假设业务逻辑中需要连接数据库 const mysql = require('mysql'); const complexLogic = function () { let externalVariable = '一些数据'; return function (req, res) { const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test' }); connection.connect(); // 执行数据库相关业务逻辑 connection.query('SELECT * FROM some_table', (error, results, fields) => { if (error) throw error; console.log('数据库查询结果:', results); connection.end(); // 业务逻辑执行完毕后关闭数据库连接,释放资源 res.send('业务逻辑执行完毕'); }); }; };
注意事项
- 在实际应用中,资源管理要根据具体使用的资源类型遵循相应的规范,如文件操作要及时关闭文件句柄,数据库连接要正确释放等。
- 闭包中的变量作用域和生命周期需要仔细考虑,避免出现内存泄漏或变量访问异常的情况。
- 对于复杂业务逻辑,可以进一步拆分成多个函数或模块,以提高代码的可维护性和可读性。