自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

maijia0754的博客

从Java入门与精通直接到脊椎康复指南

  • 博客(147)
  • 资源 (5)
  • 收藏
  • 关注

原创 JDK1.8 ArrayDeque源码阅读

概述ArrayDeque是一个数组实现的双端队列,它不是线程安全的,并且不允许操作null值,把他当做栈使用时,要比Stack更高效,当队列使用时,要比LinkedList更高效。结构在看ArrayDeque的源码前,先要了解循环数组。如果用数组实现队列的话,可能的实现方式:当把元素入队时,tail(队尾元素的下标)加一。当出队时,head(队头元素的下标)加一。那么当队尾已经达到...

2019-01-25 19:44:38 379

原创 maven项目下的PDF文件在classpath下是乱码

在使用maven构建的项目中增加了一个pdf文件,然后访问时发现没有内容,文件被破坏解决方法:在pom文件中增加: <plugin> <artifactId>maven-resources-plugin</artifactId> <configuration&gt...

2018-12-19 18:07:25 374 1

原创 第四章、分治策略 -- 最大子数组问题

最大子数组问题最大子数组问题是寻找数组中和最大的非空连续子数组,这样的连续子数组为最大子数组。使用分治策略的求解方法首先是分解问题,把数组A[low…high]A[low…high]A[low…high]划分成两个规模尽量相等的子数组A[low...mid]A[low...mid]A[low...mid]跟A[mid+1...high]A[mid+1...high]A[mid+1...hig...

2018-11-16 16:57:23 335

原创 第三章、函数的增长 --标准记号与常用函数

单调性若m≤nm\leq nm≤n蕴含f(m)≤f(n)f(m)\leq f(n)f(m)≤f(n),则函数f(n)是单调递增的f(n)是单调递增的f(n)是单调递增的。若m≤nm\leq nm≤n蕴含f(m)≥f(n)f(m)\geq f(n)f(m)≥f(n),则函数f(n)是单调递减的f(n)是单调递减的f(n)是单调递减的。若m<nm < nm&am

2018-11-12 16:53:15 341

原创 第三章、函数的增长 -- 渐近记号

渐近记号、函数与运行时间Θ记号\Theta记号Θ记号对一个给定的函数g(n)g(n)g(n),用Θ(g(n))\Theta(g(n))Θ(g(n))来表示一下函数的集合:Θ(g(n))={f(n):存在正常量c1、c2和n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)}\Theta(g(n))=\{f(n):存在正常量c_1、c_2和n_0,\\使得对所有n\geq ...

2018-11-04 18:03:15 325

原创 第二章、思考题

答:a.插入排序的最坏时间复杂度为Θ(n2)\Theta(n^2)Θ(n2),对一个长度为kkk的子表进行排序需要最坏需要Θ(k2)\Theta(k^2)Θ(k2)时间,那么排序n/kn/kn/k个子表需要Θ(nk)\Theta(nk)Θ(nk)的时间。b.归并排序先对数组进行对半拆分,需要拆分Θ(log2n)\Theta(log_2n)Θ(log2​n)次,现在当拆分到数组的长度为kk...

2018-11-01 18:02:31 203

原创 第二章、算法基础 -- 设计算法

分治法分治法:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。分治模式在每层递归时都有三个步骤:分解原问题为若干个子问题,这些子问题是原问题的规模较小的实例。解决这些子问题,递归地求解各个子问题。然而,若子问题的规模足够小,则直接求解。合并这些子问题的解成原问题的解。归并排序归并排序完全遵循分治模式:分解:分解...

2018-11-01 16:25:53 189

原创 第二章、算法基础 -- 分析算法

计算模型在能够分析算法之前,我们必须有一个要使用的实现技术的模型,包括描述所用资源及其代价的模型。对于本书的大多数章节,我们假定一种通用的单处理器计算模型——随机访问机(RAM)来作为我们的实现技术。在RAM模型中,指令是一条一条执行。#插入排序算法的分析一个算法在特定输入上的运行时间是指执行的基本操作数或步数。执行每行代码需要常量时间。虽然一行与另一行可能需要不同数量的时间,但是我们假设第...

2018-11-01 16:14:29 226

原创 第二章、算法基础 -- 插入排序

插入排序对于少量元素的排序,插入排序是个有效的算法。其排序方法如同我们平时排序扑克牌一般,现在我们开始排序扑克牌,目前我们的左手为空,桌面上的牌堆全部牌面向下,然后我们拿起牌堆顶部的一张牌,由于此时手里没牌,所以不用比较,直接放到手里,再拿起牌堆顶部的牌,跟手中的牌进行比较,大的牌放后面,再拿起一张,跟手中的牌从右向左进行比较,遇到小的牌便插入到此牌的后面,循环此操作直到所有的牌都在手中。如下图...

2018-11-01 15:17:36 160

原创 第一章、算法在计算中的作用 -- 算法解决哪种问题

算法解决哪种问题排序。数据库存取海量信息并为数据分析开发工具。互联网上的网站能够管理跟处理海量的信息。包括:数据传输寻找好的路由(第24章),使用一个搜索引擎来快速地找到特定信息所在的网页(第11章跟第32章)。加密个人信息。包括:公钥密码跟数字签名,它们以数值算法和数论为基础。制造业和其他商务企业常常需要按最有益的方式来分配稀有资源。如:一家石油公司也许希望知道在什么地方设置其油井,...

2018-11-01 14:57:53 310

原创 CSAPP第二章笔记

1、为什么计算机使用二进制? 当构造存储和处理信息的机器时,二进制比常用的十进制工作的更好。二值信号能够很容易地被表示、存储跟传输;对二值信号进行存储和执行计算的电子电路非常简单和可靠。2、大多数计算机使用字节作为最小的可寻址的内存单元。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都由一个唯一的数字来标示,称它为地址,所有可能的地址的集合就被称为虚拟地址空间。C语言...

2018-09-11 14:57:45 265

原创 CSAPP第一章笔记

寄存器:寄存器是CPU内的组成部分。寄存器是有限存储容量的高速存储部件,可用来暂存指令、数据和地址。在CPU的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在CPU的算术及逻辑部件中,包含的寄存器有累加器。寄存器在存储器层次结构中的最顶端,也是操作系统数据的最快速途径。 总线:总线是贯穿整个系统的一组电子管道,它携带信息字节并负责在各个部件之间传递。通常总线被设计成传送定...

2018-09-10 16:02:54 408

转载 Java 8 中的 Streams API 详解

转载于:Java 8 中的 Streams API 详解为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream...

2018-07-06 17:16:09 134

转载 Java 工作2年后需要达到怎么样的技术水平

请具体一点说要会什么技术?以及这些技术要达到什么水平? 有人回答说这只能是大企业或者互联网企业的工程师才能拿到。也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该是已经转管理后才有可能。还有区域问题,这个不在我的考虑范围内,因为除了北上广深杭,其他地方也很难。还有人提到这个水平不止2w,其实工资是跟面试表现有关的,也跟其他综合水平有关,比如你是985,top10,或者研究生学历,...

2018-07-03 16:09:35 506

转载 NO.26 synchronized关键字画像:正确打开方式

synchronized在非静态上下文中的应用解析首先,我们先看一个代码例子,然后再详细分析一下为什么会这样。代码1://模拟一个线程,探究在编程实践中//synchronized是如何持有对象锁//如何实现同步控制的public class DemoA extends Thread{ private String msg; public DemoA(Str...

2018-06-27 15:20:07 145

转载 NO.25 synchronized关键字画像:开胃菜

synchronized关键字synchronized关键字可用于函数修饰符,也可用作函数内的语句块修饰符。对于该关键字,很多程序员老铁有一个错误的认知:由于代码被关键字synchronized保护着,因此同一时刻只能有一个线程才能执行它。但是,这绝不是synchronized的全部,synchronized也不是从表面看起来那样的简单,今天我们一起来看看。synchronized修饰...

2018-06-25 08:59:24 147

转载 NO.24 三探回调:自己动手写通用事件监听器模式

通用的事件监听器模式是怎样的?事件监听器模式在我们编写Android、Java、QT等GUI程序时,是无处不在的存在。上文中,我们利用回调技术实现了事件监听器模式,但是该事件监听器模式还不够通用。今天我们从零开始,以不同手机设备使用QQ为应用实例,实现一个通用的事件监听器模式,一个通用的事件监听模式:事件源(例如:按钮或滚动条)的本身被注册了事件监听器,当事件源发生了一个事件(例如:点击或...

2018-06-07 17:18:16 200

转载 NO.23 再探回调:自己动手实现事件监听器模式

事件监听器模式是什么?采用Java Swing、Android、QT等技术进行实现图形用户程序(GUI)过程中,事件处理是非常重要且绕不开的编码工作,老铁们在利用上述语言框架提供便利的事件处理机制的时候,我们想过背后的运行原理是什么没?或者更进一步我们想过自己来实现一个这样的事件处理机制没?如果没有也没有关系,因为今天我们要一起来实现上述目标。事件监听器模式是一种最通用且经典的事件...

2018-06-07 15:50:48 267

转载 NO.22 举一反三:回调与观察者模式

默然回首,那人却在灯火阑珊处 - 回调模式Java线程技术是现实世界的复杂业务场景中的“座上宾”。创建线程的方式我们几乎也是烂熟于心:继承Thread方式;实现Runnable接口方式;线程池方式。代码1:public class TestThread { public static void main(String[] args) { Thread...

2018-06-06 17:59:37 234

转载 NO.21 我会回来的:回调

What - 什么是回调 ?回调机制最早应用于框架编程技术,是指在编写框架/类库(比如Android底层实现)时,需要上层模块提供具体实现的代码的机制;上层模块所提供的这种代码则称为回调函数。说人话,请看图一。【注意】文中提及框架/类库只是为了形象化说明是底层实现;同样地,App也只是为了形象划说明是上层实现。回调技术不仅仅用于框架设计中,其本质上是分层思想,同样适用于我们业务代码的实...

2018-06-06 17:22:17 151

转载 NO.20 朝中有人好办事:内部类

定义、分类及使用原因内部类是定义在另一个类中的类,如图1所示。按照内部类定义的位置及作用域又可以分为:成员内部类局部内部类匿名内部类静态内部类为什么我们需要使用内部类了?内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。内部类可以对同一包中的其他类隐藏起来。当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较快捷。内部类所实现得到功能使用外...

2018-06-06 10:23:12 309

转载 NO.19 深浅拷贝所引发的烦恼:不可变对象进阶

从一个例子谈起上文中我们一起讨论了创建不可变类的注意事项,重点在于需要分别在构造函数传入不可变对象时、在getter操作返回不可变对象时,一定要先进行clone操作,切断与原对象引用的关联关系。聪明的老铁们想想,这样就足够了吗?我们先看下例。代码1自定义了一个文章类Article;代码2自定义了一个学生类MutableStudent,完全按照不可变对象的定义准则来开展编码。代码1:...

2018-06-05 18:40:28 158

转载 NO.18 放开握紧的双手将得到全世界:不可变对象进阶 | Java敲黑板系列

开场白老铁 :所谓“不可变对象”就是当对象创建以后其成员变量不再能发生变化。今天我们以昨天所提的问题——“为什么在特定场景下需要clone操作?”作为引子来说明在定义不可变对象时的注意事项,详细说说我们需要避开哪些坑,同时把前期系列文章的一些知识点进行串联复习,起到融会贯通、举一反三的“温故而知新”效果。本文需要用到的知识点可参看文末的【延伸阅读】。穿越构造函数的陷阱代码1自定义了...

2018-06-05 17:07:11 177

转载 NO.17 不可变对象:海枯石烂,此心不渝 | Java敲黑板系列

开场白老铁 :对待爱情,您希望有一位对你忠贞不渝的另一半;对待友情,您希望能有一个友情比金坚的知己。在这到处充满变化的世界,我们心里始终怀揣着对一些美好事物能够“不变”的期许。一位哲人曾经说过:“我们无法踏进同一条河流”,看来不变已经成为了一种奢望;在编程的世界里,对象无处不在,那么我们能得到不可变的对象吗?如果答案是肯定的话,那么我们如何创建不可变对象了?在“唯一不变的就是变化”的逻辑体系里...

2018-06-05 16:43:13 210

转载 NO.16 沙场秋点兵:类vs抽象类vs接口 | Java敲黑板系列

开场白老铁 :接口、抽象类、类——三位英雄执剑走天涯,行侠仗义,被誉为“Java帝国三剑客”。三位英雄从来都不会争强好胜,而是相互协助,发挥各自优势,共同打造Java帝国的强安全性与高健壮性。今天我们对三位英雄进行总结对比,一方面让老铁们对三位有一个全面的认识,另外一方面也供老铁在进行技术选型时做参考。今天全是干货,敲黑板时老铁们需格外留意。特性比较敲黑板关键字:接口用i...

2018-06-05 16:34:57 147

转载 NO.15 你所知道的抽象类,不一定是最全的 | Java敲黑板系列

开场白老铁 :接口与抽象类总是会被老铁们一起惦记,昨天我们讨论了接口,那么今天我们就来说说抽象类。那明天了?明天我们就谈谈接口与抽象类的各种比较及其典型应用场景。什么是抽象类?继承是面向对象三大特性之一。从继承的层次维度来看,越是顶层的类就越通用,越是底层的类就越具体。想想Java语言中的祖宗级顶层类——Object,它是Java所有类的父类,“会当凌绝顶,一览纵山小”,是不是觉得...

2018-06-05 14:35:43 132

转载 NO.14 你所知道的接口,不一定是最全的 | Java敲黑板系列

开场白老铁 :通过前三篇文章,我们基本把Java对象“捏碎揉烂”个底朝天。后续将进入一个新的系列“接口与类”;今天我们将深入探讨接口的内涵与注意事项。面向对象编程.VS.面向接口编程,何去何从?我们常说“Java是一门面向对象编程的语言”,但是我们又常把“面向接口编程”挂在嘴边。一个是面向对象,一个是面向接口,到底哪一个才是正确的呢?突然间我们的思绪在风中变得凌乱。其实,这不是一个...

2018-06-05 10:54:33 173

转载 NO.13 共享经济下的对象 | Java敲黑板系列

开场白老铁 :通过上述两篇文章,我们已经get到减少创建对象数量,将可以提升程序运行效率。今天我们再来说说另外一项在创建对象方面能优化程序运行性能的技术——“对象复用”。对象复用所谓“对象复用”仍然是一项与编程语言无关的技术,它是一种在程序运行过程中减少创建对象数量的策略与方法。即:尽量能重用已有对象,而不是再重新创建一个。基于对象复用技术,能减少程序在创建对象与回收对象时的性...

2018-06-05 09:56:23 168

转载 NO.12 延迟满足总是好的 | Java敲黑板系列

开场白老铁 :上文“NO.11 对象是怎样炼成的”针对对象在内存中的构建步骤进行了说明,可以发现对象的生成过程比我们想象的要更加复杂。知道了这些步骤有什么用处了?这并不是要告诉我们由于创建一个对象的过程过于复杂而不用对象(如果不用对象,我们又怎么来面向对象编程了?),而是告诫我们在定义一个class时要合理进行“瘦身”并控制重型对象的数量。因此,创建对象无可避免,但是我们可以采取多种方式...

2018-06-05 09:45:28 138

转载 NO.11 对象是怎样炼成的 | Java敲黑板系列

开场白老铁 :Java是一门完全面向对象的语言,在我们的编程过程中,对象无处不在,为此我们对Java对象已经司空见惯。但是,对于我们经常使用的技术,我们真的理解对象吗?其中,一个常见的对象认识误区就是,我们常会低估JVM创建对象所带来的成本。实际上,JVM在创建一个对象时,其空间、时间成本比我们通常意识到的要高得多。对象在内存中构建过程对象构建并不是我们通常所理解的只是进行内存...

2018-06-05 09:33:41 152

转载 NO.10 异常: 失控 | Java敲黑板系列

开场白老铁 :我们共分了五期对异常进行解释,之前我们不仅对异常的内容进行全面性介绍,最为关键的是我们对异常的应用场景与注意事项进行了对比。这里是“Java敲黑板系列”演播厅,今天将是异常的完结篇,我们再次欢迎异常兄弟,有请!如无必要,勿用异常What:如代码1所示,提供了获取元素的两个方式:一个是采用异常的实现版本;一个是采用通用的实现方式。从功能上来看,两种是对等的。但是,在实际...

2018-06-04 18:10:47 165

转载 NO.9 异常: 真诚终归敌不过finally套路 | Java敲黑板系列

开场白老铁:finally语句特性是Java语言区别于其他语言很重要的一个功能。该特性有一个非常重要的特点就是:无论异常是否发生,finally子句的代码总会被执行。如果能够合理利用该特性,那么将会给程序员带来无比畅快的体验;但是不合理应用,将会让我们跌进一个个的问题坑。为此,今天我们对finally兄弟进行一场专访,有请!使用finally避免内存泄漏What:我们在前面的专访(...

2018-06-04 17:12:45 211

转载 NO.8 异常: 愿您归来还是少年 | Java敲黑板系列

开场白老铁 :可能大家会有这样一个疑问,异常不就是那几点吗?需要这样分几期来介绍吗?我的回答是:需要,非常有需求且必要。对异常的处理直接决定了我们程序的健壮性。想想程序不就是由所谓的“正常”与“异常”组成的吗?再想想我们程序中正常的业务代码占据了多少?异常处理代码又占据了多少?虽然不能说各占“半壁江山”,但是足以让我们以一种虔诚的心态去正确的了解、运用异常技术。今天我们来说说异常两项重...

2018-06-04 17:03:14 209

转载 NO.7 异常: 相处之道 | Java敲黑板系列

开场白老铁:昨天我们对异常的来源、定义、控制流执行逻辑等方面进行了梳理。既然异常无法避免,那么如何与异常和平共处就显得尤为重要,今天我们来谈谈与异常的相处之道。其中,“不要忽视”、“不要丢弃”是与异常相处之道中最重要的两条,下面我们分别来说说。不要忽视Java程序产生了异常如果不去捕获,那么发生异常的那个线程就将被中断; 而所谓“不要忽视”,就是当程序发生异常的时候,我们要对...

2018-06-04 16:10:17 198

转载 NO.6 异常: 初识 | Java敲黑板系列

开场白老铁:在Java世界里,异常的出现让我们编写的程序运行起来更加的健壮,同时为程序在调试、运行期间发生的一些意外情况,提供了补救机会;即使遇到一些严重错误而无法弥补,异常也会非常忠实的记录所发生的这一切。今天来到我们第6期“Java敲黑板系列”的正是异常兄弟,有请!由于异常背后有太多故事值得我们开发人员所关注,为此,这次专访将分几期为老铁们进行呈现,全面展现异常在各种业务场景下的应...

2018-06-04 15:46:53 182

转载 NO.5 不平凡的螺丝钉:String兄弟连 | Java敲黑板系列

开场白老铁:最近两天双11电商购物节闹得沸沸扬扬,卖家使出全身解数搞促销,买家把积攒了一年的购物热情也在这一天尽情释放,共同创造着一年又一年新的奇迹,不断对当前世界上最强计算力、运输力等发起挑战。可以这么说,中国电子商务的发达程度不逊于任何一个国家,在科技领域能有这样让人扬眉吐气的事情,想想真是提劲。类似于高楼大厦必然是由简单到一砖一瓦一螺钉构成的,庞大而复杂的电商系统也是由一行行代码构成...

2018-06-04 15:33:16 190

转载 NO.4 我是Java大厦的一块砖:何谓对象与对象引用 ?| Java敲黑板系列

开场白老铁 :欢迎大家准时收看“Java敲黑板系列”。今天我们的节目首先从一句话开始:“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实...

2018-06-04 15:16:27 149

转载 NO.3 厉害了,clone哥 | Java敲黑板系列

开场白老铁 :今天我们“Java敲黑板系列”迎来了一位特殊嘉宾:他是Java家族顶级boss——Object的“左右护法”之一的“右护法” ——clone方法。他为什么会有这样的名望?江湖上给了他一个称号——“造物主”。那么“左护法”是谁了?——new方法。也就是说,所有的Java对象都是由“new方法”与“clone方法”所产生的;因此,他们是Java世界里面名副其实的“造物主”。c...

2018-06-04 14:40:04 137

转载 NO.2 equals与==的三生三世 | Java敲黑板系列

开场白在Java家族里,“equals”与“==”是最容易让老铁混淆、分不清楚的一对表兄弟。为了便于大家提升对他们的辨识度,老铁专门对他们进行了采访,以下是采访实录。 老铁 :应广大老铁们要求,今天我们非常幸会请来了“equals”和“==”两位Java家族成员到“Java敲黑板系列”演播厅,欢迎两位! equals :大家好,我是equals,感谢大家收看今天的“敲黑板系列”! =...

2018-06-04 12:31:28 204

转载 NO.1 方法参数按“值”而非按“引用”方式传递 | Java敲黑板系列

基本概念方法(也称函数)调用是程序设计语言一种最基本的功能。一个完整的方法声明一般包括了返回值、方法名称、方法参数三个基本要素,俗称“三朵金花”。今天我们主要来谈谈这金兰三姐妹中的幺妹——方法参数。方法被调用其中有一个重要的过程,就是对三妹进行虚实结合,也称形参与实参相结合,平时三妹就是一个符号,发生方法调用时,调用方会把实际的参数传递给方法。传递的方式分为两种:按值调用与按引用调...

2018-06-04 12:09:06 176

可自定义上传文件存储路径的百度富文本编辑器ueditor.jar

经过修改的百度富文本编辑器ueditor.jar,实现自定义上传文件存储路径,不再局限于存储在项目路径下,具体看http://blog.csdn.net/maijia0754/article/details/79360788

2018-02-24

spring-framework-4.2.4.RELEASE.7z

在官网下载的Spring包,压缩档中包含docs、libs、schema文件夹。

2017-11-04

eclipse.BytecodeOutline插件

在遇到一些小问题的时候我们经常会使用Javap反编译取得字节码来分析,虽然Javap能完成这个工作,但是有两个缺点,一方面操作麻烦,需要很多步骤,一方面没有文档注释,对新手来说看起字节码来比较麻烦。这里推荐一个工具,Bytecode Outline,它是Eclipse的插件,可以把当前的正在编辑Java的文件或者class文件直接显示出其相应的字节码出来,而且有字节码中命令的说明,具体的安装跟用法压缩包中有。

2017-10-23

优化SQL性能.pptx

有关sql优化的建议,使用的是Oracle数据库,主要是sql编写的一些经验和建议,帮助写好sql语句,提高sql的性能或可读性。

2017-09-25

QRCode.rar

java二维码的生成工具QRCoded.jar,该压缩包包含QRCoded.jar包和maven的pom文件,使用其中的QRCode.jar来生成和解析二维码(Maven版) 。

2017-09-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除