Fork me on GitHub

Mysql-15-Mysql死锁

Mysql-15-Mysql死锁

前言

  • 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。

  • InnoDB引擎提供了行级锁,表锁。MyISAM提供了表锁,如题,MySQL会发生死锁吗?

阅读更多...

Redis-13-跳表

Redis-13-跳表

前言

  • 首先为什么要把mysql索引和redis跳表放在一起讨论呢,因为他们解决的都是同一种问题,用于解决数据集合的查找问题,即根据指定的key,快速查到它所在的位置(或者对应的value)
阅读更多...

分布式锁

分布式锁

前言

为什么要使用分布式锁呢?

Nginx实现负载均衡服务器集群时会产生很多问题,在提高并发的同时,服务器也会产生非常多的问题例如,这些问题应该一一的考虑到。

  • 分布式Session一致性
  • 分布式全局ID生成方案
  • 分布式事务解决方案
  • 分布式任务调度平台
  • 分布式配置中心
  • 分布式锁多种实现方案
  • 分布式日志收集系统
  • 各种网站跨域请求解决方案
  • 高并发下服务降级与限流实战
  • ……

本次就先以分布式锁来探讨一下分布式场景下的使用与注意事项,和为什么要使用分布式锁。

阅读更多...

Mysql-14-MVCC实现

Mysql-14-MVCC实现

前言

  • MVCC (Multiversion Concurrency Control) 中文叫多版本并发控制,是现代数据库(包括 MySQLOraclePostgreSQL 等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能
  • 如此一来不同的事务在并发过程中,SELECT 操作可以不加锁而是通过 MVCC 机制读取指定的版本历史记录,并通过一些手段保证保证读取的记录值符合事务所处的隔离级别,从而解决并发场景下的读写冲突。

下面举一个多版本读的例子,例如两个事务 AB 按照如下顺序进行更新和读取操作

mark

阅读更多...

Java-基础-ClassLoader详解

Java-基础-ClassLoader详解

前言

  • ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。

  • 理解ClassLoader的加载机制,也有利于我们编写出更高效的代码。

  • ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。

  • 想想也是的,一次性加载那么多jar包那么多class,那内存不崩溃。本文的目的也是学习ClassLoader这种加载机制。

阅读更多...

JUC-20-ThreadPoolExecutor

JUC-20-ThreadPoolExecutor

1. submit 和 execute

  1. execute
  • 这个方法是在Executor接口中定义的,不会返回执行结果,在ThreadPoolExecutor 类中有具体的实现。
1
2
3
public interface Executor {
void execute(Runnable command);
}
  1. submit方法
  • 这个方法是在ExecutorService 接口中定义的,在AbstractExecutorService 类中有具体的实现。
1
2
3
4
5
6
7
8
//提交一个Callable
<T> Future<T> submit(Callable<T> task);

//提交一个Runnable
Future<?> submit(Runnable task);

//提交一个Runnable并默认值result,在任务执行完毕以后,调用{Future.get()}方法会返回这个默认值
<T> Future<T> submit(Runnable task, T result);

总结

  • 其实最终调用的方法,都是execute方法
  • sumbit方法相当于把任务包装了一下,返回的是一个Future句柄,这个句柄其实就是FutureTask对象

区别

  • 接收的参数不一样
  • submit有返回值,而execute没有
  • submit方便Exception处理
    • 意思就是如果你在你的task里会抛出checked或者unchecked exception,而你又希望外面的调用者能够感知这些exception并做出及时的处理
    • 那么就需要用到submit,通过捕获Future.get抛出的异常。
阅读更多...

网络-点开网页原理

网络-点开网页原理

1. 概述

  • 安全性上,HTTPS是安全超文本协议,在HTTP基础上有更强的安全性。简单来说,HTTPS是使用TLS/SSL加密的HTTP协议

  • 申请证书上,HTTPS需要使用ca申请证书

  • 对于抓包而言 ,HTTP是超文本传输协议,明文传输;HTTPS是具有安全性的 SSL 加密传输协议

  • 连接方式与端口上,http的连接简单,是无状态的,端口是 80; https 在http的基础上使用了ssl协议进行加密传输,端口是 443

HTTP通信过程

mark

阅读更多...

Leetcode-347-前K个高频元素

Leecode-347-Top K Frequent Elements

思路:堆

题目描述

给定一个非空的整数数组,返回其中出现频率前 k高的元素。

1
2
3
4
5
6
7
8
9
10
示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]


示例 2:

输入: nums = [1], k = 1
输出: [1]
  • 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
  • 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
  • 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。
  • 你可以按任意顺序返回答案。
阅读更多...
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信