91. 面试官:JSONP的原理是什么?

2023-09-21 09:00:28

91期

1. JSONP的原理是什么?
2. css优先级是什么样的?
3. display的值有哪些,分别有什么作用?

上面问题的答案会在第二天的公众号(程序员每日三问)推文中公布

90期问题及答案

1. 什么是前后端分离,好处是什么?

前后端分离是一种软件架构模式,它将前端和后端开发分离为两个独立的工作流程和技术栈,它们通过 API 或 Web 契约进行通信。以下是前后端分离的主要特点和好处:

特点:

  1. 独立开发:前端和后端开发团队可以并行工作,彼此独立,不会相互阻塞。这可以提高开发效率。

  2. 技术栈多样性:前端和后端可以选择最适合其任务的技术栈。前端可以使用 JavaScript 框架(如 React、Vue、Angular),而后端可以选择任何后端语言和框架(如 Node.js、Java、Python、Ruby)。

  3. API 接口:通常,前后端之间通过 API 接口进行通信。这使得前端和后端可以完全解耦,只需遵循定义好的 API 规范即可。

  4. 独立部署:前端和后端可以独立部署。这意味着前端可以使用静态文件托管服务(如 CDN)来提供内容,而后端可以将应用程序部署在自己的服务器上。

好处:

  1. 团队分工明确:前端和后端团队分工明确,可以专注于自己的领域,提高开发效率。

  2. 技术栈灵活性:可以根据需求选择最适合的技术栈,而无需受限于整个应用程序的技术栈。

  3. 可维护性:前后端分离使得应用程序更容易维护。前端和后端的代码彼此独立,修改一个部分不会影响到另一个部分。

  4. 性能优化:前端可以通过缓存、CDN 和其他性能优化技术来提高加载速度,而后端可以专注于处理业务逻辑。

  5. 跨平台开发:前端可以使用跨平台框架来构建移动应用,如 React Native、Flutter,而后端仍然可以提供 API 支持。

  6. 易于扩展:由于前后端解耦,添加新功能或扩展现有功能通常更加容易。

  7. 可测试性:前端和后端的代码都可以更容易地进行单元测试和集成测试。

需要注意的是,前后端分离并不适用于所有项目。对于小型项目,传统的服务器端渲染(SSR)模式可能更加简单和高效。但对于大型应用程序或需要高度可扩展性的项目,前后端分离可以提供更多的灵活性和控制。

2. 讲解你了解到的Express框架?

Express.js(通常称为 Express)是一个流行的 Node.js 后端框架,它建立在 Node.js 的基础之上,提供了一组强大的功能和工具,用于构建 Web 和 API 服务器。以下是 Express 框架的一些关键特点和概念:

  1. 快速搭建服务器:Express 提供了一个简单而强大的方式来创建 Web 服务器。你可以在几行代码中设置服务器并开始处理请求和响应。

  2. 路由:Express 具有强大的路由功能,可以帮助你定义 URL 路由和处理程序。通过路由,你可以将不同的 URL 映射到相应的处理程序函数。

  3. 中间件:中间件是 Express 的核心概念。中间件函数可以在请求到达路由处理程序之前或之后执行。这使得你可以轻松地添加功能,如身份验证、日志记录、错误处理等。

  4. 模板引擎:虽然 Express 本身不包括模板引擎,但它支持多种模板引擎,如 EJS、Pug(以前称为 Jade)、Handlebars 等。这些模板引擎使得在服务器端渲染动态内容变得容易。

  5. 静态文件服务:Express 允许你轻松地提供静态文件,如 HTML、CSS、JavaScript 和图像。这对于构建单页应用程序和网站非常有用。

  6. REST API 构建:Express 是构建 RESTful API 的理想工具。通过组织路由和中间件,你可以定义 API 端点和处理请求。

  7. 数据库集成:Express 可以与多种数据库集成,包括 MongoDB、MySQL、PostgreSQL 等。你可以使用适当的数据库驱动程序或 ODM(对象文档映射)库来访问和操作数据。

  8. WebSocket 支持:虽然 Express 本身是基于 HTTP 的,但它可以与 WebSocket 库集成,以支持实时通信和双向数据传输。

  9. 社区支持:Express 拥有庞大的社区支持,因此可以轻松找到各种教程、插件和解决方案。

  10. 可扩展性:Express 具有很高的可扩展性,你可以根据项目需求选择添加合适的中间件和功能。

总之,Express 是一个灵活、强大且受欢迎的后端框架,适用于构建各种类型的 Web 应用程序和 API。无论你是初学者还是经验丰富的开发人员,Express 都是一个值得学习和使用的工具。

3. 2个Node.js进程如何进行通讯?

在 Node.js 中,有多种方法可以实现两个进程之间的通信。以下是两个 Node.js 进程通信的常见方法:

  1. Child Process 模块

    const { spawn } = require('child_process');
    const childProcess = spawn('node', ['child.js']);
    
    childProcess.stdout.on('data', (data) => {
      console.log(`Child Process Output: ${data}`);
    });
    
    childProcess.stdin.write('Message from parent process');

    在上述示例中,child.js 是一个子进程,它可以通过标准输出将数据发送给父进程,父进程则通过标准输入向子进程发送消息。

  • Node.js 提供了 child_process 模块,允许你在 Node.js 中启动和与其他进程进行通信。你可以使用 spawnexecfork 方法启动其他 Node.js 进程或外部进程,并通过标准输入和输出进行通信。

  • 例如,你可以使用 spawn 方法来启动一个子进程,并与它进行双向通信:

使用进程间通信工具

  • 除了 child_process,还可以使用一些专门用于进程间通信的工具,如 ZeroMQ、Redis、RabbitMQ 等。这些工具提供了更强大的通信能力,可用于构建分布式系统和微服务。

  • 例如,你可以使用 Redis 的发布/订阅机制在多个 Node.js 进程之间进行实时消息传递。

WebSocket

  • 如果需要在不同的 Node.js 进程之间进行实时双向通信,可以使用 WebSocket。WebSocket 允许客户端和服务器之间建立持久的双向连接,从而实现实时通信。

  • 你可以使用像 Socket.io 这样的库来轻松构建 WebSocket 通信的应用程序。

共享文件或数据库

  • 如果两个 Node.js 进程需要共享数据,可以使用共享文件系统或数据库。例如,可以将数据存储在共享的数据库中,并让两个进程都能访问该数据库。

选择哪种方法取决于你的需求和项目的复杂性。如果只需要简单的通信,child_process 可能足够了。但如果需要构建分布式系统或需要高度可扩展性的通信,那么进程间通信工具或 WebSocket 可能更合适。

如果觉得这篇文章对你有帮助,希望多多点赞收藏加关注,也希望分享给更多爱学习的小伙伴,你的肯定是我最大的动力。

学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

更多推荐

【leetcode】数组排序

【leetcode】数组排序task03主要了解了数组中常见的排序方法:1.常见数组排序方法冒泡排序(BubbleSort):冒泡排序是一种简单的排序算法,它多次遍历数组,比较相邻的元素并交换它们,直到整个数组按升序排列。时间复杂度为O(n^2)。选择排序(SelectionSort):选择排序是一种简单的排序算法,它

基于Spring Boot的网上购物商城系统

目录前言一、技术栈二、系统功能介绍用户功能模块的实现管理员功能模块的实现商家功能模块的实现三、核心代码1、登录模块2、文件上传模块3、代码封装前言本课题是根据用户的需要以及网络的优势建立的一个基于SpringBoot的网上购物商城系统,来满足用户网络购物的需求。本网上购物商城系统应用Java技术,MYSQL数据库存储数

汉威科技亮相上海传感器展并发表主题演讲,智能传感器大有可为

9月15日,第8届中国(上海)国际传感器技术与应用展览会圆满落幕,该展会吸引了逾400家传感领域国内外的企业、100余家专业传感应用单位、500余位传感大咖共同参与,展会观众达30000人。作为全球三大传感器展之一的盛会,该展会也被称为全球传感器行业发展的风向标,而智能化则成为本次传感器的主题。展会同期举办的第八届智能

C++---链表

1、链表1.1、链表的结构每个链表开头都有一个头指针Head尾节点的指针域为NULL,用于判断此列表是否结束如果一个链表开始就为NULL,那么该链表为空链表链表中的先后不代表在真实内存中的位置,只是单纯的逻辑上关系1.2、创建链表我们首先利用结构体创建一个Student的结构体//利用链表创建3个学生的信息,学生信息包

【unity小技巧】Unity 存储存档保存——PlayerPrefs、JsonUtility和MySQL数据库的使用

文章目录前言PlayerPrefs一、基本介绍二、Demo三、优缺点JsonUtility一、基本使用二、Demo三、优缺点Mysql(扩展)完结前言游戏存档不言而喻,是游戏设计中的重要元素,可以提高游戏的可玩性,为玩家提供更多的自由和控制权。看完这篇文章就可以构建属于自己的存储系统了。PlayerPrefs它是一个仅

【Spring】数据导出为Excel的接口报java.io.IOException: UT010029: Stream is closed错误

数据导出为Excel的接口报java.io.IOException:UT010029:Streamisclosed错误实习时导师让写一个平台信息导出为Excel的功能,写完之后发现文件正常导出,但控制台一直报Streamisclosed错误。在网上找了大半天,都说是使用OutputStream时关闭了流导致的,这也确实

使用git-repo管理多个git仓库

step1:下载repogit-repo下载可在服务器端通过以下任一方式下载。gitclonehttps://gerrit.googlesource.com/git-repo(谷歌官方源)gitclonehttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo(国内清华源)gi

JS模块化

JS模块化什么是模块化?将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起。块的内部数据/实现是私有的,只是向外部暴露一些接口(方法)与外部其它模板通信。把所有的js代码写在一起,功能点不明确,耦合度不够,很难维护。模块化的优点避免命名冲突,减少命名空间污染更好的分离,按需加载更高复用性高可维

PgSQL-向量数据库插件-lantern

PgSQL-向量数据库插件-lantern即pgvector、pg_embedding后又一向量数据库扩展Lantern问世了。当然也为向量列提供了hnsw索引以加速ORDERBY...LIMIT查询。Lantern使用usearch实现hnsw。使用方法保留了标准PgSQL接口,兼容其生态工具。首先需要安装该插件:C

【Redis7】--4.事务、管道、发布和订阅

文章目录事务1.Redis事务2.Redis事务特性3.Redis事务命令3.1MULTI3.2EXEC3.3DISCARD3.4WATCH3.5UNWATCH4.不保证原子性4.1"全体连坐"4.2"冤头债主"5.事务执行流程管道1.pipeline的使用2.pipeline小总结发布和订阅1.常用命令1.1SUBS

LVGL移植win端模拟显示流畅解决方案-使用 SquareLine 生成前端 UI 文件

lvgl_port_win_vscode在win平台对lvgl方便的进行模拟显示,程序文件结构清晰,lvglwithSDL2,cmake构建,VsCode一键运行,使用SquareLine生成前端UI文件,win上直接跑。相比官方的lvgl移植到win端的几种方法SimulatoronPC—LVGLdocumentat

热文推荐