常见面试题10

简介: HTTP是超文本传输协议,基于TCP,规定客户端与服务器通信规则。常见请求方式有GET和POST,区别在于参数传递、安全性和用途。HTTPS通过SSL加密更安全,但耗资源。常用状态码如200成功、404未找到、500服务器错误。转发在服务端完成,重定向由浏览器发起两次请求。MySQL中char定长、varchar变长;事务具ACID特性,隔离级别解决并发问题。

什么是HTTP协议 ?

  • 必答内容:

HTTP协议就是 "超文本传输协议",规定了客户端与服务器端数据通信的规则。 而HTTP协议,它的底层是基于TCP协议的,而TCP协议呢,是面向连接、安全且无状态的协议。

那在现在的Web开发中,基本上所有的请求都是基于HTTP协议 或 HTTPS协议的。

  • 可能追问的问题:

1). 那HTTP协议与HTTPS协议的区别是什么 ?

  • 那HTTP协议与HTTPS协议最大的区别,当然是数据传输的安全性了。 HTTP协议的信息是以明文传输,如果敏感信息被截取了,是可以直接获取传递的信息的。 相对之下,HTTPS协议是基于SSL加密传输的信息,可以确保数据的安全传输。
  • 还有呢,就是端口不同。 HTTP协议默认端口 80,而HTTPS协议默认的端口 443。

所以说,HTTP协议的安全性没有HTTPS高,但是HTTPS协议会比HTTP耗费更多的服务器资源。

HTTP协议中请求方式GET 与 POST 什么区别 ?

  • 必答内容:

那两种请求方式,使我们进行项目开发,最为常见的两种请求方式。 两者的区别主要有以下几点:

  • 传递参数的大小限制不同。GET请求参数在URL中传递,所以参数的大小会收到URL长度的限制。 而POST请求,是在请求体中传递参数,只受到服务器端的配置限制。
  • 安全性不同。 GET请求的参数暴露在URL中,安全性较低,不适合传递敏感信息。 而POST请求参数在HTTP消息体中传递,安全性相对较高。
  • 应用场景不同。 GET请求一般用于获取数据,而POST请求则用于提交数据。
  • 进阶回答:

那在项目开发中,现在的url风格,基本都是restful风格。所以呢,项目开发中,请求方式除了GET、POST之外,还有像PUT、POST也是非常常用的。

  • 可能会继续追问的问题:

你刚才提到Restful,什么是Restful,谈谈你的理解?

Restful其实就是一种软件架构风格,那既然是一种风格,就说明是可以被打破的,项目开发可以不按这套风格来。 但是我之前接触的项目,都是Restful风格的。 按照我的理解,Restful风格的两大特点:

  • 通过请求url地址,来定位要操作的资源。(如:http://localhost:8080/users/1,通过这个url,我就知道对1号用户资源进行操作)
  • 通过请求方式,来决定对资源进行什么样的操作。比如,GET 方式,就是用来查询的;POST方式,就是用来新增的;PUT方式,就是用来修改数据的;而DELETE方式就是用来删除数据的。

HTTP协议中常见的状态码 ?

HTTP协议的状态码,大的方面来说,分为5类, 分别是1xx,2xx,3xx,4xx,5xx。而在项目开发中,最为常见的状态码有这么几个:

  • 101:这个状态码,表示临时状态码,表示请求已经接受,服务器正在处理 (之前项目中,使用websocket时见到这个状态码)
  • 200:这个状态码,是最常见的,表示请求成功。
  • 302:表示重定向。
  • 401:表示此次请求需要用户身份认证,未认证就响应401。
  • 404:表示服务器无法找到对应的资源(请求路径找不到)。
  • 500:服务器内部错误。

转发 与 重定向的区别?

这个在现在的前后端分离开发中,基本上就不存在对应的转发操作 和 重定向操作了。

  • 转发是指服务器收到用户请求后,在服务器端将请求转发给另一个资源进行处理,然后将处理结果返回给用户,用户并不知道这个过程,是服务器内部完成的,整个过程只有一次请求
  • 重定向是指当用户访问某个URL时,服务器返回一个特殊的响应码(3xx),并通过响应头(Location)告诉浏览器需要跳转到另一个URL。浏览器收到重定向响应后,会向新的URL发起新的请求,然后显示新页面的内容。整个过程对于浏览器来说是两次请求

总的来说,重定向是在客户端发生的,浏览器需要重新发送请求;而转发是在服务器端发生的,对于客户端来说是透明的

MySQL数据库中的 char 与 varchar的区别是什么?

MySQL中的 charvarchar 都是用于存储字符串的数据类型,但它们在存储方式和性能上有所不同。以下是它们的主要区别:

第一点呢,就是存储方式不同:

  • char:定长字符串,长度是固定的,不管实际存储的字符串长度如何,都会占用固定长度的存储空间。如:char(10) 会始终占用10个字符的空间。
  • varchar:变长字符串,长度不固定。占用的空间与实际存储的字段长度有关。 如:varchar(10) 表示最多可以存储10个字符,如果存储的字符串长度不足10,假设为5,只会占用5个字符空间。

第二点呢,就是性能不同:

  • 对于char,由于其固定长度,操作会快些,但是会存储浪费磁盘空间的问题。
  • 对于varchar,由于长度可变,操作时会相对慢一点,但是可以节省磁盘空间,尤其是存储的数据长度不固定时。

所以呢,我们在设计表结构的时候,需要根据具体的场景来选择具体的数据类型。 就比如啊,如果是手机号、身份证号这样的字段,由于长度固定,我们就直接选择char类型即可,并指定长度,如:char(11)、char(18)。再比如,像用户名、备注信息这类长度不固定的,我们直接选择varchar类型,长度根据页面原型和需求文档确定。

什么是事务以及事务的四大特性?

  • 必答内容:

事务是数据库中的基本概念,是指一组操作的集合,而这一组操作要么同时成功,要么同时失败,从而保证数据库中数据的正确性和完整性。

那事务呢,具有四大特性,也就是我们常说的ACID,分别是:原子性、一致性、隔离性、持久性。 那接下来,我就分别来聊聊这四大特性。

1). 原子性指的是事务中的这一组操作,是不可分割的最小操作单元了,操作要么全部成功,要么全部失败。

2). 一致性是指在事务操作的前后,必须使数据处于一致的状态。

3). 隔离性指的是数据库中提供了隔离机制,保证事务在不受外部并发操作的影响的独立环境中运行。

4). 持久性就比较简单了,就是事务一旦提交或回滚了,它对数据库的改变就是永久的。

  • 可能继续发问的问题:

1). 你刚才提到了并发事务,那并发事务回引发哪些问题?

并发事务引发的问题,主要有这么几个:

  • 脏读:就是一个事务,读取到了另一个事务还没有提交的数据。
  • 不可重复读:指的是在同一个事务中,先后读取同一条记录,但两次读取的数据不同。
  • 幻读:指的是一个事务按照条件查询数据时,没有对应的行,但是插入时,又发现这行数据已经存在了好像出现了幻觉。

2). 如何解决这些问题呢?

那这些问题,在数据库系统中都已经解决了。在数据库中提供了不同的隔离级别来解决这些问题, 分别有以下几种:

  • READ UNCOMMITED :读未提交。 这种隔离级别下,会出现脏读、不可重复读、幻读问题。
  • READ COMMITED:读已提交。 这种隔离级别,解决了脏读问题,但是会出现不可重复读、幻读问题。
  • REPEATABLE READ:可重复读。这种隔离级别,解决了脏读、不可重复读问题,但是会出现幻读问题。
  • SERIALIZABLE:串行化。解决了上述所有的并发事务问题。

而在MySQL数据库中,默认的隔离级别是 REPEATABLE READ(可重复读)。

3). 那为什么没有用SERIALIZABLE(串行化) 这种隔离级别呢?

其实,隔离级别,也不是越高越好。因为隔离级别高了,确实可以解决并发事务引发的问题,但是隔离级别越高,性能也越低。

目录
相关文章
|
1月前
|
数据库 微服务
常见面试题19
BASE理论提出“基本可用、软状态、最终一致性”,是分布式系统中对CAP定理的实践妥协。相比强一致的刚性事务(ACID),它属于柔性事务,强调高可用与最终一致,适用于Seata等分布式事务方案中的AT、TCC、SAGA模式,而非传统2PC的强一致性。
44 7
|
2月前
|
Linux 网络安全 开发工具
常见面试题01
本内容主要介绍了Docker部署及常用命令的使用,包括简单部署与集群部署的方法,以及在Linux系统中查看日志的常用命令,如cat、grep等。内容适用于面试场景,帮助候选人更好地展示自身技能。
51 0
|
1月前
|
负载均衡 安全 应用服务中间件
常见面试题18
正向代理代表客户端发起请求,隐藏客户端身份,用于访问控制与隐私保护;反向代理代表服务器接收请求,实现负载均衡与安全防护;CDN通过全球节点加速内容分发;Nginx可作反向代理实现轮询、权重等负载均衡策略;CAP定理指出分布式系统无法同时满足一致性、可用性与分区容错性。
56 4
|
2月前
|
消息中间件 存储 Java
常见面试题02
本内容介绍MQ的应用场景、交换机模式、消息不丢失机制、延迟消息处理及消息挤压解决方案,涵盖RabbitMQ的确认机制、持久化、消费者配置及实际项目应用。
94 1
|
2月前
|
存储 SQL 关系型数据库
常见面试题11
MySQL索引主要使用B+tree结构,具有层级少、检索快、支持范围查询等优点。InnoDB中聚簇索引将数据存于叶子节点,主键为默认索引;二级索引则存储主键值,需回表查询完整数据。创建索引需遵循最左前缀、避免类型转换、函数操作等原则,并通过explain分析执行计划,防止索引失效,提升查询效率。
55 0
|
2月前
|
缓存 搜索推荐 算法
常见面试题09
排序算法分为比较类(如快排、归并、堆排)和非比较类(如计数、桶、基数)。快排平均最快但不稳定,归并稳定且复杂度恒定,插入排序适合小规模或近有序数据。工业级常混合多种算法优化性能。
59 2
|
28天前
|
存储 缓存 NoSQL
常见面试题21
本文介绍如何提升分布式锁性能,包括减少锁范围、使用Redis集群、优化库存扣减及分段锁策略;探讨Redis故障时的应对方案,如哨兵机制、本地缓存 fallback;并解析Redis常见数据类型及其应用场景,对比主从与分片集群架构差异。
46 6
|
29天前
|
NoSQL API 调度
常见面试题20
分布式锁适用于共享资源互斥、防止重复操作、控制并发流量等场景,常见于超卖防控。可通过数据库、Redis(如Redisson)、ZooKeeper实现,其中Redisson适合高并发,ZooKeeper保证强一致性。
46 5
|
1月前
|
XML SQL Java
常见面试题15
Spring Boot配置优先级:命令行参数 > 系统属性 > application.properties > .yml > .yaml;自动配置基于@Import与条件注解,SpringBoot3使用xxx.imports替代spring.factories。自定义starter需分离starter与autoconfigure模块。MyBatis支持XML或注解映射结果集,参数传递可用@Param或直接传对象/Map。
96 4
|
1月前
|
缓存 负载均衡 Java
常见面试题16
MyBatis提供一级缓存(SqlSession级)和二级缓存(Mapper级),提升查询效率。Eureka通过注册、续约、发现、下线实现服务治理,Nacos在功能与性能上更优,支持配置管理与实时推送。Spring Cloud LoadBalancer取代Ribbon,提供轮询、随机等负载策略。Hystrix与Sentinel均支持熔断限流,但Sentinel在流量控制和实时性上更强。
48 2