面试技术问题总结一

MySQL的几种锁机制

一、从锁的粒度角度划分

表级锁

机制:它是对整张表进行锁定的一种锁。当一个事务对表执行写操作时,会获取写锁,在写锁持有期间,其他事务无法对该表进行读写操作;而当事务执行读操作时,会获取读锁,读锁之间是共享的,多个事务可以同时对表加读锁。

行级锁

机制:行级锁仅对操作的行进行锁定。它能最大程度地支持并发处理。行级锁又可细分为共享锁和排他锁。共享锁允许多个事务同时读取同一行数据;排他锁则会阻止其他事务对该行数据进行读写操作。

页级锁

机制:页级锁的锁定粒度介于表级锁和行级锁 之间,它锁定的是数据页

二、从锁的模式角度划分

共享锁(S 锁)

机制:也被称为读锁。如果事务 T 对数据对象 A 加上共享锁,那么事务 T 可以读取 A,但不能修改 A。同时,其他事务只能对 A 加共享锁,而不能加排他锁,直到事务 T 释放 A 上的共享锁。

排他锁(X 锁)

机制:又称写锁。若事务 T 对数据对象 A 加上排他锁,那么事务 T 既可以读取 A,也可以修改 A。在事务 T 释放 A 上的排他锁之前,其他事务不能对 A 加任何类型的锁。 意向锁 机制:这是一种表级别的锁,用于表示某个事务正在锁定某一行,或者将要对某一行加锁。

意向锁分为意向共享锁(IS 锁)和意向排他锁(IX 锁)

意向锁的主要作用是提高表级锁的判断效率

应用:当一个事务想要获取表的共享锁时,必须先获取该表的意向共享锁;想要获取表的排他锁时,则必须先获取表的意向排他锁。

说一下websocket和 http的区别

1、连接方式

HTTP:是无状态的请求-响应协议。客户端向服务器发送请求,服务器处理请求后返回响应,连接在请求响应完成后就会关闭。每次通信都需要重新建立连接,例如在浏览网页时,浏览器向服务器请求 HTML、CSS、JavaScript 等资源,服务器返回相应内容,之后连接断开。

WebSocket:是一种持久连接协议 。在客户端和服务器通过 HTTP 协议完成握手后,会建立起一条全双工的通信通道,连接会一直保持,直到其中一方主动关闭。这就好比在客户端和服务器之间建立了一座桥梁,双方可以随时通过这座桥梁进行数据传输。

2、通信方式

HTTP:是单向的半双工通信,通常是客户端主动发起请求,服务器被动响应,服务器不能主动向客户端发送数据,除非客户端再次发起请求。例如在电商网站上查询商品信息,需要用户点击搜索按钮发起请求,服务器才会返回商品列表。

WebSocket:支持全双工通信,客户端和服务器可以在任意时刻相互发送数据。比如在实时聊天应用中,客户端和服务器可以同时发送和接收消息,无需等待对方的请求。

3、数据传输格式

HTTP:数据传输格式多样,常见的有JSON、XML、HTML等。一般来说,HTTP 请求和响应会包含请求头和请求体,请求头包含了请求的元信息,如请求方法、请求的资源路径、客户端信息等,请求体则包含了具体的数据内容。

WebSocket:数据传输格式更加灵活,可以是文本数据,也可以是二进制数据。它在传输数据时会有自己的帧协议,将数据封装成顺进行传输,并且可以根据需要选择不同的操作码来表示数据的类型。

4、性能开销

HTTP:由于每次请求都需要建立和断开连接,会带来一定的开销,尤其是在频繁请求的场景下,如实时数据更新应用,会消耗大量的网络资源和服务器资源。而且为了保持会话状态,可能需要使用Cookie、Session等机制,进一步增加了开销

WebSocket:建立连接后是持久的,避免了频繁建立和断开连接的开销。在数据传输过程中,由于不需要像HTTP 那样携带大量的请求头信息,所以传输效率更高,更适合对实时性要求高、数据传输频繁的场景。

5、应用场景

HTTP:适用于对实时性要求不高的场景,如静态网页浏览、文件下载、表单提交等。在这些场景中,客户端只需要在需要时向服务器请求数据,服务器返回响应即可。

WebSocket:常用于实时性要求较高的场景,如在线聊天、实时数据监控、多人游戏等。在这些场景中,需要客户端和服务器之间能够实时地交换数据,以保证用户体验。

什么是HTTPS?HTTPS如何保证安全?

HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是在 HTTP 基础上加入了加密层(SSL/TLS 协议)的安全版本,目的是解决 HTTP 的安全隐患,保证数据传输的机密性、完整性和真实性。简单来说,HTTPS = HTTP + SSL/TLS,它通过 SSL/TLS 协议对传输的数据进行加密,让第三方无法窃听或篡改,同时验证服务器的身份,防止客户端被欺骗。

HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最广泛的一种网络协议,用于客户端(如浏览器)和服务器之间的通信,主要作用是传输超文本(如网页、图片、视频等)。

HTTP 的安全隐患

由于数据明文传输,在传输过程中可能被第三方(如黑客、网络运营商)窃听、篡改或伪造,例如:

  • 窃听:获取用户的账号密码、支付信息等敏感数据。
  • 篡改:修改网页内容(如替换广告、植入恶意代码)。
  • 伪造:冒充服务器向客户端发送虚假信息(如钓鱼网站)。

HTTPS 的安全机制主要依赖于 SSL/TLS 协议 和 **数字证书,**具体实现情况如下:

1、身份验证:借助数字证书确认服务器身份,客户端会验证证书的颁发机构、域名匹配度和有效期等;

2、加密传输:采用 "非对称加密 + 对称加密" 结合的方式,非对称加密用于传输对称密钥,对称加密用于传输实际数据;

3、完整性校验:通过生成 "消息认证码(MAC)",客户端比对接收数据的 MAC 与服务器发送的 MAC,判断数据是否被篡改。

HTTPS 通过 SSL/TLS 协议的加密机制保证数据传输的机密性和完整性,通过数字证书的身份验证机制确保通信双方的真实性,从而解决了 HTTP 明文传输的安全隐患。如今,HTTPS 已成为主流网站(尤其是涉及支付、登录的场景)的标配,浏览器会通过地址栏的 "锁" 图标提示用户当前连接是否使用 HTTPS 加密。

咱们用大白话来理解就是:

HTTP 就像寄明信片,内容是明文的,谁都能看,还可能被人改内容、冒名发,不太安全。

HTTPS 则是寄加密的快递,它在 HTTP 基础上多加了层保护(SSL/TLS)。

它怎么保证安全呢?靠两样:

一是 "数字证书",相当于服务器的身份证,由权威机构发的,能证明这服务器是真的,不是骗子假装的。浏览器会检查这证书是不是真的、没过期、和网站对得上。

二是加密传输,像寄快递前把东西锁起来。先通过非对称加密(类似用公钥锁箱子,只有服务器的私钥能打开)商量好一把 "对称密钥",之后传输的所有数据都用这把钥匙加密,别人就算截到了也打不开,改了也能发现。

简单说,HTTP 是裸奔,HTTPS 是穿了防护衣,让信息在网上跑的时候,别人偷不走、改不了,也骗不了你。

OSPF和BGP的区别

OSPF(Open Shortest Path First,开放式最短路径优先)和 BGP(Border Gateway Protocol,边界网关协议)是互联网中两种重要的路由协议,但它们的设计目标、应用场景和工作原理有显著区别。以下从多个方面详细对比两者的差异:

一、协议类型与工作范围

  • OSPF: 属于内部网关协议(IGP),仅在一个自治系统(AS)内部运行,用于管理 AS 内部的路由信息。例如,企业内网、校园网或运营商的单个 AS 内部,通常用 OSPF 计算最优路径。

  • BGP【需满足设备支持】: 属于外部网关协议(EGP),用于不同自治系统(AS)之间交换路由信息。例如,当数据需要从一个运营商的网络传递到另一个运营商的网络时,BGP 负责在 AS 之间选择路径。

二、路由计算依据

  • OSPF: 基于链路状态算法,通过 "最短路径优先(SPF)" 算法计算路由。

    • 每个路由器会向全网广播自己的链路状态(如接口带宽、开销等),形成统一的 "链路状态数据库"。
    • 以自身为根,使用 SPF 算法生成最短路径树,优先选择开销最小的路径(开销通常与带宽相关,带宽越高开销越小)。
  • BGP: 基于路径向量算法 ,不计算 "最短路径",而是根据**路由属性,**选择最优路径。

    • 路由属性包括 AS 路径长度(AS_PATH)、下一跳(NEXT_HOP)、本地优先级(LOCAL_PREF)等,管理员可通过配置属性控制路由选择(例如优先选择 AS 路径短的路由)。
    • 核心目标是避免 AS 之间的路由环路,并确保大规模网络的稳定性。

三、应用场景

  • OSPF

    • 适用于小规模到中大规模的单一 AS 内部,例如企业网络、数据中心内部或运营商的某个区域网络。
    • 优势是收敛速度快(链路状态变化时能快速更新路由),适合对实时性要求高的场景(如视频会议、在线游戏)。
  • BGP

    • 适用于跨 AS 的大规模网络,是互联网的 "核心路由协议",负责全球运营商之间的路由互联。
    • 支持大规模路由表(可处理数十万条路由),且允许管理员通过策略灵活控制路由(例如限制某些 AS 的流量),适合对稳定性和可控性要求高的场景。

四、路由更新方式

  • OSPF

    • 采用触发更新 + 定期更新:链路状态变化时立即广播更新(触发更新),同时每 30 分钟发送一次完整的链路状态通告(LSA)进行确认(定期更新)。
    • 更新范围限于 AS 内部,且仅传递变化的链路状态,而非完整路由表,带宽开销较小。
  • BGP

    • 采用增量更新:仅当路由信息发生变化时(如新增、删除或属性修改),才发送更新消息,且只传递变化的路由条目。
    • 初始建立连接时会交换完整路由表,但后续更新仅传递差异,适合大规模网络减少带宽消耗。

五、路由环路处理

  • OSPF: 由于运行在单一 AS 内部,通过链路状态算法和层次化设计(如划分区域 Area)避免环路:每个区域内的路由器只维护本区域的链路状态,区域间通过骨干区域(Area 0)转发,天然避免环路。

  • BGP: 跨 AS 场景中,通过AS_PATH 属性 避免环路:每条路由都会携带经过的 AS 列表,若收到的路由中包含本地 AS 号,则拒绝接收该路由,从而防止环路。

对比表格

对比维度 OSPF BGP
协议类型 内部网关协议(IGP) 外部网关协议(EGP)
工作范围 单一 AS 内部 跨 AS 之间
算法基础 链路状态算法(SPF) 路径向量算法
路由选择依据 链路开销(最短路径) 路由属性(如 AS_PATH、优先级)
路由表规模 较小(AS 内部路由) 极大(全球互联网路由)
收敛速度 慢(强调稳定性)
典型应用 企业内网、数据中心内部 互联网骨干网、运营商互联
环路处理 基于区域划分避免 基于 AS_PATH 属性避免

keepalived的工作原理

keepalived 是一个基于 **VRRP(虚拟路由)**协议来实现 LVS 服务高可用方案,可以解决静态路由出现的单点故障问题。

**工作原理:**在一个 LVS 服务器里面,它通常有主服务器和备用服务器,就是我们常说的 master 和 backup 这两种角色的服务器,对外服务时会提供给一个虚拟的 IP 也就是我们前面所提及到的 VRRP ,然后 master 会发送我们的 VRRP 的通告信息给我们的备用服务器,当 backup 接收不到我们的 VRRP 信息以及主服务器异常的时候,那么优先级最高的这个 backup 会接管虚拟IP成为新的 master。

**工作原理:**通过 VRRP 协议来选举出一个 master 主节点和多个 backup 从节点,那么主节点负责分配这个流量同时会给下面的 backup节点发送 VRRP 协议加密和通告信息,当下面的 backup 收不到通告信息了就会认为 master 节点是不可用的,那么优先级最高的这个 backup 节点就会成为新的 master,它就负责接下来的分发流量的工作了

两种方式一样,看自己更喜欢哪种回答

LVM逻辑卷

是 Linux 系统中用于管理磁盘存储的一种技术,它通过将物理磁盘抽象为逻辑卷,提供了比传统分区更灵活的磁盘管理方式。

物理卷(PV)与卷组(VG)

• PV 是 VG 的物理基础:一个 VG 由多个 PV 组成 ,PV 可以是整块物理磁盘(如/dev/sdb)或分区(如/dev/sdb1)。

• VG 是 PV 的逻辑容器:通过vgcreate myvg /dev/sdb /dev/sdc将多个 PV 合并为一个 VG ,形成统一的存储池。

• 动态扩展:可随时通过vgextend添加新 PV,或通过vgreduce移除 PV(需先迁移数据)。
物理扩展块(PE)与逻辑扩展块(LE)

PE 是物理存储的最小单位 :每个 PV 被划分为大小相等的 PE(默认 4MB),PE 编号全局唯一(如/dev/sdb:0表示 sdb 磁盘的第一个 PE)。

LE 是逻辑存储的最小单 位:LV 被划分为与 PE 大小相同的 LE,通过映射表与物理 PE 一一对应。

• 映射关系:当创建 LV 时,系统从 VG 中分配空闲 PE,并建立 LE 到 PE 的映射(如LV_LE0 → PV1_PE10)。

LVM 通过 分层抽象 + 映射机制 实现灵活性:

  • 物理层:将磁盘转化为可管理的 PV 和 PE。
  • 逻辑层:通过 VG 整合 PV 资源,建立 LE→PE 映射表。
  • 应用层:LV 提供统一接口,支持动态调整和快照。

常用命令

功能 物理卷(PV) 卷组(VG) 逻辑卷(LV)
创建 pvcreate vgcreate lvcreate
查看信息 pvdisplay, pvs vgdisplay, vgs lvdisplay, lvs
删除 pvremove vgremove lvremove
扩展 - vgextend lvextend
缩小 - vgreduce lvreduce
物理卷移动数据 pvmove - -

docker 的相关问题

什么是docker?

Docker 是一种轻量级的容器化技术 ,通过将应用及其依赖打包成独立的容器,实现 "一次构建,到处运行" 的目标。它解决了软件开发和部署过程中的环境一致性问题,极大提高了开发效率和系统可靠性。

什么是docker镜像?

Docker 镜像是Docker 容器的基础,它是一个只读的文件系统包,包含了运行应用程序所需的所有内容:代码、运行时环境、库、环境变量和配置文件。Docker 镜像使应用能够在任何环境中一致运行,解决了 "在我机器上能运行" 的问题。

什么是docker容器?

Docker 容器是 Docker 镜像的运行实例,是一种轻量级、可移植的独立运行环境。它封装了应用程序及其所有依赖项,确保应用在不同环境中一致运行。容器通过 Linux 内核的隔离技术实现进程级隔离,相比传统虚拟机具有更高的资源利用率和更快的启动速度。

docker容器有几种状态?

buffer 和 cache 的区别

buffer(缓冲区)cache(缓存) 都是内存中的临时存储区域,用来提升系统效率,但作用场景完全不同

Buffer 为 "写" 服务更多,Cache 为 "读" 服务更多

Buffer(缓冲区):像 "临时中转站",专门解决设备速度不匹配的问题。比如 CPU 写数据到磁盘时,先放缓冲区,CPU 不用等磁盘写完就可以干别的,缓冲区再慢慢传给磁盘。(如写磁盘时的临时存储)。

比如:你给远方的朋友寄快递,不会亲自跑过去送(太慢),而是先把快递放到小区快递柜(缓冲区),快递员定期来取走派送。
这里,你(快设备,比如 CPU)→ 快递柜(缓冲区)→ 快递员(慢设备,比如磁盘 / 网络),缓冲区让你不用等快递员,提高效率。

Cache(缓存):像 "常用文件柜",把你经常用的数据存起来。比如反复看同一个文件,第一次从磁盘读,之后直接从缓存拿,不用再麻烦磁盘,速度更快。(如反复读取的文件内容)。

比如:你每天早上都要喝牛奶,不会每次都去楼下超市(慢),而是提前买几盒放家里冰箱(缓存),早上直接拿,不用跑超市。
这里,超市(慢设备,比如磁盘)→ 冰箱(缓存)→ 你(快访问,比如 CPU / 用户),缓存让常用数据离访问者更近。

相关推荐
DolphinDB7 分钟前
更高效的因子研究工具:基于 DolphinDB 的因子评价框架详解
数据库
海底火旺12 分钟前
useState:批处理与函数式更新
前端·react.js·面试
一块plus13 分钟前
一门原本只是“试试水”的课程,没想到炸出了一群真诚的开发者
javascript·面试·github
此乃大忽悠14 分钟前
身份认证缺陷
java·数据库·webgoat·身份认证缺陷
mrsk18 分钟前
React useContext 实战指南:打造主题切换功能
前端·react.js·面试
然我19 分钟前
闭包在类封装中的神技:实现真正安全的私有属性,面试必懂的封装技巧
前端·javascript·面试
緈福的街口28 分钟前
【leetcode】2236. 判断根节点是否等于子节点之和
算法·leetcode·职场和发展
IT项目管理34 分钟前
达梦数据库DMDRS搭建单向dm8-dm8数据同步
数据库
程序员三藏1 小时前
如何使用Pytest进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
咖丨喱1 小时前
【Action帧简要分析】
服务器·数据库·asp.net