
Java
文章平均质量分 68
缘丶沐逸尘
技术热爱者
展开
-
Java后端底座从无到有的搭建(随笔)
本文是笔者在初创公司,一年多来Java后端服务底座搭建过程的总结,如有不当之处,还请各位大大指正。原创 2024-02-20 16:36:39 · 1351 阅读 · 0 评论 -
Netty面试题
目录一、Netty是如何解决JDK中Selector BUG的?二、如何让单机下基于Netty的应用程序支持几十万甚至百万的长链接?三、什么是水平触发(LT)和边缘触发(ET)?四、请说说浏览器中输入URL到返回页面的全过程五、请说说DNS域名解析的全过程序号内容链接地址1JVM面试题https://blog.youkuaiyun.com/qq_42697271/article/details/1141564102hibernate面试题https://blog.youkuaiyun.com原创 2022-05-20 14:24:01 · 704 阅读 · 0 评论 -
高性能存储队列:Disruptor
文章目录一、JUC包下队列的缺陷二、Disruptor为避免缺陷而设计的解决方案1、存储结构:环形数组、2、定位方式:位运算3、线程安全策略:CAS4、存储方式:缓存填充5、任务执行:事件监听机制三、Disruptor的针对数据覆盖的四种策略1、BlockingWaitStrategy:2、SleepingWaitStrategy:3、YieldingWaitStrategy:4、BusySpinWaitStrategy:四、Disruptor的简单使用1、构建消息载体(事件Event)2、构建消息(事件)原创 2021-12-17 15:58:05 · 1304 阅读 · 0 评论 -
Future的缺陷|CompletableFuture的简单使用
文章目录一、Future的缺陷二、CompletableFuture简介和相关API三、CompletableFuture的简单使用一、Future的缺陷1、Future只提供了get方法来获取结果,并且是阻塞的。所以在并发情况下只能等待所有线程执行完后才能获取结果,除此之外别无它法;2、无法对多个任务进行链式调用。也就是说不能让第二个任务获取第一个任务执行完成后的结果后再去执行,它的执行是无法指定先后顺序的;3、无异常处理机制。Future接口中没有异常处理的方法,所以当Futrue中的任务原创 2021-12-17 09:53:12 · 2168 阅读 · 0 评论 -
浅谈ForkJoin
文章目录一、ForkJoin是什么?它能用来实现什么功能?二、ForkJoin的实现原理三、ForkJoin的简单使用一、ForkJoin是什么?它能用来实现什么功能?二、ForkJoin的实现原理三、ForkJoin的简单使用在这里插入代码片...原创 2021-12-09 15:55:27 · 472 阅读 · 0 评论 -
浅谈ReentrantReadWriteLock
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-11-29 17:23:17 · 449 阅读 · 0 评论 -
浅谈CyclicBarrier
文章目录一、CyclicBarrier是什么?它的作用是什么?二、CyclicBarrier的实现原理是什么?三、CyclicBarrier和CountDownLatch有什么区别?四、CyclicBarrier的简单实现一、CyclicBarrier是什么?它的作用是什么?CyclicBarrier也是JUC包为处理多线程情况下的某些场景所创建的一个工具类。一般都将其译为:循环栅栏。它主要的功能是对多个线程进行阻塞,直至满足栅栏设定的阈值,才会对阻塞的所有线程进行唤醒放行操作。当然循环也是一个很重原创 2021-11-29 10:24:38 · 351 阅读 · 0 评论 -
浅谈Semaphore
文章目录一、Semaphore是什么?主要作用是什么?二、Semaphore的实现原理是什么?三、Semaphore的简单使用一、Semaphore是什么?主要作用是什么?Semaphore简称信号量,它是JUC包下面对限流提供的一种解决方案。也就是说使用它后,可以保证在同一时间内只能有规定数量的任务可以执行,其它任务进入等待状态。二、Semaphore的实现原理是什么?Semaphore的阻塞原理和ReentrantLock的阻塞原理类似,主要区别的地方有两点:1、Semaphore的原创 2021-11-25 11:31:40 · 788 阅读 · 0 评论 -
浅谈ReentrantLock
文章目录一、ReentrantLock是用来做什么的?二、ReentrantLock的实现原理是什么?三、ReentrantLock对比于Synchronized有哪些优缺点?一、ReentrantLock是用来做什么的?二、ReentrantLock的实现原理是什么?三、ReentrantLock对比于Synchronized有哪些优缺点?...原创 2021-11-23 10:07:23 · 688 阅读 · 0 评论 -
浅谈synchronized
文章目录一、synchronized的作用二、synchronized中的几种状态三、synchronized的锁升级原理四、锁升/降级的注意点一、synchronized的作用synchronized可以给方法和代码块加锁,保证该方法或者该断代码块同一时间智能有同一个线程访问,从而避免了线程安全问题。二、synchronized中的几种状态被synchronized加锁的对象中会有五种状态:0(00):轻量级锁状态,该状态下的线程只会进行cas自旋,而不会使用到monitor进行从用户原创 2021-11-11 18:11:29 · 560 阅读 · 0 评论 -
浅谈CAS
文章目录一、什么是CAS?二、CAS的优缺点三、CAS的简单实现一、什么是CAS?CAS全名是Compare And Swap(比较与替换),它是用来解决高并发问题的一种方案。实现的原理大致上就是先将需要修改的变量V读取到变量E中缓存起来,然后在写入新变量U的时候将E和重新读取出来的V变量比较一遍,如果两者一致则把U写入V中,不一致则表明期间有其它线程修改了属性,然后进行自旋重新走一遍流程,直到修改操作执行完成。可以将CAS看作是(数据库)乐观锁的一种简化实现版本二、CAS的优缺点优点:原创 2021-11-10 12:09:50 · 215 阅读 · 0 评论 -
Spring是如何解决部分循环依赖的问题的
文章目录一、什么是循环依赖?二、spring能解决哪些形式的循环依赖?三、spring是如何解决循环依赖的?1、了解Bean对象的创建过程2、找到问题的冲突点3、解决办法一、什么是循环依赖?循环依赖就是多个对象之间的依赖组成了一个闭合的循环回路,像是A依赖B,B依赖C,C又依赖了A,类似这样的情况就属于循环依赖。如下方代码:@Componentpublic class A { @Autowired private B b; }@Componentpublic cla原创 2021-11-09 16:57:37 · 217 阅读 · 0 评论 -
Spring生成Bean过程中的一些细节点
文章目录一、实例化前就通过扩展节点将对象实例化出来,会导致什么结果?二、spring实例化对象的方式有哪几种?@Bean使用的是哪一种?三、spring推断构造方法的执行逻辑是怎么样的?一、实例化前就通过扩展节点将对象实例化出来,会导致什么结果?1、该实力对象中需要依赖注入的属性全部为空,spring不会对该实例对象进行依赖注入;2、该对象会跳过实例化后的一系列步骤,直接到达初始化后的阶段。也就意味着某些初始化前、初始化过程的的步骤是不能执行的。二、spring实例化对象的方式有哪几种?@原创 2021-11-04 17:23:53 · 194 阅读 · 1 评论 -
spring依赖注入需要注意的点
文章目录一、二、三、四、五、六、spring依赖注入大致要经历六个环节:一、二、三、四、五、六、原创 2021-10-28 14:35:02 · 367 阅读 · 0 评论 -
ThreadLocal的作用和原理
文章目录一、ThreadLocal的作用二、ThreadLocal的原理三、ThreadLocal的使用场景一、ThreadLocal的作用二、ThreadLocal的原理三、ThreadLocal的使用场景原创 2021-10-26 11:28:08 · 4533 阅读 · 1 评论 -
volatile关键字的作用和原理
文章目录一、volatile关键字的作用二、volatile的底层原理三、volatile的适用场景一、volatile关键字的作用二、volatile的底层原理三、volatile的适用场景原创 2021-10-26 10:48:35 · 25608 阅读 · 3 评论 -
spring源码解析——FactoryBean的作用和原理
文章目录一、FactoryBean的作用二、FactoryBean的原理一、FactoryBean的作用FactoryBean是一个接口,它可以用来创建工厂对象。然后通过工厂对象产生出没有添加@Component注解的类对象。需要注意的是:工厂对象会经过整个Bean的创建流程,而产出的对象只会经过初始化后这一个步骤二、FactoryBean的原理其实就是一个多态的实现。工厂对象实现FactoryBean接口后,会重写FactoryBean中的两个方法:getObject()、getObje原创 2021-10-20 16:47:33 · 3494 阅读 · 0 评论 -
spring源码解析——@Component注解原理
文章目录一、@Component作用二、@Component注解实现的原理一、@Component作用@Component是用在类上面的注解,它的功能是用来告诉spring当前类是一个Bean对象,然后让spring对该类进行自动创建并管理。二、@Component注解实现的原理@Component注解底层主要依赖于一个叫做includeFilters的对象来实现的。该对象其实是spring扫描器中的一个属性,它规定了哪些对象会被spring容器识别。所以如果一个对象如果不加上@Compon原创 2021-10-20 15:41:26 · 3556 阅读 · 0 评论 -
nohup: /Library/Internet: No such file or directory
今天更新了mac自带的java后,启动nacos报了标题中显示的错误,之仔细检查了下,发现了一个大坑,在这里记录下文章目录先上日志信息解决办法1、查找第二个jdk的存放路径2、替换JAVA_HOME环境变量路径3、加载配置信息先上日志信息重点主要就是圈出来的那个目录,自从更新后JAVA_HOME的默认路径就变成这个路径了,然后mac系统识别jdk运行目录的时候就出问题了,说找不到/Library/Internet这个目录,而事实上系统中根本就没有这个目录,所以启动就报错了。解决办法笔.原创 2021-10-02 10:57:19 · 2759 阅读 · 0 评论 -
Java全局异常处理
最近写代码的时候发现一个问题,就是自己定义的异常处理类,在抛出异常后,接口的响应中无法输出自定义的一些提示信息。之后笔者查了一些资料后,总结了一下原因和解决办法,在此记录一下。目录一、无法抛出指定异常信息的原因二、解决办法三、遇到的问题一、无法抛出指定异常信息的原因因为自定义的异常处理类,并没有对响应数据进行处理,仍旧使用的是原Excepiton中的响应格式。二、解决办法解决办法很简单,就是对全局的异常响应数据做统一的处理即可得到想要返回的异常信息数据格式,如下方代码:/** *.原创 2021-08-04 17:30:34 · 519 阅读 · 0 评论 -
lambda表达式中对接口优雅简写
最近写代码的时候发现了一段看不懂的代码,之后查了些资料,才知道是lambd的简写形式,在此记录一下看不懂的代码RestClientBuilder.RequestConfigCallback requestConfigCallback = builder -> { builder.setConnectTimeout(clientProperties.getConnTimeout()) .setSocketTimeout(clientProperties.getSo.原创 2021-07-29 19:12:07 · 209 阅读 · 0 评论 -
oauth2密码登陆的一个大坑——scope
笔者最近在给自己的分布式项目添加授权登陆模块的时候碰到了一个问题,就是调用密码登陆服务(/oauth/token)的时候报400的错误,起初以为是入参字段写错了或少写了,后面才发现并不是这样,而是scope这个入参数的隐藏属性导致的,下面记录下笔者碰到的问题、解决思路、和解决办法文章目录一、碰到的问题二、解决思路三、解决办法四、总结一、碰到的问题2021-07-02 10:51:02.821 [http-nio-8877-exec-1] ERROR c.m.u.service.impl.Logi.原创 2021-07-02 11:14:27 · 3436 阅读 · 0 评论 -
应用程序二级缓存的原理和基本实现
笔者最近自己实现了一遍二级缓存,对其中的一些原理有了一些体悟,在这里记录一下,当然如果有错误之处,还望各位看官不吝指教目录一、二级缓存的实现原理二、二级缓存的简单实现1、需要依赖2、简单的实现一、二级缓存的实现原理二、二级缓存的简单实现1、需要依赖在这里插入代码片2、简单的实现在这里插入代码片...原创 2021-06-19 18:12:39 · 722 阅读 · 0 评论 -
Redission中分布式锁的简单应用
之前笔者使用Redission中tryLock方法时碰到了一些问题,本来加锁之后不应该出现多次访问DB的情况,可事实上在打印出的日志中显示有多次访问数据库,因而笔者查了一些资料了解了下trylock的基本实现原理,在这里记录一下目录一、Redission中tryLock的基本实现原理二、Redission中tryLock的简单使用1、需要的依赖2、基本实现一、Redission中tryLock的基本实现原理二、Redission中tryLock的简单使用1、需要的依赖在这里插入代码片2.原创 2021-06-18 15:41:57 · 687 阅读 · 1 评论 -
缓存击穿、缓存穿透、缓存雪崩的定义和解决方案
笔者这段时间复习了一下缓存异常的几个概念和解决办法,在这里记录一下目录一、缓存击穿1、概念2、解决办法二、缓存穿透1、概念2、解决办法三、缓存雪崩1、概念2、解决办法一、缓存击穿1、概念击穿其实就是某个高访问量的缓存数据,它的缓存过期时间到了,这个时候仍旧有大量对这个数据的请求发送过来,当这些请求发现缓存中没有对应数据的时候就直接去访问数据库了,这一瞬间可能就会对数据库造成巨大的压力,可能会把数据库压垮(也就是直接放弃一部分请求)2、解决办法是使用互斥锁。简单地来说,就是在缓存失效的.原创 2021-06-10 16:24:33 · 456 阅读 · 2 评论 -
微服务面试题
目录一、什么微服务?二、微服务优缺点三、场景启动器的工作原理是什么?四、Spring Boot 的自动配置是如何实现的?五、Eureka的工作原理六、Ribbon的负载均衡原理七、Ribbon的负载均衡算法八、Hystrix断路器工作原理序号内容链接地址1JVM面试题https://blog.youkuaiyun.com/qq_42697271/article/details/1141564102hibernate面试题https://blog.youkuaiyun.com/qq_42697原创 2021-06-08 15:26:53 · 7410 阅读 · 0 评论 -
实现Excel文件的统一读取功能(包含xls、xlsx、csv格式)
笔者之前使用esayexcel的时候碰到了一个问题,就是easyexcel无法读取csv文件,所以迫不得已之下自己手写了一个统一读取的工具类,在这里分享一下,当然还有许多的不足之处,希望各位看官老爷们不吝指点目录一、功能与局限二、具体实现代码1、需要的依赖2、实现代码3、使用方式和结果一、功能与局限功能:1、该工具类可以自动识别表格标题(默认每列的第一行为标题);2、该工具累可以将读出的表格数据自动转化为实体类集合(表格标题必须要与实体类的属性名一致);局限:csv格式的文件只能读.原创 2021-05-29 19:17:51 · 4619 阅读 · 5 评论 -
如何在跨域调用中绕过security自带的csrf防御机制
笔者最近碰到了一种需要针对某一域名跳过spring security csrf防御机制的问题,网上找了好久也没找到可行的办法,最后还是笔者自己针对细节的检查,找到了破局的办法,下面介绍一下具体的原理和实现方法目录一、绕过csrf防御机制的原理二、具体实现三、需要注意的地方一、绕过csrf防御机制的原理原理主要就是通过security自带的csrf可以配置对一些特定的uri不进行拦截,而这种配置可以使用/**进行对uri模糊匹配,这样就可以在特定域名的服务中给所有请求当前服务的uri加上一个特定.原创 2021-05-26 16:06:14 · 662 阅读 · 0 评论 -
Java如何处理并发情况下数据重复插入的问题
笔者这段时间在做第三方用户接入的时候碰到了一个问题:由于自身的系统是在第三方发送请求的时候直接将第三方的账号数据存入数据库的,所以当页面出现多个请求并发执行的时候,会出现用户数据重复插入的问题,之后笔者尝试了几种方式最终解决了这个问题,在此记录一下。目录一、单台服务器的处理方案二、多台服务器环境下的处理方案一、单台服务器的处理方案这种情况是最简单的一种情况,笔者的处理方法是给插入数据的代码块加锁,这样就能保证同一时间只能有一个线程访问该段代码快,这样只要在代码块的开头加上有无相同数据的判断,就.原创 2021-05-23 19:00:18 · 12110 阅读 · 2 评论 -
@ConditionalOnProperty使用注意事项
笔者前几天使用@ConditionalOnProperty注解配置多个过滤器的过程中碰到了一个问题,在这里记录下目录一、@ConditionalOnProperty的功能二、使用过程中遇到的问题先简单介绍下@ConditionalOnProperty注解的功能吧,之后笔者再描述自身遇到的那些问题的时候,会更好理解一些一、@ConditionalOnProperty的功能它主要是通过自身的两个属性来控制自动配置是否生效,这两个属性分别是name、havingValue。只有当配置文件(ap.原创 2021-05-22 13:26:04 · 2061 阅读 · 0 评论 -
使用easyexcel需要注意的一些问题
笔者这几天都在做excel的导入导出工作,期间碰到了一些问题,在这里记录一下。目录一、java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/FileMagic二、Convert excel format exception.You can try specifying the 'excelType' yourself一、java.lang.NoClassDefFoundError: org/apache/poi/poifs/.原创 2021-05-14 10:11:15 · 10914 阅读 · 2 评论 -
设计模式之——责任链模式
笔者之前天天听到同事说什么责任链模式,但事实上笔者并不了解它,所以当时只是很尴尬的点头应是。最近找了写资料,填充了下自己的知识库,在这里记录一下目录一、什么是责任链模式?二、责任链模式是用来解决什么问题的?三、责任链模式中有哪些角色?四、如何实现一个简单的责任链模式?五、测试责任链模式一、什么是责任链模式?二、责任链模式是用来解决什么问题的?三、责任链模式中有哪些角色?四、如何实现一个简单的责任链模式?五、测试责任链模式...原创 2021-05-13 20:06:52 · 380 阅读 · 1 评论 -
@Value注解使用过程中遇到的一些坑
笔者结合之前的一些经验教训,再结合一些资料总结了一下@Value注解使用过程中的一些注意事项。目录一、@Value无法读取配置文件中的参数二、@Value出现中文乱码一、@Value无法读取配置文件中的参数这个坑是笔者前段时间自建springboot项目的时候发现的,当时笔者想在配置文件中加一些参数,然后使用这个注解直接调用,可是发现无路如何也获取不到这个参数(笔者用的是bootstrap.yml配置文件)。原因:springboot项目是无法识别bootstrap文件的,springb.原创 2021-05-07 11:06:43 · 2283 阅读 · 0 评论 -
过滤器使用过程中遇到的一些问题
笔者今天在使用过滤器的过程中遇到几个疑问,在这里记录一下。目录一、过滤链的执行顺序二、过滤器中拿到的参数问题三、过滤器中添加请求参数一、过滤链的执行顺序网上一些博客里面对过滤链执行顺序给出的方法是使用@Order(1)注解,通过这个注解中的参数数值大小可以确定过滤链中各个过滤器的执行顺序,但事实上是不行的,使用这个注解后,过滤器的执行顺序还是按照过滤器名称的首字母排序的。想要进行排序的话,需要使用FilterRegistrationBean中的setOrder(1)方法来进行排序调整,下面是伪.原创 2021-04-26 16:08:50 · 534 阅读 · 0 评论 -
BIO、NIO、AIO总结
笔者之前学习Tomcat源码的时候,有听到过Tomcat有使用过两种IO模式,一种是BIO,另外一种是NIO。当时并不理解这两者之间有什么区别,后面查了些文档,才明白了些许,在此记录一下。目录一、什么是IO?二、什么是同步异步?三、什么是阻塞非阻塞?四、什么是BIO?五、什么是NIO?六、什么是AIO?阐述几者之间的区别前,先介绍一下IO、同步异步、阻塞非阻塞的念。一、什么是IO?IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个.原创 2021-04-23 15:36:32 · 219 阅读 · 0 评论 -
拦截器和过滤器的区别
笔者很久之间就一直苦恼一个问题,为什么Java会出现过滤器和拦截起两种基于AOP思想的处理工具,由于之前业务需要写了一个拦截器后,彻底的引发了笔者对这两者的好奇,于是笔者在近期查了些资料,整理出来了这片文档。目录一、过滤器简介二、拦截器简介三、拦截器和过滤器的区别四、拦截器和过滤器的执行顺序在阐述两者的区别前,先简单介绍下一、过滤器简介Filter可以认为是Servlet的一种“加强版”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的.原创 2021-04-23 11:11:36 · 315 阅读 · 0 评论 -
Tomcat处理响应过程中的几个关键点
笔者昨晚上了另外一节课,讲的是Tomcat处理响应的源码,具体的代码是可能真的完全记下来的,不过还是有几个关键的地方在这里记录一下。目录一、Tomcat会直接将响应数据通过socket发送给浏览器么?二、Tomcat如何开启二级缓冲区?三、Tomcat如何选择响应体的发送方式?四、如果响应头部同时存在了Transfer-Encoding和Content-Length两个参数,谁的优先级会更高?一、Tomcat会直接将响应数据通过socket发送给浏览器么?答案是不会的,Tomcat自身维护了一.原创 2021-04-21 15:57:39 · 422 阅读 · 0 评论 -
javacv使用详解
笔者之前遇到一个抓取视频图片,然后视频图片倒置的问题,之后查了些博文找到解决办法。不过这不是主要的,主要的是javacv的代码笔者当时没有读懂,现在发一篇有详细注释的文档,分享一下使用心得。目录一、先上源码,每一行都有注释二、使用注意事项1、使用javacv之前记得倒入依赖2、注意视屏中的Rotate属性3、最容易忽视的一点:取帧(Frame)一、先上源码,每一行都有注释package com.muyichen.demo.javacv;import org.bytedeco.javacv.*.原创 2021-04-21 12:26:50 · 2939 阅读 · 1 评论 -
Session使用过程中遇到的一些坑
笔者之前使用session来管理用户登陆信息的时候,出现过这样一个问题:用户A使用上传功能的时候,存入数据库的信息是用户B信息。笔者思考了好久然后,自己手动重现了一边场景后才发现了问题所在。目录一、问题出现的原因?二、解决办法一、问题出现的原因?先复现一边场景吧:主要就是用户A在S这台笔记本上登陆了用户A的账号,然后暂时没有使用上传功能,之后用户B又在S这台电脑上登陆了用户B的账号。此时用户A开始使用上传功能,上传成功后发现他上传的文件标记的归属用户是用户B。出现这个问题的原因主要是sess.原创 2021-04-20 17:21:15 · 820 阅读 · 0 评论 -
Tomcat读取请求体的两种方式
笔者昨晚上了一节关于Tomcat读取数据的底层运行细节的课,其实反反复复的都是对数据的多读或者少读做处理,但是就是这样的一节课也上了两个多小时。。。不过中途有一点点细节还是值得记录下的。目录一、Tomcat是如何从TCP连接中获取数据的?二、Tomcat读取请求体的两种方式1、使用Content-Length来确定请求的结束位置2、使用Transfer-Encoding来确定请求结束的位置一、Tomcat是如何从TCP连接中获取数据的?主要是通过输入流,从socket的缓冲区拿到对应请求的输入.原创 2021-04-20 10:49:02 · 994 阅读 · 0 评论