【Java】线程池实现原理以及实践场景

核心设计与实现

UML图

我们首先来看一下 ThreadPoolExecutor 的
UML 类图,了解下 ThreadPoolExecutor 的继承关系。

·
最底层的接口是Executor,它只是提供了一种思想,将任务提交和任务的执行解耦,用户无需关注如何创建线程,如何调度线程来执行任务,用户只需提供 Runnable 对象,将任务的运行逻辑提交到执行器 (Executor) 里面。由 Executor 框架完成线程的调配和任务的执行部分。

阅读全文

【Mysql】索引类型优化策略

1. 索引类型

1.1 普通索引

  • 这是一个最基本的索引类型,基于普通字段建立索引,没有任何限制。

    1.2 唯一索引

  • 普通索引允许被索引的数据列包含重复的值

  • 唯一索引就是刚好相反,不允许索引的数据列里面有重复的值。比如说身份证号,那么一定是一个唯一索引。因为不可能有两个人的身份证号一模一样。

    1.3 主键索引

  • 主键索引,只要声明一个主键,系统会为主键自动建立索引

阅读全文

【Mysql】数据类型范式相关

1.Mysql范式与反范式

  • 我们所了解的,我们在设计数据库的时候会遵循数据库的三大范式,但是,有些时候反范式可以增加某些类型的查询,但同时可能是另外一个类型的查询变慢。比如添加技术表和汇总表是一种很好的优化查询的方式,但是这些表维护起来成本也很高。
  • 范式的优点:
    • 适用于写操作比较多的场景
    • 范式会使数据库很少或者没有重复数据
  • 范式的缺点:
    • 通常需要关联查询,而关联查询在某些场景下会使我们的索引失效。
  • 反范式的优点:
    • 反范式化的schema因为所有数据都在一张表中, 可以很好地避免关联。而我们知道关联表的查询效率是比较差的
    • 反范式的表能够更有效的使用索引策略,
  • 但是在真实的环境中,很少会极端的使用范式或者反范式,一般都是部分是遵循范式,部分是反范式的。
阅读全文

【Go】数组,切片,映射

1. Array(数组)

数组定义

1
2
3
4
5
6
//定义一个长度为3,元素类型为int的数组a
var a [3]int
var b [4]string

//数组可以通过下标进行访问,下标从0开始,最后一个元素的下标为 len-1
v := a[len - 1]
阅读全文

【Go】结构体,方法,接口

结构体

  • Go语言是静态类型的语言,编译器需要在编译的时候知道每一个值的类型
  • 提前知道值的类型,可以合理的保存。有助于减少内存异常和Bug。
  • 一般需要知道:分配多少内存给这个值,这段内存表示什么。
阅读全文

Docker基础

一,Docker概述

一款产品,肯定有两种环境,一个开发环境,一个上线环境。开发 ,运维。
境配置是十分麻烦的,每一个机器都要去部署环境。费事费力。
传统:开发jar,运维来做
现在:开发打包部署上线,一套流程做完。打包项目带上环境。

阅读全文
使用搜索:谷歌必应百度