
Java系列
文章平均质量分 84
本专栏收录了Java相关的各种零零散散的文章,大家可以关注订阅哦。
一一哥Sun
孙玉昌,十年软件开发及授课经验,专注大学生毕业设计及面试求职私塾式指导!阿里云专家、优快云博客专家、掘金优质创作者!曾任国内物流行业独角兽企业架构师,参与国内领先的智能物流系统平台天眼/冷链/订单/车次中心系统研发;主导某在线教育App及后台架构;负责大庆油田采油管理系统,春华旅业云计算系统等大型项目研发。目前担任某知名机构技术研发经理,上海校区教学负责人,培养了大批入职阿里、IBM、百度、华为等名企的高薪学生。坚持一心做教育,做一流教育的理念,被学生爱称为"一一哥"!
展开
-
高频面试题|RabbitMQ如何防止消息的重复消费?
利用redis的setnx命令,将消费的消息id存入到redis,超时时间设置为10秒,然后再给mq返回ack。如果redis中存在这个消息id,则说明产生了重复消费,此时直接返回ack,不重复执行业务。因为消费方和MQ服务器网络闪断等原因,造成了接收方接受消息后,返回给MQ服务器一个ack确认消息,但MQ却没有接收到,这就造成了重复消费。的话,那么我想考察的,其实是候选人对技术的基本使用,以及在各种实际应用场景中对可能发生的问题的实际处理能力。第一,RabbitMQ中消息的重复消费是如何产生的?原创 2023-02-27 10:25:50 · 4445 阅读 · 14 评论 -
高频面试题|JVM虚拟机的体系结构是什么样的?
主要是因为我们进行JVM优化的第一步,就是要先理解整个JVM虚拟机的体系结构和作用,然后再学习JVM的垃圾回收机制、JVM分析的命令等内容,最后才会进行JVM的调优或者优化。PC寄存器的内容总是指向下一条即将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。Java的方法区和堆类似,方法区是一块所有线程都可以共享的内存区域,它保存着系统的类信息,比如类的字段、方法、常量池等。栈是线程私有的,它的生命周期与线程相同,用于存储局部变量、动态链接、方法出口等信息。原创 2023-02-20 09:15:27 · 486 阅读 · 4 评论 -
高频面试题|说说数据库优化方案都有哪些吧?
SQL是我们和数据库交流最重要的部分,所以我们在调优的时候,需要花费的大量时间就在sql调优上面。常见的分析手段有慢查询日志,EXPLAIN 分析查询,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。log-slow-queries参数为慢查询日志存放的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录。一些基本的优化手段,小伙伴们还是可以回答出来的,比如在编写SQL语句时,尽量不要使用like关键字,尽量避免使用or关键字等等....原创 2023-02-17 09:06:41 · 870 阅读 · 3 评论 -
比swagger2更好用的文档工具smart-doc,你确定不来学习一下?
smart-doc是一款接口文档生成工具,它完全是根据接口源码进行分析生成接口文档,不会使用任何注解侵入业务代码中。这一点与swagger完全不同,swagger侵入性强,需要编写大量注解。在Java项目中,我们只需要按照java-doc的标准编写注释,就能生成一个简易明了的Markdown、HTML5、Postman Collection2.0+、OpenAPI 3.0+格式的文档。壹哥"墙裂"建议:作为技术人员,一定要学会通过帮助文档学习各种技术哦。原创 2023-02-06 10:09:32 · 2013 阅读 · 6 评论 -
基于SSM+Redis等主流技术,精美爱奇艺后台管理项目免费送
一. 项目简介新年开工第一篇,壹哥先给大家带来一个福利帖,私信壹哥可以免费获取本项目完整资料哦。在领取资料之前,请先跟着壹哥看看这个项目都有哪些亮点吧。1.项目背景。原创 2023-01-30 10:20:18 · 308 阅读 · 6 评论 -
企业级监控项目Skywalking详细介绍,来看看呀
一个优秀的项目,除了具有高拓展的架构、高性能的方案、高质量的代码之外,还应该在上线后具备多角度的监控功能。现在企业中的监控服务也有很多,Skywalking除了提供多维度、多粒度的监控之外,也提供了良好的图形化界面以及性能剖析、服务报警等多种功能,备受很多企业的青睐。因此侯哥今天给大家通过一篇文章,来详细地给大家介绍Skywalking。1.1 什么是Skywalking?Skywalking是一款分布式的系统性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。原创 2023-01-18 06:00:00 · 29467 阅读 · 7 评论 -
数据库分片利器ShardingSpher简介
在没有离线数仓的处理下,数据库就会膨胀,最终导致数据库的瓶颈地发生。按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。分片一时爽,分片能有效解决性能、可用性以及单点备份恢复等问题,但是获得分布式数据库带来收益的同时,你也必须直面分布式数据库带来的挑战。要解决瓶颈最有效的办法就是采用分布式思想,即一个数据库不行来多个数据库,多个数据库协同去维护整个系统的业务数据这样就可以轻松击破瓶颈。原创 2023-01-09 09:51:18 · 315 阅读 · 0 评论 -
线上服务器CPU占用过高?7步带你搞定
在Java开发岗位的面试中,时不时会出现一些运维类的题目,其实这也反映了后端面试的一种趋势。现在企业对后端开发的要求越来越全面,不仅要求我们会写代码,还要我们能够进行部署和运维。今天壹哥就结合一个真实的项目案例,来给大家讲解一道关于运维类的真实面试题。题目如下:SpringBoot项目上线后,发现其部署所在的Linux服务器CPU占用过高,该如何排查解决?这是一道比较常见的线上排错问题,接下来就让我们我们来分析一下这个问题的解决过程吧。原创 2023-01-06 10:47:25 · 2661 阅读 · 0 评论 -
Spring是怎么回事?新手入门就看这篇吧
今天壹哥给大家介绍一套开源的轻量级框架,它就是Spring。在给大家详细讲解Spring框架之前,壹哥先给大家介绍Spring框架的主要内容: 在本系列文章的讲解中,壹哥会给大家配备丰富的案例、图片以及对应的学习视频,目的就是让大家更好的理解和运用Spring框架,并给大家带来足够的启发和思考。接下来我们正式学习Spring框架。在Spring官网(https://spring.io/projects/spring-frameworkhttps://Spring.io/projects/Spring-fra原创 2023-01-03 09:39:58 · 2549 阅读 · 3 评论 -
Lambda表达式的来龙去脉,全在这篇文章里了
我们先来定义一个学生类。}super();}System.out.println("学号:"+ this.sno +",姓名:" + this.name + ",年龄:" + age + ",成绩:"+ this.score);}}//制定统一的判断方法规范}原创 2022-12-29 10:36:50 · 652 阅读 · 1 评论 -
Java的线程池是怎么回事?来看看这篇文章吧
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。原创 2022-12-27 11:37:18 · 445 阅读 · 6 评论 -
Java项目写好了,如何部署上线?看这篇文章吧
好了,今天的内容就到这啦,你知道如何部署项目到服务器了吗?整个过程需要我们很有耐心哦,当然这只是部署项目最最普通的一种方式,后面还有更高级的方式哟。如果你还有其他问题,可以在评论区给壹哥留言哦。原创 2022-12-12 09:13:19 · 18002 阅读 · 31 评论 -
函数式接口不会用?看这篇文章就够了
如果在Java的接口中,有且只有一个抽象方法,那么这种接口就是函数式接口。函数式接口是使用Lambda表达式的前提条件。2. 为什么要使用函数式接口?在Java中不支持将函数作为一个数据,也就不能将函数作为方法的参数进行传递。因此给函数外加一层接口的声明,相当于为其穿上一件漂亮的外衣包装起来。如果需要将函数作为方法传递时,就可以传递函数所在接口的实现类对象,来间接的传递方法内容了。3. 函数式接口定义我们可以使用@FunctionalInterface注解来检查一个接口是否是一个函数式接口。原创 2022-12-09 08:54:56 · 2356 阅读 · 16 评论 -
关于ElasticSearch日期格式不一致的异常,可以这么解决
最近壹哥的一个学生,在利用spring-data-elasticsearch访问ElasticSearch(ES)时,遇到了一个关于日期类型的BUG,困扰了很久。然后他就找壹哥给他解决,接下来壹哥就把解决的过程给大家复现一下,希望本文可以给遇到同样问题的同学一点启发。我们先来看看他的POM.xml文件配置,如下所示:实体类的代码如下:创建索引的单元测试类代码如下:以下是ES中创建的索引 Mapping结构,其中日期类型的format为date_time。看了以上代码,你能猜出来哪里有问题吗原创 2022-12-07 09:08:51 · 5410 阅读 · 21 评论 -
干货必看|Spring Boot整合MyBatis框架详解
Spring Data是Spring提供的一个用于简化数据库访问、支持云服务的开源框架。它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是使我们可以快速且简单地使用各种数据访问技术。Spring Boot默认采用整合Spring Data的方式统一处理数据访问层,通过添加大量自动配置,引入各种数据访问模板xxxTemplate以及统一的Repository接口,从而达到简化数据访问层的操作。原创 2022-11-30 09:02:51 · 19210 阅读 · 12 评论 -
代码管理工具知多少?来看看Git怎么用吧
说到代码工具,许多工作了的小伙伴一定很有发言权。因为我们在实际开发环境中,就代码的复杂度和逻辑度,对于开发工程师来说,都是极具挑战性的。如果单靠个人来完成单个项目的整体开发,那无疑是难上加难,因此就有个词孕育而生了——“协同开发”。也就是说,我们有许多个开发工程师,有的负责项目的这个模块,有的负责项目的那个模块。最后当我们将各自模块完成后,将其提交到远程,并进行代码合并。这个协同工具不仅减少了我们项目开发的难度,也加快了项目的开发进度。原创 2022-11-25 10:11:49 · 3862 阅读 · 14 评论 -
微服务远程调用组件Feign的使用详解
我们知道,现在最火且最有技术含量的技术莫过于SpringCloud微服务了,所以今天就带大家来学习一下微服务的核心的组件之一,Feign的基本使用及其工作机制。转载 2022-11-23 09:12:51 · 3344 阅读 · 25 评论 -
请求转发与重定向到底有哪些区别?
重定向与请求转发。但可能有很多同学并不知道这两种跳转在细节上的区别,只知道都能跳转到目标页面。但实际上这两种跳转方式深入研究后,你会发现有很多不同之处。接下来,壹哥就给大家梳理一下这两种跳转方式的具体区别。二. 两者的各自特点两种跳转最大的区别在于,重定向是两次请求,每次都是从客户端发起;而请求转发是一次请求,是服务器发起的转发。如下图所示:给大家举一个生活中的案例:重定向我要找凤姐办事,凤姐说她完成不了,刘亦菲可以完成这件事,让我去找刘亦菲办事。原创 2022-11-21 12:28:20 · 4152 阅读 · 23 评论 -
如何手写一个单向链表?看这里
通常我们在大多数的面试中,遇到关于集合的问题都是比较多的。一般情况下,许多面试官通常都会问我们关于Set集合和Map集合的相关知识点,并对此进行重重陷阱的布置,此时很多面试者往往就很容易被带到面试官挖好的陷阱里。另外就是双向链表,也是面试频率相对较多且较复杂的问题,甚至还有一些面试官在问完双向链表的相关知识点后,还会变态地叫我们手写出一个单向链表,以此来考察面试者对链表的掌握情况。所以今天就带大家手写一个单向链表,让我们一起理清单向链表的实现思路。原创 2022-11-18 08:45:33 · 1122 阅读 · 24 评论 -
使用ReentrantLock中的条件变量让多个线程顺序执行
近日壹哥假设有3个线程 a,b,c,要求三个线程一起进入到就绪态,执行时一定要按照 a-->b-->c的顺序执行。即使a或者b线程进入到了阻塞态,也一定会按照a-->b-->c的顺序运行线程。请问该如何保证实现这个需求呢?原创 2022-11-16 09:12:56 · 1133 阅读 · 9 评论 -
实战干货|String字符串intern()方法底层原理剖析
Hello,大家好,最近又是一年求职季。有不少小伙伴私聊壹哥,问壹哥知道String的intern()方法不?这不,就来活了。今天壹哥就给大家谈谈String的intern()方法,让我们一起来看看这究竟是个什么玩意?难道是科技与狠活?我们先上一段代码:大家猜猜上面代码的输出结果是什么?true还是false?321,你猜对了吗?这里的输出结果是:false!上面的结果是为什么呢?为了搞清楚这个问题,我们看看需要了解一下intern()方法的内部原理。其实大家可以将String的intern()方法,原创 2022-11-11 10:23:13 · 1230 阅读 · 10 评论 -
Java的继承到底是怎么回事?看这篇让你明明白白
当我们编写的多个类中存在相同的属性或方法时,可以将这些类中相同的属性和方法抽取到一个新的类中,然后再让这些类继承于这个新类,就可以重用新类中的属性和方法,这些类称为子类,这个新类称为父类,这就是Java中的继承。方法重写指的是在具有继承关系的子类中,如果存在一个成员方法,与父类中的成员方法有相同的签名和返回值类型,那么,这个方法就重写了父类中的成员方法,称为方法重写。方法签名指的是方法名、参数类型和参数个数。相同的方法签名指的是方法名、参数类型、参数个数和参数出现的位置均相同。原创 2022-11-10 10:18:42 · 804 阅读 · 20 评论 -
Spring-retry重试框架怎么用?看这里
spring-retry是spring提供的一个重试框架,它通过几个注解就可以优雅的实现重试的功能。原创 2022-11-04 09:13:22 · 1565 阅读 · 22 评论 -
消息推送实现|使用WebSocket主动推送消息到客户端方案
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。壹哥。原创 2022-10-31 09:13:29 · 10348 阅读 · 30 评论 -
一桩Lombok插件引发的故障|带你学会Lombok的安装和使用
我们知道,Lombok插件是目前Java中使用频率非常高的一款插件,可以在编译阶段自动生成实体类的常用方法。// 没有使用Lombok插件的实体类,需要手动写getter和setter,以及构造方法等return id;}}}}}}}// 使用了Lombok插件的实体类@Data // 此注解自动生成getter和setter,toString,equals和hashCode等方法@NoArgsConstructor // 此注解生成无参构造函数。原创 2022-10-28 09:35:23 · 1147 阅读 · 13 评论 -
技能速成|一文带你学会Mybatis-Plus
我们知道,Mybatis属于一个半自动的ORM框架。之所以说Mybatis是一个半自动的ORM框架,原因是它还需要我们自己在注解或是映射文件中编写SQL语句,并没有实现完全的自动化。SQL语句的编写,虽然增加了项目和业务需求实现的灵活性,但对一些基本表的操作而言,无疑增加了数据库操作的复杂度,显得没有那么方便。而Mybatis-Plus则是全自动的ORM框架,按照开闭原则,在不影响Mybatis现有功能的情况下,实现了对Mybatis的功能增强。原创 2022-10-26 09:57:18 · 740 阅读 · 16 评论 -
你还在手写接口文档?来,壹哥教你一招实现在线接口文档
既然现在的项目开发很多都是采用前后端分离的模式,那么前端和后端的交互联系,就得依靠API接口文档来完成。因此API接口文档就变得越来越重要。Swagger就是一个方便我们更好地编写API文档的框架,而且Swagger还带有接口测试功能。接下来壹哥就通过一篇文章,来教会大家怎么使用Swagger文档。好了,今天的文章就到这里,现在你学会怎么使用swagger在线文档了吗?如果你还有其他任何问题,可以私信壹哥,我来教你怎么具体使用。原创 2022-10-24 09:27:28 · 3142 阅读 · 29 评论 -
Mybatis-Plus快速入门|比Mybatis更简单好用的ORM框架
我们知道Mybatis属于一个半自动的ORM框架,之所以说Mybatis是一个半自动的ORM框架,原因是它还需要我们自己在注解或是映射文件中编写SQL语句,并没有实现完全的自动化。SQL语句的编写虽然增加了项目和业务需求实现的灵活性,但对一些基本表的操作而言,无疑增加了数据库操作的复杂度,显得没有那么方便。而Mybatis-Plus则是属于全自动的ORM框架,按照开闭原则,在不影响Mybatis现有功能的情况下,实现了对Mybatis的增强。今天要带大家来学习一下Mybatis-Plus框架。原创 2022-09-23 08:33:02 · 1437 阅读 · 54 评论 -
03_Java筑基之Java编程基础
03_Java筑基之Java编程基础我们是学习软件开发的,必然离不开计算机,所以在进行学习之前,首先要了解一些必要的计算机基础知识.一. 计算机基础1. 计算机电子计算机,也就是我们俗称的电脑,是一种能够按照程序自动运行,自动、高速处理海量数据的现代化智能电子设备,它由硬件和软件所组成,而一台没有安装任何软件的计算机被称为裸机.2. 硬件在一台计算机中,有如下几个核心硬件....原创 2019-10-09 15:45:50 · 407 阅读 · 0 评论 -
09_Java筑基之方法
09_Java筑基之方法一. 方法1. 什么是方法Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段.2. 为什么要声明方法1. 把复用的逻辑抽取出来,封装成方法,提高代码的重用性; 2. 实现相对独立的逻辑,提高代码的维护性;3. 可以对具体实现进行隐藏、封装.3. 方法的作用简化代码,提高代码的可读性,可维护性,可重用性.4...原创 2019-10-24 13:40:52 · 403 阅读 · 0 评论 -
14_Java筑基之封装、继承
14_封装、继承一. 方法的参数传递、返回值Java语言在给被调用方法的参数赋值时,采用 传值(值传递) 的方式:基本类型数据传递的是该数据的值本身; 引用类型数据传递的也是这个变量的值本身,即对象的地址(引用),而非对象本身.1. 基本数据类型传递//类public class PassValue{ public void change(int x){ ...原创 2019-10-30 13:39:50 · 477 阅读 · 0 评论 -
01_Java筑基之Java简介
01_Java筑基之Java简介一. Java到底是什么?Java是一门全球范围内使用最广泛的,面向对象的编程语言.Java语言具有功能强大和简单易用两个特征,它作为面向对象编程语言系列的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程.二. Java到底是干嘛的?Java技术具体的应用领域1️⃣.安卓手机App我们的安卓手机里面几乎所有的App应用...原创 2019-10-09 15:42:46 · 632 阅读 · 0 评论 -
15_Java筑基之Object类、多态
15_Java筑基之Object类、多态一. Object类Object类是类层次结构的根类,每个类都使用Object作为超类(父类).1. equals()方法指示其他某个对象是否与此对象“相等”.示例代码;/*** 学生类*/public class Student extends Object{ String stuNo; String...原创 2019-11-01 17:48:42 · 436 阅读 · 0 评论 -
带你搞懂MySQL隔离级别,两个事务同时操作同一行数据会怎样?
最近有学生出去面试,被问到这样一个题目:假设目前你们使用的数据库是MySQL,现在有一个事务A,在事务A开始时读取数据的结果是1;事务A中间有一段耗时操作,在事务A中做耗时操作的同时,有另外一个事务B把数据值改成了2并提交了。请问在事务A中,再一次查询该数据的结果应该是1还是2,并且说明原因......原创 2022-07-26 09:28:21 · 3572 阅读 · 45 评论 -
05_Java筑基之Java开发初体验
05_Java筑基之Java开发初体验一. 编写第一个HelloWorld程序1. Java开发步骤Java开发需要三个步骤:也就是会经历如下顺序:2. 第一步:编写源程序一开始,我们可以选择最简单的编辑器:记事本.我们可以在F盘下创建一个名为Demo的文件夹,然后在该文件夹下创建一个.txt文件,把后缀名改为.java.然后我们将Java代码编写入扩展名为.j...原创 2019-10-09 15:59:55 · 330 阅读 · 0 评论 -
08_Java筑基之循环语句
08_Java筑基之循环语句一. 循环结构1. 什么是循环循环就是在循环条件满足的情况下,反复执行特定代码.2. 为什么要使用循环当我们要打印100次helloworld,或者我们想实现1-100的和,那么如何做?1+2+3+4+5....int sum = 0;sum = sum + 1;sum = sum + 2;sum = sum + 3;sum =...原创 2019-10-24 12:47:12 · 471 阅读 · 0 评论 -
02_Java筑基之Java课程体系简介
02_Java筑基之Java课程体系简介一. Java筑基知识体系在Java筑基阶段,我们先简要列举一下本阶段教程所要涵盖的内容,也就是接下来我会按照如下顺序进行讲解. Java语言概述 Java编程基础 Java数组 常用算法 面向对象编程 高级类特性 Java异常处理机制 Java常用类 集合与泛型...原创 2019-10-09 15:43:58 · 561 阅读 · 0 评论 -
04_Java筑基之环境搭建
04_Java筑基之环境搭建学习使用任何一门编程语言之前,我们都必须先搭建其开发环境,Java也不例外.我们要搭建Java开发环境,也就是要安装JDK,并配置JDK的环境变量.一. 什么是JDK,JRE?1. Java基础概念释义 JDK(Java Development Kits)-- Java开发工具集(包).JDK是提供给Java开发人员使用的,其中包含了Java的开发工具...原创 2019-10-09 15:56:26 · 387 阅读 · 0 评论 -
06_Java筑基之基础语法
06_Java筑基之基础语法一. 标识符1. 什么是标识符Java对包、类、方法、参数和变量等要素命名时使用的字符串称为标识符.2. 标识符的命名规则①. 由字母(含英、中、日、俄等)、数字、下划线(_)和美元符号$($ 音: dollar)组成;②. 不能以数字开头;③. 区分大小写;④. 长度无限制(一般不要超过15个字符);⑤. 不能是Java中的保留...原创 2019-10-23 11:25:23 · 452 阅读 · 0 评论 -
11_Java筑基之二维数组
11_Java筑基之二维数组1. 二维数组的概念本质上还是一个一维数组,只是其数组元素又是一个一维数组.举例说明: 变量,一维数组,二维数组之间的关系.买烟的例子:没钱: 一根烟 一个变量稍微有钱 一包烟 一维数组有钱 一条烟 【20根】2. 二维数组的定义方式一: 元素类型[][] 数组名称; 方式二: 元...原创 2019-10-25 17:52:30 · 317 阅读 · 0 评论