自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 Spring、SpringBoot知识梳理及项目实践

项目实战内容包含:集成mybatis、mybatis-plus(相关插件使用)集成redis自定义注解实现aop切面动态代理demo通用返回类读取配置文件方式全局异常处理常用web配置(跨域、消息转换、日期转换)starter封装案例启动项目初始化操作

2021-12-09 13:36:48 715

原创 基于ELK(es、logstash、kibana)和springboot2、log4j2实现日志可视化

搭建ELK平台这部分参考作者另一个采坑博客ELK部署笔记(docker-compose部署)建一个采用log4j2框架的SpringBoot项目这部分没啥好说的,注意几个要点1、确定项目采用了你配置的log4j2框架,而不是用的默认的logback或者其他日志框架 <dependency> <groupId>org.springframework.boot</groupId> <

2020-11-28 23:48:48 736 4

原创 ELK部署笔记(docker-compose部署)

环境:CentOS7.6,1核2G建议先看后面两部,可以先把yum更新到最新,安装的docker如果与系统匹配上,可能会比较顺利!1、用docker部署elk的大体步骤yum install docker yum install docker-compose新建自定义目录,新建docker-compose.yml文件(这个过程叫编排服务)mkdir /xxx/elk vim dokcer-compose.yml复制以下内容到新建的docker-compose.yml文件,保存

2020-11-28 12:19:13 1466

原创 MVCC的底层原理

MVCC是多版本并发控制(multiversionconcurrencycontrol)的缩写,该技术允许具有特定隔离级别的InnoDB事务执行一致性读取操作。定义是InnoDB的MVCC机制使用的一个内部快照表象某些事务(取决于它们的隔离级别)可以看到事务(或者sql语句)启动时的数据值使用范围可重复读、读已提交、读未提交三种隔离级别都有用到ReadViewInnoDB给数据库每行记录新增了三个字段DB_TRX_ID最近一次修改或者新增本行数据的事务标识前可见。后不可见。...

2022-07-25 13:50:12 220

原创 如何判断单链表有环?

如题,如何判断单链表有环呢?思路一:快慢指针,定义两个指针,同时指向链表头结点。指针移动速度不一样,一个快,一个慢,循环链表时,如果快慢指针相遇,则有环。很好理解,犹如跑道上的两个人,有人跑的快,有人跑的慢,同时起跑,跑的快的人,必然在比跑的慢的多跑一圈后,会追上跑得慢的。思路二:遍历链表,每个元素都往set集合里装,如果有环,肯定会重复,新增元素时判断set是否包含该元素,即可判断链表是否有环:包含则有环,完成遍历,不包含则无环。 两种思路实现...

2022-06-12 23:42:51 171

原创 单链表反转

单链表反转

2022-06-12 00:03:16 20

原创 SpringCloud集成Seata和Nacos

seata官方demo阅读困难,bug多!一手资料做成了二手水平!

2022-05-08 16:22:03 565

原创 骚操作——Word批量修改图片大小

骚操作——Word批量修改图片大小

2022-03-27 00:12:52 240

原创 我们在浏览器输入网址到页面显示时发生了什么事情?

1、浏览器解析URL,生成发送给web服务器的请求信息2、根据域名(地址)查询IP,DNSDNS服务器保存了IP和域名的对应关系,分别是:根DNS服务器 顶级域DNS服务器(com) 权威DNS服务器(server.com)其中根DNS服务器保存在任何DNS服务器上,换言之,每个DNS服务器都知道根DNS服务器的IP。DNS解析流程:客户端发送DNS请求给本地DNS服务器,询问域名的IP是什么?本地DNS服务器如果有缓存,则返回。 本地DNS服务器没有缓存该域名,则向根DNS服务

2022-03-23 14:10:49 3438

原创 k8s可视化界面安装

两种k8s可视化界面

2022-03-08 17:02:35 259

原创 K8S发布应用步骤

k8s发布应用

2022-03-08 16:44:21 537

原创 kubeadm方式搭建k8s集群

k8s集群搭建常用步骤

2022-03-08 16:01:59 1002

原创 JAVA SPI机制理解及思考

理解Java SPI (Service Provider Interface) is the mechanism to load services dynamically. We can implement Java SPI in our application by following the specific set of rules and load the services using the ServiceLoader class.翻译重点:Java SPI是一种动态加载服务的机制(动态调

2021-09-16 11:56:13 45

原创 windows忘记了Mysql的密码了

环境:win10,mysql8.01、管理员打开cmd2、net stop mysql3、mysqld --console --skip-grant-tables --shared-memory4、第3步的窗口不要关,再次以管理员身份打开cmd窗口5、mysql -u root -p回车,提示输入密码,不用输入,直接回车6、use mysql7、update user set authentication_string='' where user='root';8、qui

2021-08-25 10:14:03 38

原创 POI上传带图片的Excel

/** * 可用于读取包含多个表的excel * 外层map用于表示sheet,list用于表示每个sheet的行记录,内层map用于表示sheet-->row-->cell即:行中的每一列数据 * * @param filePath 文件路径 * @return {@link Map<String, List<Map<String, Object>>>} */public Map<String, List<Map<Strin.

2021-06-01 16:24:08 132

原创 Nacos 功能初探

简介:Nacos 致力于帮助您发现、配置和管理微服务。在SpringCloud中,可以替换eureka、configNacos Config一、安装启动1、下载安装https://github.com/alibaba/nacos/releases2、解压3、启动cd到bin目录,执行:sh startup.sh -m standalone见到如上界面就表示启动成功4、登陆管理界面http://localhost:8848/nacos/index.htm

2021-05-22 13:51:52 94 4

原创 Java链表实现队列

问题:用链表实现一个先进先出的队列分析:1、链表实现,必须有一个节点能够装数据和下一个节点的指针(引用)2、队列必须要有队首、队尾指针和记录当前队列大小的整型数3、入队:往队尾加,队尾的下一个指针指向新元素,随后移动队尾指针指向新元素4、出队:取出队首数据,移动队首指针指向队首的下一个元素5、边界问题考虑实现1、节点类/** * 队列结点 * * @author zab * @date 2021-01-27 11:13 */public class Nod.

2021-01-27 11:32:17 244

原创 手撕Java快排

思想从乱序的数字中找一个中位数(便于理解,就取最后一个数),设想两个游标,左游标指向第0个数,右游标指向最后一个数第一步:左游标右移,直到找到一个数比中位数大的停止第二步:右游标左移,直到找到一个数比中位数小的停止第三步:交换左右游标的指向的数,这时候发生一个现象就是小的数在左移,大的数在右移第四步:重复一二三步,直到左右游标指向同一个数。这时候交换中位数和同时指向的数。这时候发生一个现象就是左右游标同时指向的位置,左边全是比该位置对应的数小的数,右边全是比该位置对应的数大的数第五步

2021-01-25 23:45:26 143

原创 Error deserializing Avro message for id -1

Error deserializing Avro message for id -1最近博主在工作中遇到过这种错误。分析该错误是由于kafka反序列化消息失败导致的。至于为啥失败,这样从项目说起。话说博主接了一个项目,该项目由其他项目迁移过来修修补补,kafka消息监听也有很多。于是乎,遇到新需求时,都是拷贝一份kafka配置过来,其中一份配置长这样:props.put("key.deserializer", "org.apache.kafka...

2020-12-23 19:44:45 339

原创 如何修改git已提交的commit message

git commit --amend会弹出一个编辑框,就像vim一样,按下键盘I键(insert)编辑好了过后,(:wq)保存即可

2020-12-22 10:37:06 1077 1

原创 Kafka?看这篇就够了!

为什么要用消息中间件解耦、异步、削峰限流消息中间件常用工作模式至多消费一次消息生产者生产的消息如果被消费者消费后,消费者会向生产者服务器确认已消费,由生产者主动删除服务器的消费过的消息没有限制消费次数消息生产者发完消息后,该消息可以由多个消费者同时消费,并且同一个消费者可以多次消费消息服务器的同一个记录kafka架构kafka消息以topic分类,消息称为record每个topic底层都会对应一组partition分区的日志,用于持久化topic的re..

2020-10-30 00:12:16 126

原创 Java程序员需掌握的计算机基础

一、计算机系统概述一个完整的计算机系统包括:硬件系统和软件系统,如下图所示硬件:计算机装置,即物理设备。硬件系统:组成计算机系统的各种物理设备的总称。是计算机完成工作的物质基础,是软件建立和依托的基础。软件:某种计算机语言编写的程序、数据和相关文档的集合。指示计算机完成特定工作任务,是计算机系统的灵魂。软件系统:在计算机上运行的所有软件的总称。裸机:仅有硬件组成,没有软件的计算机。二、计算机硬件系统及工作原理冯·洛伊曼计算机体系结构特征:计算机由5个部分组成:运.

2020-10-08 23:32:10 352

转载 如何分库分表

数据库怎么分库分表,垂直?水平?一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 ->分库和垂直分表。第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 ->分库。2、CPU瓶..

2020-09-24 10:52:17 622

原创 点击此文,免登陆下载JDK

创建账户是不可能创建账户的。只有偷个账号来用:http://bugmenot.com/view/oracle.com

2020-06-03 22:26:52 321

原创 不使用其他框架实现RPC远程调用

回顾RPC框架节点 角色说明 Provider 提供远程服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Dubbo最重要的三个角色就是服务提供方、服务消费方、注册中心。下面我们通过Java原生API实现远程调用,不使用任何第三方框架!服务提供方package rpc.provider;/** * 服务提供方 接口 * * @author zab * @date 2020-05-

2020-05-17 21:55:18 235

原创 RabbitMQ原理笔记

1、AMQP高级消息队列协议和abbit的工作流程AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议其工作流程如下图发布者将消息发送到指定的交换机,而使用者将消息从队列中拉出(或者队列根据配置将消息推送给消费者)消息发布者和消费者通信是通过公有的交换机名称,通常新建队列都会绑定到某一个交换机上...

2020-04-28 23:02:46 131

原创 Docker Nginx部署笔记

目的把前端开发的项目,用ng代理访问,前端基于antd+react已打包到dist文件夹Ng常用知识1、启停操作:nginx -s stop 快速关机nginx -s quit 正常关机nginx -s reload 重新加载配置文件nginx -s reopen 重新打开日志文件2、配置文件位置:/usr/local/nginx/conf,/etc/ng...

2020-04-06 09:22:11 2441

原创 后台管理系统打包笔记(antd+springboot)

1、前端项目,npm run build生成dist文件夹2、后台配置@Configuration@EnableWebMvcpublic class WebMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry r...

2020-03-31 00:04:19 342

原创 Java多线程与高并发七(ThreadLocal源码)

ThreadLocal是什么ThreadLocal提供了线程局部变量,由该类保存的变量,会分开线程,不同的线程会保存不同的变量副本。import java.util.HashMap;import java.util.Map;public class ThreadLocalTest { ThreadLocal threadLocal = new ThreadLocal();...

2020-02-05 23:56:21 452

原创 Java多线程与高并发八(线程池)

Java多线程与高并发七本来想写ThreadLocal源码的,实在是看底层代码看不动了!先搁置吧。Java多线程与高并发八给同学们分享下面试中常考的线程池的七大参数!为什么要用线程池 防止频繁创建和销毁线程,让每个线程可以多次使用,防止消耗过多内存,所以我们使用线程池。为什么不用JDK自带线程池 像下面这样定义线程池,不香吗?为什么不用呢?...

2020-01-23 00:25:40 1443

原创 Java多线程与高并发六(Lock上锁底层实现原理)

我们前面介绍了Lock的基本用法,知道Lock有公平锁、非公平锁两种实现,也知道Lock底层是用CAS实现的,但我们前面并没有详细介绍底层实现,本文就围绕Lock的加锁操作介绍Lock的底层实现原理。 我们的切入点是可重入锁ReentrantLock的lock()方法:Lock lock = new ReentrantLock();lock.lock();跟进代码...

2019-11-17 23:33:18 958 1

原创 Java多线程与高并发五(常用并发工具类)

为了实现各种线程的操作,比如线程阻塞、阻塞恢复,JDK提供了大量模型来操纵线程运行。《Java多线程与高并发五(常用并发工具类)》给大家伙儿分享下JDK中常见的并发工具类。说一道面试题实现一个容器,提供add,size方法,两个线程,线程一添加十个元素到容器中,线程二监控容器中元素的个数,当线程一添加到容器的元素个数到5时,线程二给出提示并结束。解法一:wait/notify和syn...

2019-11-09 00:44:07 1618 1

原创 Java多线程与高并发四(Lock与CAS)

我们在《Java多线程与高并发一》中讲到怎样新建一个线程,用synchronized怎样给代码加锁,以及synchronized锁的优化升级。在《Java多线程与高并发二》中,我们认识了Java的内存模型和计算机的内存架构,以及二者之间的不同,怎样弥补。在《Java多线程与高并发三》中,我们我们认识了volatile关键字,以及其作用和深入原理。《Java多线程与高并发四》给大家介绍L...

2019-11-03 22:37:05 792

原创 Java多线程与高并发三(volatile关键字)

volatile关键字,开发中一般不用,主要用途就是用来面试造火箭,那么它在代码中的真正作用是啥呢??上一篇博客说到,对于现代多核心计算机而言,在多线程的情况下,如果一个变量没有加volatile修饰,可能出现线程间各自拷贝主内存的变量值到自己独有的线程CPU缓存中对数据做各种操作,导致变量的变化在线程间不可见的问题。volatile作用一:保证线程之间变量的可见性举个例子:...

2019-11-02 16:14:23 716

原创 Java多线程与高并发二(JMM)

JMM-Java内存模型Java虚拟机把Java的内存分为thread stacks和heap,在理解多线程的时候,这种粗糙的分法已足够。如图所示,该图有如下含义:1、每个线程都有自己的thread stack,意味着只要是存在于thread stack的变量都是线程独有,别的线程是不能访问的。说的直白点,即使两个线程执行相同代码,每个线程都独享变量。2、Java中的基础数据类型...

2019-10-29 17:07:03 752

原创 Java多线程与高并发一(基础知识)

Java多线程是面试重要考点,其知识面涉及深度和广度都是其他面试题型所不及的,本博客系列《Java多线程与高并发》记录了博主学习高并发与多线程的路径,知识点由浅入深,并附有大量案例程序,可以作为笔记随时翻查。话不多讲,上干货。程序、进程、线程程序:是一个静态的实体,是一组有序指令的集合,就是躺在硬盘上的一堆代码文件进程:程序运行起来,就是一个进程,每个进程占有某些系统资...

2019-10-22 23:20:45 3081

原创 聊聊Java8接口中的default和static方法

JDK1.8之前的接口回顾 在jdk1.8之前,我们对接口的认知是这样的: 1、方法:只能包含public和abstract的方法,即使定义为:interface Shape { //获取几何图形的面积 Double getArea(double length, double width);}方法前面也默认加了public abstract修饰...

2019-09-21 16:34:44 1762 4

转载 从头到尾谈Java垃圾回收

原著:聂晓龙(花名:率鸽),阿里巴巴高级开发工程师。之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。

2019-07-30 22:16:48 666

原创 SpringBoot2.1.5实现动态数据源切换

问题1、数据不都是在一个库存在,可能需要到其他库去操作数据比如现在需要从两个不同库里去拿user数据而我们用springboot项目做配置一般是这么写的:其中url已经定位到一个库了,所有的操作都是基于这个test库里面的不同的表2、公司业务做得比较大,数据库需要主从分离基于以上两种问题,需要做数据源的动态切换。解决方案1、思路分析要想配置多个数据源,必...

2019-06-02 10:09:12 1525

原创 数据结构与算法——基础数据结构(数组和链表)

什么是线性表线性表是由零个或多个数据元素组成的有限序列。线性表是有限的 线性表第一个元素无前驱,最后一个元素无后继,中间元素只有一个前驱和后继元素 线性表可以是空表常见的线性表常见的线性表如下图所示常见的线性表数据结构有:数组,链表,队列,栈;与线性表相对的是稍稍复杂的数据结构,比如:树,图等。什么是数组数组是一种线性表,具有连续的内存空间,并且只能存储相同的数据...

2019-05-23 22:44:13 1039

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除