java
文章平均质量分 77
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
蹊源的奇思妙想
微信公众号:蹊源的奇思妙想
“桃李不言,下自成蹊”的原义是桃树、李树不会说话,但因其花朵美艳,果实可口,人们纷纷去摘取,于是便在树下踩出一条路来。比喻为人真诚笃实,自然就能感召人心,无需张扬夸耀。
展开
-
2022年同花顺Java面试
2022年同花顺Java面试前言最近疫情期间抽空面试了一家互联网公司,很多问题都很常见,但是很长时间没有看这方面的知识了,所以回答的确实很不好,于是周末抽空把涉及的问题整理一下,希望对大家有用。正文Java基础1.一个java文件中有几个类,编译后有几个class文件?在一个源文件中用class关键字定义了几个类,编译的时候就会产生几个字节码文件2. Java是否可以同时使用abstract和fInal声明方法?final的四种用法:final 修饰的是引用不可修改,但是引用地址指向的数原创 2022-03-27 22:18:31 · 2405 阅读 · 4 评论 -
搬砖日记-CountDownLatch和CompletableFuture的使用
搬砖日记-CountDownLatch和CompletableFuture的使用前言不知不觉在大厂搬砖快一年了,在这一年里不得不说我学到了很多,特别把之前学到的知识给落地,这给我带来一些满足感和充实感,于是我想着抽空把最近学到的知识给整理整理,既是温习回顾还是一种分享,本篇文章将带领大家了解一下CountDownLatch和CompletableFuture的使用.正文CountDownLatchCountDownLatch程序计数器:CountDownLatch用于主线程等待其他子线程任务都原创 2022-03-13 00:48:34 · 2008 阅读 · 1 评论 -
2021年阿里巴巴Java岗位面试(已拿offer)
2021年阿里巴巴Java岗位面试前言作者蹊源前段时间有辛被阿里的一位同学内推,参加了阿里巴巴Java岗位的面试,本人19年双非本科软件工程专业,目前有一年半的工作经验,面试前就职于一家外包公司。如果在自己本人拿到offer之前,如果有人告诉我一年工作经验可以直接从外包进阿里,我肯定是不信。但是真的发生在自己身上,真的觉得非常非常幸运与不可思议。正文阿里面试总共有五面,包括:第一轮电话面试(同事面):将近1h20min,主要是介绍项目与基础知识第二轮视频面试(组长面):将近1h,同样也是介绍项原创 2021-03-22 00:39:28 · 7774 阅读 · 11 评论 -
Java集合快速失败与安全失败
Java集合快速失败与安全失败前言我们在开发过程中有没有在遍历集合的时候遇到过ConcurrentModificationException这样的异常,那么什么样的原因导致这种异常呢?本篇博客将带领大家去了解一下Java集合fail-fast快速失败机制与fail-safe安全失败机制。正文fail-fast与fail-safefail-fast快速失败机制: 是Java集合中的一种机制,在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Conc原创 2021-01-07 16:42:25 · 1366 阅读 · 1 评论 -
SpringBoot将对象转化Map
SpringBoot将对象转化Map前言我们在开发的过程中可能会遇到这样的一个场景:我们需要将一个对象中的属性名和值放在一个Map中,当属性比较少的时候你可以选择逐一放,但是如果我们要动态获取指定属性或者属性特别多的时候,这种“笨方法”显然是行不通的,本篇博客提供两种方式:通过反射将对象转化为Map和利用JackJson将对象转化为Map。正文通过反射将对象转化为Map依赖<!--lombok--><dependency> <groupId>org.pr原创 2020-12-31 10:15:06 · 11410 阅读 · 2 评论 -
蹊源的Java笔记—分布式
溪源的Java笔记—分布式前言现在的互联网的架构中往往会面对这数以万计的并发访问,为了让系统在这样的访问压力下可以平稳运行,有这限流算法、分布式事务、分布式锁等分布式技术,本篇博客将针对其中几个经常被使用的技术和各位同学介绍介绍。消息队列可参考我的博客溪源的Java笔记—消息队列正文限流算法一般来说服务降级分为两种故障降级:当发生网络故障或者RPC服务返回异常,这种情况我们通常采用关联fallback方法,为客户端设置兜底数据,从而避免造成服务依赖的“雪崩”现象。限流降级:无论系统运行在什原创 2020-12-14 23:52:10 · 1987 阅读 · 1 评论 -
蹊源的Java笔记—消息队列
溪源的Java笔记—消息队列原创 2020-12-09 03:17:36 · 2075 阅读 · 2 评论 -
蹊源的Java笔记—Redis服务器
溪源的Java笔记—Redis服务器前言前段时间我对Mysql数据库的知识点进行了梳理,本篇博客我对Redis服务器的相关的知识点进行整理,Redis可以是我们在Web应用中提升性能的利器,可以说Redis是一个中高级开发者必备的技能点。Mysql的知识点可参考我的博客溪源的Java笔记—Mysql数据库正文RedisRedis常见应用场景:实现缓存系统和内存数据库:会话缓存和全页缓存使用redis来搭建消息队列排行榜/计数器,redis在内存中对数字进行递增或者递减的操作实现比较好。原创 2020-12-03 23:54:57 · 1197 阅读 · 1 评论 -
蹊源的Java笔记—Mysql数据库
溪源的Java笔记—Mysql数据库前言前段时间我们花了比较多的时间对Spring相关的知识点进行了整理,本期博客将带领各位同学来了解一下Mysql数据库的必备知识点。Spring的可参考我的博客溪源的Java笔记—Spring正文MysqlMysql是我们最常用的关系性数据库。Mysql的逻辑结构组件:客户端、核心服务、存储引擎Mysql查询的5个过程过程:客户端向MySQL服务器发送一条查询请求服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段原创 2020-12-01 00:27:09 · 4765 阅读 · 6 评论 -
蹊源的Java笔记—Spring
在现如今的Java开发中有一个不得不提的工具,那就是Spring,Spring是Java EE编程领域的一个轻量级开源框架, 是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。本期博客带领大家去了解Spring相关的知识点。原创 2020-11-22 11:09:35 · 3330 阅读 · 3 评论 -
蹊源的Java笔记—线程并发与线程安全
溪源的Java笔记之线程并发与线程安全前言上期博客我们对线程与线程池相关知识进行了总结,实际上我们在使用线程的过程中有不得不提的问题就是线程并发与线程安全,我们在为了提升系统性能的时候,采用多线程的方式,就有可能会造成数据不安全,本篇文章溪源将带领大家了解一下线程并发与线程安全相关的知识。线程与线程池可参考我的博客:溪源的Java笔记之线程与线程池正文线程并发线程并发,指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行原创 2020-11-13 22:17:59 · 2036 阅读 · 2 评论 -
蹊源的Java笔记—线程与线程池
溪源的Java笔记—线程与线程池前言Java的进阶之路上不得不说的技术点就是——多线程,上期博客我们对JVM的知识进行了简单地整理,本期博客将针对线程与线程池后端知识点一一阐述。JVM虚拟机 可参考我的博客:溪源的Java笔记—JVM正文线程线程是CPU调度分派的基本单位。线程的周期新建:当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值。就绪:当线程对象调用了start()方法之后,该线程处于就绪状态。Java 虚拟机会为原创 2020-11-11 18:08:33 · 2984 阅读 · 1 评论 -
蹊源的Java笔记—JVM
前言作为一个Java开发,JVM是我们必须要了解的,我们只有建立在了解它的基本运作原理,才可能设计出一个最合理的代码方案,在此之前我们已经了解了集合中的Map接口,接下来溪源我将带领大家了解一下JVM,希望对大家略有帮助。集合之Map接口可参考我的博客:溪源的Java笔记—集合之Map接口正文JVMJVM为了达到给所有硬件提供一致的虚拟平台的目的,牺牲了一些与硬件相关的特性。Java源文件可以通过编译器转化成字节码文件(.class文件),这些字节码文件又可以被JVM转化成机器码。JVM是运原创 2020-11-05 23:15:43 · 3203 阅读 · 2 评论 -
SpringBoot使用PageHelper实现数据分页
SpringBoot使用PageHelper实现数据分页前言我们在做页面查询的时候由于页面无法一次性展示所有的数据,所以采用一种分段式的展示策略—分页查询,实现分页查询的方式有很多种方式,比如sql中的limit,mybatisplus带的分页插件等等,这里我们介绍一下如何在SpringBoot中使用PageHelper插件实现分页查询。正文PageHelperPageHelper是针对MyBatis最方便的分页插件PageHelper支持任何复杂的单表,多表查询。它有以下特点:PageHe原创 2020-11-03 20:39:19 · 4583 阅读 · 0 评论 -
SpringBoot使用Netty实现远程调2.0
SpringBoot使用Netty实现远程调2.0前言不久之前溪源我发布了一篇博客时关于使用如何使用Netty实现远程调用,之前做的只是一个简单的demo,最近在此基础上,进行了进一步的扩展:包括使用反射机制获取类、异常的统一处理等,虽然有一定程度上的改进,但还是有一定程度上的不足,我会持续更新继续改进的。SpringBoot使用Netty实现远程调用可参考我的博客:SpringBoot使用Netty实现远程调用正文SpringBoot使用Netty实现远程调2.0在SpringBoot使用Ne原创 2020-11-01 20:14:51 · 3439 阅读 · 2 评论 -
SpringBoot使用validation-api实现对枚举类参数校验
SpringBoot使用validation-api实现对枚举类参数校验前言之前写了一个博客是关于使用SpringBoot使用validation-api实现参数校验,当时使用的注解都是validation-api自带的注解只能完成对空值、长度等简单的校验,在我们日常的使用当中会遇到对参数是否在枚举值类的校验,针对这种情况我们怎么来实现呢?SpringBoot使用validation-api实现参数校验可参考我的博客:SpringBoot使用validation-api实现参数校验正文Spring原创 2020-11-01 19:41:04 · 7286 阅读 · 7 评论 -
蹊源的Java笔记—集合之Map接口
溪源的Java笔记—集合之Map接口前言集合可以说Java最重要的数据结构了,在上期博客溪源我简单对Collection接口一些整理,这期博客会对另一个集合类接口—Map接口常见的知识点做了简单地整理。集合之Collection接口可参考我的博客:溪源的Java笔记—集合之Collection接口正文集合类集合类有两个接口组成:Collection和MapMap接口Map接口有三个实现类分别是:HashMap:HashMap实现了Map接口,继承AbstractMap,它是基于哈希表(原创 2020-10-29 23:41:23 · 4132 阅读 · 3 评论 -
SpringBoot使用阿里OSS实现文件云存储
SpringBoot使用阿里OSS实现文件云存储前言我们在项目中经常会使用到图片或者文档资源,一般来说如何这类文件比较少的时候我们可以直接存在在服务器中,但是如果一旦这些文件到达一定数量的时候如果在放在应用服务器必然会影响应用服务器的性能,并且有时候这些图片资源也要直接用在前端显示当中,所以放在应用服务器也是不妥的。一些比较大的互联网公司可能会使用一些分布式文件系统来达到存储文件的目的,但这种方式门槛过高。如何找到一个合适且性价比高的文件存储方式呢?那么不得不说的就是对象存储服务OSS.FastDFS原创 2020-10-27 23:56:46 · 8281 阅读 · 17 评论 -
蹊源的Java笔记—集合之Collection接口
溪源的Java笔记—集合前言在java中我们最常的数据接口就是集合,在面试的时候最常问的问题也是集合相关的问题,结合自己的面试经验,我做了简单地整理,希望可以能够帮助小伙伴们一二。正文集合集合有两个接口组成:Collection和MapCollection接口Collection接口有3个子接口分别是:List:有序且元素是可重复的Set:无序并元素是不可重复的Queue:先进先出的线性数据结构,并且只能观察到队首元素.List接口List的常用实现类有:ArrayList原创 2020-10-27 12:41:23 · 5116 阅读 · 7 评论 -
SpringBoot使用Netty实现远程调用
SpringBoot使用Netty实现远程调用前言众所周知我们在进行网络连接的时候,建立套接字连接是一个非常消耗性能的事情,特别是在分布式的情况下,用线程池去保持多个客户端连接,是一种非常消耗线程的行为。那么我们该通过什么技术去解决上述的问题呢,那么就不得不提一个网络连接的利器——Netty.正文NettyNetty是一个NIO客户端服务器框架:它可快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化和简化了网络编程,例如TCP和UDP套接字服务器。NIO是一种非阻塞IO ,原创 2020-10-24 00:12:29 · 9542 阅读 · 12 评论 -
Java线程池的使用
关于线程池为什么需要线程池?线程是处理器调度的基本单位。我们会为每一个请求都独立创建一个线程,而操作系统创建线程、切换线程状态、结束线程都要使用CPU进行调度。线程池的实现:ScheduledThreadPoolExecutor(适用于定时且周期性的任务,可以实现延时执行、定时执行等等)ThreadPoolExecutorForkJoin Pooljava预定义的线程池CachedThreadPool:可缓存的线程池,该线程池中没有核心线程,非核心线程的数量为Integer.max_va原创 2020-06-12 11:48:29 · 2067 阅读 · 0 评论 -
缓存和数据库一致性问题
缓存和数据库一致性问题前言在我们生产的过程中,我们会发现我们80%的业务是由20%的数据来驱动的,这20%的数据往往被我们称为热数据,这种现象也被称为二八定律。这种数据访问不均匀的现象,使得我们可以采用最有效的技术——缓存来提升我们整个系统的性能,但是用到缓存我们不可避免地要考虑一个问题缓存和数据库数据一致性的问题。正文缓存和数据库一致性问题缓存和数据库双写一致性问题强一致性:缓存和数据库数据始终保持一致最终一致性:缓存和数据库数据有一段时间不一致,单不影响查询结果。解决缓存一致性的解决原创 2020-10-21 16:06:29 · 3633 阅读 · 0 评论 -
开箱即用的SpringBoot模板
如果你从事的开发岗位是独立开发一个完整的项目的时候,我们需要前期做很多的开发准备,特别是使用比较多的技术栈的时候,我们前期会投入比较多的组件调试时间,其实这部分工作往往是不涉及业务的,完全可以把常见的技术栈集合在一起做一个开发模板,本篇博客为大家提供一个不涉及业务逻辑的`SpringBoot`项目模板。原创 2020-10-14 09:20:07 · 9244 阅读 · 27 评论 -
SpringBoot通过自定义注解实现日志打印
在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的`Bug`,特别是在开发`Controller`层的接口时,我们一般会打印出`Request`请求参数和`Response`响应结果,但是如果这些打印日志的代码相对而言还是比较重复的,那么我们可以通过什么样的方式来简化日志打印的代码呢?原创 2020-10-12 23:36:29 · 6235 阅读 · 7 评论 -
EasyExcel实现Excel文件的导入导出
EasyExcel实现Excel文件的导入导出前言在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据批量导入导出。正文EasyexcelEasyexcel 是阿里巴巴的开源项目,用来优化Excel文件处理过程:poi消耗内存严重:Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi原创 2020-09-25 00:59:42 · 10830 阅读 · 4 评论 -
使用Curator来控制ZooKeeper
作为一个了解分布式架构的开发者,一定会用到`ZooKeeper`,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。虽然`ZooKeeper`功能强大,但是`ZooKeeper`客户端的调用比较复杂,对我们开发者相对而言还是不够友好的,而`Apache Curator` 就是为了简化`ZooKeeper`客户端调用而生,利用它,可以更好的使用`ZooKeeper`。原创 2020-09-09 23:43:01 · 12602 阅读 · 3 评论 -
微服务使用knife4j进行在线接口调试
之前发布了一个博客是关于`SpringBoot`使用`knife4j`进行在线接口调试,那是一个单节点下的教程,那么在微服务情况,每一个服务都是一个独立的`knife4j`的话,显然是不方便的,那么对于微服务的情况下,我们如何使用`knife4j`呢?原创 2020-09-07 12:57:07 · 14105 阅读 · 1 评论 -
Dubbo结合Gateway实现微服务网关
Dubbo结合Gateway实现微服务网关前言最近,我发布了Dubbo Demo项目以及Gateway网关的博客,于是奇思妙想到能不能将两者结合起来呢?首先我们可以在Dubbo的官网中看了开发者文档,它推荐使用的网关只有三种Kong、Dubbo Proxy以及Zuul,而GateWay被认为是Zuul的替代品,所以从理论上是完全可行,所以来吧,展示!Nacos安装以及其使用可参考我的博客:Nacos服务治理中心和配置中心Gateway安装及使用可参考我的博客:微服务网关-Gateway正文网关模原创 2020-09-07 01:42:18 · 20572 阅读 · 11 评论 -
SpringBoot使用validation-api实现参数校验
SpringBoot使用validation-api实现参数校验前言我们在开发Java项目的时候,经常需要对参数进行一些必填项、格式、长度等进行校验,如果手写代码对参数校验,每个接口会需要很多低级的代码,这样会降低代码的可读性。那么我们能不能使用一种比较优雅的方式来实现,对请求中的参数进行校验呢?knife4j的安装与使用可参考我的博客:SpringBoot使用knife4j进行在线接口调试正文ValidationApi框架就是用来解决参数校验中代码冗余问题,ValidationApi框架提供一些原创 2020-09-06 04:06:52 · 15029 阅读 · 2 评论 -
SpringBoot使用knife4j进行在线接口调试
前言我们在开发一个Java Web的项目,如果项目整体采用前后端分离的架构的方式,我们会经常使用Swagger来进行接口调试和为前端提供接口文档,但是Swagger并没有实际上那么方便,比如我们在发送Post请求时,参数选填还是非常不友好,那么有没有更好的工具呢?正文knife4jknife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,具有小巧,轻量,并且功能强悍的优点。Knife4j提供两大核心功能:文档说明 和 在线原创 2020-09-06 01:02:11 · 17092 阅读 · 2 评论 -
Dubbo服务的注册与发现
Dubbo服务的注册与发现前言最近参与的项目是一个基于Dubbo的项目,在开发过程中有些同事对于Dubbo服务的注册与发现机制,似乎不太了解。所以我抽空和他简单聊了聊我对Dubbo机制的了解。正文Java SPISPI即服务提供商接口,它是一种动态加载服务实现者的机制,通过JavaSPI我们可以优雅地根据一个接口来获取该接口的所有实现类。值得注意的是使用的Java SPI需要有以下的前提:1.需要在 classpath 下创建一个目录,该目录命名必须是:META-INF/service2.在原创 2020-09-01 20:41:08 · 11664 阅读 · 1 评论 -
Java使用自定义注解优雅地解决异常
我们在实际的开发的过程中是不是经常会遇到这样的情况:当调用服务出现错误的时候页面直接报500的错误,并且在页面显示一大串错误提示,很明显这种异常信息的展示对用户体验是非常不好的,用户更关心服务能不能用,并不在乎问题的原因,那么开发的过程中如何去处理这些异常呢?原创 2020-08-29 23:04:05 · 14421 阅读 · 2 评论 -
SpringBoot 通过自定义注解实现权限检查
最近开发了一个接口,完成后准备自测时,却被拦截器拦截了,提示:(AUTH-NO)未能获得有效的请求参数!怎么会这样呢?于是我全局搜了这个提示语,结果发现它被出现在一个Aspect类当中了,并且把一个 @interface 作为了一个切点,原来这里利用了Spring AOP面向切面的方式进行权限控制。原创 2020-08-27 22:36:49 · 13286 阅读 · 0 评论 -
高并发之限流算法
限流算法在我们的实际的生产当中存在这样的业务场景:短时间有大量的请求涌入造成了系统的崩溃。针对这种问题我们会采用一种服务降级的方式来保证核心服务可以正常运行。一般来说服务降级分为两种:故障降级:当发生网络故障或者RPC服务返回异常,这种情况我们通常采用关联fallback方法,为客户端设置兜底数据,从而避免造成服务依赖的“雪崩”现象。限流降级:无论系统运行在什么样的服务器,它都会有一定的流量带宽极限,我们可以采用设置请求阈值的方式来避免过多的请求涌入从而造成系统的崩溃。不同的RPC框架都有着不原创 2020-08-23 23:40:50 · 11742 阅读 · 2 评论 -
使用Mac系统来进行Java编程
使用Mac系统来进行Java编程第一步:安装jdk环境1.Jdk1.8百度云下载地址下载完成后,傻瓜式点击下一步,即可:2.验证java环境 java -version第二步:下载idea下载idea 2019.3版本 官网地址原创 2020-08-24 13:11:17 · 15846 阅读 · 3 评论 -
JavaWeb主流技术总览
项目分享:https://github.com/luo948521848/JavaWeb JavaWeb技术总览 前段技术 BootStrap 基于xml、javaScript、css开发框架 JavaScript直译式的脚本语言 JQuery JavaScript的库 Ajax 异步J...原创 2018-07-28 15:44:18 · 17317 阅读 · 0 评论 -
Java基础面试题
更多源码分享:https://github.com/luo948521848/java基础部分(第一部分)1.一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制? 答:一个“.java”源文件可以包含多个类,但是其中只能有一个类是public的。 2.Java有没有goto? 答:goto是java的保留字(现在不用,但以后可能用)。在C语言中,主要是 为了实现...原创 2018-07-29 20:43:23 · 1911 阅读 · 0 评论 -
Java基础面试题(第二部分)
更多源码分享:https://github.com/luo94852184850.同步几种实现方法? 答: synchronized关键字(标记临界区)、wait/notifyAll(使用了java对象中内置锁) wait():使一个线程处于等待状态,并且释放所持有的对象的lock。 sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉Interrupted...原创 2018-07-30 12:43:24 · 1865 阅读 · 0 评论 -
利用Solr实现电子商城检索功能
源码:https://github.com/luo948521848/JavaWeb/tree/master/SolrJDong%E5%95%86%E5%93%81%E6%A3%80%E7%B4%A2Web.xml配置文件<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp....原创 2018-08-01 13:53:59 · 2556 阅读 · 0 评论 -
SpringBoot中使用Redis
源码分享:https://github.com/luo948521848/JavaWeb/tree/master/redisredis的应用场景 缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用) 分布式集群架构中的session分离。 聊天室的在线好友列表。 任务队列。(秒杀、抢购、12306等等) 应用排行榜。 网站访问统计。 数据过期处理(可以精确到毫秒)利...原创 2018-08-08 13:06:30 · 1935 阅读 · 2 评论