2023 学习日志

2023-05-16

2023-01-03

mybatis源码学习
学习视频:https://www.bilibili.com/video/BV1Tp4y1X7FM?p=1&vd_source=cc82a52a9b9b8b31eca3aa74606e608a(这老师讲的真的很好)

分为4部分:动态代理MapperProxy、SQL会话SqlSession、执行器Executor、JDBC处理器StatementHandler

执行器
【1】简单执行器
simpleExecutor,每次执行SQL需要预编译SQL语句。
【2】可重用执行器
ReuseExecutor,同一SQL语句执行只需要预编译一次SQL语句
【3】批处理执行器
BatchExecutor,只针对修改操作的SQL语句预编译一次,并且需要手动刷新SQL执行才生效。
【4】执行器抽象类
BaseExecutor,执行上面3个执行器的重复操作,比如一级缓存、doQuery、doUpdate方法。

一级缓存命中条件
运行时参数相关:sql和参数必须相同、必须是相同的statementID(即mapper里面的方法相同)、sqlSession必须一样(会话级缓存)、RowBouds返回行范围必须相同
操作配置相关:未手动清空缓存(提交、回滚)、未配置flushCache=true、未执行update、缓存作用域不是STATEMENT

源码解析:当执行查询的时候会调用query()方法,判断是否存在缓存,存在则去PerpetualCache,里面有个HashMap;不存在则执行doQuery()方法,并且填充缓存

【5】二级缓存(应用级缓存)
定义:作用范围是整个应用,而且可跨线程使用。二级缓存有更高命中率,适合缓存修改较少的数据。
CachingExecutor,与一级缓存的区别:一级缓存查询数据库操作后会直接缓存,二级缓存需要当次数据库操作提交事务后才能进行缓存(二级缓存跨线程处理,一级缓存不用)。

源码解析:装饰器模式+责任链模式
Cache(设置缓存、获取缓存):
SynchronizedCache(线程同步)=》LogginCache(记录命中率)=》LRUCache(防溢出)=》ScheduledCache(过期清理)=》BLockingCache(防穿透)=》PerpetualCache(内存存储)

注:二级缓存优于一级缓存调用

2023-01-04

前端vue学习
现在项目用到了vue3,看了下vue3
发现原来vue3还和海贼王有关,one peace

vue3文档地址:https://cn.vuejs.org/guide/typescript/composition-api.html#typing-event-handlers
学习视频:https://www.bilibili.com/video/BV1SZ4y157m8/?spm_id_from=333.337.top_right_bar_window_history.content.click&vd_source=cc82a52a9b9b8b31eca3aa74606e608a

最直观的感受就是:
定义变量不用写到data、方法不用写到methods,直接套在setup里面就行(称之为composition API)。定义变量都可通过ref

<script setup>

</script>

然后打包方式也变了,以前是通过webpack,现在用vite

2023-01-05

微服务日志处理
【1】微服务链路追踪(接口监控)
场景:某个功能调用多个服务,需要去看哪个服务相应时间慢或者调用是否成功
解决方案:通过Sleuth,再加上Zipkin可视化查看

【2】微服务日志记录(日志监控)
场景:各个微服务都有自己的日志,日志分散
解决方案:通过ELK + Kafka。微服务将日志发送到Kafka,Kafka将日志给到Logstash,Logstatsh再将日志存储到Elasticsearch,Kibana将ES中的日志进行可视化查看

学习视频:https://www.bilibili.com/video/BV1a7411H71q?p=1&vd_source=cc82a52a9b9b8b31eca3aa74606e608a

2023-01-11

MySQL学习

  • 学习资料
    https://www.yuque.com/xuchenliang/qaqoxt
    https://www.processon.com/mindmap/60596321637689700771c679

  • 聚集索引和非聚集索引
    聚集索引是索引结构和数据一起存放的索引;非聚集索引是索引结构和数据分开存放的索引。
    CREATE CLUSTER INDEX index_name ON table_name(column_name1,column_name2,…);就是建立聚集索引
    总结
    1.使用聚集索引的查询效率要比非聚集索引的效率要高,但是如果需要频繁去改变聚集索引的值,写入性能并不高,因为需要移动对应数据的物理位置。
    2.非聚集索引在查询的时候可以的话就避免二次查询,这样性能会大幅提升。
    3.不是所有的表都适合建立索引,只有数据量大表才适合建立索引,且建立在选择性高的列上面性能会更好。

  • 索引类型
    主键索引、唯一索引、普通索引、全文索引
    联合索引:可以用于避免回表(覆盖索引)
    说明:普通索引会通过页级的指针来找到主键索引的主键,然后通过该主键索引找到相应的行数据

  • MySQL事物隔离级别
    1.READ-UNCOMMITTED 读未提交
    2.READ-COMMITTED 不可重复读
    这种隔离级别出现的问题是——不可重复读(Nonrepeatable Read):不可重复读意味着我们在同一个事务中执行完全相同的select语句时可能看到不一样的结果
    3.REPEATABLE-READ 可重复读
    MySQL的默认事务隔离级别。
    4.SERIALIZABLE 串行化

  • SQL分析
    1、慢查询日志分析(MySQL开启慢查询,并且将SQL记录到某个文件)
    2、show processlist 查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的执行情况,同时对一些锁表操作进行优化
    3、explain分析执行计划
    select_type
    表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION 中的第二个或者后面的查询语句)、SUBQUERY(子查询中的第一个 SELECT)等
    type
    表示表的连接类型,性能由好到差的连接类型为( system > const > eq_ref > ref > range > index > all)
    一般来说, 需要保证查询至少达到 range 级别, 最好达到ref
    possible_keys
    表示查询时,可能使用的索引
    key
    表示实际使用的索引
    rows
    扫描行的数量
    extra
    执行情况的说明和描述
    using index 表示MySQL将使用覆盖索引,以避免回表

  • MySQL模拟死锁
    同时执行如下两条SQL就会出现错误:[Err] 1213 - Deadlock found when trying to get lock; try restarting transaction 即数据库发现死锁
    产生原因:当事务1和事务2都开始执行,如果都执行到第一个SQL时,是不会产生死锁的,因为操作的是不同的行,此时事务1对id=1的这条记录加了独占锁,事务2对id=2的这条记录加了独占锁,由于事务都没提交,所以这两个独占锁都没有释放。
    然后两个事务都继续往下执行,我们手动控制了事务1先执行它的SQL2,即更新id=2的这条记录,由于id=2的这条记录被事务2锁着,所以这条SQL语句会被阻塞,一直等待,也就是显示的“查询时间”。
    接着事务2执行它的SQL2,即更新id=1的这条记录,又因为事务1锁着id=1的这条记录,所以,此时形成了相互等待对方持有的锁的局面,即发生了死锁。但,数据库不会任由这两个事务一直等待下去,所以事务2执行SQL2时提示死锁,“Deadlock found when trying to get lock; try restarting transaction”,事务1不受影响,commit之后事务1执行成功。
    通过看数据库状态,可以看到死锁相关信息:show ENGINE INNODB status;

-- 事务1
BEGIN;
update tabel1 set column1='1' where id=1; -- SQL1
update tabel1 set column1='1' where id=2; -- SQL2
--COMMIT

-- 事务2
BEGIN;
update table1 set column1='2' where id=2; -- SQL1
update table1 set column1='2' where id=1; -- SQL2
  • 数据库常见锁
    1、表级锁
    MyISAM非事务性存储引擎,适用于以查询为主,少量更新的应用
    2、行级锁
    InnoDB存储引擎,适用于对事务完整性要求较高的系统。InnoDB支持行级锁和表级锁,默认为行级锁。
    只有通过索引条件查询数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。
    InnoDB行级锁又分为:
    (1) 共享锁:读锁,即多个事务对同一数据进行共享一把锁,都能访问到数据,但是只能读不能修改。
    (2) 排他锁:写锁,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,只有获取排他锁的事务可以对数据进行读取和修改。
    InnoDb引擎中update,delete,insert语句自动加排他锁;select …from…普通查询没有任何锁机制
    SELECT * FROM table_name WHERE … FOR UPDATE
    (3) 意向锁:InnoDB自动加的,不需用户干预。意向锁不会与行级的共享 / 排他锁互斥
    3、页级锁

    数据库中的乐观锁与悲观锁

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023 学习日志 的相关文章

  • 定位导航——旋转矩阵,IMU,左右乘

    我们先明确一下这里所说的一些概念 IMU IMU全称Inertial Measurement Unit xff0c 惯性测量单元 xff0c 主要用来检测和测量加速度与旋转运动的传感器 起初只是用来测量角度的 xff0c 后来随着其他传感器
  • scp命令详解

    相关知识 scp是secure copy的简写 xff0c 用于在Linux下进行远程拷贝文件的命令 xff0c 和它类似的命令有cp xff0c 不过cp只是在本机进行拷贝不能跨服务器 xff0c 而且scp传输是加密的 可能会稍微影响一
  • H3C命令详解(笔记)

    1 常用命令 lt gt xff1a 用户视图模式 xff0c 仅仅能配置基本参数 xff0c 调试命令 xff0c 权限较小 xff1a 系统视图模式 xff0c 可以做高级配置 system view 进入系统视图 quit 退出当前模
  • 解决Ubuntu18.04 安装ROS中 sudo rosdep init 和 rosdep update 失败问题

    解决Ubuntu18 04 安装ROS中 sudo rosdep init 和 rosdep update 失败问题 目录 解决Ubuntu18 04 安装ROS中 sudo rosdep init 和 rosdep update 失败问题
  • GD32F303 移植freertos 中断管理设定。。。。

    之前做项目时 xff0c 使用GD32F303并移植了freertos 移植过程网上有很多教程 xff0c 根据这些教程移植就可以 移植完后注意FreeRTOSConfig h中关于RTOS中断管理的设置 我移植时在官网下的是当时最新的RT
  • ros自建功能包操作

    功能包改名 假定功能包原名Apkg xff0c 要改成Bpkg 把Apkg功能包文件夹名改为Bpkg 把CMakeLists txt中project Apkg 改为project Bpkg 把Package xml文件中 lt name g
  • Jacobian矩阵和梯度矩阵

    记号标识 标量 xff1a 常规小写字母 xff1b 向量 xff1a 加粗的小写字母 x 61 x 1
  • 一份还热乎的蚂蚁金服面经(已拿Offer)!附答案!!

    本文转自 xff1a https mp weixin qq com s MzmdxqukOZ6rUta9nkGGw 本文来自我的知识星球的球友投稿 xff0c 他在最近的校招中拿到了蚂蚁金服的实习生Offer xff0c 整体思路和面试题目
  • arduino 自平衡小车3\对mpu6050获得的X轴角度和角速度进行卡尔曼滤波

    对mpu6050获得的X轴角度和角速度进行卡尔曼滤波 mpu6050得到的角度值有些值的偏差较大 xff0c 为了使平衡小车更加稳定 xff0c 需要对获得的角度进行优化 xff0c 使用 卡尔曼滤波 xff0c 代码如下 xff1a in
  • nginx CPU 100 跑满问题定位

    1 确定连接数是不是达到了上限 2 确定是不是开启了gzip压缩 xff0c 确定压缩等级 xff0c 小于1kb的不要压缩 xff1b 图片 xff0c 大文件 xff0c 大压缩文件等不要压缩 3 单个CPU占用100 原因的定位 xf
  • 虚拟串口及其在串口转以太网中的应用

    本文介绍虚拟串口的概念 xff0c 以及如何在串口转以太网中利用该技术 1 虚拟串口的概念 虚拟串口是用操作系统的虚拟驱动技术产生的串口 xff08 COM口 xff09 xff0c 相对于计算机本身的硬件串口 xff08 COM1等 xf
  • 机器学习——PCA降维

    参考文章 xff1a https zhuanlan zhihu com p 77151308 PCA xff08 Principal Component Analysis xff09 是一种常见的数据分析方式 xff0c 常用于高维数据的降
  • C++命名规则--简明即查即用版(Windows开发环境)

    目录 前言 1 类名 2 函数名 3 参数 4 变量 5 常量 6 静态变量 7 全局变量 8 类的成员变量 前言 Microsoft推出的命名规则匈牙利法是 在变量和函数名中加入前缀以增进人们对程序的理解 xff0c 但如此一来太为繁琐
  • STM32中的FreeRTOS-#1(入门)

    写在前面 xff1a 我一直觉得 xff0c 如果我能把一点知识说给别人听 xff0c 并且别人能听懂 xff0c 大概率我自己真的学会了 记录的过程也是自己梳理的过程 xff0c 本系列我把它称为 教程 xff0c 是想把它写得系统且有条
  • 信号量 与 互斥量的区别

    原文来源 https blog csdn net ZhipingXi article details 78031307 信号量 与 互斥量 xff08 锁 xff09 的区别 一 概念和定义 信号量 xff1a 多线程同步使用的 xff1b
  • opencv版本问题,引起的vins视觉结果漂移

    最近在根据vins代码进行改写 xff0c 实验发现 当opencv为3 4 12版本时 xff08 core imgproc imgcodecs这几个库 xff09 xff0c vins 优化结果会非常飘 如果vins结果比较离谱 xff
  • i.MX6U SPI浅析

    1 SPI简介 SPI 全称是 SerialPerripheral Interface xff0c 也就是串行外围设备接口 SPI 是 Motorola 公司推出的一种同步串行接口 技术 xff0c 是一种高速 全双工的同步通信总线 xff
  • 【飞控协议】MavLink介绍和编译

    MavLink是什么 xff1f MavLink xff08 Micro Air Vehicle Link xff0c 微型空中飞行器链路通讯协议 xff09 是在串口通讯基础上的一种更高层的开源通讯协议 xff0c 主要应用在无人飞行器与
  • 工作中常用到的设计模式-调用第三方系统接口

    一 概述 外呼业务场景中 xff0c 有一个关键的接口就是黑名单接口 xff08 包括客户投诉 退订接口 是否还款等 xff09 xff0c 我们系统需要经常去跟外部第三方系统交互 xff08 http方式 xff09 一个请求都会经历这几
  • 多旋翼飞行器振动机理分析和减振设计

    多旋翼飞行器振动机理分析和减振设计 开源资源与pdf版论文见 https gitee com robin shaun Multicopter Vibration Attenuation或 https github com robin sha

随机推荐