当前位置: 首页 > news >正文

每日一面 day03

Q:介绍一下MySQL的三种日志(redo,undo,bin)

Redo Log 和 Undo Log 是存储引擎 InnoDB 层面实现的,Bin Log 是 MySQL 层面实现的。

下面是三种日志的简要介绍:

  1. Redo Log:保证事务的持久性(Durability)。Redo Log 记录了已提交事务的所有更改,以便在发生故障时可以恢复数据。

    • Redo Log 是一种顺序写入的日志,写入速度比随机写入要快。
    • 当事务对数据库进行修改时,首先将更改写入 Redo Log,而不是直接写入数据文件。这样,即使系统崩溃,也可以使用 Redo Log 中的记录来恢复数据。
    • Redo Log 在 MySQL 中以“日志组”的形式存在,通常在 InnoDB 存储引擎中使用。

    特点:

    • Redo Log 是物理日志,记录的是数据页的物理变化。
    • 在数据库崩溃后进行恢复时非常重要,确保已提交事务的数据不会丢失。
  2. Undo Log:支持事务的原子性(Atomicity)和一致性(Consistency),以及实现 MVCC(多版本并发控制)。

    • Undo Log 记录了事务对数据的所有修改的反向操作,以便在事务回滚时能够恢复到事务开始前的状态。
    • 当一个事务执行更新操作时,系统会在 Undo Log 中记录下修改前的值,这样在需要回滚时就可以使用这些信息恢复数据。
    • Undo Log 是逻辑日志,记录的是对数据的逻辑变化。

    特点:

    • Undo Log 使得 MySQL 能够实现事务的回滚,确保在发生错误时能够恢复到一致性状态
    • 在实现 MVCC 时,Undo Log 允许读取未提交数据的事务在特定条件下读取数据的历史版本
  3. Bin Log:用于数据的复制和恢复。Binlog 记录了所有对数据库的更改操作(包括 DDL 和 DML 语句),而不是数据的实际内容

    • 当执行任何更新操作时,MySQL 会将该操作以事件的形式记录在 Binlog 中。这样可以将这些操作应用到其他数据库实例,实现数据复制。
    • Binlog 可以配置为不同的格式,如 Statement、Row 和 Mixed 模式,决定了日志中记录的信息类型。
    • Binlog 是主从复制的基础,主库会将 Binlog 发送给从库

    特点:

    • Binlog 是逻辑日志,记录的是 SQL 语句及其变更,而不是具体的物理数据
    • 在数据恢复中,Binlog 可以用来重放操作,将数据库恢复到某个特定时间点
    • Binlog 的存在使得 MySQL 支持数据的备份和恢复,以及高可用性集群的实现

Q:介绍一下Spring 中的 @Autowired和@Resource

**@Resource@Autowired**的对比:

  • 都是用来自动装配的,都可以作用在属性字段或方法上

  • @Autowired

    • 默认通过**类型(byType)**进行注入。
    • 如果找到多个同类型的 bean,会抛出 NoUniqueBeanDefinitionException
    • 如果使用了 @Qualifier@Primary 注解,可以明确指定要注入的具体 bean,从而帮助解决歧义。@Qualifier 可以用来基于名称选择特定 bean,但不会在 byType 后尝试 byName
  • @Resource

    • 默认先通过**名称(byName)**查找对应的 bean。

    • 如果找不到匹配的名称,则根据**类型(byType)**进行查找。

    • 如果 byType 找到多个同类型的 bean,会抛出 NoUniqueBeanDefinitionException

    • 如果在名称和类型查找后都没有找到 bean,抛出 NoSuchBeanDefinitionException

Q:Spring 中用到了那些设计模式?

  1. 工厂模式:如 BeanFactoryAppicationContext,通过工厂模式创建和管理Bean对象
  2. 单例模式:Bean的默认作用域。
  3. 代理模式:AOP 和 一些动态代理的实现,如JDK接口实现动态代理,CIGLIB继承实现动态代理,以及@Transcational也会使用代理模式创建代理对象。
  4. 模板方法:如JdbcTemplateRedisTemplate以及Mybaytis - Spring 整合的sqlSessionTemplate
  5. 观察者模式:Spring的事件驱动模型
  6. 策略模式:Spring的Resource接口的实现,允许根据不同的资源类型(系统、url、类路径)来加载
  7. 适配器模式:Spring MVC的HandlerAdapter允许不同类型的处理器(如 ControllerHttpRequestHandler)能够处理 HTTP 请求
  8. 装饰器模式:Spring 的 BeanPostProcessor 允许在Bean初始化前后进行一些额外的逻辑处理

Q:你了解java是怎么实现代理模式的吗?(jdk原生和cglib)

对于动态代理, JDK 动态代理 vs CGLIB 动态代理

特性JDK 动态代理CGLIB 动态代理
代理对象只能代理实现了InvocationHandler接口的类可以代理没有实现接口的类
实现方式基于反射和接口基于继承和字节码生成
性能对于接口的代理,性能较好生成代理类需要更多资源,但一次生成后性能更优
使用场景适用于接口代理适用于没有接口的类的代理
限制只能代理接口目标类不能是 final,方法不能是 final

CGLIB动态代理 原理:通过继承生成代理类,使用字节码生成库(如 ASM)来动态生成目标类的子类,并在子类中覆盖目标类的方法。代理对象实际上是目标对象的子类,所有对代理对象方法的调用都会被重定向到代理逻辑。

JDK原生动态代理原理:通过接口代理对象,当通过代理对象调用方法时,JDK 实际上会执行 InvocationHandler 中的 invoke() 方法。在该方法中,您可以添加自定义逻辑(如记录日志、权限检查等),并最终调用目标对象的方法。代理对象会在执行目标方法时调用该方法。

相关文章:

每日一面 day03

Q:介绍一下MySQL的三种日志(redo,undo,bin) Redo Log 和 Undo Log 是存储引擎 InnoDB 层面实现的,Bin Log 是 MySQL 层面实现的。 下面是三种日志的简要介绍: Redo Log:保证事务的…...

ssm基于SSM框架的餐馆点餐系统的设计+VUE

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 摘要 I Abstract II 1绪论 1 1.1研究背景与意义 1 1.1.1研究背景 1 1.1.2研究意义 1 1.2国内外研究…...

多人播报配音怎么弄?简单4招分享

想象一下,你手中的小说突然间活了起来,每个角色都有了自己的声音和情感。 这就是多人配音的魅力所在。它让文字跃然纸上,赋予了故事新的生命。 那么,如何制作一部引人入胜的小说呢?多人配音怎么制作的呢?…...

《Windows PE》4.1导入表

导入表顾名思义,就是记录外部导入函数信息的表。这些信息包括外部导入函数的序号、名称、地址和所属的DLL动态链接库的名称。Windows程序中使用的所有API接口函数都是从系统DLL中调用的。当然也可能是自定义的DLL动态链接库。对于调用方,我们称之为导入函…...

计算机专业大学生应该如何规划大学四年?

计算机专业的大学生在学习过程中应该注重以下几个方面,以确保他们在快速变化的技术领域中保持竞争力: 基础知识: 数学基础:离散数学、线性代数、概率论等数学课程对于理解算法和数据结构至关重要。编程基础:学习至少一…...

R知识图谱1—tidyverse玩转数据处理120题

以下是本人依据张老师提供的tidyverse题库自行刷题后的tidyverse Rmd文件,部分解法参考张老师提示,部分解法我本人灵感提供 数据下载来源https://github.com/zhjx19/tidyverse120/tree/main/data 参考https://github.com/MaybeBio/R_cheatsheet/tree/mai…...

【赵渝强老师】K8s中的有状态控制器StatefulSet

在K8s中,StatefulSets将Pod部署成有状态的应用程序。通过使用StatefulSets控制器,可以为Pod提供持久存储和持久的唯一性标识符。StatefulSets控制器与Deployment控制器不同的是,StatefulSets控制器为管理的Pod维护了一个有粘性的标识符。无论…...

机器学习笔记(持续更新)

使用matplotlib绘图: import matplotlib.pyplot as plt fig, axplt.subplots() #创建一个图形窗口 plt.show() #不绘制任何内容,直接显示空图 重复值处理: 重复值处理代码: import pandas as pd data pd.DataFrame({学号: [1…...

Nginx 配置之server块

在 Nginx 配置中使用两个 server 块是为了处理 HTTP 和 HTTPS 请求的不同需求。具体来说: 第一个 server 块: 监听 80 端口(HTTP)。将所有 HTTP 请求重定向到 HTTPS(443 端口)。 第二个 server 块&#xff…...

魅族Lucky 08惊艳亮相:极窄四等边设计引领美学新风尚

在这个智能手机设计趋于同质化的时代,魅族以其独特的设计理念和创新技术,再次为市场带来了一股清新之风。 近日,魅族全新力作——Lucky 08手机正式曝光,其独特的“极窄物理四等边”设计瞬间吸引了众多消费者的目光,而…...

自动化的抖音

文件命名 main.js var uiModule require("ui_module.js"); if (!auto.service) {toast("请开启无障碍服务");auto.waitFor();} var isRunning true; var swipeCount 0; var targetSwipeCount random(1, 10); var window uiModule.createUI(); uiMo…...

无人机之巡航控制篇

一、巡航控制的基本原理 无人机巡航控制的基本原理是通过传感器检测无人机的飞行状态和环境信息,并将其反馈给控制器。控制器根据反馈信息和任务需求,计算出无人机的控制指令,并将其发送给执行机构。执行机构根据控制器的控制指令&#xff0c…...

面试必问的7大测试分类!一文说清楚!

在日常测试工作中,我们经常会听到“单元测试,集成测试,系统测试”之类的词汇,大家都知道这是按照开发阶段进行测试活动的划分。 这种划分完整的分类,其实是分为四种“单元测试,集成测试,系统测…...

深信服上网行为管理AC无法注销在线用户

下图用户认证成功后无法注销 很多入网的用户都是使用的这个账号 针对单个IP强制注销也不生效 解决步骤: 接入管理-用户管理-用户绑定管理-用户绑定 删除绑定免认证的配置 删除后所有用户会强制注销掉,重新登录即可 可添加主页联系方式帮忙远程解决问…...

使用GitLab CI构建持续集成案例

1. 部署GitLab (1)基础准备 解压软件包并导入镜像: [rootmaster ~]# curl -O http://mirrors.douxuedu.com/competition/Gitlab-CI.tar.gz [rootmaster ~]# tar -zxvf Gitlab-CI.tar.gz [rootmaster ~]# ctr -n k8s.io image import gitla…...

WSL2环境下Ubuntu的Docker安装与配置

检查是否存在安装残留,移除可能会造成冲突的组件。 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done从apt Docker仓库中安装官方GPG key: sudo apt-get update …...

使用vscode调试wails项目(golang桌面GUI)

文章目录 安装 Golang 环境安装 NPM安装 VSCode安装 Go 插件安装 Go 插件依赖工具安装 Wails系统检查 准备项目Visual Studio Code 配置安装和构建步骤参考资料 安装 Golang 环境 访问 golang 官网下载环境安装包:https://go.dev/dl/ 安装 NPM 从 Node 下载页面 …...

Java中注解与反射的详细介绍

注解和反射 一、注解 什么是注解?Annotation Override :表示一个方法声明打算重写超类的另一个方法声明Deprecated:表示不鼓励程序员使用这样的元素,(此注释可以用于修饰方法,属性,类&#xf…...

Redis 过期时间删除策略详解

在使用 Redis 时,设置键的过期时间是一项非常有用的功能。它可以帮助我们自动清理不再需要的数据,节省内存空间。那么,Redis 是如何处理这些带有过期时间的键呢?这就涉及到 Redis 的过期时间删除策略。 一、Redis 过期键的判定 R…...

C语言_内存函数

内存函数是 C 标准库中的一组函数&#xff0c;用于管理和操作内存。使用时需要包含头文件<string.h>。 1. memcpy的使用和模拟实现 函数形式如下&#xff1a; void* memcpy(void* destination, const void* source, size_tnum);函数解析和注意事项&#xff1a; memcp…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...