首页 > 其他分享 >常见面试题问题及答案

常见面试题问题及答案

时间:2024-08-19 14:22:13浏览次数:11  
标签:面试题 HTTP 请求 数据库 常见 响应 Session 答案 服务器

常见面试题问题及答案
1、什么是API端点(API endpoint)?说说相关技术点

用于访问特定资源或功能的网络地址或URI,代表了API的一个具体操作或服务,并定义了客户端与服务器之间进行交互的方式;
1:URI(统一资源标识符),包含了协议(如HTTP/HTTPS)、主机名、路径、查询参数等
2:请求方法,GET(获取数据)、POST(提交数据)、PUT(更新数据)、DELETE(删除数据)等
3:路由(Routing),在服务器端,路由机制负责将请求的URI与具体的处理函数或控制器进行匹配。路由会解析请求的路径和方法,决定如何处理请求并生成响应
4:参数和查询字符串,API端点可以接受路径参数(如/users/{id}中的{id})、查询参数(如?search=keyword),以及请求体中的数据。这些参数用于指定请求的详细信息和过滤条件
5;请求和响应格式,通常使用标准的格式,如JSON(JavaScript Object Notation)或XML(eXtensible Markup Language)。定义清晰的数据格式可以提高API的可用性和一致性
6:身份验证和授权,确保只有经过验证的用户才能访问特定的数据或功能。常见的方法包括API密钥、OAuth 2.0、JWT(JSON Web Tokens)等
7:错误处理,处理和返回适当的错误信息,以帮助客户端理解问题的原因。常见的错误代码有404(未找到)、500(服务器错误)等。

relational DB(关系型数据库)与NoSQL DB(非关系型数据库)有什么区别?该如何选型?

主要区别
**数据模型**:
关系型数据库(Relational DB):使用表格结构,数据以行和列的形式存储。表格通过外键关系相互连接,遵循结构化查询语言(SQL)标准。
非关系型数据库(NoSQL DB):采用不同的数据模型,包括键值对、文档、列族和图模型。数据存储方式较为灵活,不强制使用表格结构。
**查询语言**:
关系型数据库:使用SQL(Structured Query Language)来进行查询、更新和管理数据。
非关系型数据库:查询方式因数据库类型而异,可能使用JSON查询语法、MapReduce、或者数据库特定的查询语言。
**事务处理**:
关系型数据库:通常支持ACID(原子性、一致性、隔离性、持久性)事务特性,保证数据的一致性和完整性。
非关系型数据库:事务支持不一定符合ACID标准,更多的是基于最终一致性(Eventual Consistency),适合在大规模分布式环境中处理。
**扩展性**:
关系型数据库:通常水平扩展(增加更多的节点)比较困难,更多依赖于垂直扩展(增加单节点的资源)。
非关系型数据库:设计上通常支持水平扩展,能够更容易地在多个节点之间分布数据和负载。
**数据一致性**:
关系型数据库:提供强一致性,即对数据的操作能够立即在所有查询中体现。
非关系型数据库:有些数据库提供最终一致性,即系统会在一定时间内达到一致状态,但短时间内可能出现数据不一致。
**模式**:
关系型数据库:数据模式是固定的,表结构在创建时定义,数据插入和修改时需要符合模式。
非关系型数据库:数据模式通常是动态的,数据可以以不同的格式存储,提供更大的灵活性。
应用场景:
关系型数据库:适合传统业务应用、ERP系统、CRM系统等。
非关系型数据库:适合大数据应用、实时分析、内容管理系统、社交网络等。

什么是REStful API,其设计核心原则(core principle)是什么?

RESTful API(Representational State Transfer API)是一种基于REST架构风格的网络接口,广泛用于构建和设计Web服务
1、每次请求都是独立的,服务器不会保存客户端的状态信息
2、每个资源通过URL(统一资源定位符)进行唯一标识
3、RESTful API应遵循一组统一的接口约定,使得不同的客户端能够以相同的方式访问和操作资源。统一接口包括:
资源的表示:资源可以通过不同的格式(如JSON、XML)进行表示。
HTTP方法:使用标准的HTTP方法(GET、POST、PUT、DELETE)来操作资源。

一个典型的HTTP请求/响应周期(request/response cycle)是怎样的,从建立连接开始。

1、建立连接:浏览器(客户端)将请求的域名解析(DNS解析)为IP地址,客户端与服务器之间通过三次握手建立TCP连接
2、发送HTTP请求:
   ①:请求构造:客户端构造HTTP请求消息,包括请求行、请求头和可选的请求体。
   	  请求行:包括HTTP方法(如GET、POST)、请求目标(URL)和HTTP协议版本(如HTTP/1.1)。
	  请求头:包含一些元数据,如User-Agent、Accept、Content-Type等。
	  请求体:如果HTTP方法是POST或PUT,可能包含要发送到服务器的数据。
   ②:请求发送:客户端将构造好的请求通过TCP连接发送给服务器。
3、服务器处理请求
	接收请求:服务器接收并解析HTTP请求消息。
	处理请求:服务器根据请求的内容和请求头进行相应的处理,包括访问数据库、执行计算等。
	构造响应:服务器构造HTTP响应消息,包括响应行、响应头和响应体。
	响应行:包括HTTP协议版本、状态码(如200 OK、404 Not Found)和状态消息。
	响应头:包含响应的元数据,如Content-Type、Content-Length、Set-Cookie等。
	响应体:包含实际的数据,如HTML内容、JSON数据等。
4. 发送HTTP响应:服务器将构造好的响应通过TCP连接发送回客户端。
5. 客户端处理响应:接收并解析HTTP响应消息,根据响应内容和响应头的指示进行后续操作。例如,浏览器会渲染HTML页面、执行JavaScript代码或处理返回的数据
6. 关闭连接
	保持连接:如果HTTP协议使用了持久连接(如HTTP/1.1的Connection: keep-alive),TCP连接会保持一段时间,以便进行后续的请求/响应交换。
	关闭连接:如果HTTP协议使用了非持久连接(如HTTP/1.0),或者服务器/客户端明确关闭连接,TCP连接会被关闭。
7. 缓存和其他操作
	缓存:如果响应头中包含缓存控制指令(如Cache-Control),客户端可以将响应内容缓存起来,以便在后续请求时使用,减少网络负担。
	Cookie处理:如果响应头中包含Set-Cookie,客户端会保存这些Cookie并在后续请求中发送回服务器。
总结:HTTP请求/响应周期涉及从客户端与服务器建立TCP连接到发送请求和响应,再到处理响应和关闭连接的完整过程。这一过程保证了客户端和服务器之间的有效数据交换。

web应用中,session是如何创建与管理的?

Session(会话)用于在多个 HTTP 请求之间存储用户的状态和数据。由于 HTTP 协议本身是无状态的,每个请求都是独立的,Session 机制允许服务器在用户的不同请求之间保持一定的状态。
1. Session 的创建
用户发起请求:
当用户首次访问 Web 应用时,通常没有现存的 Session 信息。
服务器生成 Session ID:服务器生成一个唯一的 Session ID(会话标识符)。这个 ID 是一个随机生成的字符串,用于唯一标识一个用户的会话。
发送 Session ID 给用户:服务器将生成的 Session ID 通过 Cookie 或其他机制(如 URL 参数)发送给用户的浏览器。最常见的是使用 Cookie,将 Session ID 存储在用户的 Cookie 中。
创建 Session 对象:服务器端会创建一个 Session 对象,并将其与生成的 Session ID 关联起来。Session 对象用于存储用户的状态数据,例如用户信息、购物车内容等。
2. Session 的管理
处理后续请求:
用户在后续的请求中,会自动将存储有 Session ID 的 Cookie 随请求发送到服务器。
服务器端查找 Session:服务器通过收到的 Session ID 查找对应的 Session 对象。如果 Session 存在,服务器会恢复之前存储的状态信息。
更新 Session 数据:用户在请求过程中可以修改或添加 Session 数据。例如,用户登录后,服务器会在 Session 中存储用户的身份信息。
保存和维护 Session:服务器会定期保存和维护 Session 数据。Session 数据通常保存在内存中,也可以存储在数据库、分布式缓存(如 Redis)等地方,以支持负载均衡和高可用性。
3. Session 的过期与销毁
Session 过期:为了防止过期的 Session 占用资源,服务器通常会设置 Session 的过期时间。过期时间可以基于最后一次访问时间或固定时间段。
有些 Web 应用允许用户自定义 Session 的过期时间或在用户闲置一定时间后自动过期。
Session 销毁:当用户注销或 Session 过期时,服务器会销毁相应的 Session 对象,并清除与之相关的 Session ID。
客户端的 Cookie 也会被删除或失效。

如何避免SQL注入(SQL injection attack)的?

使用准备好的语句或ORM框架。
进行输入验证和清理。
遵循最小权限原则。
避免动态SQL构造。
采用安全的编码实践。

你对HTTP无状态(statelessness)的概念是怎么理解的,这对后端服务的设计会产生什么影响?

指每个 HTTP 请求都是独立的,服务器不会保留客户端的状态或上下文信息.服务器在处理每一个请求时,并不会记住之前的请求或与之相关的信息。每个请求都是全新的,必须携带所有必要的信息以便服务器能够理解和处理
HTTP 的无状态性对于后端服务的设计带来了重要影响,主要体现在会话管理、数据存储、负载均衡、缓存、安全性以及故障处理等方面

怎么保证你设计的API是安全的?

1、身份验证和授权:使用强认证机制(如OAuth2、JWT)验证用户身份,并实施细粒度授权控制。
2、输入验证:对所有用户输入进行严格验证,确保输入符合预期格式,避免SQL注入和跨站脚本(XSS)攻击。
3、数据加密:在传输和存储过程中加密敏感数据,使用HTTPS加密通信,确保数据的保密性和完整性。
4、错误处理:避免暴露内部错误信息,提供通用的错误信息,以防泄露系统信息。
5、API速率限制:实施速率限制(Rate Limiting)防止滥用和拒绝服务(DoS)攻击。
6、日志记录:记录安全相关事件和访问日志,以便检测和响应潜在的安全问题。

你的后端程序如何应对流量激增(traffic surge),此时你如何扩展后端应用程序(scale backend application)?

1. 水平扩展(Horizontal Scaling):增加实例、负载均衡、容器化
2. 垂直扩展(Vertical Scaling):增加CPU、内存或存储
3. 缓存:使用缓存机制(如Redis、Memcached)缓存频繁访问的数据,减少对数据库的直接查询,降低系统负担
4. 数据库优化:数据库分片、读写分离、优化查询
5. 异步处理:使用消息队列(如RabbitMQ、Kafka)处理异步任务
6. 服务拆分(Microservices Architecture):微服务架构
7. 性能优化:对应用代码进行优化,减少计算复杂度,提高处理速度
8. 灾备和容错

如何保证你写的代码容易理解且便于维护,谈谈你的理解

1、遵循编程规范
2、编写清晰的文档
3、单一职责原则
4、避免复杂的嵌套
5、编写单元测试
6、使用配置文件

标签:面试题,HTTP,请求,数据库,常见,响应,Session,答案,服务器
From: https://blog.csdn.net/qq_35091185/article/details/141317684

相关文章

  • 30种常见的GIS矢量数据格式
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......
  • 【TCP/IP】自定义应用层协议,常见端口号
    互联网中,主流的是TCP/IP五层协议5G/4G上网,是有自己的协议栈,要比TCP/IP更复杂(能够把TCP/IP的一部分内容给包含进去了)应用层可以代表我们所编写的应用程序,只要应用程序里面用到了网络通信,就可以认为这个代码就是属于应用层的代码日常开发中最常用到的一层:使用大佬......
  • 【面试题 02.07. 链表相交 简单】
    题目:同:160.链表相交给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例1......
  • 2024年Java面试题最新整理
    一、Java基础部分面试题1.Java面向对象的三个特征封装:对象只需要选择性的对外公开一些属性和行为。继承:子对象可以继承父对象的属性和行为,并且可以在其之上进行修改以适合更特殊的场景需求。多态:允许不同类的对象对同一消息做出响应。篇幅限制下面就只能给大家展示小册部分内容......
  • MySQL中处理JSON数据案例示范和常见问题以及性能优化
    随着大数据技术的快速发展,数据格式和存储方式也变得越来越多样化。在业务系统中,很多数据经常以JSON格式存储。为了高效处理这些JSON数据,MySQL自5.7版本开始原生支持JSON数据类型,并在后续版本中不断扩展和优化相关功能。本文将以电商交易系统为示例,深入探讨MySQL在处理JSON数......
  • Java面试题———Redis篇①
    目录1、项目中为什么用Redis2、Redis的数据类型有哪些3、Redis为什么这么快4、Redis的过期删除策略有哪些5、Redis的内存淘汰策略有哪些6、Redis的RDB和AOF区别7、RDB期间可以同时处理写请求吗8、Redis集群有哪些方案1、项目中为什么用Redis我们项目中之所以选择R......
  • Java面试题———JVM篇
    目录1、JVM的主要组成部分有哪些2、堆栈的区别是什么3、JVM的类加载器有哪些4、什么是双亲委派模型5、说一下类加载器的执行过程6、怎么判断对象是否可以被回收7、JVM的垃圾回收算法有哪些8、JVM的垃圾回收器都有哪些1、JVM的主要组成部分有哪些JVM主要分为下面几......
  • 最新版Java面试题及答案整理(程序员必备)
    1、java为什么要有包装类型?主要原因包括以下几点:处理基本数据类型的null值:基本数据类型(如int,double等)不能直接赋值为null,而包装类型(如Integer、Double)可以表示null值,这对于某些业务逻辑和数据处理来说非常有用。提供额外功能:包装类型提供了一些额外的方法和功能,这些......
  • 全网最新200道Java程序员面试题(含答案)!
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全~这套互联网30w字Java面试题包括了:MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、Java面试、Spring、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题一、Java基础1.......
  • Java集合相关面试题(超详细)附:Java详细面试资料直链
    Java集合相关面试题内容搬运资料,来源见文章末尾仅为分享,不涉及任何获利行为,~(~ ̄▽ ̄)~可别发律师函啊链接:面试资料提取码:s4w8ArrayList底层实现是数组LinkedList底层实现是双向链表HashMap的底层实现使用了众多数据结构,包含了数组、链表、散列表、红黑树等1算法复杂度分......