- 博客(192)
- 收藏
- 关注
转载 面试题:集合篇
List 数组 Vector 向量 Stack 栈 Map 映射字典 Set 集合 Queue 队列 Deque 双向队列关注公众号,一起交流,微信搜一搜: 潜行前行一般队列的通用方法操作方法 抛出异常 阻塞线程 返回特殊值 超时退出 插入元素 add(e) put(e) offer(e) offer(e, timeout, unit) 移除元素 remove() take() poll() pull(tim
2021-11-16 14:53:23
100
转载 AQS解析与实战
前段时间在面试,发现面试官都有问到同步器AQS的相关问题。AQS为Java中几乎所有的锁和同步器提供一个基础框架,派生出如ReentrantLock、Semaphore、CountDownLatch等AQS全家桶。本文基于AQS原理的几个核心点,谈谈对AbstractQueuedSynchronizer的理解,并实现一个自定义同步器。AQS原理面试题的核心回答要点state 状态的维护。 CLH队列 ConditionObject通知 模板方法设计模式 独占与共享模式。 自定义同步器。
2021-11-15 17:52:51
472
1
转载 mysql数据库相关流程图/原理图
整理了一些Mysql数据库相关流程图/原理图,做一下笔记,大家一起学习。1.mysql主从复制原理图mysql主从复制原理是大厂后端的高频面试题,了解mysql主从复制原理非常有必要。主从复制原理,简言之,就三步曲,如下:主数据库有个bin-log二进制文件,纪录了所有增删改Sql语句。(binlog线程) 从数据库把主数据库的bin-log文件的sql语句复制过来。(io线程) 从数据库的relay-log重做日志文件中再执行一次这些sql语句。(Sql执行线程)如下图所示:
2021-11-15 17:51:35
1013
转载 Java线程池解析
掌握线程池是后端程序员的基本要求,相信大家求职面试过程中,几乎都会被问到有关于线程池的问题。我在网上搜集了几道经典的线程池面试题,并以此为切入点,谈谈我对线程池的理解。如果有哪里理解不正确,非常希望大家指出,接下来大家一起分析学习吧。github 地址github.com/whx123/Java…经典面试题面试问题1:Java的线程池说一下,各个参数的作用,如何进行的? 面试问题2:按线程池内部机制,当提交新任务时,有哪些异常要考虑。 面试问题3:线程池都有哪几种工作队列? 面试问
2021-11-15 17:48:07
88
转载 RocketMQ相关流程图/原理图
整理了一些RocketMQ相关流程图/原理图,做一下笔记,大家一起学习。RocketMQ是什么是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。 Producer、Consumer、队列都可以分布式。 Producer 向一些队列轮流发送消息,队列集合称为 Topic,Consumer 如果做广播消费,则一个 consumer 实例消费这个 Topic 对应的所有队列,如果做集群消费,则多个 Consumer 实例平均消费这个 topic 对应的队列集合。 .
2021-11-15 17:13:50
765
转载 LinkedBlockingQueue阻塞队列解析
整理了阻塞队列LinkedBlockingQueue的学习笔记,希望对大家有帮助。有哪里不正确,欢迎指出,感谢。LinkedBlockingQueue的概述LinkedBlockingQueue的继承体系图我们先来看看LinkedBlockingQueue的继承体系。使用IntelliJ IDEA查看类的继承关系图形蓝色实线箭头是指类继承关系 绿色箭头实线箭头是指接口继承关系 绿色虚线箭头是指接口实现关系。LinkedBlockingQueue实现了序列化接口 Se.
2021-11-15 17:10:36
1218
1
转载 Java程序员必备:异常的十个关键知识点
一. 异常是什么异常是指阻止当前方法或作用域继续执行的问题。比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异常。一个文件找不到的异常:public class TestException { public static void main(String[] args) throws IOException { InputStream is = new FileInputStream("jaywei.txt"); int b;
2021-11-15 15:22:33
136
转载 后端程序员必备:索引失效的十大杂症
背景最近生产爆出一条慢sql,原因是用了or和!=,导致索引失效。于是,总结了索引失效的十大杂症,希望对大家有帮助,加油。一、查询条件包含or,可能导致索引失效新建一个user表,它有一个普通索引userId,结构如下:CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userId` int(11) NOT NULL, `age` int(11) NOT NULL, `name` varchar(255
2021-11-15 15:21:56
302
转载 HashMap源码中这些常量的设计目的
之前周会技术分享,一位同事讲解了HashMap的源码,涉及到一些常量设计的目的,本文将谈谈这些常量为何这样设计,希望大家有所收获。HashMap默认初始化大小为什么是1 << 4(16)/** * The default initial capacity - MUST be a power of two. */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 复制代码HashMap默认初始化大小为什么是16,
2021-11-12 17:50:16
130
转载 分布式事务 XA 模式
基于 XA 协议实现一个分布式事务处理框架XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口。目前主流的数据库,比如 oracle、DB2 都是支持 XA 协议的。mysql 从 5.0 版本开始,innoDB 存储引擎已经支持 XA 协议,今天的源码介绍实验环境使用的是 mysql 数据库。两阶段提交分布式事务的两阶段提交是把整个事务提交分为 prepare 和 commit 两个阶段。以电商系统为例,分布式系统中
2021-11-12 16:43:44
371
转载 对比7种分布式事务方案,还是偏爱阿里开源的Seata(原理+实战)
这篇文章主要介绍一些目前主流的几种分布式解决方案以及阿里开源的一站式分布式解决方案Seata。文章有点长,耐心看完,看完你还不懂分布式事务,欢迎来捶我...............文章目录如下:什么是分布式事务?分布式对应的是单体架构,互联网早起单体架构是非常流行的,好像是一个家族企业,大家在一个家里劳作,单体架构如下图:但是随着业务的复杂度提高,大家族人手不够,此时不得不招人,这样逐渐演变出了分布式服务,互相协作,每个服务负责不同的业务,架构如下图:因此需要服务与服务之
2021-11-12 14:57:40
3225
1
转载 Java代码是怎么运行的
作为一名Java程序员,我们需要知道Java代码是怎么运行的。最近复习了深入理解Java虚拟机这本书,做了一下笔记,希望对大家有帮助,如果有不正确的地方,欢迎提出,感激不尽。java 代码运行主要流程本文主要讲解流程如下:java源文件编译为class字节码 类加载器把字节码加载到虚拟机的方法区。 运行时创建对象 方法调用,执行引擎解释为机器码 CPU执行指令 多线程切换上下文编译我们都知道,java代码是运行在Java虚拟机上的。但是java是一门面向对象的高.
2021-11-12 10:18:53
2039
转载 序列化全方位解析
什么是Java序列化? 为什么需要序列化? 序列化用途 Java序列化常用API 序列化的使用 序列化底层 日常开发序列化的注意点 序列化常见面试题一、什么是Java序列化?序列化:把Java对象转换为字节序列的过程 反序列:把字节序列恢复为Java对象的过程 二、为什么需要序列化?Java对象是运行在JVM的堆内存中的,如果JVM停止后,它的生命也就戛然而止。如果想在JVM停止后,把这些对象保存到磁盘或者通过网络传输到另一远程机器,怎么办呢?磁盘这些硬件可.
2021-11-12 09:55:19
285
转载 分布式事务基础篇
前言最近看了几篇有关于分布式事务的博文,做一下笔记。哈哈~github地址github.com/whx123/Java…数据库事务数据库事务(简称:事务),是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。数据库事务的几个典型特性:原子性(Atomicity )、一致性( Consistency )、隔离性( Isolation)和持久性(Durabilily),简称就是AC.
2021-11-11 19:20:54
166
转载 Git 命令全方位学习
掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇博文,复习一下~github.com/whx123/Java…公众号:捡田螺的小男孩文章目录Git是什么? Git的相关理论基础 日常开发中,Git的基本常用命令 Git进阶之分支处理 Git进阶之处理冲突 Git进阶之撤销与回退 Git进阶之标签tag Git其他一些经典命令Git是什么在回忆Git是什么
2021-11-11 17:40:11
139
转载 如何设计一个安全对外的接口?加签验签了解一下
密码学相关概念 加签验签概念 为什么需要加签、验签 加密算法简介 加签验签相关API 加签验签代码实现 公众号:捡田螺的小男孩本文已经收录到个人github,文章有用的话,可以给个star呀:github.com/whx123/Java…密码学相关概念明文、密文、密钥、加密、解密明文:指没有经过加密的信息/数据。 密文:明文被加密算法加密之后,会变成密文,以确保数据安全。 密钥:是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对
2021-11-11 17:24:11
501
转载 浅析Memcached, Redis, MongoDB三者的区别
Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU evictio
2021-11-11 15:58:45
325
转载 Redis与MySQL双写一致性如何保证?
公众号:捡田螺的小男孩 github地址,感谢每一颗star谈谈一致性一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大 弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态 最终一致性:最终一致性是弱一致..
2021-11-09 20:18:01
108
转载 异步编程利器:CompletableFuture详解 |Java 开发实战
我们异步执行一个任务时,一般是用线程池Executor去创建。如果不需要有返回值, 任务实现Runnable接口;如果需要有返回值,任务实现Callable接口,调用Executor的submit方法,再使用Future获取即可。如果多个线程存在依赖组合的话,我们怎么处理呢?可使用同步组件CountDownLatch、CyclicBarrier等,但是比较麻烦。其实有简单的方法,就是用CompeletableFuture。最近刚好使用CompeletableFuture优化了项目中的代码,所以跟大家一起学习
2021-11-08 17:01:58
497
转载 @PostConstruct详解
定义: @PostContruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。 从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。用法:@PostConstructpublic void someMethod(){}或者public @PostCon...
2021-11-08 09:53:35
197
转载 攻克order by
微信公众号:捡田螺的小男孩 github地址,感谢每一颗star 如果觉得有收获,帮忙点赞,转发下哈,感谢感谢一个使用order by 的简单例子假设用一张员工表,表结构如下:CREATE TABLE `staff` (`id` BIGINT ( 11 ) AUTO_INCREMENT COMMENT '主键id',`id_card` VARCHAR ( 20 ) NOT NULL COMMENT '身份证号码',`name` VARCHAR ( 64 ) NOT NULL COM..
2021-11-07 09:40:50
122
转载 详解20道Redis经典面试题
公众号:捡田螺的小男孩 github地址1. 什么是Redis?它主要用来什么的?Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Re..
2021-11-05 22:12:41
490
转载 MySQL日志15连问
1. redo log是什么? 为什么需要redo log?redo log 是什么呢?redo log 是重做日志。 它记录了数据页上的改动。 它指事务中修改了的数据,将会备份存储。 发生数据库服务器宕机、或者脏页未写入磁盘,可以通过redo log恢复。 它是Innodb存储引擎独有的为什么需要 redo log?redo log主要用于MySQL异常重启后的一种数据恢复手段,确保了数据的一致性。 其实是为了配合MySQL的WAL机制。因为MySQL进行更新操作,为了能够快速响应
2021-11-05 21:48:57
108
转载 日志打印的15个好建议
1. 选择恰当的日志级别常见的日志级别有5种,分别是error、warn、info、debug、trace。日常开发中,我们需要选择恰当的日志级别,不要反手就是打印info哈~error:错误日志,指比较严重的错误,对正常业务有影响,需要运维配置监控的; warn:警告日志,一般的错误,对业务影响不大,但是需要开发关注; info:信息日志,记录排查问题的关键信息,如调用时间、出参入参等等; debug:用于开发DEBUG的,关键逻辑里面的运行时数据; trace:最详细的信息,一般这些
2021-11-05 21:43:49
152
转载 聊聊工作中使用了哪些设计模式
平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。今天跟大家聊聊日常工作中,我都使用过哪些设计模式。干货公众号:捡田螺的小男孩1.策略模式1.1 业务场景假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码:if(type=="A"){ //按照A格式解析 }else if(type=="B"){ //按B
2021-11-05 21:35:36
110
转载 TCP协议是大厂面试必问的知识点。整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀
TCP协议是大厂面试必问的知识点。整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀公众号:捡田螺的小男孩 github地址,感谢每一颗star1. 讲下TCP三次握手流程开始客户端和服务器都处于CLOSED状态,然后服务端开始监听某个端口,进入LISTEN状态第一次握手(SYN=1, seq=x),发送完毕后,客户端进入 SYN_SEND 状态 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端进入 SYN_RC
2021-11-05 21:16:31
187
1
转载 JVM垃圾回收机制全面分析
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。.
2021-11-05 14:57:17
342
转载 剖析MySQL黑盒——MySQL架构设计
为何称MySQL为黑盒?对于大部分的开发人员而言,编写增删查改的sql语句通过数据库连接去操作数据库,但并不关心数据库是如何监听请求和从连接中把请求数据中提取出来,往往在意表结构,sql执行效率慢就给他们建立索引,完全把MySQL当作黑盒子去使用。1. 网络连接必须使用线程来处理MySQL 使用内部线程来实现监听和读取请求。2. SQL接口:负责处理接收到的sql语句MySQL通过sql接口把我们平时编写的sql语句简单化,让我们轻松地学会和编写sql语句,但其底层实现其实.
2021-11-04 22:46:39
103
转载 MYSQL MVCC实现原理
MVCC(Multi Version Concurrency Control的简称),代表多版本并发控制。与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的优势:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能了解MVCC前,我们先学习下Mysql架构和数据库事务隔离级别MYSQL 架构MySQL从概念上可以分为四层,顶层是接入层,不同语言的客户端通过mysql的.
2021-11-04 22:37:05
108
转载 数据库的疑难杂症篇
一、数据库状态判断1.1、select 1 判断(主库并发阻塞无法检测–MHA(Master High Availability)的默认方案)实际上,select 1 成功返回,只能说明这个库的进程还在,并不能说明主库没问题。现在,我们来看一下这个场景。set global innodb_thread_concurrency=3;CREATE TABLE `t` (`id` int(11) NOT NULL,`c` int(11) DEFAULT NULL,PRIMARY KEY (...
2021-11-04 11:35:30
367
转载 MySQL 主从同步延迟的原因及解决办法
Mysql主从基本原理,主要形式以及主从同步延迟原理 (读写分离)导致主库从库数据不一致问题的及解决方案一、主从数据库的区别从数据库(Slave)是主数据库的备份,当主数据库(Master)变化时从数据库要更新,这些数据库软件可以设计更新周期。这是提高信息安全的手段。主从数据库服务器不在一个地理位置上,当发生意外时数据库可以保存。(1) 主从分工其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效
2021-11-03 16:08:00
3651
转载 Redis Cluster为什么有16384个槽?
Redis 集群并没有使用一致性hash,而是引入了哈希槽的概念。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。但为什么哈希槽的数量是16384(2^14)个呢,这个问题在github上有人提过,作者也给出了解答(点击查看),下面我们来简单分析一下。正文Redis Cluster的工作原理:我们让两个redis节点之间进行通信的时候,需要在客户端执行下面一个命令127.0.0.1:7000>clus
2021-11-03 10:53:58
384
转载 无锁环形缓冲RingBuffer的原理及Java实现
在多线程环境下为了保证线程安全,往往需要加锁,例如读写锁可以保证读写互斥,读读不互斥。有没有一种数据结构能够实现无锁的线程安全呢?答案就是使用RingBuffer循环队列。在Disruptor项目中就运用到了RingBuffer。RingBuffer的基本原理如下:在RingBuffer中设置了两个指针,head和tail。head指向下一次读的位置,tail指向的是下一次写的位置。RingBuffer可用一个数组进行存储,数组内元素的内存地址是连续的,这是对CPU缓存友好的——也就是说,在硬件级别
2021-11-03 10:46:36
1852
转载 HashMap源码解析JDK1.8
先看看hashMap在jdk 1.8的结构,如下图,用的是数组+链表+红黑树的结构,也叫哈希桶,在jdk 1.8之前都是数组+链表的结构,因为在链表的查询操作都是O(N)的时间复杂度,而且hashMap中查询操作也是占了很大比例的,如果当节点数量多,转换为红黑树结构,那么将会提高很大的效率,因为红黑树结构中,增删改查都是O(log n)。 哈希桶就是数组里面的一个位置中所占所有数据,例如,下图中,绿色节点所占的该数组的位置,以及它连接的链表,整体为一个哈希桶。 hash...
2021-11-01 20:29:08
131
转载 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了)
常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了)为什么HashMap不是线程安全的呢?我们在面试的时候,总是知道HashMap是线程不安全,如果你要保证线程安全的话就是用ConcurrentHashMap。但是我们好像从来没怎么没从HashMap的底层原理上去分析HashMap为什么不是线程安全的。那现在就一起来分析一下,为什么HashMap不是线程安全的吧!!!首先,先从整体上说一说HashMap吧。HashMap的线程不安全
2021-11-01 20:15:53
273
转载 redis持久化机制RDB、AOP
由于Redis是基于内存的数据库,为了保证数据的可用性,Redis提供了两种数据持久化机制:RDB和AOP,下面对这两种持久化方式加以分析。RDB运行原理RDB模式可以在指定的时间间隔内生成内存中整个数据集的持久化快照。快照文件默认被存储在当前文件夹中,名称为dump.rdb,可以通过dir和dbfilename参数来修改默认值。1.redis调用fork函数复制当前进行的一个副本-子进程2.父进程继续接收并处理客户端发来的命令3.子进行将内存中的数据写入一个临时的dump文件4.子进程写
2021-10-30 22:34:44
254
转载 MyISAM与InnoDB 的区别
区别:1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅..
2021-10-29 18:29:32
110
转载 B树和B+树
一、BST树到AVL树到B树的简介1.1 BST树 --- 二叉排序树特点:1. 根节点的值大于其左子树中任意一个节点的值2. 根结点的值小于其右节点中任意一节点的值3. 这一规则适用于二叉查找树中的每一个节点。好处:查询的时间复杂度比链表快,链表的查询时间复杂度是O(n),二叉排序树平均是O(logn)。二叉排序树越平衡,越能模拟二分法,所以越能想二分法的查询的时间复杂度O(logn)。二叉排序树如下图:不足:但是BST树有一个不足的地方,..
2021-10-28 20:11:41
215
原创 mysql 官方文档学习
MySQL :: MySQL 5.7 Reference Manual :: 8.8.2 EXPLAIN Output Format
2021-10-28 15:56:08
206
转载 mysql explain详解
Explain简介本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。下面是使用 explain 的例子:在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放
2021-10-28 15:54:39
183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅