[面试][後端]你会的後端框架不只一个,可以说明一下它们之间的差异吗?

你是十八般武艺样样精通,还是样样通样样松?

工程师真的很难,会得不多会被问为什麽没学,会得很多还要被质疑专业程度;这种比较类型的问题,除非你有事先做功课,不然就算你都会用也未必能在现场对答如流。

大纲

  1. 你会的後端框架不只一个,可以说明一下它们之间的差异吗?

    • 1.1 面试官为什麽会问?
    • 1.2 面试官想从答案确认什麽?
    • 1.3 笔者提供的简答
  2. 回答问题所需具备的知识

    • 2.1 PHP VS Node.js
    • 2.2 用 supervisor 让 Node.js 热更新
    • 2.3 不一定要拼个谁输谁赢
  3. 衍伸问题

    • 3.1 既然你先学了 Node.js 的框架,为何後来改用 PHP 的框架?
    • 3.2 使用框架有什麽好处跟坏处?

1. 你会的後端框架不只一个,可以说明一下它们之间的差异吗?

1.1 面试官为什麽会问?

因为履历资讯中显示求职者会如下的後端(Backend)框架:

  • PHP:Laravel
  • Node.js:Express.js、AdonisJS

当你会的东西多,面试官就会想了解你是每个都学一点,还是真的了解它。


1.2 面试官想从答案确认什麽?

  • 能否简单叙述 PHP 与 Node.js 的差异
  • 举例过去用这些框架做过哪些专案或是功能
  • 为什麽会学习新的框架

1.3 笔者提供的简答

之前使用 PHP 的 Laravel 框架开发过内部管理系统,也曾用 Node.js 的 Express.js 框架完成过餐厅点餐系统。

两者的差异主要因为程序语言而产生的,PHP 是同步语言、多执行绪,Node.js 是一个能执行 JavaScript 的环境,支援非同步,为单执行绪。

如果专案要求稳定一致的效能,我会偏向使用 PHP 框架;而如果要承接高流量,我会选择 Node.js 框架。


2. 回答问题所需具备的知识

2.1 PHP VS Node.js

如果面对一个问题只有一种解决方案时,面试官会深入询问这个技术;但如果面对问题有两个以上的解决方案,他就会问你在不同情境下该使用什麽技术,每个技术都有各自的优势,这边我们就从不同的角度来做分析吧~

  • 同步的 PHP vs 异步的 Node.js

    • 同步的 PHP 会为每个 Request 建立一个 thread,每个 thread 都会消耗记忆体,也就是说如果想要服务更多的客户就要花心思在硬体设备上。
    • 异步的 Node.js 是非阻塞 (non-blocking) I/O 设计,搭配上 Event Loop 可以用一句很形象的话说明:「与其人多但好多人闲着;还不如一个人拼命往死里做。」
  • 多执行绪的 PHP VS 单执行绪的 Node.js

    • 多执行绪 (multi-threaded)的 PHP
      使用阻塞 (blocking) I/O 的设计

      PHP 可以为每个 Request 都开一个执行绪;如果你想要实现非阻塞也能透过 reactPHP 来实现。

    • 单执行绪 (single-threaded)的 Node.js
      使用非阻塞 (non-blocking) I/O 设计 + 提供非同步 (asynchronous) 处理

      Node.js 原则上是单执行绪,但可以透过 PM2 的 Cluster Mode 达到多执行绪。

  • 应用场景
    从 Client 端与 Server 端的沟通频率来做分析:

    • 沟通频率不高
      PHP 是个不错的选择(ex:个人部落格,像 WordPress 就是用 PHP 写的)。
    • 沟通频率频繁
      Node.js 更能激发性能(ex:single-page-application、聊天室);它适合大吞吐量的系统,较不适合需要大量 CPU 运算的系统。
  • 可使用的资源

    • PHP 有 Composer
      Composer 的命名方式:「所有者/package 名称」
    • Node.js 有 NPM
      NPM 的命名方式:「package 名称」

      因为 NPM 的命名方式太自由,导致上面有很多的资源都是无效资源,关键字第一个找到的未必是最合适的

  • 人才市场

    • 人才数量
      PHP 比 Node.js 早了 10 几年发行,因此市场上使用 PHP 的人比使用 Node.js 的人更多;如果职位流动性高,用 PHP 开发会比较合适。
    • 薪资
      物以稀为贵,同样都是新人,会 Node.js 的薪水会略高於会 PHP 的求职者。
  • 专案容量
    用 Laravel 跟 Express.js 来比较:

    • 专案初期
      一开始 Laravel 因为包山包海所以专案体积较大。
    • 专案後期
      尽管 Express 是 Node.js 轻量级的框架,但因为实作过程往往要扩充一堆 package,而且一个 package 往往会有很多的 dependency;这些原因容易导致最终实作出来的是一个笨重的专案。
  • 程序语言转换
    除非你的运气逆天,每次都刚好找到符合你技能树的公司,而且这间公司专案用的技术还很固定;不然肯定要面对程序语言的转换,这边分享几个转换时要注意的重点。

    • 找类型相似的框架
      从 PHP 跳到 Node.js 一定会面临诸多不适应;但如果你选择的是跟 Laravel 很类似的 AdonisJS 框架,这份不适感会下降许多,反之亦然。
    • 语言语法
      如果你已经熟悉了一种程序语言,我觉得转换到另外一个语言的学习成本不会太高;但许多内建函式都要重新学习、生命周期也要重新熟悉、错误处理的经验也要重新累积
    • 专案规模
      如果是只需要 CRUD 逻辑的小专案,那我觉得藉此多了解一门程序语言是一个很棒的机会;但如果面临的是业务逻辑复杂的大专案,我强烈建议一定要选自己熟悉的程序语言,或者团队中的扛霸子熟悉这门语言;不然出事根本没人可以救得了。
  • 效能

    • 响应速度
      Node.js 靠着 V8 引擎加上非同步的特型,拥有较快的响应速度。
  • 面对错误的处理

    • PHP 遇到某个 Request 错误时,它只对这个 Request 产生影响。
    • Node.js 因为所有 Request 都在单执行绪的 Web-server 中,所以某个 Request 导致的未知错误就可能影响到整个 Server。

      不过这块可以透过 PM2 的 Cluster Mode 与自动重启来补救。

  • 热更新

    • PHP 修改後,只要刷新页面就能看到。
    • Node.js 预设没有热更新,需要关闭专案後重启。

2.2 用 supervisor 让 Node.js 热更新

在开发阶段推荐使用 supervisor 这款套件。

  • STEP 1:在全域安装套件npm install supervisor -g

  • STEP 2:建立一个myapp.js的档案,并复制贴上下面程序

    var http = require("http");
    http
      .createServer(function (req, res) {
        res.writeHead(200, { "Content-Type": "text/plain" });
        res.end("Hello World!");
      })
      .listen(3000, "127.0.0.1");
    
  • STEP 3:用node myapp.js启动程序後,修改res.end("Hello World!");的内容;再刷新网页後内容不变

  • STEP 4:改用supervisor myapp.js启动程序,修改res.end("Hello World!");的内容;再刷新网页後内容更新

supervisor 也可以做专案资料夹的监控,但是要记得排除一些资料夹(ex:储存 log 档的);否则你的专案就无时无刻在重起了。

如果是正式的网站且流量大,建议使用 PM2 来做处理,它也有监控资料夹的功能。


2.3 不一定要拼个谁输谁赢

存在即合理

  • 小专案不用花太多时间在评估框架及程序语言选择上
    有些公司对专案要用什麽框架以及程序语言保持着非常谨慎的态度,谨慎的态度是对的,但也要考量到专案的规模;如果今天的专案就是 CRUD 的简单应用,预估使用者数量不多或是主要来自於内部成员,用什麽框架及程序语言其实都差不多
  • 看组织成员擅长的语言
    如果公司高层为了追求潮流而要求开发人员用一个不熟悉的框架去做专案,他最好祈求专案上线後平平安安;不然出事了公司没有能够处理的人才,没有人会在意一个不能用的网站效能有多好。
  • 每个程序语言都有自己的拥护者
    在不同的条件下,每个程序语言都有自己的优势,而且每年都会诞生新的框架与程序语言;笔者觉得与其不停盲目追逐新的技术,不如先深入研究一个成熟的技术,当你有办法靠它解决各种现实难题时,再去学新的框架跟程序语言也不晚

3. 衍伸问题

3.1 既然你先学了 Node.js 的框架,为何後来改用 PHP 的框架?

考点:这题其实是想了解求职者的人格特质

这两个都是为了解决问题的技术,我一开始用 Node.js 的 Express 框架独立完成了几份专案;但後来有一个需要 Team work 的大型专案,因为当时的组长比较熟悉 PHP 的 Laravel 框架,所以我便藉由这个机会学习新的技术;也因为这次的技术转换,让我了解不同框架在部署以及效能各方面的差异

我想透过上面的回答给面试官几个讯息:

  • 我能独立完成专案,也可以团队合作。
  • 我愿意学习新技术。
  • 学习的同时会分析不同框架的优劣。

3.2 使用框架有什麽好处跟坏处?

考点:确认求职者对框架的认知

  • 好处
    框架能够让初学者快速入门并开发出有一定水平的专案,因为框架提供了许多常用的函式,因此可以大幅缩短专案时程;在团队协作上框架优势更为明显,能够让成员有一致的开发方式

  • 坏处
    因为框架已经帮开发人员做了太多事情,这会导致开发人员并不理解许多功能的原理,这也造成了一但框架无法满足功能,初学者的生产力会断崖式下降;如果长期使用,也容易让自己的开发思维被限制在框架内


笔者碎碎念

希望读者不要只把我提出来的问题当成面试会出的考题;当面试官会这样询问时,通常是因为实务上也会遇到类似的问题。

感谢大家的阅读,如果喜欢我的文章可以订阅接收通知;如果有帮助到你,按Like可以让我更有写文的动力,我们明天见~

参考资源:

  1. PHP + Apache Stack vs Node.js
  2. 服务端 I/O 效能大比拼:Node、PHP、Java、Go
  3. 简析 Node.js 特点与应用场景
  4. 详细版 | 用 Supervisor 守护你的 Node.js 进程
  5. 浅谈 Node.js 和 PHP 程序管理

我在 Medium 平台 也分享了许多技术文章
❝ 主题涵盖「MIS & DEVOPS资料库前端後端MICROSFT 365GOOGLE 云端应用自我修炼」希望可以帮助遇到相同问题、想自我成长的人。❞


<<:  网页超连结-30天学会HTML+CSS,制作精美网站

>>:  功能与优化,请选择

Day01 序 -- 大致安好

特别的一年,从每天上班战战兢兢的通勤上班,到经历过长时间的家工作 不知道大家有没有不习惯的感觉呢? ...

D16-(9/16)-元太(8069)-有鳗鱼饭之称的电子纸题材

注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...

【D24】制作讯号灯#7:制作个股的MA灯号

前言 加权指数和法人留仓那些都已经完毕了,现在回到个股的讯号灯。这次要做的是MA(移动平均数)的穿越...

Day 17 网页分析 - Web Application Analysis (WhatWeb)

WhatWeb是一个用来分析网站的工具,拥有超过1800种的插件来分析网站,包括服务器类型、版本、I...

Day27 - 使用 LIFF 表单收集用户讯息

LINE Developers:https://developers.line.biz/zh-ha...