自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (1)
  • 收藏
  • 关注

原创 OpenFeign 父子容器及AutoConfiguration源码解析

本文约2千字,主要知识在使用Spring Cloud时,经常使用OpenFeign 作为远程服务调用的类库;Feign 是一种声明式服务调用组件,它在 RestTemplate 的基础上做了进一步的封装。通过 Feign,我们只需要声明一个接口并通过注解进行简单的配置(类似于 Dao 接口上面的 Mapper 注解一样)即可实现对 HTTP 接口的绑定。通过 Feign,我们可以像调用本地方法一样来调用远程服务,而完全感觉不到这是在进行远程调用。Spring Boot3中,也引入了一套全新的声明式HTTP调

2022-12-21 11:26:59 748 1

原创 NUL: Invalid file path 问题源码分析

环境操作系统:Win11jdk:corretto-11 (亚马逊)xnio: 3.8.0Final起因在使用xnio库创建Channel时,需要用到对各系统“黑洞”的路径。而undertow中,引入了xnio库。xnio创建channel的代码:后出现报错信息:Exception in thread “main” java.io.IOException: Invalid file path。解决方案在 jvm 参数中,添加-Djdk.io.File.enableADS=true即可。

2022-05-31 15:18:49 2022

原创 idea 阅读模式 字体大小调整

在阅读模式(reader mode)的设置中并没有字体大小的调整。在注释的地方右键,即可发现该选项原文

2021-09-10 15:22:35 1231 2

原创 Spring 揭秘 12.1

有关公开当前调用的代理对象的探讨同一个对象内的嵌套方法调用 Spring AOP 拦截失效​问题经典示例:Spring 事务失效​书中示例原因分析归根结底,是Spring AOP实现机制造成的。其采用代理模式实现AOP。具体的横切逻辑,会被动态添加到代理对象中。一般代理对象与目标对象方法的调用时序:​在代理对象方法中,不管你如何添加横切逻辑,最终都需要调用目标对象上的同一方法,来执行最初所定义的方法逻辑。而 同一个对象内的嵌套方法调用 拦截失效​代理对象的method1

2021-09-01 11:06:53 170

原创 nfs 客户端卡死问题

现象nfs 服务器因网络等问题与客户端通信失败后,nfs客户端此时执行 ls 命令卡死原因单从nfs 的知识来看,造成nfs 客户端卡死的问题,是因为nfs 客户端默认采用 hard 挂载模式。改用 soft 模式后,则超时后将抛出一个I/O 错误参考以下文档:redHat-nfs 文档hard or soft — Specifies whether the program using a file via an NFS connection should stop

2021-07-15 10:51:04 5262

原创 Spring 事务失效解决

问题代码示例public interface AService { public void a(); public void b(); } @Service public class AServiceImpl implements AService{ @Transactional(propagation = Propagation.REQUIRED) public void a() { this.b();

2021-07-10 10:39:26 111

原创 mysql left join 多对多 分页记录数不对的问题

一对多时的参考情景阐述event、group、work 三者的关系如下ER图,它们的主要属性为name,在物理模型上表现为:event、group、work、event_group 表;以下是DDLDROP TABLE IF EXISTS `event` ;CREATE TABLE `event` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT '', `work_id` int

2021-05-26 22:37:31 2118 5

原创 非root用户使用docker

docker命令默认只能root用户使用的,其他非root用户执行docker ps等命令,将提示permission deniedGot permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json: dial unix /var/run/doc

2021-05-18 22:20:04 593

转载 MySQL left join on与where的区别

现象left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论、商城里一个货物有多少评论、一条评论有多少个赞等等。但是由于对join、on、where等关键字的不熟悉,有时候会导致查询结果与预期不符,所以今天我就来总结一下,一起避坑。这里我先给出一个场景,并抛出两个问题,如果你都能答对那这篇文章就不用看了。假设有一个班级管理应用,有一个表classes,存了所有的班级;有一个表students,存了所有的学生,具体数据如下(感谢廖雪峰的在线SQL):SELECT

2021-05-14 17:25:28 133

原创 Redis expire 原理(策略)

redis设置过期时间:expire key time(以秒为单位)–这是最常用的方式setex(String key, int seconds, String value)–字符串独有的方式**三种过期策略定时删除在设置key的过期时间时,同时为每个key设置个定时器,在过期时将其移除。优点:保证内存尽快被释放。缺点:如果key的存活时间较短,则删除key会占用大量CPU时间片。(性能不好)惰性删除,memcached采用key过期的时候,并不删除。而是每次获取的时候,检查是否过期,若过期,则

2021-05-02 09:17:28 820

原创 Redis运行时warning及相关小知识

初始化配置(backlog、THP、overcommit_memory)redis-server 运行时的issue14396:M 02 Feb 2021 16:44:32.576 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.14396:M 02 Feb 2021 16:44:32.

2021-02-02 17:27:29 433 1

原创 idea spring 项目 添加本地lib 运行到tomcat

项目结构其中,lib即为本地lib库。添加lib到工程File-> Project Structure将需要的jar包都添加添加lib到WEB-INF/lib 目录添加完成后,效果如图所示,此时即可在运行到tomcat时,将其输出到lib下部署时打包打包的时候,应选择war,不是war exploded噢...

2020-11-05 16:34:12 3156

原创 HashSet概览

类介绍(注释)HashSet是基于HashMap、Set接口的实现,它不保证元素的遍历顺序。add、remove、contains、size 方法,时间复杂度是O(1)HashSet是非线程安全的,并发出错时,会快速失败,抛出ConcurrentModificationException常用方法源码构造函数无参构造函数// 内部组合的HashMapprivate transient HashMap<E,Object> map;public HashSet() {.

2020-07-10 15:37:57 12505

原创 TreeSet概览

类介绍(注释)TreeSet是基于TreeMap的实现,它可以通过自然排序、显式``传入的Comparator对元素进行排序。TreeMap(和其他的可排序的Map)中的元素,在没显式传入构造器的时候,一定要使该类 实现Comparable、equals方法。add、remove、contains 方法,时间复杂度是O(log(n))TreeSet是非线程安全的,并发出错时,会快速失败,抛出ConcurrentModificationException常用方法源码构造函数public.

2020-07-10 14:39:39 12510

原创 LinkedHashMap常用方法源码

类介绍(注释)add、contains、remove 方法,时间复杂度是O(1)。LinkedHashMap的遍历耗时,与_capacity无关,与map的size(元素多少)呈线性。_HashMap的遍历,可能比_LinkedHashMap更耗时,其和_capacity呈线性关系。LinkedHashMap是非线程安全的,并发出错时,会快速失败,抛出ConcurrentModificationException。可以使用_Collections.synchronizedMap(new Link.

2020-07-05 13:20:25 5212

原创 TreeMap概览

相对于HashMap来说,TreeMap 是较简单的。类介绍(注释)TreeMap是红黑树的实现,它可以通过自然排序、构造时传入的Comparator对key进行排序。TreeMap(和其他的可排序的Map)中的元素,在没显式传入构造器的时候,一定要使该类 实现Comparable、equals方法。containsKey、get、 put、remove 方法,时间复杂度是O(log(n))TreeMap是非线程安全的,并发出错时,会快速失败,抛出ConcurrentModificationE

2020-07-02 10:06:55 2885

原创 Guava 优秀源码记录

Guava 优秀源码记录Maps.difference(差异)两个Map间 高效的差异算法(Maps.difference)其底层的实现也算是最优的实现了,只需要循环一次。入参就是两个 Map,比较之后能够返回四种差异:左边 Map 独有 key。右边 Map 独有 key。左右边 Map 都有 key,并且 value 相等。左右边 Map 都有 key,但是 value 不等。// 对比两个 map 的差异private static <K, V> void doDiff

2020-07-01 19:03:41 2918

原创 HashMap初步解析

参考美团技术团队-Java 8系列之重新认识HashMap一些Map的比较HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全.

2020-07-01 10:54:57 1878

原创 LinkedList常用方法分析

LinkedList概览与ArrayList一样,LinkedList也实现了List接口。ArrayList由于基于数组,在中间删除元素或插入元素的操作中,效率较低。而LinkedList适合于修改较频繁的场景、集合元素先入先出和先入后出的场景(队列)。ArrayList的底层数据结构,是一个双向链表。如下图所示:LinkedList中,有以下重要概念:LinkedList中每个节点,被称为Node。prev 即 前驱节点。next 即 后继节点。first 是 头节点,它的前驱节点恒为nulllast

2020-06-29 22:12:19 3047

原创 ArrayList 源码

ArrayList 源码ArrayList概览基本概念ArrayList 的结构较为简单,就是一个数组。结构如下图所示。ArrayList中有一些重要概念、属性:index:当前下标elementData:数组,该数组的大小,经常与 ArrayList 的size 混淆,需要注意。DEFAULT_CAPACITY:数组的初始大小,默认是 10size 表示当前ArrayList实际有多少个数据,没有使用 volatile 修饰;modCount :当前数组的版本号,数组结构有变动,就会

2020-06-27 20:24:15 4085

原创 Arrays、Collections、Objects方法源码

Arrays、Collections、Objects,都是对应对象的工具类。好的工具类通用的写法特征:构造器必须是私有的。这样的话,工具类就无法被 new 出来,因为工具类在使用的时候,无需初始化,直接使用即可,所以不会开放出构造器出来。工具类的工具方法必须被 static、final 关键字修饰。这样的话就可以保证方法不可变、不能被重写,并且可以直接使用,非常方便。我们需要注意的是,尽量不在工具方法中,对共享变量有做修改的操作访问(如果必须要做的话,必须加锁),因为会有线程安全的问题。除上述情况

2020-06-26 16:55:06 1881

原创 Java常用关键字

static字面上,意思是静态的,一旦被static修饰,说明被修饰的对象在一定范围内是共享的,这时候需要注意并发读写的问题。static 修饰类成员static 修饰类成员时,如何保证线程安全是我们常常需要考虑的。当多个线程同时对共享变量进行读写时,很有可能会出现并发问题,如我们定义了:public static List<String> list = new ArrayList();这样的共享变量。这个 list 如果同时被多个线程访问的话,就有线程安全的问题,这时候一般有两个解决.

2020-06-25 10:22:27 2654

原创 策略路由pbr+mstp +vrrp +双线nat

策略路由pbr+mstp +vrrp +双线nat拓扑使用技术使用到的技术: 单区域ospf dhcp nat mstp vrrp+track 端口聚合 nqa+pbr 策略路由 接入层jieruAsyssysname jieruA# 创建vlanvlan batch 10 20 30 40# 端口分配int e0/0/1port link-type access port default vlan 10int e

2020-06-24 21:55:38 5018

原创 路由策略版:mstp +vrrp +双线nat

路由策略版:mstp +vrrp +双线nat拓扑使用技术使用到的技术: 单区域ospf dhcp nat mstp vrrp+track 端口聚合 nqa+路由策略 接入层jieruAsyssysname jieruA# 创建vlanvlan batch 10 20 30 40# 端口分配int e0/0/1port link-type access port default vlan 10int e0/0/2

2020-06-24 21:54:30 1644

原创 ensp 三层架构配置

三层架构使用到的技术: 多区域 ospf dhcp nat 端口映射 gre over ipsec 配置前,验证两端是否互通需求接入层jieruAsyssysname jieruA# 创建vlanvlan batch 10 20 200# 分配Access 端口int e0/0/1port link-type access port default vlan 10# trunkint e0/0/2 port link-ty

2020-06-24 21:52:16 16259 3

原创 防火墙+route+vrrp+mstp

防火墙+route+vrrp+mstp拓扑图使用技术使用到的技术: 单区域ospf dhcp nat mstp vrrp+track 链路聚合 telnet+aaa 接入层huijuAsyssysname huijuA# 创建vlanvlan batch 10 20 30 40# 端口分配int e0/0/1port link-type access port default vlan 10int e0/0/2p

2020-06-24 21:49:39 2952

原创 H3C二层架构综合配置

H3C二层架构综合配置

2020-06-24 21:43:23 8626

原创 String源码与常见问题

String源码与常见问题String不变性(immutable)不可变指的是类值一旦被初始化,就不能再被改变了,如果被修改,将会是新的对象。String str = "hello";str = "world";如上图,是str在被赋值过程中,debug体现的变化。从代码上来看,str 的值好像被修改了,但从 debug 的日志来看,其实是 str 的内存地址已经被修改了,也就说 str =“world” 这个看似简单的赋值,其实已经把 str 的引用指向了新的 String对象。Stri

2020-06-24 21:40:14 2709

原创 Long源码与常见问题

Long源码与常见问题Long的缓存Long 最被我们关注的就是 Long 的缓存问题,Long 自己实现了一种缓存机制,缓存了从 -128 到 127 ,即 -2~ 2-1 内的所有 Long 值,如果是这个范围内的 Long 值,就不会初始化,而是从缓存中拿,缓存初始化源码如下:private static class LongCache { private LongCache(){} static final Long cache[] = new Long[-(-128) +

2020-06-24 21:38:26 8321

原创 ensp router+mstp+vrrp+单nat

router+mstp+vrrp+单nat拓扑图![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTM3MzYxMi8xNTkyNTUxMDMzNDc3LTIzOGI5ZjY1LTE1NTItNGZiNS1hN2EyLTZiMWRlZTE0YTBhOC5wbmc?x-oss-process=image/format,png#align=left&disp

2020-06-24 19:20:24 3753 9

原创 mac vmware nat 网关踩坑

需求:想为虚拟机分配静态ip,需要设置网关。入坑使用ifconfig查看ip 后,想当然认为是vmnet8地址,即下图192.168.92.1为网关地址。设置后,死活连不上外网。解决查找官方文档后,发现其nat模式的网关地址,是在nat.conf中。默认路径为’/Library/Preferences/VMware Fusion/vmnet8/nat.conf’。发现其网关ip为19...

2020-02-07 21:20:26 12161 3

原创 《深入理解java虚拟机》第十章 早期(编译器)优化

java语法糖的味道泛型与类型擦除在java还没有出现泛型之前,只能通过Object是所有类型的父类、类型强制转换两个特点的配合来实现类型泛化。java中的泛型,只在程序源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型,并在相应地方插入了强制转型代码。List<String>和List<Integer>就是同一个类,泛型技术实际上是java语言的一颗语...

2019-04-16 18:52:29 8419

原创 《深入理解java虚拟机》 第八章 虚拟机字节码执行引擎

概述执行引擎是java虚拟机最核心的组成部分之一。在java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型称为各种虚拟机执行引擎的统一外观(Facade): 输入的是字节码文件 处理过程是字节码解析的等效过程 输出的是执行结果运行时栈帧结构栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,是vm运行时数据区中的虚拟机栈...

2019-04-15 22:24:22 1378

转载 《深入理解Java虚拟机(第2版)》使用MethodHandle来解决相关问题——错误更正

《深入理解Java虚拟机(第2版)》使用MethodHandle来解决相关问题——错误更正2018.04.14 14:49 1132浏览使用MethodHandle来解决相关问题——错误更正在阅读《深入理解Java虚拟机(第2版)》第8章——虚拟机字节码执行引擎时,发现作者给出了一个关于MethodHandle来解决相关问题的例子。我们直接给出代码,问题位于内部类SON中的注释。pack...

2019-04-15 10:49:09 391

原创 《深入理解java虚拟机》读书笔记 第七章 虚拟机类加载机制

概述1. 虚拟机把描述类的数据从Class文件加载到内存2. 对数据进行校验、转换解析、初始化3. 最终形成可被虚拟机直接使用的java类型类加载的时机"类从被虚拟机加载到内存,到卸载出内存的生命周期": 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initial...

2019-04-13 21:26:55 1254

原创 《深入理解java虚拟机》读书笔记 第六章 类文件结构

jvm的语言无关性时至今日,商业机构和开源机构已经在Java语言之外发展出一大批在Java虚拟机之上运行的语言,如Clojure、Groovy、 JRuby、 Jython、 Scala 等。Java虚拟机只与"Class这种二进制文件"绑定。Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流。当遇到超过8位的数据项时,则会按照高位在前(大端)方式分割后存储。...

2019-04-13 08:51:20 2504

原创 《深入理解java虚拟机》读书笔记 第四章 虚拟机性能监控与故障处理工具

命令行工具jpsjstatjinfojmapjhatjstackhsdisjdk的可视化工具jconsolevisualvm具体待补充。。。

2019-04-10 12:08:36 254

原创 《深入理解java虚拟机》读书笔记 第三章 垃圾收集器与内存分配策略

为什么我们要了解GC和内存分配?当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。对象已死吗在堆里面存放着Java世界中几乎所有的对象实例垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。引用计数算法(Referen...

2019-04-10 12:03:44 1344

原创 《深入理解java虚拟机》读书笔记 第二章 java内存区域与溢出异常

java与c++ 相比,对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,由虚拟机管理内存。这一切看起来都很美好。不过,也正是因为Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的工作。此...

2019-04-08 22:25:50 285

原创 nginx虚拟主机配置备忘

以下为nginx.conf,其中include /etc/nginx/conf.d/*.conf;为了方便管理,可以将server的定义包含在conf.d下,规划为每个conf文件负责一个server。user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Lo...

2019-04-02 10:30:38 5537

从天气项目看Spring Cloud微服务治理

某课网从天气项目看Spring Cloud微服务治理,如果失效,请及时联系

2018-12-03

空空如也

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

TA关注的人

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