自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP三次握手简述

TCP三次握手什么是TCP连接TCP头部格式TCP建立连接(三次握手)建立连接过程:建立连接过程异常:TCP 第⼀次握⼿的 SYN 丢包了:TCP 第⼆次握⼿的 SYN、ACK 丢包了:TCP 第三次握⼿的 ACK 包丢了:为什么是三次握手:半连接队列与全连接队列:全连接队列:半连接队列什么是TCP连接TCP连接⽤于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口⼤⼩称为连接。建⽴⼀个 TCP 连接是需要客户端与服务器端达成上述三个信息的共识。即:Socket

2021-09-15 22:23:22 3933

原创 为什么有binlog还要redo log

mysql中redo log和binlog的区别什么是WALMySQL中更新一条语句的流程两阶段提交中,MySQL异常重启(crash),是如何保证数据完整性的?为什么不仅使用binlog来支持崩溃恢复,并且还能支持归档为什么不仅使用redo log,不要binlog可以吗?redo log到底是什么,数据最终落盘,是从redo log更新来的吗?redo log buffer是什么?与redo log持久化有关的配置参数innodb_flush_log_at_trx_commit与binlog持久化有关的

2020-11-25 21:20:43 4785 14

原创 kubeconfig生成最高权限的token

生成kubernetes集群最高权限admin用户的token,并通过kubeconfig文件在其他机器进行访问操作

2023-02-26 17:24:26 1239

原创 Ubuntu通过kubeadm安装k8s

Ubuntu通过kubeadm安装k8s

2023-02-23 23:23:39 546

原创 U盘启动ubuntu出现黑屏下划线

解决U盘启动安装Ubuntu出现黑屏下划线问题

2023-02-05 21:50:00 887

原创 StarRocks must be an aggregate expression or appear in GROUP BY clause

StarRocks must be an aggregate expression or appear in GROUP BY clause

2023-01-17 22:59:58 4412

原创 AOP、AspectJ、JDK动态代理、CGLIB

AOP、AspectJ、JDK动态代理、CGLIB

2022-10-24 23:51:47 1780

原创 Spring超重要扩展点ConfigurationClassPostProcessor

1. Spring在什么时候对@ComponentScan、@ComponentScans注解进行的解析?2. Spring在什么时候解析了@Import注解,如何解析的?3. Spring在什么时候解析了@Bean注解?4. Spring在什么时候加载的META-INF#spring.factories中的EnableAutoConfiguration类?5. @Configuration和@Component有什么区别?

2022-10-15 00:08:37 208

原创 AbstractQueuedSynchronizer——JUC包的基石(下)

你知道CyclicBarrier和CountDownLatch两大方面的差别吗

2022-10-11 21:47:14 95

原创 AbstractQueuedSynchronizer——JUC包的基石(上)

浅谈AQS——JUC包的基石

2022-10-10 22:44:54 131

原创 IO多路复用简述

一文搞懂阻塞与非阻塞、同步IO与异步IO、IO多路复用网络模型;

2022-10-09 23:47:48 1303

原创 模板方法与回调函数

模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。这里的“算法”,我们可以理解为广义上的“业务逻辑”,并不特指数据结构和算法中的“算法”。这里的算法骨架就是“模板”,包含算法骨架的方法就是“模板方法”。

2022-03-20 23:49:43 336

原创 RabbitMq如何尽可能保证消息不丢

RabbitMq如何尽可能保证消息不会丢失

2022-03-07 22:55:06 1619

原创 gitlab配置多个账号

背景小明临时要对A项目做一些小改动,但是小明只有A项目的pull权限,没有push权限;但此时有另一个小伙伴提供了另一个账号给小明用于push A项目;于是小明通过以下操作,设置了对A项目推送代码时用的是另一个账号进行权限校验。而对其他项目操作时都是原有的默认配置;操作假定这个super账号邮箱地址为[email protected]生成公私钥cd ~/.ssh;ssh-keygen -t ed25519 -C “[email protected]”;(设置名称,注意不要覆盖已有

2022-02-28 22:32:29 1340

原创 Java面向对象的多态

多态是指,子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。多态这种特性也需要编程语言提供特殊的语法机制来实现编程语言要支持父类对象可以引用子类对象;编程语言要支持继承;编程语言要支持子类可以重写(override)父类中的方法;java中的多态重写示例:public class DynamicDispatch { static abstract class Human { protected abstract void sayHello();

2022-02-27 16:44:11 257

原创 spring如何解决循环依赖的问题

在这里插入图片描述

2021-11-19 16:05:14 490

原创 某公司java工程师面经

一面(60min)java基础数据类型有哪些,int是几个字节的;Integer a = 129; Integer b = 129; a==b;成立吗,129换成127呢?说一说HashMap、ConcurrentHashMap、ArrayList。有用过线程安全的list吗,原子集合类介绍一下?StringBuffer和StringBuilder区别线程创建方式有哪些,Runnable和Callable的区别,他们实现的方法是啥;线程池构造函数有哪些参数,线程池工作流程,拒绝策略有哪些;

2021-10-11 23:38:50 86

原创 HotSpot垃圾收集器常用参数设置(JDK8及以下)

常用参数设置-Xms1024M -Xmx2048M(设置Java堆的大小,将堆的最小值-Xms参数与最大值-Xmx参数 设置为一样即可避免堆自动扩展)-Xss128k(设置栈内存容量,相当于一个栈帧的最大容量)(设置过小的栈内存容量可能会导致StackOverflowError)(设置过大的栈内存容量会OutOfMemoryError,因为操作系统分配给每个进程的内存是有限制的,HotSpot虚拟机提供了参数可以控制Java堆和方法区这两部分的内存的最大值。那剩余的内存假设为2GB(操作系统限制)减去

2021-07-10 18:49:39 323

原创 HotSpot虚拟机OopMap、SafePoint、RememberedSet

HopSpot虚拟机垃圾回收算法细节快速根节点枚举OopMap安全点Safepoint和OopMap解决对象跨代引用Remembered Set如何支持并发标记快速根节点枚举OopMapGC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如 栈帧中的本地变量表)中目前主流Java虚拟机使用的都是准确式垃圾收集,准确式就是说给定某个位置上的某块数据,要能知道它的准确类型是什么,这样才可以合理地解读数据的含义;GC所关心的含义就是“这块数据是不是指向GC堆的引用”。要实现这

2021-06-30 21:31:36 210

原创 springboot无侵入引入多源rabbitMq,主源自动装配,副源手动配置

无侵入式引入多源rabbitMq场景(主源自动装配,副源手动配置)springboot接入单个rabbitmq可以通过springboot自动装配原理,简单地在配置文件中设置好必要信息即可;当需要接入多个rabbitmq源时,度娘找到的多数处理方法是给每个源进行手动配置好ConnectionFactory、RabbitTemplate、SimpleRabbitListenerContainerFactory、RabbitAdmin等等并把其中的主源使用@Primary进行标志;当主源配置信息比较复杂时

2021-05-11 21:55:00 750

原创 JDK8的HashMap扩容原理

HashMap扩容代码主要可以分为entry数组扩容以及历史元素重新rehsh转移到新扩容的entry数组中第一步entry数组扩容final Node<K,V>[] resize() { //获取旧entry数组 Node<K,V>[] oldTab = table; //拿到旧entry数组的大小 int oldCap = (oldTab == null) ? 0 : oldTab.length; //拿到旧entry数组扩容的临界值(

2021-03-05 23:46:56 675

原创 阿里云oss上传文件时设置中文下载名

java web中下载文件时,我们一般设置Content-Disposition告诉浏览器下载文件的名称,是否在浏览器中内嵌显示.Content-disposition: inline; filename=1502849449726.jpg表示浏览器内嵌显示一个文件Content-disposition: attachment; filename=1502849449726.xlsx表示会下载文件,如火狐浏览器中使用阿里云oss上传文件时如何设置对应的中文下载名称上传文件时设置请求头Co.

2021-03-03 23:27:58 3050 1

原创 SpringBoot整合Mybatis原理分析

SpringBoot整合Mybatis原理分析Mybatis核心概念Mybatis编程式用例配置扫描解析过程获得Mapper对象执行sqlMybatis核心概念Configuration 管理mysql-config.xml全局配置关系类SqlSessionFactory Session管理工厂接口Session SqlSession是一个面向用户(程序员)的接口。SqlSession中提供了很多操作数据库的方法Executor 执行器是一个接口(基本执行器、缓存执行器)作用:SqlSessio

2021-02-22 15:13:34 420

原创 MySQL的Illegal mix of collations异常解决办法

异常出现原因:sql语句中,不同字符集或者不同排序规则的两个字段做交互操作的时候可能会出现这种异常情况解决办法:彻底解决:两个字段的字符集和排序规则进行统一;有时候我们只是想在阿里云的DMS控制台中,连表操作查询一些数据以作验证的话:可以使用 CONVERT(field USING utf8) 函数将字段进行转码再进行查询;(临时统一两个字段的字符集以及排序规则) SELECT * FROM tradelog l, trade_detail d WHERE CONVERT(l.trad

2020-12-27 21:51:41 3053

转载 springboot的启动过程与单例bean加载流程

springboot启动过程——生命周期事件流程图;参考博客:不懂SpringApplication生命周期事件?那就等于不会Spring Boot嘛Spring Bean生命周期对应上述生命周期事件中的refresh()启动上下文:实例化单例bean以及启动容器参考博客:请别再问Spring Bean的生命周期了!实例化 Instantiation属性赋值 Populate初始化 Initialization销毁 Destruction两篇硬核博客干货非常多,结合服用非常受益.

2020-12-20 22:08:04 456

原创 mysql中的order by

准备条件,创建一个单词表,使用存储过程插入1W行;CREATE TABLE words ( `id` INT ( 11 ) NOT NULL AUTO_INCREMENT, `word` VARCHAR ( 64 ) DEFAULT NULL, PRIMARY KEY ( `id` ) ) ENGINE = INNODB;delimiter;;CREATE PROCEDURE idata () BEGIN DECLARE i INT; START TRANSACTION; SET i =

2020-12-08 23:56:23 183

原创 jpa与Spring Data的关系

jpa与Spring Data Jpa的关系JPA(Java Persistence API) 为对象关系映射提供了⼀种基于 POJO 的持久化模型、标准。JPA是java为了简化数据持久化代码的一个标准,可以为 Java 社区屏蔽不同持久化 API 的差异。当中的常用实现有Hibernate,当然还有其他厂商(如eclipse的TopLink)2006 年,JPA 1.0 作为 JSR 220 的⼀部分正式发布Spring Data是spring为了在保留底层存储特性的同时,提供相对⼀致的、基于

2020-12-05 23:56:36 634

原创 ThreadLocal通过增加资源保证线程安全

如何保证线程安全控制资源的访问、使用(即保证在同一时刻只能有一个线程对资源访问、使用成功);我们常使用加锁或者通过更复杂的CAS来控制资源的访问来达到线程安全;除了控制资源的访问,我们还可以通过增加资源来保证所有对象的线程安全。我们只要给每一个线程都分配不同的资源对象,那么从线程安全的角度来看也是满足的。java中的ThreadLocal便是通过上述第二种思路来保证线程安全的。简单用法@SpringBootTest@RunWith(SpringRunner.class)public cla

2020-12-02 22:18:27 142

原创 innodb中的change buffer

change buffer(把改变的操作缓存起来)(提升语句执行效率)当需要更新数据页的时候,如果数据页在内存中就直接更新。不在内存中的话,在不影响数据一致性的前提下(行锁竞争引发数据不一致)。innodb会将这些更新操作缓存在change buffer中。(减少磁盘随机读操作)在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行change buffer中与这个页有关的操作(merge)系统也有后台线程会定期merge,在数据库正常关闭(shutdown)的过程中,也会执行merge操作

2020-11-30 23:30:25 422

原创 spring一个非事务方法调用另一个事务方法失效

spring的事务spring提供了许多抽象给数据访问层,使得在不同框架当中使用一样的方式进行数据操作。其实就包含事务抽象(一致的事务模型)spring事务抽象的核心接口PlatformTransactionManager 平台事务管理器,这个事务管理器当中会定义一系列事务操作、查询的方法(commit、rollback、getTransaction等)其中getTransaction等会返回一个TrancactionStatus(代表这个事务的一些状态值)spring通过这个事务管理器给各个平台框

2020-11-30 00:22:18 1057

原创 mybatis plus 使用lambda操作复杂的and、or语句

// A and B.eq("a", "A").eq("b",B);// A or B.eq("a", "A").or().eq("b",B);// A or (B and C).eq("a", "A").or(i -> i.eq("b", "B").eq("c", "C"));// A or (B or C).eq("a", "A").or(i -> i.eq("b", "B").or().eq("c", "C"));// A and (B and C).eq("a"

2020-11-28 18:18:33 10910

原创 请在update语句中加上limit

MySQL版本 mysql-8.0.19-winx64今天看到博文说mysql使用update语句的时候尽量加上limit,因为当更新语句中的字段没有索引的时候,如果没有使用limit的话会锁全表;而如果使用了limit的话,mysql会通过主键索引找到对应的行记录,此时只会给索引搜寻过的行加上行锁,并不会把后面的行给锁住;亲自测试了一下发现并不一样(可能是MySQL版本不一样)CREATE TABLE `person` ( `id` int unsigned NOT NULL AUTO_INCR

2020-11-27 00:17:45 10193 2

原创 synchronized锁升级,JDK6中的锁优化

synchronized锁升级,JDK6中的锁优化从JDK5升级到JDK6后,JDK实现了各种锁优化技术,如轻量级锁、偏向锁、适应性自旋、锁消除等。在JDK对锁进行优化了之后,synchronized相应的也没那么“重”了HotSpot虚拟机中的对象头轻量级锁偏向锁适应性自旋锁锁消除从JDK5升级到JDK6后,JDK实现了各种锁优化技术,如轻量级锁、偏向锁、适应性自旋、锁消除等。在JDK对锁进行优化了之后,synchronized相应的也没那么“重”了HotSpot虚拟机中的对象头第一部分用于存储对

2020-10-21 21:52:51 2305

原创 springboot中自定义starter(短信服务)

springboot中自定义starterspringboot中的starter如何将一个模块功能自定义为一个starter创建一个starter项目,关于项目的命名参考上述命名规约自动配置模块(autoconfigure)starter模块springboot中的starterSpringBoot中的Starter其实也是一种容器,里面包含了诸多依赖。例如Spring-boot-starter-data-mongodb中就包含了五种依赖:Spring-boot-starter,MongoDB Jav

2020-09-21 00:08:49 362

原创 使用BlockingQueue阻塞队列实现生产者与消费者

BlockingQueue阻塞式队列主要实现类:使用有界队列ArrayBlockingQueue实现生产者与消费者;public class ArrayBlockingQueueTest { private static ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue(10); @Test public void test() { Runnable add = () -&gt

2020-08-09 21:17:22 231

原创 java中的线程池ThreadPoolExecutor

java中的线程池什么是线程池JDK对线程池的支持线程池工厂Executors计划任务ScheduledExecutorService核心线程池的内部实现线程池常用方法什么是线程池虽然与进程相比,线程是一种轻量级的工具,但其创建和关闭仍然需要花费时间。当线程数量过大时,反而会耗尽CPU和内存资源,大量的线程回收也会给GC带来很大的压力,延长GC的停顿时间。线程池中,总有那么几个活跃线程。当你需要使用线程时,可以从池子中随便拿一个空闲线程,当完成工作时,并不着急关闭线程,而是将这个线程退回到池子中,方

2020-08-09 18:32:06 111

原创 JDK常用并发工具类

JDK常用并发工具类Semaphore信号量ReadWriteLock读写锁CountDownLatch倒计数器CyclicBarrier循环栅栏LockSupport线程阻塞工具类Semaphore信号量信号量可以指定多个线程同时访问某一个资源。而synchronized和重入锁ReentrantLock都只允许一个线程访问一个资源。构造函数public Semaphore(int permits)public Semaphore(int permits, boolean fair)常

2020-08-03 10:41:34 324

原创 ReentrantLock重入锁

ReentrantLock重入锁简述特性总结简述重入锁ReentrantLock可以完全替代synchronized关键字。而且重入锁可以灵活性更高,功能更强大。在JDK1.5之前性能也更好,但是从JDK1.6开始,JDK在synchronized中做了大量的优化,两者的性能差距并不会很大。public class ReenterLock implements Runnable{ public static ReentrantLock lock = new ReentrantLock();

2020-07-26 23:56:02 72

原创 java内存模型(Java Memory Model,JMM)

java内存模型java内存模型(Java Memory Model,JMM)简述内存间交互操作关键字volatile原子性可见性有序性先行发生原则java内存模型(Java Memory Model,JMM)简述Java内存模型规定了所有的变量都存储在主内存(Main Memory)中,而每条线程有自己的工作内存,线程的工作内存中保 存了当前线程使用的变量的主内存副本。Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节。

2020-07-14 23:48:10 338

原创 java线程

java线程java线程的状态类别介绍java中一个线程的总共有6种状态都在Thread类中的State枚举中定义: public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }1.NEW:尚未启动的线程状态;还没有使用Thread.start()方法进行线程启动;2.RUNNABLE:该线程处于一个可运行的状态,使用了Thread.

2020-07-12 23:37:06 95

空空如也

空空如也

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

TA关注的人

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