
Java基础
文章平均质量分 79
coding_1994
来日方长
展开
-
深入理解 HashMap put 方法(JDK 8逐行剖析)
前言注意:我们今天所有的一切都是基于 JDK 8,JDK 8 的实现和 JDK 7 有重大区别。前面我们分析了 hashCode 和 hash 算法的原理,其实都是为我们解析 HashMap 做铺垫,因为 HashMap 确实比较复杂(如果你每一行代码都看的话,每个位移都纠结的话),虽然总的来说,HashMap 不过是 Node 数组加 链表和红黑树。但是里面的细节确是无比的优雅和有趣。楼主为什么选择 put 方法来讲呢?因为从楼主看来,HashMap 的精髓就在 put 方法中。HashMap转载 2021-01-16 01:20:10 · 233 阅读 · 0 评论 -
深入理解SPI机制
一、什么是SPISPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC中都使用到了SPI机制。我们先通过一个很简单的例子来看下它是怎么用的。1、小栗子首先,我们需要定义一个接口,SPIServicepackage com.viewscenes.netsupervisor.spi;转载 2020-12-21 21:47:20 · 195 阅读 · 0 评论 -
轻松学习java可重入锁(ReentrantLock)的实现原理
前言相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么实现的。如果真是这样,而且你有兴趣了解,今天我将带领你轻松的学习下java中非常重要,也非常基础的可重入锁-ReentrantLock的实现机制。听故事把知识掌握了在一个村子里面,有一口井水,水质非常的好,村民们都想打井里的水。这井只有一口,村里的人那么多,所以得出个打水的规则才行。村长绞尽脑汁,最终转载 2020-10-16 01:12:25 · 211 阅读 · 0 评论 -
Callable接口与Runnable接口对比
一般遇到这种问题,第一想法去看看jdk 的api。创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成: class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrim原创 2020-05-30 22:29:11 · 496 阅读 · 0 评论 -
高并发下接口幂等性解决方案
一、幂等性概念在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现.我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的。二、幂等性场景1、查询操作:查询一次和查询多次,在数据不变转载 2020-05-23 22:50:30 · 253 阅读 · 0 评论 -
@NotBlank注解地正确使用
@NotNull:不能为null,但可以为empty@NotEmpty:不能为null,而且长度必须大于0@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0案例:注意在使用@NotBlank等注解时,一定要和@valid一起使用,不然@NotBlank不起作用...转载 2020-03-28 23:07:56 · 1508 阅读 · 0 评论 -
Jackson 提供的注解使用说明
Jackson注解主要分成三类:一、只在序列化时生效的注解:1. @JsonPropertyOrder在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonPropertyOrder 可以指定属性在 json 字符串中的顺序。2. @JsonInclude在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonInclude 注解可...转载 2020-03-28 20:59:05 · 1615 阅读 · 1 评论 -
java读取excl文件
依赖jar包:Maven工程,在pom.xml文件中加入依赖项::<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version></dep...原创 2019-10-29 16:56:43 · 162 阅读 · 0 评论 -
java编程之怎样将Long转换成Date的日期格式
原文出自:https://zhidao.baidu.com/question/1640128368413010260.html 可以使用java中的日期工具java.text.SimpleDateFormat来格式化,一下为示例代码:1.创建java.text.SimpleDateFormat实例java.text.SimpleDateFormat sdf = new Simpl...转载 2018-11-26 21:44:30 · 5554 阅读 · 1 评论 -
Error:java: Compilation failed: internal java compiler error 解决办法
报错信息: 报错原因: 项目中Java版本不一致,可以查看项目中的jdk配置 1、查看项目的jdk(Ctrl+Alt+shift+S) File ->Project Structure->Project Settings ->Project 2、查看工程的jdk(Ctrl+Alt+shift+S) File ->Project Structure->...转载 2018-11-21 09:38:45 · 740 阅读 · 0 评论 -
什么是时间复杂度
什么是时间复杂度作为一个处在学习之路的渣渣,被一个时间复杂度的题给难倒了,然后我就思考了一下什么是时间复杂度。虽然在学校学习了了算法的课程,但是仔细一想,对于时间复杂度还真是不怎么懂。于是重新学习,记下自己的一些理解。 1.时间复杂度提到时间复杂度,第一时间想到的是算法,简单说,算法就是你解决问题的方法,而你用这个方法解决这个问题所执行的语句次数,称为语句频度或者时间频度,记为T(...转载 2018-10-06 09:21:05 · 671 阅读 · 0 评论 -
JAVA中的Random()函数
Java中存在着两种Random函数:一、java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。例子如下:package IO; import java.util.Random; pu...转载 2018-08-18 20:33:30 · 403 阅读 · 0 评论 -
什么是线程安全和线程不安全
1.可以这样理解,加锁的就是安全的,不加锁的就是不安全的(感觉比较生动,不知道对不对,望指出) 2.到底是什么意思呢?如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。好比你有两个一模一样的银行卡(账户一样,余额一样,当然现实中是没有的),假如卡上余额...转载 2018-07-22 15:57:10 · 277 阅读 · 0 评论 -
ByteBuffer学习总结
学习文档:https://zhidao.baidu.com/question/427134449349230532.html https://blog.csdn.net/z69183787/article/details/77102198/说道 ByteBuffer的缓冲区,就需要知道缓冲区的的三个状态1)capacity 即容量,也就是缓冲区...转载 2019-02-24 14:30:31 · 1146 阅读 · 0 评论 -
Java内部类和匿名内部类的用法
Java内部类和匿名内部类的用法 【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51981163一、内部类: (1)内部类的同名方法 内部类可以调用外部类的方法,如果内部类有同名方法必须使用"OuterClass.this.MethodName()"格式调用(其中Outer...转载 2018-07-22 15:13:12 · 2102 阅读 · 0 评论 -
使用ajax,Jquery,Spring Boot,MultipartFile实现文件上传功能
MultipartFile方法总结 byte[] getBytes() 返回文件的内容作为一个字节数组。 String getContentType() 返回文件的内容类型。 InputStream getInputStream() 返回InputStream读取文件的内容。 String getName() 返回...原创 2018-12-20 15:49:37 · 3006 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask
请尊重作者劳动成果,转载请标明原文链接:原文链接:http://www.cnblogs.com/dolphin0520/p/3949310.html 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线...转载 2019-01-04 22:27:47 · 126 阅读 · 0 评论 -
Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?java 代码:new Thread(new Runnable() { @Overridepublic void run() {// TODO Auto-generated method stub}}).start();那你就out太多了,new Thread的弊端如下:a. 每次...转载 2019-01-26 08:35:37 · 324 阅读 · 0 评论 -
org.apache.thrift.TApplicationException: Invalid method name问题解决
在调用Thrift接口时,报出的错误org.apache.thrift.TApplicationException:Invalid method name1.检查调用的ip和端口号是否正确。2.检查客户端和服务端采用的(Protocal)是否一致。 原文出处:点击跳转原文链接...转载 2019-02-21 16:31:18 · 4893 阅读 · 0 评论 -
java 接口方法超时异常处理 设置超时时间
使用线程池另起一个线程,可以使用 newFixedThreadPool() 也可以使用 newSingleThreadExecutor();具体的这两个线程池如何使用自行百度或者去编程思想看看。 代码如下:public class InterfaceTimeOut{ public static void main(String args[]){ fina...原创 2019-02-19 19:38:38 · 15385 阅读 · 0 评论 -
Thread类的wait(),notify(),notifyAll()接口的使用方法实战后的理解
java多线程在学习的时候感觉就那么几个类,几个方法,搞了一个生产者消费者例子就去参加校园招聘了。但真正用到后发现学的时候细节没有照顾到,有些问题也没有想过,所以书到用时方恨少。既然生产者消费者这个例子是课堂上以及部分公司的招聘题目,那么就还是用它举个例子吧,例子不在于多么高大上,能帮助真正吸收就可以。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者...原创 2019-02-19 20:02:04 · 706 阅读 · 0 评论 -
一次 java heap space 解决过程
负责一个javaweb项目,周四上午正在紧张的工作(划水),客户突然在群里喊了句正式服管理员账号登不上了。 赶紧打开网页>开启调试模式>登录,发现一个接口一直等待响应。postman掉一下,响应为空!喵喵喵,测试服试一下,接口报错 java heap space ???关于java heap space 原因请看这篇文章java 内存溢出 栈溢出的原因与排查方法 ...转载 2019-02-19 20:05:01 · 4926 阅读 · 0 评论 -
Java中TreeMap和HashMap的应用和比较
**注意:**TreeMap的写法可用于Mapreduce中reduce程序中对K,V的排序输出,K,V在输出时互换。package cn.bjut.vlsi.TreeMap;import java.util.HashMap;import java.util.Map.Entry;import java.util.Set;import java.util.TreeMap;public ...转载 2018-06-02 18:13:46 · 575 阅读 · 0 评论 -
关于forName()、newInstance()、getMethod()、getClass()等区别的简略说明
因为最近频繁用到,只能是自己查查,总结一下,方便以后利用。1、lass.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。一般的实现方式:String carClassName = "com.etc...转载 2018-07-29 16:47:53 · 1192 阅读 · 0 评论 -
Java Class对象简介
一. 反射机制概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。 反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高! ...转载 2018-07-28 16:44:20 · 584 阅读 · 0 评论 -
java中另一种遍历Map的方式: Map.Entry 和 Map.entrySet()
源网址: http://blog.csdn.net/mageshuai/article/details/3523116 今天看Think in java 的GUI这一章的时候,里面的TextArea这个例子在遍历Map时用到了Map.Entry 和 Map.entrySet() ,记得只见过Map.KeySet()和values()这两个方法,于是到API中一看,Map.entrySet()...转载 2018-06-03 12:37:21 · 1151 阅读 · 0 评论 -
HashSet,TreeSet和LinkedHashSet的区别
HashSet,TreeSet和LinkedHashSet的区别Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不 会接受这两个对象。HashSetHashSet有以下特点 不能保证元素的排列顺序,顺序有可能...转载 2018-06-03 00:19:30 · 167 阅读 · 0 评论 -
Java——HashSet和TreeSet的区别
HashSetHashSet有以下特点 不能保证元素的排列顺序,顺序有可能发生变化 不是同步的 集合元素可以是null,但只能放入一个null当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。简单的说,HashSet集合判断两个元素相等的标准是两个对...转载 2018-06-03 00:17:39 · 49970 阅读 · 4 评论 -
平衡二叉树详解(转载)
前言:本文不适合 给一组数据15分钟就能实现AVL的插入和删除操作的大牛(也请大牛不要打击小菜)本文适合,对avl还不了解,还没有亲自实现avl的插入和删除操作的同学ps,你在嘲笑楼主的题目时,你已证明了自己正在嘲笑自己的智商。我们要善于征服陌生的事物。你如果有半个小时时间就心无杂念的开始吧,建议那些读10分钟文章就心燥还是关闭浏览器吧。文章结构:什么是二叉排序树(bst)二叉排序树(Binary...转载 2018-06-02 23:45:18 · 248 阅读 · 0 评论 -
平衡二叉树详解
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来...转载 2018-06-02 22:04:41 · 161 阅读 · 0 评论 -
Map与HashMap,Hashtable,HashSet的区别
前言:最近在整理他人关于面试中,碰到的问题,这些问题基本上是不注意不深究的话,是完全不知道,因此参考他人的博客,以及自己亲自的测试,总结了这一片博客内容。HashTable和HashMap区别区别一:继承的父类不同 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。public class Hashtable<K,V&g...转载 2018-06-02 17:58:13 · 263 阅读 · 0 评论 -
深入理解ArrayList与LinkedList的区别
一、先来看看ArrayList与LinkedList 在JDK中所在的位置 从图中可以看出,ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同,(编程思想: 从中可以看出面向接口的好处, 对于不同的需求就有不同的实现!),而List接口继承了Collection接口,Collection接口又继承了Iterable接口...转载 2018-06-02 17:01:45 · 108 阅读 · 0 评论 -
response.setHeader各种用法详解
一秒刷新页面一次 response.setHeader("refresh","1");二秒跳到其他页面 response.setHeader("refresh","2;URL=otherPagename");没有缓存:?12response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control"转载 2018-05-20 14:20:16 · 5722 阅读 · 0 评论 -
FileItem类
FileItem类的常用方法 1.boolean isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。 2.String getName()。getName方法用来获得...转载 2018-05-20 13:07:05 · 455 阅读 · 0 评论 -
Java中Iterator用法整理
迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。 Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意...转载 2018-05-20 11:52:12 · 246 阅读 · 0 评论 -
JAVA – 虚函数、抽象函数、抽象类、接口
JAVA – 虚函数、抽象函数、抽象类、接口1. Java虚函数虚函数的存在是为了多态。C++中普通成员函数加上virtual关键字就成为虚函数Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数PS: 其实C++和Java在虚函数的观点大同小异,异曲同工罢了。 2. Ja...转载 2018-06-03 13:51:15 · 163 阅读 · 0 评论 -
throw和throws的区别
这两天学习java中异常的知识,以下内容全是搬运:当然,你需要明白异常在Java中式以一个对象来看待。 并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。 直接进入正题哈: 1.用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出...转载 2018-06-11 21:18:26 · 318 阅读 · 0 评论 -
Java的三种代理模式
Java的三种代理模式这篇博客是参考了其它兄弟的,自己为了方便理解,写了一个静态代理的案例。与大家分享~1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通...转载 2018-07-19 12:03:18 · 196 阅读 · 0 评论 -
Java面试题全集(下)
这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题,如果需要了解相关内容,可以参考我的另一篇文章《Java面试题集(86-115)》。此外,这篇文章还对企业应用架构、大型网站架构和应用服务器优化等内容进行了简单的探讨,这些内容相信对面试会很有帮助。...转载 2018-06-10 15:27:45 · 310 阅读 · 0 评论 -
Java面试题全集(中)
这部分主要是与Java Web和Web Service相关的面试题。96、阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。补充:Sun Microsystems公司...转载 2018-06-10 15:26:45 · 191 阅读 · 0 评论