
Java
文章平均质量分 63
feigeswjtu
这个作者很懒,什么都没留下…
展开
-
如何解决SpringBoot的单测启动慢的问题
如何解决SpringBoot的单测启动慢的问题原创 2022-01-05 15:20:37 · 3490 阅读 · 1 评论 -
Spring的Bean如何进行Mock
Spring的Bean如何进行Mock。原创 2022-01-05 15:08:14 · 3519 阅读 · 0 评论 -
SpringBoot的单元测试
Spring Bean 如何写单元测试。原创 2022-01-05 14:38:34 · 730 阅读 · 0 评论 -
Java中8个基础类型以及其存储
背景作为科班出身,又写了几年的Java,被一个老弟的一个问题难住了,问: 1/10.0的小数为什么不能用二进制完整表示?思考了很久,发现自己已经把最基本的东西忘记了,这里回顾一下,最后再回答这个问题。8种基础类型首先占用空间的大小从小到大来介绍一下java的8种基础类型。类型类型说明默认值取值范围占用空间(位数)举例说明byte字节0-2^7 - 2^7-18byte b = 10;boolean布尔型falsefalse, true8bool原创 2021-01-04 16:57:35 · 418 阅读 · 0 评论 -
String, StringBuilder, StringBuffer深入解析
网上太多讲解String, StringBuilder, StringBuffer的区别了,但是大多数都浅尝而止,大多数只是提到String是字符串常量,因为它是常量,所以也是线程安全的,StringBuilder和StringBuffer的区别是后者是线程安全的,还有很多细节没有介绍到,尽自己之能补充一下。先上一张类结构图。可变性总所周知,String类是一个不可变类也就是final 符...原创 2020-05-07 15:23:30 · 263 阅读 · 0 评论 -
Java中ReentrantLock和synchronized两种锁机制比较
原文出处: https://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html 摘要新的锁定类提高了同步性 —— 但还不能现在就抛弃 synchronized。多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个转载 2018-01-12 08:37:19 · 360 阅读 · 0 评论 -
Java之常量折叠
常量折叠是Java在编译期做的一个优化,简单的来说,在编译期就把一些表达式计算好,不需要在运行时进行计算。 比如: int a = 1 + 2,经过常量折叠后就变成了int a = 3。 我们举个例子:public class Main { public static void main(String[] args) { String s1 = "a" + "b原创 2018-01-07 19:28:32 · 1706 阅读 · 2 评论 -
Java类加载机制(初始化顺序)
之前写过一篇关于Java中普通代码块和static代码块的区别,大致讲解了普通代码块和Static代码的区别,但是并没有讲它们的加载执行顺序,本章就细细的将一下类的加载机制(初始化顺序)。类生命周期类的字节码从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resoluti原创 2018-01-06 16:25:16 · 2409 阅读 · 0 评论 -
Java集合框架源码分析 - Collection接口
Collection是所有列表类容器的顶层接口,在Collection框架的位置如下图所示,没有类直接实现Collection接口的,Collection和真正的实现类中间会有其他接口或者抽象类存在,后面我们一个一个的讲。 Collection接口作为Collection框架的顶层接口,几乎声明了所有Collection型容器的所有方法,是否重复List和Set接口对它进行了补充,我们看下C原创 2018-01-31 16:28:44 · 306 阅读 · 0 评论 -
Java集合框架源码分析 - RandomAccess
在JDK的源码里有一个RandomAccess接口,这个接口没有任何方法需要实现,那么它是干什么用的呢?public interface RandomAccess {}官方文档解释如下:接口RandomAccess被List实现用来指示它们支持快速的(通常是恒定的)随机访问。此接口的主要目的是允许通用算法改变其行为,以便在应用于随机或顺序访问列表时提供良好的性能。 用于处理随机原创 2018-01-31 21:25:07 · 494 阅读 · 0 评论 -
Java中的语法糖
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。Java语法糖的种类java7(含)之前的语法糖主要包括以下语法:泛型 自动装箱和原创 2018-01-08 21:25:47 · 1252 阅读 · 0 评论 -
Java源码分析 - ThreadLocal
为什么要写这篇文章网上很多文章都在讲ThreadLocal的意义所在,然后大部分都在说ThreadLocal是为了解决线程安全而生的,旨在解决并发安全问题,这种说法是片面的,导致很多人理解不到ThreadLocal真正用途ThreadLocal是什么ThreadLocal翻译过来是线程局部变量,而不是本地线程。ThreadLocal是为了解决在一个线程中,某个或者某些资源在不同层次原创 2018-02-05 11:06:13 · 326 阅读 · 0 评论 -
Java集合框架源码分析 - 概览
概况容器,顾名思义,就是可以容纳东西的器物,在Java语言中就是可以容纳其他Java对象的对象,优点有很多:降低编程难度提高程序性能提高API间的互操作性降低学习难度降低设计和实现相关API的难度增加程序的重用性Java容器里只能放对象,对于基本类型(byte, int, long, float, double等),需要将其包装成其对象类型后(Integer, Long,原创 2018-01-29 20:38:47 · 434 阅读 · 0 评论 -
Java集合框架源码分析 - Iterable
上一篇文章我们讲了Java容器的概况包括Collection和Map框架,Collection最顶上的接口是java.lang.Iterable,Collection里的其他类和接口都是在java.util里,但是Iterable确实在java.lang下。Iterable翻译成中文就是可迭代的,就是说实现了Iterable接口的类必须是可迭代的类,Iterable声明了以下三个方法:原创 2018-01-30 16:03:33 · 278 阅读 · 0 评论 -
Java中普通代码块和static代码块的区别
Java中普通代码块和static代码块的区别。原创 2017-12-09 10:01:10 · 1570 阅读 · 0 评论 -
java语言类型
最近在看《深入理解Java虚拟机JVM高级特性与最佳实践》只是看了第一遍,这本书讲的东西都是很底层的东西,基础开发一般用不到,但是让我对Java语言有了很深刻的认识。 市面上语言被分为“解释型”和“编译型”,我们上学时学习的C/C++语言就是编译型的语言,我目前接触过的Ruby、JavaScript是解释型的语言,那么Java语言是解释型的还是编译型的呢? 说成任何一种都是很片面的,Java的执原创 2017-11-25 15:10:44 · 1138 阅读 · 0 评论 -
Thread之sleep方法
为什么要用sleep,主要是为了暂停当前线程,把cpu片段让出给其他线程,减缓当前线程的执行。 方法的定义: public static void sleep(long millis); public static native void sleep(long millis) throws InterruptedException;通过定义可以看出sleep方法是本地方法,通过系统调用暂停原创 2017-12-03 10:14:23 · 130039 阅读 · 3 评论 -
java中没有sizeof
话说java中为什么没sizeof操作符呢,那么c和c++中为什么有呢,因为c和c++需要它,而java不需要,或者说是编译器已经帮我们做了这件事情。C/C++都是比较底层的语言,为了更好的移植,很多事情都需要程序员自己处理,比如moc方法,编辑器必须知道你要申请的内存有多大,才能给分配这么大的内存,C++的new操作符稍微高级些,编译器自己做了这件事情。但是java不需要,因为java有一层原创 2015-12-27 22:10:02 · 1286 阅读 · 0 评论 -
java中==和equals的区别
就像有点java基础的程序员都知道,==和equals的区别就是前者比较引用值后者比较对象的内容。那么以下的代码输出的结果是true还是false呢?class TestValue{ int i;}public class TestMain { public static void main(String[] args) { TestValue t1 = new TestVal原创 2015-12-28 22:21:36 · 408 阅读 · 0 评论 -
接口和实现的命名方式
在看别人的spring项目的时候,发现所有的service都是一个接口和一个或者多个实现,如果说有多个实现定义一个接口,也说得过去,只有一个接口,为什么要定义成接口呢?接口(interface)和实现(Implementation)是java多态的一个实现方式,一个接口可以有多个实现,一个实现类可以实现多个接口,这个概念就不具体讲了。仔细想想,service是什么,翻译过来原创 2017-05-13 16:45:28 · 33625 阅读 · 1 评论 -
java中float/double计算丢失精度解决方案
今天线上出现了一个很奇怪的问题,业务需求是从一个服务方获取到商品的价格(元),是字符串形式,例如是String: "9.90",通过一定的方法转换为分存到数据库里却变成了989。开始怀疑是服务给的数据问题,后台写个Test测试一下,尴尬的发现是自己的基础知识太不扎实,对float/double类型的计算认知不够。测试代码如下:public class Test { public s原创 2017-06-05 20:33:27 · 7955 阅读 · 0 评论 -
spring mvc 中文乱码
工作需要,转向了java web的开发,框架还是用了spring mvc,由于是初学者,所以会遇到很多需要或许大神们很容易就解决的小问题,为了避免遗忘,会在遇到问题时记录下来,如果理解或者解释不正确,欢迎大家指正。今天遇到了一个rest接口返回String(中文乱码)的问题,controller代码如下:@RestControllerpublic class TestController {原创 2017-07-01 10:22:47 · 320 阅读 · 0 评论 -
java之hashCode()和equals()详解
背景java开发者手册里有三句关于hashCode和equals的使用规定: - 只要重写 equals,就必须重写 hashCode。 - 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法。 - 如果自定义对象做为 Map 的键,那么必须重写 hashCode 和 equals。 并且举了一个例子:原创 2017-08-08 15:01:28 · 403 阅读 · 0 评论 -
阿里巴巴Java开发手册
一、 编程规约(一)命名规约【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例: _name / __name / Object/name/nameObject / name_ / name / Object$【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意转载 2017-08-01 19:17:56 · 1198 阅读 · 0 评论 -
java包命名
为什么把包命名单独提出来呢?因为之前的命名一直是有问题的,被别人质疑了,所以这里单独提出来记录一下。 问题是关于包名里的下划线(_)是使用,如果包名的一个层级是多个单词,该不该用下划线分割呢? 答案是不能,多个单词也要使用小写命名,不能用下划线分割。 下面是摘自官方文档的一句话:Package names are written in all lower case to avoid confl原创 2017-07-28 11:30:17 · 6021 阅读 · 0 评论 -
null强制转任何类型的对象
null能强制转换为任意类型的对象。实例化的对象调用类方法是跟实例化的对象没有直接关系的,只是通过实例找到这个对象的类,进而找到类方法。原创 2017-08-20 17:46:53 · 1073 阅读 · 0 评论 -
java之Thread Dump分析
什么是Thread DumpThread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。原创 2017-08-20 23:04:25 · 5947 阅读 · 0 评论 -
Spring IO Platform介绍
为什么要用Spring IO Platform今天无意间看到了一个关键词:”Spring IO Platform”,第一直觉是不是有关于IO方面的框架或者包呢,查了一下,居然是为了解决包冲突而生的。做了半年Java Web开发,经常遇到问题,编译没有报错,启动时报一些奇奇怪怪的问题,90%的都是包冲突导致的,虽然有一些包冲突解决插件,比如”Dependency Analyzer”等,也能很容易解决,原创 2017-11-29 11:28:46 · 2715 阅读 · 0 评论 -
Java反射之查找一个类
Java里面的类型是一个引用或者一个基本类型,类、枚举、或者数组都是继承于java.lang.Object,它们和接口一样都是引用类型,对于这些类型,JVM提供了方式可以在运行中获取对象对应类型,也就是它属于哪个Class。java.lang.class也提供了创建Class和Class对应的对象的方式。本文讲一下目前有哪儿些方式可以获取到一个类(Class)。所有的反射操作的切入点都是java.l原创 2017-12-07 21:43:20 · 2214 阅读 · 0 评论 -
java的赋值
Java中变量分两种,一种是对象的引用,另一种是基本类型,对象的引用是通过操作符new出来一个对象,并且把这个对象的句柄(C++中的称呼)赋值给一个变量,基本变量就不多说了,比如int,float, char等等,下面分别解释一下引用和基本类型的赋值:引用的赋值:引用就是一个对象的别名,操作这个引用就相当于在操作这个对象,如果有两个变量T1和T2他们都是同一个类new出来的,那原创 2015-12-27 22:07:01 · 647 阅读 · 0 评论