博客
关于我
倍智+中互记录面试篇(待完善)
阅读量:299 次
发布时间:2019-03-01

本文共 2325 字,大约阅读时间需要 7 分钟。

数据库锁机制与 MySQL 索引优化

1. 数据库锁机制

数据库锁是一种用于协调多个进程或线程对数据库资源的并发访问控制机制,主要用于防止数据竞争和 DEADLOCK(死锁)问题。

1.1 锁的类型

从数据操作粒度分:

  • 表锁:锁定整个表,开销小,加锁快,不容易出现死锁,但锁定粒度大,发生锁冲突概率高。
  • 行锁:锁定当前操作行,开销大,加锁慢,容易出现死锁,但锁定粒度最小,锁冲突概率最低。

从数据操作类型分:

  • 读锁(共享锁):允许多个读操作同时进行,不会互相影响。
  • 写锁(排他锁):当前操作未完成之前,阻断其他写锁和读锁。

1.2 乐观锁与悲观锁

  • 乐观锁:假设数据不会被其他进程修改,通常通过 CAS(比较与交换)自旋算法实现。

  • 悲观锁:假设数据可能被其他进程修改,在获取数据时先加锁,确保数据不变。

  • 乐观锁适用于读多写少的场景,而悲观锁通常用于需要精确控制并发访问的高并发系统。

2. SpringMVC 工作原理及重要组件

SpringMVC 是一个基于 MVC 设计模式的轻量级 Web 框架,通过 DispatcherServlet 处理用户请求。

2.1 SpringMVC 请求处理流程

  • 用户发起 HTTP 请求,DispatcherServlet 处理请求。
  • HandlerMapping 查找相应的处理器(Handler)。
  • HandlerExecutionChain 构建执行链。
  • DispatcherServlet 调用 HandlerAdapter 执行处理器。
  • 处理器 返回 ModelAndView。
  • DispatcherServlet 渲染视图并返回响应。
  • 2.2 DispatcherServlet 的作用

    • 作为前端控制器,负责请求分派和流程调度。
    • 支持文件上传、异步请求、国际化等功能。

    2.3 SpringMVC 重要组件

    • DispatcherServlet:前端控制器,负责请求分发。
    • HandlerMapping:处理器映射器,根据请求映射处理器。
    • ViewResolver:视图解析器,解析逻辑视图名为物理视图。

    3. Spring 核心概念

    Spring 的核心是 IOC(控制反转)和 AOP(面向切面编程)。

    3.1 IOC

    通过动态配置和反射创建对象,减少手动编码,实现松耦合。

    • bean 的生命周期:实例化、属性赋值、初始化、销毁。

    3.2 AOP

    通过动态代理实现日志记录、事务管理等切面功能。

    • 使用 AspectJ 实现动态代理,支持 JDK 样式代理和 CGILIB 样式代理。

    4. MyBatis 缓存机制

    MyBatis 提供两级缓存,主要用于减少数据库查询次数。

    4.1 一级缓存

    • 层级:SqlSession 级别。
    • 特点:默认开启,缓存粒度小。
    • 缺点:会话关闭时缓存失效。

    4.2 二级缓存

    • 层级:Mapper XML 级别。
    • 特点:默认关闭,缓存粒度大。
    • 缺点:集群环境下容易出现一致性问题。

    4.3 缓存执行顺序

  • 二级缓存优先级高于一级缓存。
  • 在同一个 SqlSession 中,优先查二级缓存。
  • 一级缓存数据会在会话提交或关闭时同步到二级缓存。
  • 5. Spring Boot 使用感受

    Spring Boot 提供了一键集成的功能,简化了配置管理。

    5.1 常用注解

    • @SpringBootApplication:标注主应用类。
    • @RestController:标注 RESTful 控制器。
    • @Component:标注 Spring 组件。
    • @Autowired:通过依赖注入获取Bean。
    • @EnableAutoConfiguration:开启 Spring Boot 自动配置。

    6. Linux 命令

    • tail -f:实时查看日志。
    • vi:编辑文档。
    • ps -ef:查看进程。
    • netstat:查看网络统计信息。
    • ping:测试网络连通性。
    • find:查找文件。
    • grep:文本搜索。

    7. Lambda 表达式

    Lambda 表达式是一种匿名函数,可以直接传递给接收者方法作为参数。

    • 优点:简化代码,提升可读性。
    • 缺点:可能导致代码难以调试和维护。

    8. 线程池

    8.1 七大参数

    • corePoolSize:核心线程数。
    • queueCapacity:任务队列容量。
    • maxPoolSize:最大线程数。
    • keepAliveTime:线程空闲时间。
    • rejectedExecutionHandler:任务拒绝处理器。

    8.2 拒绝策略

    • 排队策略:将任务加入队列,等待核心线程空闲。
    • 直接拒绝:立即拒绝任务,适合不重要任务。
    • 抢占策略:强制获取一个核心线程。
    • 返回服务:允许任务返回服务继续执行。

    9. MySQL 三大范式

    • 1NF:原子性(每个字段存储一致的值)。
    • 2NF:消除部分依赖(非主属性不能依赖主属性)。
    • 3NF:消除传递依赖(非主属性不能依赖其他非主属性)。

    10. 索引失效情况

    • 违反最左前缀法则。
    • 范围查询右边列索引失效。
    • 字符串不加引号。
    • 索引列进行运算。
    • 头部模糊匹配。
    • 使用 !=<> 运算符。

    11. Spring 中设计模式

    • 工厂模式:创建 BeanFactory。
    • 模板模式:提供通用处理流程。
    • 代理模式:动态代理实现切面功能。
    • 策略模式:资源加载策略。
    • 单例模式:控制 Bean 的创建单例。
    • 观察者模式:通知机制。
    • 适配器模式:适应不同接口。

    12. 延迟加载

    • 场景:数据库查询、文件读取、资源加载等。
    • 实现:通过接口或代理返回代理对象,延迟实际执行。

    通过以上优化,文章结构更加清晰,内容更加易于阅读,同时保留了技术细节的准确性。

    转载地址:http://cxco.baihongyu.com/

    你可能感兴趣的文章
    Node出错导致运行崩溃的解决方案
    查看>>
    Node响应中文时解决乱码问题
    查看>>
    node基础(二)_模块以及处理乱码问题
    查看>>
    node安装卸载linux,Linux运维知识之linux 卸载安装node npm
    查看>>
    node安装及配置之windows版
    查看>>
    Node实现小爬虫
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node提示:npm does not support Node.js v12.16.3
    查看>>
    Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
    查看>>
    Node服务在断开SSH后停止运行解决方案(创建守护进程)
    查看>>
    node模块化
    查看>>
    node模块的本质
    查看>>
    node环境下使用import引入外部文件出错
    查看>>
    node环境:Error listen EADDRINUSE :::3000
    查看>>
    Node的Web应用框架Express的简介与搭建HelloWorld
    查看>>
    Node第一天
    查看>>
    node编译程序内存溢出
    查看>>
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 1996 登山
    查看>>