
A(1):java基础
文章平均质量分 73
愚公要移山
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何优雅地关闭JVM?看看钩子函数如何一步实现
前言1、基本概述程序的启动很简单,启动的时候通常会做一些预加载资源的操作。但是有时候关闭的时候,启动的时候预加载的资源并没有完全清理干净,因此可以使用钩子函数来完成。2、JVM关闭的场景分类直接看一张图吧,本图来自博客园的BarryWang,特在此说明。从上面可以看到,JVM关闭主要分为了三类,第一种是正常的关闭,第二种是异常关闭的情况,第三种是强制关闭的情况。对于前两种方式我们可以使用钩子函数优雅的关闭,但是强制关闭的时候钩子函数并不起作用。有了这些概念,我们直接使用一个案例进行演示,再进行原创 2021-01-19 10:38:13 · 2811 阅读 · 0 评论 -
文件目录的增删改操作?java如何实时监控?
前言有时候你可能有个疑问,IDE总是可以检测到外部文件是否发生了变化,比如你在某个类里面加了一些代码,这时候的IDE就会弹出一个框说你做了更改。再或者是某个文件夹下的文件发生了改变,比如新建了一个或者是删除了一个等等。这时候我们的IDE依然可以检测到。这个功能到底是如何实现的呢?这篇文章主要是研究NIO的其中一个类,叫做WatchService。也有一些其他的方式可以轻松地实现监控文件夹的功能,比如说java轮询的方式,或者是common-io的方式,我会慢慢比较。OK,我们直接来看一下简单例子如原创 2021-01-18 13:36:24 · 4061 阅读 · 1 评论 -
java如何高效地读取一个超大文件?(四种方式分析对比)
前言 我最近在优化我的PDF转word的开源小工具,有时候会遇到一个问题,就是如果我的PDF文件比较大,几百兆,如何更快更节省内存的读取它。于是我分析对比了四种常见的读取文件的方式,并使用javaVisualVM工具进行了分析。最后的出的结论是commons-io时间和空间都更加的高效。研究分析依然来自哪位baeldung国外大佬。下面我会给出几种常见的读取大文件的方式。读取大文件的四种方式 首先我自己在本地压缩了一个文件夹,大概500M左右。虽然不是很大但是,相对还可以。方法1:Guava读取.原创 2021-01-15 11:11:23 · 9260 阅读 · 2 评论 -
Java中压缩集合,你都知道哪几种方式?
前言这个问题算是开发当中偶尔会遇到的一个小问题,比如如何将两个集合压缩成为一个逻辑集合。如果你不理解,我们可以看一个简单的例子,去说明什么是压缩集合。本文文章不长,但是还算是比较实用的小技巧。主要内容来源于国外小哥Baeldung的博客:下面给出个地址https://www.baeldung.com/java-collections-zip这位大佬虽然写的很详细,但是有一些细节小问题,我在此基础之上,实地验证了一遍,发现有几个坑,不过已经填完了。案例解释什么是压缩集合现在有两个集合:name原创 2021-01-14 10:48:48 · 5357 阅读 · 0 评论 -
你了解java中的几种编码方式?解决乱码问题可能并不麻烦
前言 编码的转换通常在IO机制中使用,一个好的编码可以为我们节省很多空间,在某种程度上提高我们应用的效率。由于之前就知道String中的转换方式,还有一些工具类,因此今天就好好的整理一下java中jdk提供的几种转换方式,希望对你有帮助。一、编码转换原理 1、为什么需要编码我们知道计算机存储信息的最小单位是一个字节8位,能够表示256个字符。这对于早起的英文来说足够了。即使是加上一些常见符号也足够。于是在1965年美国制定了ASCII编码,主要用于英语和西欧语言,一开始128个,后来加到了256。原创 2020-12-31 17:37:12 · 11100 阅读 · 0 评论 -
还在用for循环遍历元素?试试for-each,它不香吗?
本文基于《Effective java》第58条在此基础之上加入了自己的理解。for循环是平时写代码用的最多的,但是之前看《Effective java》,大佬在某些场景写并不推荐。结合着自己之前刷算法题的经历,受益匪浅。一、for循环的缺点 在以往遍历元素的时候,我们通常采用以下的形式:public class Main { public static void main(String[] args) .原创 2020-12-28 15:56:59 · 10727 阅读 · 0 评论 -
我在一个构造方法中写了30个参数,老板看了想骂人
本文收录于《愚公要移山》的个人博客,地址是www.javachat.cc本文基于《Effective Java》一书中的第二条;前言 一般我们写参数如果写个一两个,那就可以了,如果写七八个,那就有点难受了。如果写十几个?尼玛,难受,我要去缓缓。于是乎,一种新的方法策略运用而生。那就是builder模式,在构造方法的参数过多时,可以方便的进行创建一个类对象。所以本文的中心主旨一句话总结:当构造方法的参数过多时,推荐使用builder模式既然推荐使用builder模式,那我们一个一个来,分析一下.原创 2020-12-26 15:06:53 · 10782 阅读 · 2 评论 -
高薪必备:如何实现带有过期时间的LRU?(java版)
在很早之前学操作系统的时候见过这个算法,后来见到的越来越多,以至于刷面经的时候也看到了,总结一下:一、什么是LRULRU全称是Least Recently Used,即最近最久未使用的意思。也就是说:如果一个数据在最近一段时间没有被使用,将来被使用的机会也比较小。通常的使用场景就是缓存,比如说操作系统中的页面置换算法。实现的方案有很多,我看了很多博客,大多是给了四五种。这里为了简洁,只给出一种,是带有过期时间的。其他的实现类似,就交给聪明的你吧!!解决方案:利用链表加HashMap每次来一个新数原创 2020-05-14 10:09:17 · 14250 阅读 · 2 评论 -
你知道java反射机制中class.forName和classloader的区别吗?
前两天头条有朋友留言说使用class.forName找不到类,可以使用classloader加载。趁此机会总结一下,正好看到面试中还经常问到。一、类加载机制上面两种加载类的方式说到底还是为了加载一个java类,因此需要先对类加载的过程进行一个简单的了解。我们写好的程序,然后run运行,过程可以直接看下面这张图:往细了看大致分为5个阶段:(1)加载:java类运行时候会生成一个class字...原创 2020-01-05 13:53:21 · 6088 阅读 · 0 评论 -
java8新特性Stream详解
java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream。如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中。这篇文章由简入繁逐步介绍Stream。一、Stream是什么从名字来看,Stream就是一个流,他的主要作用就是对集合数据进行查找过滤等操作。有点类似于SQL的数据库操作。一句话来解释就是一种高效且易用的数据处理方式。大数据领...原创 2019-12-15 18:03:04 · 735 阅读 · 0 评论 -
java8的方法引用详解(让你的代码看起来高大上)
在上一篇文章中曾经介绍到了java8中的Lambda表达式,这篇文章是基于Lambda表达式来叙述的。主要讲解方法引用。在此之前还希望你能够了解一下函数式接口的使用。一、什么是方法引用在Lambda表达式中,将其划分了几块。这一行就是lambda表达式。() -> System.out.println(“使用Lambda表达式”);下面我们对lambda的格式进行一个介绍:(1)左边括...原创 2019-12-13 14:49:41 · 733 阅读 · 0 评论 -
java8新特性-Lambda表达式的详解(从0开始)
这几天复习了java8的一些新特性,作为一个从java5以来最具革命性的版本,一直没有来得及总结。本系列文章主要是从《java8实战》总结的。这是第一篇文章主要介绍java8的lambda。一、为什么要使用lambda表达式如果之前见到的话都会觉得,lambda就是一个匿名函数,我们可以这样来理解就好了,Lambda表达式就是为了使得我们的代码更加的简洁。如何简洁呢?我们直接举个例子来看看:...原创 2019-12-12 19:43:47 · 1149 阅读 · 2 评论 -
13、java中==和equals的区别
想到你应该无数次看到过这个问题了,也可能你已经看过无数篇文章了,如果你还是一头雾水或者是不理解,那试着看看这篇文章,相信你一定能看懂。一、理解”==“的含义在java中,主要有两个作用。1、基础数据类型:比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。2、引用数据类型:比较的是引用的地址是否相同,比如说新建了两个User对象,比较的是两个User的地址是否一样...原创 2019-12-09 19:50:04 · 694 阅读 · 2 评论 -
12、java中的异常体系
java的异常是一个面试高频问题,而且在学习java的时候也是一个基础而且重要的问题。这篇文章结合着面试问题对java的异常体系进行一个梳理。1、体系梳理Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: Error 和 Exception。其中 Error 用来表示 JVM 无法处理的错误,Exception 又分为两种:(1)受检异常 :需要用 try…catch… 语...原创 2019-11-26 11:19:27 · 312 阅读 · 0 评论 -
java访问权限控制
一:为什么需要权限控制控制对类的成员的访问权限控制有两个原因:1、为了使用户不会触碰他们不应该触碰到的不分,这部分对于类内部的操作是必要的,但是他们并不属于客户端程序员所需接口的一部分。2、是为了让类库设计者可以更改类的内部的工作方式,而不必担心这样做会对客户端程序员长生重大的影响。现在抛出一个问题:我们的程序员再开发完代码之后,发现我们写的代码有更好的实现方式,但是之前写的代...原创 2018-09-16 18:46:20 · 659 阅读 · 0 评论 -
面试官:手写一个快速排序,并对其改进
快速排序算法算是所有排序算法中知名度最高的了,应用也超级广泛,正是由于其良好的性能才独得恩宠。今天就来好好的认识一下快速排序。一、原理快速排序一般都是使用递归来实现的,采用的是“分而治之”的思想。一组待排数据,选择一个基准元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,然后对这两部分重复同样的操作。上面的过程你会发现,这一趟扫描可以增大元素之间的移...原创 2019-09-16 13:19:25 · 340 阅读 · 0 评论 -
五分钟学会java中的基础类型封装类
在刚刚学习java的时候,老师不止一次的说过java是一种面向对象的语言,万物皆对象。对于java中的基础数据类型,由于为了符合java中面向对象的特点,同样也有其封装类。这篇文章对其有一个认识。一、基本认识其实在jdk1.5之前,在基础数据类型与其封装器之间的转化必须手动进行,但是从jdk1.5之后,由于提供了自动装箱的机制,因此我们不再手动进行了。装箱:基础类型转封装类型。Intege...原创 2019-09-19 10:05:17 · 194 阅读 · 0 评论 -
10、面试官:java中的编码格式转化都有哪几种方式?(中兴面试题)
昨天晚上在微信上有人跟我说,他去中兴面试,面试官问了一个很变态的问题,问Java中的编码格式转换都有哪几种方式?由于之前就知道String中的转换方式,还有一些工具类,因此今天就好好的整理一下java中jdk提供的几种转换方式,希望在今年的面试中对你有帮助。一、编码转换原理1、为什么需要编码很早之前计算机存储的就只是英文,一共26个英文字母。而且计算机存储信息的最小单位是一个字节8位,能够表...原创 2019-09-20 13:27:50 · 359 阅读 · 0 评论 -
面试官:从源码分析一下TreeSet(基于jdk1.8)
这个TreeSet其实和HashSet类似。HashSet底层是通过HashMap实现的,TreeSet其实底层也是通过TreeMap实现的。这篇文章就通过源码来分析一下TreeSet。一、简介TreeSet的作用是保存无重复的数据,不过还对这些数据进行了排序。TreeMap的底层是通过红黑树实现的,所以TreeSet底层也是通过红黑树实现的。TreeSet最主要的特点就是对元素进行了排序。我...原创 2019-09-27 10:23:20 · 249 阅读 · 0 评论 -
如何使用java语言计算一个正整数的平方根呢(自定义Sqrt函数)?
今天的这篇文章是我在刷算法题的时候遇到的,最简单的方法是直接调用java里面的Sqrt函数,不过有时候题目中会要求我们不能使用库函数,所以在这里我们自己定义Sqrt方法。最常见的思路有两种,第一种是二分法,第二种是牛顿的微积分思想。没错,想当年大学时候学了很久很痛苦的微积分,被我第一次派上用场了。对于这两种方法我们一个一个看。一、二分法二分法的思想很简单,就是从0到N不断的去缩小范围来找一个...原创 2019-10-07 15:27:51 · 2326 阅读 · 0 评论 -
8、聊聊java中的进制问题
java中的进制也算是面试中经常会遇到的一个知识点,不管是计算问题,还是涉及到的基础知识。因此这篇文章对其进行一个整理。主要参考了慕课网上的视频,特在此说明。不管是你初学者还是工作中,又或者是找工作中。本文都能对你有所帮助。本篇文章主要解决以下几个问题:1、二进制的历史2、java中的进制转换3、java中的移位运算4、数据大小端问题5、进制在java中的使用下面我们就针对这些问题,...原创 2019-09-04 12:18:34 · 615 阅读 · 0 评论 -
java从小白到架构师学习路线
前言“学习真的是一个循序渐进的过程,也是一件需要坚持的事情。对于这篇文章,不同阶段的人可能有不同的理解,所以我花了几天的时间整理了一套学习路线提供给大家,以供参考。下面的这个学习路线适合刚刚学习了Java还没有深入、或者是想进一步提高的同学”我大概把学习流程分了三个阶段。第一阶段:基础阶段基础阶段我主要分为了四大块内容:一、数据结构与算法1、简单的数据结构(1)基础概念(2)数组...原创 2019-08-06 12:09:55 · 896 阅读 · 0 评论 -
String、StringBuilder、StringBuffer三者的区别
之前曾经写了一篇《String类型为什么设计成不可变的》,然后在评论区有人问String、StringBuilder、StringBuffer三者的区别,于是终于把这篇文章补了进来,这篇文章就分析一下这三个类。一、认识StringString类型是不可变类型,为了保持文章的独立性,还是拿出来这个老掉牙的例子,public class Test2 { public static voi...原创 2019-08-05 15:47:06 · 177 阅读 · 0 评论 -
继承基础
一:为什么要有继承我们一直都在想,如何去使用之前已经写好的代码,有一个简单的方式,那就是把之前写好的代码复制粘贴过来,但是这样做却带来了一定的弊端。因此,有两种方式可以解决这个问题。第一种:我们可以创建一个新的类来复用代码,而不用重头编写,这个方法的诀窍在于使用类而不破坏现有的程序代码,。第二种:我们也可以按照现有的类的类型来创建一个新的类。而第一种方式就是组合方式,第二种方式就是...原创 2018-09-18 18:10:45 · 231 阅读 · 0 评论 -
java中的注释文档
在前两次的博客中,首先介绍了java是什么?第二部就是怎么创建,第三步是如何保存,接下来第四步static的用法。这篇博客记录一下自己学习Java编程思想这本书第一遍的java注释文档。一、三种注释方式1、使用//的注释方式这个很简单,就是在//之后填写自己的要注释的内容,也是我自己目前最常用的一种方式,这个方式适用于2单行注释。2、使用/* 内容 */这个也很好理解,就是在内...原创 2018-09-13 11:22:13 · 1047 阅读 · 0 评论 -
对象的基础
一、java对象的认识java是基于C++的,但是相比之下,java是一种更加纯粹的面向对象的程序设计语言,我们知道每一种编程语言都有自己的操作内存中元素的方式。比如C和C++可以使用指针间接操作,也可以直接操作。但是程序员必须要知道自己所操作的元素是什么类型。但是这一切对于java都得到了简化。java将一切都视为对象。 一、需要说明的是,真正操作对象的其实是对象的...原创 2018-09-11 21:55:28 · 258 阅读 · 0 评论 -
A(1)java集合类总结(2)ArrayList
前言上篇博客介绍了一个集合框架中的根Collection。这篇开始介绍ArrayList。先给出继承关系图1 ArrayList介绍1.1 ArrayList是什么?rrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: ArrayList 是一个数组队列,相当于动态数组,动态的增加和减少元素 实现了ICollecti...原创 2018-08-04 15:39:37 · 240 阅读 · 0 评论 -
面试必问:java中String对象为什么要设计成不可变的呢?
这几天在各大平台上都看到过这样一些帖子,全都是关于String类型对象不可变的问题,当然现在也是找工作的准备时期,因此花了一部分时间对其进行整理一下。想要完全了解String,在这里我们需要解决以下几个问题(1)什么是不可变对象?(2)String如何被设计成不可变对象的?(3)有什么办法能够改变String?(4)JAVA语言为什么把String类型设计成不可变?带着这些问题就可以开...原创 2019-07-27 14:40:08 · 502 阅读 · 0 评论 -
7、深入分析java中的泛型机制
想要学好java,泛型机制是一个必须要掌握的知识点,无奈很多书上写的不是很啰嗦,就是概念太多难以理解,因此参考了很多篇文章,对其进行整理了一下,希望对你有所帮助。一、认识泛型1、为什么要引入泛型?泛型其实是在jdk1.5中才添加的。在jdk1.5之前我们要创建一个容器对象,是这样往里面添加内容的。List list = new ArrayList();list.add("我是字符串");...原创 2019-07-30 22:12:37 · 428 阅读 · 0 评论 -
深入分析java中的反射机制
对于java中的反射机制,面试的时候也是会经常的提问到,在网上看了很多文章也查了很多资料,于是花了一部分时间整理了一下,也算是查漏补缺吧。这篇文章前面部分我是整理的之前在慕课网看过的视频教程案例,不喜勿喷。一、反射概念在正式讲解反射之前,为了很好的去理解它我们先从一个案例说起。请看下面的代码:public class User { private String name; private...原创 2019-07-29 20:12:46 · 243 阅读 · 0 评论 -
深入分析java中的多态原理(jvm角度分析)
对于java中多态概念的理解一直是面试常问的问题,所以今天花了一些时间好好地整理了一下,力求从java虚拟机的角度来分析和理解多态。一、认识多态1、方法调用在Java中,方法调用有两类,动态方法调用与静态方法调用。(1)静态方法调用是指对于类的静态方法的调用方式,是在编译时刻就已经确定好具体调用方法的情况,是静态绑定的。(2)动态方法调用需要有方法调用所作用的对象,是在调用的时候才确定具...原创 2019-07-24 17:10:36 · 1220 阅读 · 0 评论 -
java中的注解,使用、面试再也不用愁了
这篇文章开始讲解java中的注解,在平时的开发当中我相信你或多或少的接触过注解。比如你可能都见过@override,它代表的就是一个注解。但是,为了更加清晰的去介绍注解,我还是先给出一个例子,让你能够方便的理解。一、认识注解在平时不知道我们是否都用过便利贴,在一张纸上写好几句话,贴在我们需要的地方。就是下面这个;还有一个情况,大多数人都叫我们程序猿(钱多话少死得快),这也是给我们贴了一个标...原创 2019-06-24 18:42:14 · 4048 阅读 · 0 评论 -
java创建对象的过程详解(从内存角度分析)
说在前面的几句废话前几天我的文章一直没有更新,大概断了4天左右,因为外出有事,所以给耽搁了,有朋友建议,我可以集中花几天,每天只写文章,这样以后觉得哪里不妥还可以修改,觉得言之有理就果断采纳了,前一个月开始做自媒体写文章,这段时间有很多人给我提出了宝贵的意见,真的感谢大家的支持。同时,今天也是建党节,作为一个爱国青年,真心祝愿祖国越来越好。废话可以不看,下面就开始今天的文章。java对象的...原创 2019-07-01 15:43:49 · 3822 阅读 · 7 评论 -
java中出现的一个递归的问题
例子我们知道Java中每一个类都是继承自Object,容器类也不例外。Object有toString方法,那么容器类也就拥有。先看下面一个例子。作用是:创建一个容器类,并通过toString方法打印出容器内部的子类。package com.test;import java.util.ArrayList;import java.util.List;public class Str...原创 2018-10-22 09:09:43 · 1028 阅读 · 0 评论 -
方法重载与重写
我们在平时开发的时候经常会遇见这样一个问题,方法的重载和重写。有时候经常搞混,这篇文章就是为了很好的去整理区分一下。一个类中,可以有很多的构造方法,而且名字相同都是类名,其实这些方法就已经构成了重载。也就是说,在一个类中,可以有很多名字相同的不同方法。现在一个问题来了,就是java是如何区分这些方法的呢?方法重载其实区分重载,有一个很简便的方法,那就是每一个方法有一个独一无二的参数列表...原创 2018-09-14 16:53:57 · 491 阅读 · 0 评论