章全蛋
码龄7年
关注
提问 私信
  • 博客:207,739
    207,739
    总访问量
  • 184
    原创
  • 2,340,515
    排名
  • 31
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2017-11-13
博客简介:

章全蛋的博客

查看详细资料
个人成就
  • 获得121次点赞
  • 内容获得56次评论
  • 获得361次收藏
  • 代码片获得1,141次分享
创作历程
  • 1篇
    2023年
  • 1篇
    2022年
  • 36篇
    2021年
  • 99篇
    2020年
  • 52篇
    2019年
成就勋章
TA的专栏
  • 面经
    18篇
  • 分布式
    12篇
  • zookeeper
    7篇
  • 设计模式之美
    8篇
  • Tomcat
    2篇
  • Spring
    20篇
  • SpringMVC
    1篇
  • SpringFramework
    9篇
  • SpringBoot
    9篇
  • SpringCloud
    4篇
  • Java
    20篇
  • MyBatis
    16篇
  • Kafka
    13篇
  • 数据结构与算法
    6篇
  • ElasticSearch
    16篇
  • PHP
    16篇
  • 计算机网络
    2篇
  • MySQL
    17篇
  • Linux
    11篇
  • Redis
    2篇
  • 开发辅助
    19篇
  • Docker
    3篇
  • Nginx
    2篇
  • Git
    2篇
兴趣领域 设置
  • Java
    java
  • 大数据
    mysqlredis
  • 后端
    spring架构
  • 搜索
    elasticsearch
  • 服务器
    linux
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

项目部署 Java Mysql ES Redis

下载 https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip。把文件中的daemonize属性改为yes(表明需要在后台运行)创建目录和文件并且分配属主和属组。添加sql查询账号,特权为只读。把 MySQL 添加进启动项。解压MySQL5.7安装包。复制脚本及PATH变量赋值。这个时候要设置多个账号密码。重启即可(kill)
原创
发布博客 2023.05.26 ·
999 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

GIT撤回已push的提交/合并已push的提交

GIT撤回push
原创
发布博客 2022.07.06 ·
1023 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Java 垃圾回收机制及算法

Java 垃圾回收机制及算法垃圾回收概述什么是垃圾回收说起垃圾收集(Garbage Collection, 下文简称 GC) , 有不少人把这项技术当作 Java 语言的伴生产物。 事实上,垃圾收集的历史远远比 Java 久远, 在1960年诞生于麻省理工学院的 Lisp 是第一门开始使用内存动态分配和垃圾收集技术的语言。垃圾收集需要完成的三件事情:哪些内存需要回收?什么时候回收?如何回收?Java 垃圾回收的优缺点优点:不需要考虑内存管理可以有效的防止内存泄露,有效地利用可使
原创
发布博客 2021.09.22 ·
734 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Thread 线程面试题

Thread 线程面试题线程创建有几种实现方式主要有三种,分为两大类:子线程没有返回值、子线程有返回值。无返回值的线程有两种写法,第一种是继承 Thread,可以这么写:class MyThread extends Thread{ @Override public void run() { log.info(Thread.currentThread().getName()); }}@Testpublic void extendThreadInit(){
原创
发布博客 2021.07.09 ·
582 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Future、ExecutorService 源码解析

Future、ExecutorService 源码解析Thread 或者 Runnable 方法开启的线程是没有返回值,如果我们需要子线程计算,取得结果后返回,可以用 Callable。整体架构关于线程 API 之间关系的依赖图:我们首先看一个 demo,这个场景说的是我们往线程池里面提交一个有返回值的线程,代码如下:public static void main(String[] args) throws ExecutionException, InterruptedException {
原创
发布博客 2021.07.09 ·
229 阅读 ·
0 点赞 ·
2 评论 ·
1 收藏

Thread 源码解析

Thread 源码解析类注释每个线程都有优先级,高优先级的线程可能会优先执行;父线程创建子线程后,优先级、是否是守护线程等属性父子线程是一致的;JVM 启动时,通常都启动 main 非守护线程,以下任意一个情况发生时,线程就会停止:退出方法被调用,并且安全机制允许这么做(比如调用 Thread.interrupt 方法)所有非守护线程都消亡,或者从允许的服正常返回,或者允许的方法抛出了异常;每个线程都有名字,多个线程可能具有相同的名字,Thread 有的构造器如果没有指定名字,会自动生
原创
发布博客 2021.07.08 ·
546 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ArrayBlockingQueue 源码解析

ArrayBlockingQueue 源码解析ArrayBlockingQueue。按照字面翻译,中文叫做数组阻塞队列,从名称上看,我们就比较清楚此阻塞队列底层使用的是数组。一说到数组,大家可能会想到 ArrayList 和 HashMap,举新增场景来说 ArrayList 通过 size ++ 找到新增的数组下标位置,HashMap 通过 hash 算法计算出下标位置,那么 ArrayBlockingQueue 是不是也是这两种方法呢?都不是,ArrayBlockingQueue 使用的是一种非常奇妙
原创
发布博客 2021.07.02 ·
363 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

LinkedBlockingQueue 源码解析

LinkedBlockingQueue 源码解析说到队列,大家的反应可能是我从来都没有用过,应该不是重要的 API 吧。其实,我们平时使用到的线程池、读写锁、消息队列等等技术和框架,底层都是队列。队列是很多高级 API 的基础,学好队列,对自己深入学习 Java 非常重要。本文主要以 LinkedBlockingQueue 队列为例,详细描述一下底层具体的实现。整体架构LinkedBlockingQueue 直译过来做链表阻塞队列,从命名上就知道其底层数据结构是链表,并且队列是可阻塞的。类图从
原创
发布博客 2021.06.29 ·
251 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

并发 List、Map 面试题

并发 List、Map 面试题CopyOnWriteArrayList和 ArrayList 相比有什么相同点和不同点相同点:底层数据结构都是数组不同点:CopyOnWriteArrayList 是线程安全的,在多线程环境下使用,无需加锁,可直接使用CopyOnWriteArrayList 通过哪些手段保证了线程安全数组容器用 volatile 关键字修饰,保证了数组内存地址被任意线程修改后,都会通知到其他线程所有对数组的修改操作,都采用 ReentrantLock 加锁,保
原创
发布博客 2021.06.28 ·
161 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ConcurrentHashMap 源码解析和设计思路

ConcurrentHashMap 源码解析和设计思路当我们碰到线程不安全场景下,需要使用 Map 的时候,我们第一个想到的 API 估计就是 ConcurrentHashMap,ConcurrentHashMap 内部封装了锁和各种数据结构来保证访问 Map 是线程安全的,接下来我们一一来看下,和 HashMap 相比,多了哪些数据结构,又是如何保证线程安全的。类注释我们从类注释上可以得到如下信息:所有的操作都是线程安全的,我们在使用时,无需再加锁多个线程同时进行 put、remove 等操作
原创
发布博客 2021.06.25 ·
145 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

CopyOnWriteArrayList 源码解析和设计思路

CopyOnWriteArrayList 源码解析和设计思路在 ArrayList 的类注释中,JDK 就提醒了我们,如果要把 ArrayList 作为共享变量的话,是线程不安全的,推荐我们自己加锁或者使用 Collections.synchronizedList 方法,其实 JDK 还提供了另外一种线程安全的 List,叫做 CopyOnWriteArrayList,这个 List 具有以下特征:线程安全的,多线程环境下可以直接使用,无需加锁通过锁 + 数组拷贝 + volatile 关键字保证了
原创
发布博客 2021.06.22 ·
194 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

集合面试题

集合面试题线程安全我们说集合都是非线程安全的,这里说的非线程安全指的是集合类作为共享变量,被多线程读写的时候,才会线程不安全。如果要实现线程安全的集合,JDK 推荐我们使用 Collections.synchronized* 类,Collections 帮我们实现了 List、Set、Map 对应的线程安全的方法:图中实现了各种集合类型的线程安全的方法,我们以 SynchronizedList 为例,从源码上来看下,Collections 是如何实现线程安全的:static class Synch
原创
发布博客 2021.06.22 ·
159 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Map源码会问哪些面试题

Map源码会问哪些面试题Map 整体数据结构类问题说一说 HashMap 底层数据结构JDK1.8,HashMap底层是数组 + 链表 + 红黑树的数据结构。数组的主要作用是方便快速查找,时间复杂度为 O(1),默认大小为16,数组的下标索引是通过 key 的 hashcode 计算出来的,数组的元素叫做 Node,当不同的 key 的 hashcode 相同时(hash冲突),Node 会转换成链表,链表的查询复杂度的 O(n),当链表的长度大于等于 8 并且数组的大小大于等于 64 时,链表会进
原创
发布博客 2021.06.21 ·
128 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TreeMap 和 LinkedHashMap 核心源码解析

TreeMap 和 LinkedHashMap 核心源码解析在了解 TreeMap 之前,我们来看下日常工作中排序的两种方式,作为我们学习的基础储备,两种方式的代码如下:public class TreeMapDemo { @Data // DTO 为我们排序的对象 class DTO implements Comparable<DTO> { private Integer id; public DTO(Integer id) { this.id
原创
发布博客 2021.06.21 ·
190 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashMap 源码解析

HashMap 源码解析HashMap 源码很长,面试的问题也非常多,但这些面试问题,基本都是从源码中衍生出来的, 所以我们只需要弄清楚其底层实现原理,回答这些问题就会游刃有余。整体架构JDK1.8 中 HashMap 底层的数据结构是: 数组 + 链表 + 红黑树。当链表的长度大于等于 8 时,链表会转换成红黑树,当红黑树的大小小于等于 6 时,红黑树会退化为链表,整体的数据结构如下:图中竖这的是 HashMap 的数组结构,数组的元素可能是单个 Node,也可能是个链表或红黑树。比如数组下标为
原创
发布博客 2021.06.21 ·
108 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

List 源码会问哪些面试题

List 源码会问哪些面试题说说你自己对 ArrayList 的理解很多面试官喜欢这样子开头,考察面试者对 ArrayList 有没有总结经验,介于 ArrayList 内容很多,建议先回答总体架构,再从某个细节出发作为突破口,比如这样:ArrayList 底层数据结构是个数组,是有序的集合并且可以重复,支持null值,支持随机读写能力,是非线程安全的。其 API 都做了一层对数组底层访问的封装,ArrayList 集合在调用无参构造方法实例化的时候,并没有创建数组,而是在用户第一次执行添加的时候进
原创
发布博客 2021.06.21 ·
112 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

LinkedList 源码解析

LinkedList 源码解析LinkedList 适用于集合元素先入先出和陷入后出的场景,在队列源码中频繁被使用。整体架构LinkedList 底层数据结构是一个双向链表,整体结构如下图所示:上图代表了一个双向链表结构,链表中的每个节点够可以向前或者向后追溯链表每个节点我们叫做 Node,Node 有 prev 属性,代表前一个节点的位置next 属性代表后一个节点的位置first 是双向链表的头节点,它的前一个节点是 nulllast 是双向链表的尾节点,它的后一个节点是 n
原创
发布博客 2021.06.19 ·
177 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

ArrayList 源码解析和设计思路

ArrayList 源码解析和设计思路整体架构ArrayList 整体架构比较简单,就是一个数组结构,比较简单,如下图:图中展示是长度为 10 的数组,从 1 开始计数,index 表示数组的下标,从 0 开始计数,elementData 表示数组本身,源码中除了这两个概念,还有以下三个基本概念:DEFAULT_CAPACITY 表示数组的初始大小,默认是10,这个数字要记住;size 表示当前数组的大小,类型 int ,没有使用 volatile 修饰,非线程安全的;modCount 统计
原创
发布博客 2021.06.19 ·
157 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Java 常用关键字理解

Java 常用关键字理解Java 中的关键字很多,大约有 50+,在命名上我们不能和这些关键字冲突,编译会报错,每个关键字都代表着不同场景下的不同含义。static意思是静态的、全局的,一旦被修饰,说明被修饰的东西在一定范围内是共享的,谁都可以访问,这时候需要注意并发读写的问题。修饰的对象static 只能修饰类变量、方法和代码块修饰类变量当 static 修饰类变量时,如果该变量时 public 的话,表示该变量任何类都可以直接访问,而且无需初始化类,直接使用 类名.变量 这种形式访问即可。
原创
发布博客 2021.06.18 ·
246 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

String 和 Long 的面试题

String 和 Long 的面试题String不变性我们常常听人说,HashMap 的 key 建议使用不可变类,比如 String 这种不可变类。这里说的不可变指的是类值一旦被初始化,就不能再改变了,如果被修改,将会是新的类。String s = "hello";s = "world";从代码上来看,s 的值好像被修改了,但从 debug 的日志来看,其实 s 的内存地址以及被修改了,也就是 s = "world" 这个赋值操作,其实已经把 s 的引用指向了新的 String。我们从
原创
发布博客 2021.06.18 ·
147 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多