MySQL日志
MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志 binlog(归档日志)和事务日志 redo log(重做日志)和 undo log(回滚日志)。
# redo log (持久性)redo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。
比如 MySQL 实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。
MySQL 中数据是以页为单位,你查询一条记录,会从硬盘把一页的数据加载出来,加载出来的数据叫数据页,会放入到 Buffer Pool 中。
后续的查询都是先从 Buffer Pool 中找,没有命中再去硬盘加载,减少硬盘 IO 开销,提升性能。
更新表数据的时候,也是如此,发现 Buffer Pool 里存在要更新的数据,就直接在 Buffer Pool 里更新。
然后会把“在某个数据页上做了什么修改”记录到重做日志缓存(redo log buffer)里,接着刷盘到 redo log 文件里。
理想情况,事务一提交 ...
MySQL索引
索引介绍索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。
索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。
索引底层数据结构存在很多种类型,常见的索引结构有: B 树, B+树 和 Hash、红黑树。在 MySQL 中,无论是 Innodb 还是 MyIsam,都使用了 B+树作为索引结构。
索引的优缺点优点 :
使用索引可以大大加快 数据的检索速度(大大减少检索的数据量), 这也是创建索引的最主要的原因。
通过创建唯一性索引,降低数据排序的成本,可以保证数据库表中每一行数据的唯一性。
缺点 :
创建索引和维护索引需要耗费许多时间。当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。
索引需要使用物理文件存储,也会耗费一定空间。
但是,使用索引一定能提高查询性能吗?
大多数情况下,索引查询都是比全表扫描要快的。但是如果数据库的数据量不大,那么使 ...
操作系统基础知识复习
操作系统面试官 : 先来个简单问题吧!什么是操作系统?
🙋 我 :我通过以下四点向您介绍一下什么是操作系统吧!
操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基石。
操作系统本质上是一个运行在计算机上的软件程序 ,用于管理计算机硬件和软件资源。 举例:运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件。
操作系统存在屏蔽了硬件层的复杂性。 操作系统就像是硬件使用的负责人,统筹着各种相关事项。
操作系统的内核(Kernel)是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。 内核是连接应用程序和硬件的桥梁,决定着系统的性能和稳定性。
系统调用👨💻面试官 :什么是系统调用呢? 能不能详细介绍一下。
🙋 我 :介绍系统调用之前,我们先来了解一下用户态和系统态。
根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别:
用户态(user mode) : 用户态运行的进程可以直接读取用户程序的数据。
系统态(kernel mode):可以简单的理解系 ...
AQS与ReentrantLock
基础知识线程类对象的三种创建方式
继承Thread类
编写一个类,继承Thread类,如MyThread,重写父类的run方法即可
在主线程中调用new MyThread().start()即可
实现Runable接口
编写一个类,实现Runnable接口,重写run方法
在主线程中将这个类的实例作为参数传进Thread构造函数,通过Thread实例start调用
实现Callable接口
编写一个类,实现Callable接口,重写call方法
需要与FutureTask结合使用
3种让线程等待和唤醒的方法wait() notify()使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程
Object类中的wait、notify、notifyAll用于线程等待和唤醒的方法,都必须在sychronized内部执行(必须用到关键字sychronized,sychronized锁住任意对象或者类),且成对出现使用,否则会报错
先wait,再notify才可以。
// 正常情况下
static Object objectLock = n ...
算法 leetcode Hot100
刷完剑指Offer ,最近再刷一刷 Hot100
本贴记录一些刷 hot 100的心得(只要是没有思路的题目我基本都会记录以下,或者非常巧妙思路的题目)
4 两个有序数组的中位数难度:困难
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
用了一个“类暴力算法”,结果意外的不错
就是空间复杂度高了点,除了合并数组(其实最多只需要两个数就可以),不知道哪里可以再降一降,如果想到了更有的解法会再补充。
class Solution {
public static double findMedianSortedAr ...
JVM笔记 java内存模型
1. java 内存模型很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模型】是 Java Memory Model(JMM)的意思。
关于它的权威解释,请参考 https://download.oracle.com/otn-pub/jcp/memory_model-1.0-pfd-spec-oth-JSpec/memory_model-1_0-pfd-spec.pdf?AuthParam=1562811549_4d4994cbd5b59d964cd2907ea22ca08b
简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障
1.1 原子性原子性在学习线程时讲过,下面来个例子简单回顾一下:
问题提出,两个线程对同一个初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?
1.2 问题分析以上的结果可能是正数、负数、零。为什么呢?因为 Java 中对静态变量的自增,自减并不是原子操作。
例如对于 i++ 而言(i 为静态变量),实际会产生如下的 JVM 字节 ...
Java四种引用类型以及ThreadLocal
Java中引用类型和ThreadLocal
大厂面试题:
1.Java中的引用类型有哪几种? 强软弱虚
2.每种引用类型的特点是什么?
3.每种引用类型的应用场景是什么?
4.ThreadLocal你了解吗
5.ThreadLocal应用在什么地方? Spring事务方面应用到了
6.ThreadLocal会产生内存泄漏你了解吗?
1、java中引用类型及特点强 引用: 最普通的引用 Object o = new Object()软 引用: 垃圾回收器, 内存不够的时候回收 (缓存)弱 引用: 垃圾回收器看见就会回收 (防止内存泄漏)虚 引用: 垃圾回收器看见二话不说就回收,跟没有一样 (管理堆外内存) DirectByteBuffer -> 应用到NIO Netty
finalize(): 当对象被回收时, finalize()方法会被调用, 但是不推荐使用去回收一些资源,因为不知道他什么时候会被调用, 有时候不一定会调用
public class C {
@Override
protected void finalize() throws ...
RabbitMQ快速入门
MeassageQueue | Kyle’s Blog (cyborg2077.github.io)
初识MQ同步和异步通讯
微服务间通讯有同步和异步两种方式
同步通讯:就像打电话,需要实时响应,而且通话期间,不能响应其他的电话,当有其他妹子给你打电话的时候,就容易错失良机。时效性强
异步通讯:就像发邮件,QQ/微信聊天,不需要马上回复。可以同时给多个妹子发消息,支持多线操作,时间管理大师的必备技能。时效性弱
两种方式各有优劣,打电话可以立即得到响应,但是却不能与多个人同时通话,发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟
同步通讯我们之前学习的(RestTemplate、OpenFeign)Feign调用就属于同步方式,虽然调用可以实时得到结果,但是存在一些问题。订单服务,仓储服务,短信服务是和我们的支付服务耦合在一起的。
public void PaymentService() {
orderService.doSth();
storageService.doSth();
messageService.doSth();
.. ...
cookie&seesion 待写
会话技术会话是指在一定的时间范围内用户在您的网站上发生的一系列互动的集合名称
所以会话次数是一段时间内用户向您的网站发起的会话总数量。一次会话可以浏览一个或多个页面。
简单来说就是一系列请求和响应的集合
会话的功能为什么要有会话这个概念?
HTTP时无状态的,请求响应本身无法保留状态
会话能在一次会话范围内的多次请求响应之间共享数据(如买东西,认证完是本人,那么后续会话都是本人才能保证动作的完成,不然买着买着,找不到买东西的人是谁了)
会话技术的实现方式java语言中,
客户端会话技术:Cookie 把要共享的数据存在客户端
服务端会话技术:Seesion 把要共享的数据存在客户端
ElasticSearch高级 聚合 补全 集群
数据聚合
聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如
什么品牌的手机最受欢迎?
这些手机的平均价格、最高价格、最低价格?
这些手机每月的销售情况如何?
实现这些统计功能的比数据库的SQL要方便很多,而且查询速度非常快,可以实现近实时搜索的效果
聚合的种类常见的聚合有三类
桶(Bucket)聚合:用来对文档分组
TermAggregation:按照文档字段值分组,例如:按照品牌名称、国家分组
DateHistogram:按照日期阶梯分组,例如:一周为一组,或者一月为一组
度量(Metric)聚合:用于计算一些值,例如:最大值、最小值、平均值等
Avg:求平均值
Max:求最大值
Min:求最小值
Stats:同时求max、min、avg、sum等
管道(pipeline)聚合:以其他聚合的结果为基础做聚合
注意:参加聚合的字段必须是非分词字段,如keyword、日期、数值、布尔类型
DSL实现聚合
现在,我们要统计所有数据中的酒店品牌有几种,其实就是按照品牌对数据分组。此时可以根据酒店品牌的名称做聚合,也就是Buc ...