摘要: 一、什么是线程 线程是指程序在运行的过程中,能够执行程序代码的一个执行单元。Java语言中,线程有四种状态:运行、就绪、挂起、结束 二、线程与进程的区别 进程是指一段正在执行的程序。而线程有时也被称为轻量级进程,它是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段 阅读全文
posted @ 2020-11-15 14:51 Java程序员进阶 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 一、MyBatis 简介 【1】MyBatis 是支持定制化 SQL,存储过程以及高级映射的优秀持久化框架。【2】MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取查询结果集。【3】MyBatis 可以使用简单的 XML 或者注解用于配置和原始映射,将接口和 Java 的 POJ 阅读全文
posted @ 2020-11-15 14:44 Java程序员进阶 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 定义:锁是计算机协调多个进程或线程并发访问某一资源的机制。 一、表锁(偏读) MyISAM 引擎,开销小,加锁快,无死锁、锁定粒度大、发生锁冲突的粒度最高,并发度低。 【1】手动增加表锁:lock table 表名1 read(write),表名2 read(write),其他;【2】查看那些表加锁 阅读全文
posted @ 2020-11-15 14:34 Java程序员进阶 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 查询的生命周期大致可以按照顺序来看:从客户端到服务端,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中 “执行” 可以认为是整个生命周期中最重要的阶段,其中包括了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序分组等。当希望 MySQL 能够以高性能的方式运行查询时 阅读全文
posted @ 2020-11-15 14:27 Java程序员进阶 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 一、优化器索引 【1】 隐藏索引(invisible index):在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用,但仍需要维护。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这 阅读全文
posted @ 2020-11-15 14:25 Java程序员进阶 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 【需求】:生产者发送数据至 kafka 序列化使用 Avro,消费者通过 Avro 进行反序列化,并将数据通过 MyBatisPlus 存入数据库。 一、环境介绍 【1】Apache Avro 1.8;【2】Spring Kafka 1.2;【3】Spring Boo 阅读全文
posted @ 2020-11-15 14:18 Java程序员进阶 阅读(439) 评论(0) 推荐(0) 编辑
摘要: MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具包,只做增强不做改变,为简化开发工作、提高生产效率而生。 一、Service CRUD 接口 【说明】:【1】通用 Service CRUD 封装 MP提供的 IService接口,进一步封装 CRUD 采用 get 查询单行 阅读全文
posted @ 2020-11-15 14:12 Java程序员进阶 阅读(562) 评论(0) 推荐(0) 编辑
摘要: 优质博文:IT-BLOG-CN 一、设计原则 原则: SQL开发规范制定是基于良好的编码习惯和可读性; 目的: 消除冗余,数据简约,提高效率,提高安全; 【1】禁止在线上生产环境做数据库压力测试,全链路压测可以支持,但是一定不要在业务高峰期搞压力测试。 【2】禁止在数据库中明文存储密码和敏感信息,可 阅读全文
posted @ 2020-11-15 13:59 Java程序员进阶 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG MySQL 的存储单位是 page[16kb],索引使用 B+Tree,深度为3(3次 IO便能查出数据)。为了提高查询速度,存储单元中都存储的是索引的指针。MySQL 内部索引指针大小在 InnoDB源码中设置为 6个字节+例如 ID类型 bigint(long) 阅读全文
posted @ 2020-11-15 13:52 Java程序员进阶 阅读(859) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 一、前言 如何在分布式集群中生产全局唯一的 ID?【方案一】UUID:UUID是通用唯一识别码 (Universally Unique Identifier),在其他语言中也叫GUID,可以生成一个长度 32位的全局唯一识别码。UUID 虽然可以保证全局唯一,但是占3 阅读全文
posted @ 2020-11-15 13:50 Java程序员进阶 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 一、概述 2PC(two phase commit protocol,2PC)即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(Commit phase),2指两个阶段,P指准备阶段,C指提交阶段。整个事务过程由事务管理 阅读全文
posted @ 2020-11-15 13:48 Java程序员进阶 阅读(811) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 一、什么是 TCC事务 TCC 是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与 Try或 阅读全文
posted @ 2020-11-15 13:47 Java程序员进阶 阅读(1855) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 一、可靠消息最终一致性事务概述 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终事务要达到一致。 此方案是利用消息中间件完成,如下图:​ 事务发起方 阅读全文
posted @ 2020-11-15 13:43 Java程序员进阶 阅读(1989) 评论(1) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 一、概述 最大努力通知也是一种解决分布式事务的方案,下面是一个充值的例子:​交互流程:【1】账户系统调用充值系统接口;【2】充值系统完成支付处理向账户系统发起充值结果通知,若通知失败,则充值系统按策略进行重复通知;【3】账户系统接收到充值结果通知修改充值状态[实时性与 阅读全文
posted @ 2020-11-15 13:41 Java程序员进阶 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 我们已经了解了四种分布式事务解决方案,2PC【链接】、TCC【链接】、可靠消息最终一致性【链接】、最大努力通知【链接】,每种解决方案我们通过案例开发进行学习,本章节我们结合互联网金融项目中的业务场景,来进行分布式事务解决方案可行性分析。 一、系统介绍 P2P金融又叫 阅读全文
posted @ 2020-11-15 13:39 Java程序员进阶 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 一、Zookeeper概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。Zookeeper从设计模式角度来理解:是一个基于观察者模式【链接】设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这 阅读全文
posted @ 2020-11-15 13:37 Java程序员进阶 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 枚举类:就是对象的实例个数是确定的(例如:单例模式),也就说我们在创建枚举类的时候,会对构造器进行设置 一、自定义创建枚举类 1 package com.atguigu.java1; 2 3 public class TestSeason { 4 public static void main(St 阅读全文
posted @ 2020-11-15 13:19 Java程序员进阶 阅读(119) 评论(0) 推荐(0) 编辑
摘要: AOP(动态代理):指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式;【1】导入 aop 模块;Spring AOP:(spring-aspects);【2】定义一个业务逻辑类(MathCalculator),在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出 阅读全文
posted @ 2020-11-15 13:16 Java程序员进阶 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 更多内容,前往 IT-BLOG 选择排序是一种简单直观的排序算法,其基本原理,对于一组记录的数据,通过第一次比较得到最小的记录,然后将该记录与第一条记录的位置交换;接着对不包含第一个以外的记录进行比较,得到最小记录并与第二个记录进行位置交换;重复该过程,知道进行比较的记录只有一个时为止。 以数组 { 阅读全文
posted @ 2020-11-15 10:30 Java程序员进阶 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 对于给定的一组记录,初始时假设第一个记录自成一个有序序列,其余记录为无序序列。接着从而个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一条记录插入到有序序列中为止。 例如:数组 {38,65,97,76,13,27,49}第一步插入38以后:[38]65 97 76 阅读全文
posted @ 2020-11-15 10:29 Java程序员进阶 阅读(101) 评论(0) 推荐(0) 编辑