![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 89
小兀哥
变是永远不变的
展开
-
【jdk8源码】legacyMergeSort算法=插入排序+分治思想+归并优化,其实就这么简单
jdk1.7之前的排序用的就是归并排序,legacyMergeSort此方法就是1.7为了兼容之前版本的归并排序。一、简介 归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间.原创 2020-07-29 10:03:11 · 2704 阅读 · 0 评论 -
【jdk8源码】TimSort算法——从头看到脚
TimSort算法主要进行了以下优化1、利用自然升序序列2、优化的二分插入排序,先利用二分查找找到位置,再进行移位,插入数据排序3、拆分为大小查不多的run分割槽。因为将一个长序列和一个短序列进行归并排序从效率和代价的角度来看是不划算的,而两个长度均衡的序列进行归并排序时才是比较合理的也比较高效的。4、优化的归并排序,4.1 找到在左边run1中找到右边run2中的最小元素的位置x1,这样x1之前的元素就不用处理了;4.2 找到在右边run2中找到左边run1中的最大元素的位置x2,这样x2之后原创 2020-07-28 10:35:22 · 1048 阅读 · 0 评论 -
Java时时调度(一)
这几天在做项目的时候遇到一个问题,那就是如何做到时时监控。当时因为一些事情没有做。后来换了一个项目,关于支付系统中的对账,要做时时对账,呵呵,出来混总是要还的。今天我们就来看一个小例子来实现时时调度。 这样我们通过ScheduledExecutorService 类,就实现了时时调度,至于它的运行机理,还有解析等,我会在下篇博客中给大家分享。原创 2015-12-29 14:56:01 · 914 阅读 · 5 评论 -
Java时时调度(二)
今天,我们接着上篇文章,继续来说我们的时时调度。前两个例子我们调用的方法都是没有返回值得,可是实际应用中,一般的方法都是有返回值得,我们这次来修改一下,看看有返回值得方法如何做到时时调度。 关于时时调度,我们现在可以时时或定时调用任意的方法,但是有一个问题,那就是在调用有返回值得方法时,我们只能延迟调用,却不能周期性的调用。对于这点,我们会在以后的学习过程中,采用其他方式解决。原创 2015-12-30 13:09:24 · 885 阅读 · 3 评论 -
java封装导出Excel
最近做项目的过程中需要实现导出excel,他们有已经写好的实现,但是只是针对他们业务逻辑的,所以我就想能不能封装一个通用的方法,于是找出之前用过的导出方法,然后照着封装了一个,还可以。但是两个方法也有不同,一个用的是WritableWorkbook(JXL),另一个用的是HSSFWorkbook(POI)。我们先来看看两者有什么关系。原创 2016-01-25 09:17:40 · 4268 阅读 · 11 评论 -
java封装导出excel之——优化
上次,我们说道了如何使用HSSFWorkbook(POI)实现导出excel的功能。而且我们也已经实现了。但是,我们发现,当我们导出几万设置几十万的数据时,就会很慢,而且还会造成内存溢出的问题。如果经常下载大量数据,还会占用服务器上的存储空间。今天,我们来优化一下我们的导出excel。 这里我们只是将大数据进行了切割,转而变成处理小数据,这只是做了一部分的优化处理,希望大家能有更好的优化方法。原创 2016-02-03 16:55:38 · 4197 阅读 · 6 评论 -
String.format参加字符串拼接大比拼
最近在项目中见到一个比较特别的代码,因为之前没见过,可能是孤陋寡闻了。我们平时用的最简单的字符串拼接就是用“+”号连接起来,要么我们就实例化一个StringBuilder或StringBuffer,然后拼接字符串。可是我见到的居然是用String.format将字符串拼起来的。那么我们就来看看到底是怎么回事吧。原创 2016-07-25 10:58:10 · 16153 阅读 · 7 评论 -
用索引来实现幂等
随着大数据的到来,分布式处理变得越来越火,而且分布式中的一致性事务又是重中之重。当然我们今天的重点不在于介绍如何保证分布式事务中的一致性,而是在保证事务一致性的过程中会出现一系列的补偿机制,这就涉及到了幂等。接下来让我们一起去看一下吧。 我们了解了索引之后就能实现幂等了,从而可以避免重复插入。这在电商或者其他的项目中,处理重复的订单就简单多了。当然,这只是其中的一种方法,其他的方法以后遇到再与大家分享。原创 2016-06-17 11:25:37 · 1909 阅读 · 1 评论 -
抽丝剥茧Reactor模式
今天在看书的时候看到了一个新的设计模式——Reactor模式,这个模式是出现在NIO中,至于这到底是个什么模式,今天我们来细说一下。 reactor模式是javaNIO非堵塞技术的实现原理,我们不仅要知道其原理流程,还要知道其代码实现,当然这个reactor模式不仅仅在NIO中实现,而且在redies等其他地方也出现过,说明这个模式还是比较实用的,尤其是在多线程高并发的情况下使用。原创 2016-11-03 10:31:53 · 42824 阅读 · 3 评论 -
多线程为什么要用ConcurrentHashMap
上次我们说了一下项目中经常会出现的死锁问题,今天我们要说的是关于集合的问题,实际上跟锁也有一定的关系,让我们来一起看看吧。 这个类其实在我们项目中的缓存使用到了,利用ConcurrentHashMap来存放一些常用的信息,由于是在并发的情况下使用,考虑到性能的问题,优先选用ConcurrentHashMap类。不过我建议大家还是要多看看源码,从中会受益很多。原创 2016-10-25 18:45:59 · 2780 阅读 · 4 评论 -
多线程——临界区-锁
今天,我们接着上次说的,来继续回顾一下多线程的基础—临界区和锁····· 今天我们主要是通过临界区的说明,来引出锁的一些问题。我们要知道死锁的危险始终存在,但是我们应该尽量减少这种危害存在的范围,多线程是一把双刃剑,有了效率的提高当然就有死锁的危险。所以我们要尽量多了解这些方面的知识,让自己少在这些地方踩坑。原创 2017-06-30 22:02:04 · 1415 阅读 · 0 评论 -
多线程——java线程池简介
上次我们回忆了多线程的基础概念,今天,我们来看看Java中对线程池的使用。一、线程池1、为什么需要 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每 ········· 今天我们简单了解了一下为什么要用线程池,以及线程池的一些类型和使用,下次我们将继续深入学习线程池的原理。原创 2017-07-31 23:22:31 · 639 阅读 · 0 评论 -
多线程——Java线程池原理深入
上次我们简单了解了一下什么是线程池以及Java中几种类型的线程池,今天我们来深入剖析一下线程池的原理。1、构造 1. 线程池管理器(ThreadPoolManager):用于创建并管理线程池 ············· 通过这次学习,我们不仅知道了线程池是如何管理线程,而且还了解了线程多种状态之间的转换,这样更加便于我们对线程池的理解。之后,我们还将继续学习关原创 2017-07-31 23:23:32 · 3227 阅读 · 0 评论 -
多线程——同步-异步-阻塞-非阻塞
呵呵,好久没写博客了,今天让我们来回顾一下多线程的一些基础知识。一、同步和异步 1、同步(synchronous)所谓同步,就是············· 总之,我们只要知道阻塞和非阻塞是做事情时的状态,是针对请求者来说的,而同步和异步是消息通信的机制,是针对被请求者来说的···········未完待续原创 2017-06-30 22:01:28 · 949 阅读 · 0 评论 -
多线程——并发锁的集结号
上次我们说了一下多线程的管理,今天我们来看一下多线程的锁。1、不同的加锁方式类锁:在代码中的方法上加了static和synchronized的锁,或者synchronized(xxx.class)的代码段对象锁:在代码中的方法上加了synchronized的锁,或者synchronized(this)的代码段···············今天我们总结了一下多线程中的锁,以后我们会继续分享关于锁的学习。原创 2017-08-27 22:28:42 · 791 阅读 · 2 评论 -
JVM——深入解析原理和运行机制(一)类加载过程
       隔了好久终于把这篇文章补上了,最近在看《深入理解Java虚拟机》,一本很不错的书,必须值得一看。        由于本人对Java类的加载过程一直是一知半解,所以优先看了一下原创 2017-09-28 21:41:46 · 903 阅读 · 1 评论 -
JVM——深入解析原理和运行机制(一)类加载器
待定原创 2017-09-28 21:42:11 · 581 阅读 · 1 评论 -
java学习——发送激活邮件-就这么简单
做完DRP分销商管理的项目后,我开始了网上商城的项目。这是一个典型的商业式网站开发,类似于淘宝,有购物车,可支付等。我们在注册时通常需要填写邮箱,然后完成激活以后才能够登录使用。那么自动发送激活邮件是怎么做到的呢?今天我们就来学习一下使用javaMail完成邮件发送。原创 2015-10-30 17:21:57 · 2844 阅读 · 11 评论 -
java学习——apache commons fileupload实现上传
在实际工作中,我们总是会使用到上传图片的功能,至于java如何实现图片的上传,我们没必要去自己写一套上传的代码,因为上传的技术已经相当成熟,我们只要从网上找一个例子,调试好,然后集成到自己的项目中就行了,非常方便。那么今天,我就跟大家分享一下我通过apache commons fileupload实现的上传。原创 2015-10-12 16:24:15 · 872 阅读 · 7 评论 -
java学习总结——你的前世今生
总结:无论java还是.Net,他们都是编程语言的一种,编程的关键不是语言,而是思想,一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。所以,让我们去学习语言中的思想,让我们去掌握编程的灵魂。原创 2015-04-01 07:56:58 · 1576 阅读 · 15 评论 -
java学习——异常处理
Java异常处理的目的是提高程序的健壮性,是Java语言的一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护。而且更重要的是,java处理异常的这种思想特别值得我们学习,我们一定要有长远的目光,具有全局观,将未来要发生的错误扼杀在摇篮之中。当然,冰冻三尺非一日之寒,我们还需要更加努力的学习。原创 2015-05-29 08:01:15 · 1218 阅读 · 16 评论 -
J2EE是什么(一)
本文简单的介绍了一下J2EE的一些基本知识,下次我们将继续学习J2EE的架构以及API等其他知识。也许我们现在对这些东西都不是很熟悉,但是随着我们的学习深入,这些东西都会理解的。原创 2015-06-19 07:57:32 · 54772 阅读 · 12 评论 -
J2EE是什么(二)
经过本次学习,我们知道了J2EE的整体架构以及一些核心的组件,更加理解了其伸缩性、灵活性和易维护性,这对我们以后的学习会有很大的帮助.当然,我们学过了这些基本的概念之后,最主要的还是要在实际运用中去体会,去总结,然后再返回来看这些东西,我们就会有很大的收获。这就是一个学习的过程,加油。原创 2015-06-19 07:58:56 · 15902 阅读 · 10 评论 -
Java学习——何为JNDI
曾记得在做机房收费系统的时候就接触到了API,由于它的功能很强大,但是自己对它却不怎么了解,所以当时是又爱又怕。如今,一路走来才明白,其实它就是一组接口。只要我们去了解它就会发现,它其实也没想的那么可怕。今天我们来看一下java中的接口——JNDI。概念 Java命名和目录接口(Java Naming and Directory Interface,JNDI)是用于从Java应用程序中访问名称原创 2015-06-27 07:51:31 · 1424 阅读 · 8 评论 -
Java学习——传说中的13个规范
早就听说J2EE有十三个规范,可是看完视频我都没有发现有什么规范,这就让我纳闷了,都说学习java就是学习十三个规范,可是它到底是什么呢? 原来十三个规范就是十三个API文档,视频里讲到的都是属于API文档的知识。那么,让我们一起来了解一下这传说中的十三个规范吧。原创 2015-07-15 07:58:15 · 8536 阅读 · 14 评论 -
DRP问题系列——The Network Adapter could not establish the connection
刚解决完上一个问题之后,又出现一个新的问题,人生总有太多的不如意啊。先让我们看看问题吧1、问题1 我们一定不要被它的样子给吓到,仔细阅读我们就会发现,其实它就是没有连上数据库,呵呵,够简单吧,那么让我们来看看它到底是哪里出问题了。2、开始解决 我们遇到问题后,肯定是要上网找的,因为70%的问题在网上都有答案,如果没有,那就太好了,你懂的。 1原创 2015-08-02 08:07:04 · 7499 阅读 · 9 评论 -
Java学习——Servlet是什么
我们在学习了J2EE的十三个规范之后,只是对他们有了一个简单的认识,而接下来需要我们做的就是一个个研究,进行深入学习。在十三个规范中,比较常用的有JSP,Servlet,EJB,JNDI等,那么今天我们就来介绍一下Servlet。1、概念 一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程原创 2015-08-03 07:42:01 · 6841 阅读 · 12 评论 -
java学习——Jstl标签库大全
我们接着之前介绍的 Java学习——JSTL标签与EL表达式之间的微妙关系具体介绍一下jstl的使用。一、环境设置1、相应的jar包下载java开发jstl.jar java开发standard.jar 2、引入标签库 在jsp文件的顶部加入以下内容:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ ta原创 2015-10-17 11:12:28 · 4261 阅读 · 11 评论 -
DRP问题系列——Unhandled event loop exception
接着之前的DRP项目来说,当我们复制一个项目修改版本之后,总会出现这个问题。在网上查了很多,但是很难得到想要的结果。大概知道这是由于工作空间导致的,可是就是不知道该怎么解决,而且这个问题导致项目不能发布到tomcat上。所以很让人头疼,今天我们就来处理一下这个问题。原创 2015-09-29 08:26:13 · 1656 阅读 · 14 评论 -
Java学习——JSTL标签与EL表达式之间的微妙关系
很高兴,今天能和大家分享刚学的一些新知识。我们在java开发过程中经常会在jsp中嵌入一些java代码,比如<%=request.getParameter("id")%>,在了解java代码的人员看来,这很简单,可是对于美工或者前台不懂java代码的人员,这就是个头疼事儿了。那么今天我们就来解决一下这个问题。一、EL表达式1、EL相关概念 JSTL一般要配合EL表达式一起使用,来实原创 2015-10-16 20:58:40 · 18449 阅读 · 41 评论 -
VS发布网站后的文件夹为空
我们做.NET的项目最常用的就是VS,当我们编码完成之后,需要本地发布,测试成功之后,在发布到服务器上。这里我们介绍一下如何在本地发布。 不管在什么时候我们都会遇到各种各样的问题,可是不管什么样的问题,只要我们去剖析,去解决,这些就都不是问题。而且也正是这些问题才加快了我们的成长,我们需要总结并反思这些问题,这样才能在出现类似问题的时候不会手足无措。原创 2015-09-16 08:03:48 · 4372 阅读 · 13 评论 -
java学习——代理模式之动静PK
由于本人之前学习过代理模式,因此在这里不在过多的对代理模式的基础知识讲解,主要说一说代理模式的应用,以及动态代理和静态代理都是什么。而且AOP的原理就是java的动态代理机制,所以本篇博客就是以代理形式给大家介绍一下java的动态机制。以后我们在学习Spring容器的时候再做详细学习。原创 2015-10-20 16:54:57 · 880 阅读 · 11 评论 -
java学习——XML文件导入
刚学习java不久,在做DRP分销商管理这个项目中,发现很多新东西,需要我们不断总结。今天我们就来介绍一下导入XML文件。 在实际应用中,导入是一项很重要的功能,一般来说我们常用的是导入Excel,Word等,但是今天我们要导入的是XML文件,因为XML是一种纯文本文件,具有很好的兼容性和可扩展性,在数据传输和共享的时候更具有通用性。1、需要导入的XML文件原创 2015-10-06 14:30:33 · 5181 阅读 · 6 评论 -
java学习——架构的设计是项目的核心
我们都知道,在实际开发中,每个项目都有它自己的架构。这就好比我们要盖房子了,是盖四合院呢还是盖高楼大厦呢,首先我们需要设计出房屋的架构,而房屋的架构也决定了房屋的稳定性以及实用性。联系到我们开发中,一个项目的灵活性也就是由它的架构决定的,可见,架构对我们项目开发的重要性。那么今天就让我们来聊聊java开发中常用的集中模型。一、三种模型1、简单-Model1 调用关系图为: 此模原创 2015-10-08 16:06:22 · 3115 阅读 · 7 评论 -
Java学习——String变量中的双胞胎
我们了解了StringBuffer和StringBuilder的区别就在于线程问题,当然,我们要根据我们的实际情况来选择适用的变量,这样我们才能既保证我们系统的安全性,又能提高系统的性能。原创 2015-10-11 16:17:34 · 791 阅读 · 5 评论 -
java学习——品尝OO的味道(一)
学完java的面向对象之后,感觉又被洗礼了一次。在学C++的时候,对这些东西只是有一个浅显的认识,而现在,虽然认识的不是很深刻,但是感觉更加的熟悉了,而且有些东西也能慢慢理解了。 世界上所有的东西都可以看做一个对象,所以我们正处在一个面向对象的世界里,面向对象的思想也就无处不在。也正是因为这样,我们必须学会用面向对象的思想来处理问题,通过面向对象,我们只要了解对象可以干什么就行,而不必去了解对象具体的怎么干,因此,提高了我们的工作效率,使我们的软件具有良好的易扩展性,可维护性等,同时也可以避免原创 2015-03-25 07:57:38 · 1802 阅读 · 20 评论