
Java从入门到精通21天养成计划
文章平均质量分 83
Java常见问题解决方案及源码解析
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
普通网友
这个作者很懒,什么都没留下…
展开
-
Java高阶部分知识点汇总(四)-继承与多态
零.前言前面讲了面向对象的两个特性,封装和继承。这节将面向对象的最后一个特性多态,而多态是在继承的基础上存在的。Java的引用变量有两个类型:一个是编译时的类型,另一个是运行时的类型。编译时的类型由声明变量时所使用的类型决定,运行时类型由实际赋给变量的对象决定。如果编译时类型和运行时类型不一致,就会出现多态。至于什么是编译时类型和运行时类型,请继续往下看。一.多态性先来看一段程序: ...原创 2021-12-26 06:00:00 · 1203 阅读 · 0 评论 -
Java高阶部分知识点汇总(三)-内存空间的引用
零.前言在前面给大家展示的代码中,有这样一行代码Studentstu = new Student();这行代码创建了一个Student对象,这个对象被赋给stu变量。今天我们就来好好学习一下这行代码的运行的具体过程,以及引用数据类型中引用二字的意义,也会带着大家将实参与形参之间的关系弄明白。本篇中使用的类定义如下: class Student{String name;int age;publicStuden...原创 2021-12-25 06:00:00 · 1203 阅读 · 0 评论 -
Java高阶部分知识点汇总(三)-基本类型的包装类详讲
零.前言Java语言为8个基本数据类型都提供了对应得包装类,通过8个包装类可以把8个基本数据类型的值包装成对象使用,JDK1.5提供了自动装箱和自动拆箱功能,也就是基本类型和对应包装类可以直接互相赋值使用。本节内容将给大家介绍Java中的包装类。一.包装类现在我们已经非常清楚,Java是一门面向对象的语言。但是作为面向对象语言他也不得不包含8种不支持面向对象语法的基本数据类型,基本数据类型不具备对象的特性,没有属性没有方法。这8种基本数据类型带来了一定的方便性,可以直接进行简单的常规数.原创 2021-12-07 06:00:00 · 1109 阅读 · 0 评论 -
Java高阶部分知识点汇总(二)-封装与隐藏详讲
零.前言在前面程序中,经常会出现通过某个对象的直接访问其属性的情况,这会出现很多潜在问题,例如前面我们定义过的学生类Student,我可以通过其实例对象直接访问到实例的age属性,并赋值,这在Java语法上是没有任何问题的,但是,如果我把这个age设置为负数或者设置为1000,这明显违背了现实,而前面说过对象是现实生活的描述,我们对一些现实类也需要有符合现实的数值,这就要提到面向对象的三大特性之一封装。一.什么是封装?封装是面向对象的三大特性之一,他的意思是将对象的属性隐藏起来在对象内部,.原创 2021-12-06 06:00:00 · 1152 阅读 · 0 评论 -
Java高阶部分知识点汇总(一)- 成员变量与局部变量详讲
零.前言在Java语言中,根据定义变量的位置不同,可以将变量分为两大类:成员变量与局部变量。而两者的运行机制也存在着较大的差异,本篇文章将详细介绍这两种变量的运行差异。一.成员变量成员变量指的是类范围里所定义的变量,也就是前面介绍过的属性;局部变量指的是在方法中所定义的变量。不管是成员变量还是局部变量,都遵守同一个命名规则。变量分类图成员变量被分为类属性和实例属性两种,定义属性时没有被static修饰的属性就是实例属性,有static修饰的就是类属性。其中类属性使从类的准备阶段.原创 2021-12-05 06:00:00 · 1190 阅读 · 0 评论 -
Java实战应用50篇(二)-SSM框架中的设计模式:动态代理
前言动态代理和责任链无论在Spring还是MyBatis中都有重要的应用,代理模式的意义在于生成一个占位(又称代理对象),来代理真实对象(又称目标对象),从而控制真实对象的访问。先来谈谈什么是代理模式。假设这样一个场景,你的公司是一家软件公司,你是一位软件工程师。客户带着需求去找公司显然不会直接和你谈,而是去找商务谈,此时客户会认为商务就代表公司。让我们用一张图来表示代理模式的含义,如图1所示。图1代理模式示意图显然客户是通过商务去访问软件工程师的,那么商务(代理对象)的意义..原创 2021-11-27 06:00:00 · 1247 阅读 · 0 评论 -
编程语言中的Lambda 函数是如何产生的 它究竟有什么用
什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:在Java 8之前,这个是做不到的。但是Java 8问世之后,利用Lambda特性,就可以做到了。当然,这个并不是一个很简洁的写法。所以,为了使这个赋值操作更加elegant, 我们可以移除一些没用的声明。这样,我们就成功的非原创 2021-11-05 06:00:00 · 1026 阅读 · 0 评论 -
Java实战应用50篇(一)-Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatil原创 2021-10-25 06:15:00 · 1081 阅读 · 0 评论 -
Java序列化和反序列化为什么要实现Serializable接口
目录 序列化和反序列化 什么时候需要用到序列化和反序列化呢? 实现序列化和反序列化为什么要实现 Serializable 接口? 实现 Serializable 接口就算了,为什么还要显示指定 serialVersionUID 的值? Java 序列化的其他特性 static 属性为什么不会被序列化? 最近公司的在做服务化, 需要把所有 model 包里的类都实现 Serializable 接口,同时还要显示指定 serialVersion...原创 2021-10-20 06:00:00 · 965 阅读 · 0 评论 -
Spring 的 BeanUtils 踩坑记,你是不是遇到过这些问题?
背景最近项目中在和第三方进行联调一个接口,我们这边发送http请求给对方,然后接收对方的回应,代码都是老代码。根据注释,对方的SDK中写好的Request类有一个无法序列化的bug,所以这边重新写了一个Request类,基本属性都是相同的,但是重点是有一个属性是静态内部类,还有两个是list属性,类似于下面这样:privateList<Order>orders;privateAddRequest.Ticketticket;privateList<Payment>...原创 2021-10-18 06:30:00 · 984 阅读 · 0 评论 -
Java面试题目解析-如何解决Java性能问题
Java性能分析是一门科学和艺术。科学指的是性能分析一般都包括大量的数字、测量和分析;艺术指的是知识、经验和直觉的使用。性能分析的工具或者手段各有千秋,但性能的分析的过程却都大相径庭。本文就已知适用的Java性能分析窍门进行一些分享,帮助用户更好的理解和运用。窍门一:线程栈剖析线程栈分析是对正在运行的Java线程的快照分析,是一种轻量级的分析手段,用户在不清楚应用存在什么性能问题的时候可优先尝试。虽然判定Java线程是否异常并没有统一的标准,但用户可以通过一些指标进行定量的评估。以下分享4个检测指标原创 2021-09-15 08:45:52 · 952 阅读 · 0 评论 -
Java进阶知识-数组类型
零.前言本来数组类型应该属于基础部分的知识,我将它写在进阶部分是因为数组既可以是基础数据类型数组,也可以是引用数据类型数组。所以我想先介绍完类与对象的基础之后,再给大家介绍数组。于是,今天这篇内容给大家详细介绍数组类型。数组是编程语言中最常见的一种数据结构,用于储存多个同类型数据,每个数组元素可以存放一个数据,通常数组元素可以通过其索引来访问,包括为数组元素赋值和取出数组元素的值。Java语言的数组也具有一些独特的特征,下面给大家详细结束Java语言的数组。提前说明:教程比较小白,大佬不喜勿喷,原创 2021-05-15 07:07:59 · 1336 阅读 · 5 评论 -
Java实战系列之关于双十一秒杀架构模型的一点思考
秒杀系统相信很多人见过,比如京东或者淘宝的秒杀,小米手机的秒杀,那么秒杀系统的后台是如何实现的呢?我们如何设计一个秒杀系统呢?对于秒杀系统应该考虑哪些问题?如何设计出健壮的秒杀系统?本文我们就来探讨一下这个问题。秒杀应该考虑哪些问题超卖问题分析秒杀的业务场景,最重要的有一点就是超卖问题,假如备货只有100个,但是最终超卖了200,一般来讲秒杀系统的价格都比较低,如果超卖将严重影响公司的财产利益,因此首当其冲的就是解决商品的超卖问题。高并发秒杀具...原创 2020-11-10 08:56:56 · 1134 阅读 · 0 评论 -
Flink从入门到精通100篇(十一)-Java SPI 机制在 Flink SQL 中的应用
Java SPI 机制简介Java SPI机制,即Java Service Provider Interface,是Java提供的基于“接口编程 + 策略模式 + 配置文件”组合实现的动态加载机制。调用者可以根据实际使用需要,来启用、扩展或者替换框架的现有实现策略。在Java中,基于该SPI思想,提供了具体的实现,ServiceLoader,利用该类可以轻松实现面向服务的注册与发现,完成服务提供与使用的解耦。Java SPI机制常见的例子,如: 数据库驱动接口实现类的加载:JDBC可以根据实际原创 2020-10-26 07:22:49 · 1166 阅读 · 0 评论 -
SpringBoot 源码解析 —— SpringApplication 源码分析
正常的 SpringBoot 应用程序一个正常的 SpringBoot 项目的启动类中常见代码如下:@SpringBootApplicationpublicclassSpringbotApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringbotApplication.class,args);}}上面的代码也就两个比较引人注意的地方: @SpringBoo...原创 2020-10-24 07:42:48 · 1124 阅读 · 0 评论 -
Java 应用线上问题排查思路、常用工具小结
前言本文总结了一些常见的线上应急现象和对应排查步骤和工具。分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱。毕竟作者自己也是从手忙脚乱时走过来的。只不过这里先提示一下。在线上应急过程中要记住,只有一个总体目标:尽快恢复服务,消除影响。不管处于应急的哪个阶段,我们首先必须想到的是恢复问题,恢复问题不一定能够定位问题,也不一定有完美的解决方案,也许是通过经验判断,也许是预设开关等,但都可能让我们达到快速恢复的目的,然后保留部分现场,再去定位问题、解决问题和复盘。在原创 2020-10-23 10:35:17 · 1079 阅读 · 0 评论 -
Java 动态调试技术原理及实践
调试是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。最常用的断点调试技术会在断点位置停顿,导致应用停止响应。本文将介绍一种Java动态调试技术,希望能对大家有帮助。同时也欢迎读者朋友们一起交流,继续探索动态化调试技术。1. 动态调试要解决的问题断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径。但断点调试会在断点位置停顿,使得整个应用停止响应。在线上停顿应用是致命的,动态调试技术给了我们创造新的调试模式的想象空间。本文将研究Java语言.原创 2020-09-13 07:54:46 · 1215 阅读 · 0 评论 -
Elasticsearch 常见的 8 种错误及最佳实践
题记Elasticsearch 社区有大量关于 Elasticsearch 错误和异常的问题。深挖这些错误背后的原因,把常见的错误积累为自己的实战经验甚至是工具,不仅可以节省我们的开发和运维时间,而且可以帮助确保 Elasticsearch 集群的长期健康运行。常见的异常、原因和常规最佳实践拆解如下,这些最佳实践可以帮助我们更有效地识别、最小化定位和处理异常问题。1、 Mapper_parsing_exceptionElasticsearch 依靠映射(Mapping)定义的数据类型处理原创 2020-08-24 14:38:09 · 1393 阅读 · 0 评论 -
让bug无处藏身,Java 线上问题排查思路、常用工具
本文总结了一些常见的线上应急现象和对应排查步骤和工具。分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱。只不过这里先提示一下。在线上应急过程中要记住,只有一个总体目标:尽快恢复服务,消除影响。不管处于应急的哪个阶段,我们首先必须想到的是恢复问题,恢复问题不一定能够定位问题,也不一定有完美的解决方案,也许是通过经验判断,也许是预设开关等,但都可能让我们达到快速恢复的目的,然后保留部分现场,再去定位问题、解决问题和复盘。在大多数情况下,我们都是先优先恢复服务,保留下当原创 2020-08-20 08:36:35 · 1208 阅读 · 0 评论 -
SpringBoot 源码解析——SpringBoot 中的日志基础服务
背景在看 spring-boot module 的时候,看到有一个专门的 logging 的 package,因为日志是平时接触的非常多的一个东西,不仅仅是应用本身的日志需要关心,如果是要去做一个统一的日志收集和管理系统,也是一件很费心思的事情,比如: 可能要考虑日志打印的格式是什么样子的; 采集日志的时候怎么能够一行一行的采集; 对于那种堆栈异常日志如何采集收集在一起; 日志文件满了后出现滚动到新文件后如何识别并采集新的日志文件; 如果应用在出现异常的情原创 2020-08-19 08:31:18 · 1032 阅读 · 0 评论 -
还在为快捷键烦恼吗?IntelliJ IDEA 快捷键大全 Mac 版
Mac键盘符号和修饰键说明 ⌘Command ⇧Shift ⌥Option ⌃Control ↩︎Return/Enter ⌫Delete ⌦向前删除键(Fn+Delete) ↑上箭头 ↓下箭头 ←左箭头 →右箭头 ⇞Page Up(Fn+↑) ⇟Page Down(Fn+↓) HomeFn + ← EndFn + → ⇥...原创 2020-08-17 08:37:53 · 1039 阅读 · 0 评论 -
SpringBoot 源码解析——如何进行源码环境调试?
已经分析过 spring-boot-tests/spring-boot-smoke-tests 下的冒烟测试和很早之前版本的 sample 是一样的,所以我们想直接利用这些 sample code 来进行运行调试代码,从而可以 debug 进入到源码中。但是默认情况下的 spring-boot-tests module 里面只包含了下图两个,我们可以将 spring-boot-smoke-tests 写在下面的这个 modules 里面,这样 IDEA 就会将里面的代码进行当做一个 maven 项目了原创 2020-08-16 09:15:37 · 1301 阅读 · 0 评论 -
深度解析Google Java 编程风格指南
这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见。1.1 术语说明在本文档中,除非另有说明: 术语class可表示一个普通类,枚举类,接口或是annotation类型(@interface)原创 2020-08-09 07:02:33 · 1070 阅读 · 0 评论 -
IDEA 2020.2 稳定版发布,带来了不少新功能...
IntelliJ IDEA 2020.2 稳定版已发布,此版本带来了不少新功能,包括支持在 IDE 中审查和合并 GitHub PR、新增加的 Inspections 小组件(Inspections Widget)支持在文件的警告和错误之间快速导航、使用 Problems 工具窗口查看当前文件中的完整问题列表,并在更改会破坏其他文件时收到通知。此外还有针对部分框架和技术的新功能,包括支持使用 Jakarta EE 9 以及改进对 Quarkus, Micronaut, Amazon SQS API 和原创 2020-08-08 08:22:06 · 1153 阅读 · 0 评论 -
堆和栈的概念和区别
在说堆和栈之前,我们先说一下JVM(虚拟机)内存的划分: Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。 JVM内存的划分有五片: 1. 寄存器; ...转载 2018-06-22 10:22:01 · 977 阅读 · 0 评论 -
文本相似度算法(余弦定理)
最近由于工作项目,需要判断两个txt文本是否相似,于是开始在网上找资料研究,因为在程序中会把文本转换成String再做比较,所以最开始找到了这篇关于 距离编辑算法 Blog写的非常好,受益匪浅。 于是我决定把它用到项目中,来判断两个文本的相似度。但后来实际操作发现有一些问题:直接说就是查询一本书中的相似章节花了我7、8分钟;这是我不能接受…… 于是停下来仔细原创 2015-06-22 15:09:15 · 2349 阅读 · 0 评论 -
Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
方案一:用Eclipse自带的Export功能步骤1:准备主清单文件 “MANIFEST.MF”,由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下:Manifest-Version: 1.0Class-Path: lib/commons-codec.jar lib/commons-原创 2015-06-08 12:05:42 · 1602 阅读 · 0 评论 -
在Java中调用Python
转载自:http://blog.sina.com.cn/s/blog_64e467d60100uhls.htmlhttp://sourceforge.net/projects/jython/下载jython包,把其中的jython.jar添加到工程目录1.在java类中直接执行python语句view plainimport java原创 2015-06-08 12:05:01 · 1678 阅读 · 0 评论 -
JAVA设计模式
设计模式设计模式分类:设计模式分为三类,创建型模式,结构型模式,行为型模式创建型模式:1、工厂方法模式2、抽象工厂模式3、单例模式4、建造者模式5、原型模式结构型模式:1、适配器模式2、装饰器模式3、代理模式4、外观模式5、桥接模式6、组合模式7、享元模式行为型模式:1、策略模式2、模板方法模式原创 2015-03-30 11:00:17 · 1346 阅读 · 1 评论 -
深入Java单例模式
在GoF的23种设计模式中,单例模式是比较简单的一种。然而,有时候越是简单的东西越容易出现问题。下面就单例设计模式详细的探讨一下。 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等。 1. 最简单的实现 首先,能够想到的最简单的实现原创 2014-12-30 17:04:51 · 1326 阅读 · 1 评论 -
Myeclipse10下搭建SSH框架(图解)Struts2.1+Spring3.0+Hibernate3.3
一、建立一个Web Project ①点击File→New→Web Project 新建一个Web工程。 ②在Project Name中输入项目名ssh,在J2EE Specification Level中选择Java EE 6.0,然后点击Finish。 二、搭建Spring3.0 ①左边显示的是生成以后的Web Project 目录结构。 选择工程名原创 2014-12-18 11:27:17 · 1721 阅读 · 1 评论 -
JAVA WEB知识总结之一--response&&request
11原创 2014-12-03 15:25:22 · 1417 阅读 · 0 评论 -
JAVA WEB知识总结之一--入门
TOMCAT目录层次结构:bin 存放启动和关闭tomcat的脚本文件conf 存放tomcat服务器的各种配置文件lib 存放tomcat服务器支撑的jar包logs 存放tomcat的日志文件temp 存放tomcat运行时产生的临时文件webapps web应用所在目录,即供外界访问的web资源的存放目录work tomcat的工作目录web应原创 2014-12-02 10:25:23 · 1673 阅读 · 0 评论 -
三层架构的原理及实现
三层架构代码的可扩展性和系统的后期维护:1、三层就很好的为我们解决了这个问题.让我们不必为了业务逻辑上的微小变化而迁至整个程序的修改,只需要修改商业逻辑层中的一个函数或一个过程;2、增强了代码的可重用性;3、便于不同层次的开发人员之间的合作,只要遵循一定的接口标准就可以进行并行开发了,最终只要将各个部分拼接到一起构成最终的应用程序。在项目开发的过程中,有时把整个项目分为原创 2014-12-01 15:29:08 · 13827 阅读 · 0 评论 -
Eclipse上搭建SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)框架-附源码
创建Struts项目 整合步骤: 1,在Eclipse中创建一个DynamicWeb Project,本文项目名称为SSH。2,添加相应的jar包,放到SSH项目下的WEB-INF/lib下。 3,建立struts配置文件。编写相应的测试代码:1,在src目录下创建相应package。2,在WebContent下创建Regi原创 2014-11-28 15:04:13 · 1725 阅读 · 0 评论 -
JAVA学习篇--JSP实现原理
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。 起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护原创 2014-11-28 10:02:06 · 1561 阅读 · 0 评论 -
工作流技术JBPM开发入门
什么是工作流? 对于工作流的官方解释在这里就不在赘述了,通俗的说呢,工作流就是对于我们业务中的流程管理! 由来: 由于我们接触的大部分OA系统中存在着大量的工作流程,而这些流程夹杂着不同领域的业务,无论是状态还是一些操作等都由我们自己维护,而一旦发生业务流程上的变化,修改源代码变成为家常便饭,整个项目举步维艰,况且需求的变更又是无处不在,业务流程的变化更是不可避免。原创 2014-11-27 16:21:40 · 1538 阅读 · 0 评论 -
JAVA--线程
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。简单来说:进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。 线程是指进程中的一个执行流程,一个程序内部的顺序控制流。一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,原创 2014-11-27 16:07:58 · 1319 阅读 · 0 评论 -
JAVA--异常
异常概念: java异常是java提供的用于处理程序中错误的一种机制。所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息原创 2014-11-27 15:21:29 · 1399 阅读 · 0 评论 -
JAVA容器
容器位于java.util包内 Java容器类库的用途是保存对象,根据数据结构不同将其划分为两个不同的概念(1) Collection,一个独立元素的序列,其中List按照元素的插入顺序保存元素,而set不能有重复元素,Queue(队列)按照先进先出(FIFO)的方式来管理数据,Stack(栈)按照后进先出(LIFO)的顺序管理数据。(2) Map,一组键值对(ke原创 2014-11-27 14:27:11 · 1814 阅读 · 0 评论