java
JimmyLegend
Write the Code Change the World!
展开
-
Java团长
C盘快满了的话,可以通过Disk Manager将别的磁盘的空间送给C盘原创 2020-02-03 22:58:58 · 746 阅读 · 8 评论 -
Java里Executor、shutdown()、Thread.yield()、join()总结
Executor:Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务的线程相当于消费者,并用Runnable来表示任务,Executor的实现还提供了对生命周期的支持,以及统计信息收集,应用程序管理机制和性能监视等机制。shutdown():当...原创 2019-03-09 11:25:45 · 2342 阅读 · 0 评论 -
Java中的类在什么情况下会被加载并初始化
Java中的类在什么情况下会被加载并初始化1.创建类的实例.2.调用某个类的类方法(静态方法)。3.访问某个类变量或为该变量赋值。4.使用反射方式来强制创建某个类或接口对应的java.lang.Class对象。5.初始化某个类的子类,子类的父类都会被初始化。6.直接使用java.exe命令运行某个主类,主类先被初始化。...原创 2019-02-27 13:07:20 · 705 阅读 · 0 评论 -
java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?
java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?如:public class InnerClassDemo{int x;class A{static int a = 0;//这样写是不合法的.static final int b=0;//这样写是合法的}}java类加载顺序,首先加载类,执行static变量初始化,接下来执行对象的创建,如果我们要执行代...转载 2019-02-28 10:56:14 · 196 阅读 · 0 评论 -
记录一次壮烈牺牲的阿里巴巴面试
前言今天本是一个阳光明媚,鸟语花香的日子。于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,蚂蚁金服后端大佬来了电话,要进行一轮的技术面试。我一脸黑人问号???现在的面试都流行突袭吗?于是我的第一次面试之旅,就此壮烈的展开。自我介绍首先呢,大佬让我用两分钟自我介绍。我本以为自己能滔滔不绝,将对方视作相亲对象般全方位介绍自己。结果不到半分钟,我就介绍完了==。五秒钟的沉默后,...转载 2019-01-21 10:51:17 · 149 阅读 · 0 评论 -
初识stub和mock--junit的两种测试策略
JUnit相信大家都在用,对于如何使用Junit这里不在赘述。Stub和Mock就是两种协助Junit测试的思想或者策略,它们并不是真实存在的对象,却可以模拟真实对象的状态和交互。 Stub和Mock综述 为何使用Stub和Mock呢?在现实的开发过程中,需要去测试的一个方法并不总是单独存在的,它可能依赖其他方法或者类,比如你要测试service层的逻辑,可能依赖于dao层的数据...转载 2018-10-15 08:39:08 · 626 阅读 · 0 评论 -
Ant之build.xml详解
Ant的概念可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令。当编译Linux内核及一些软件的源程序时,经常要用这个命令。Make命令其实就是一个项目管理工具,而Ant所实现功能与此类似。像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷。最初Ant开发者在开发跨平台的应用时,用样也是基于...转载 2018-10-13 11:06:09 · 168 阅读 · 0 评论 -
Junit4中的新断言assertThat的使用方法
如果需要是用assertThat需要在项目中引入junit4的jar包.(匹配器和断言方法在junit4的jar包中都能找到,引入就可以了)下面是常用断言的代码import static org.hamcrest.MatcherAssert.*;import static org.hamcrest.CoreMatchers.*; import java.util.ArrayLi...转载 2018-10-12 15:06:10 · 315 阅读 · 0 评论 -
Hamcrest 总结
JunitJUnit框架用一组assert方法封装了一些常用的断言。这些assert方法可以帮我们简化单元测试的编写。这样的话,Junit就可以根据这些断言是否抛出 AssertionFailedError 错误来判断测试用例的执行结果。Hamcrest使用过Junit 的应该有过体验:在实际开发中,一些基本的断言,如eqaul,null,true它们的可读性并不是很好。而且很多时候我...转载 2018-10-12 11:04:08 · 371 阅读 · 0 评论 -
notify 和 notifyAll的区别
notify方法只唤醒一个等待(对象的)线程并使该线程开始执行。所以如果有多个线程等待一个对象,这个方法只会唤醒其中一个线程,选择哪个线程取决于操作系统对多线程管理的实现。notifyAll 会唤醒所有等待(对象的)线程,尽管哪一个线程将会第一个处理取决于操作系统的实现。如果当前情况下有多个线程需要被唤醒,推荐使用notifyAll 方法。比如在生产者-消费者里面的使用,每次都需要唤醒所有的消费者...原创 2019-03-10 22:15:38 · 109 阅读 · 0 评论 -
java并发编程:Executor、Executors、ExecutorService
Executors在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线...转载 2019-03-09 12:37:17 · 113 阅读 · 0 评论 -
JVM的年轻代
聊聊JVM的年轻代1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域...转载 2019-03-30 20:26:44 · 246 阅读 · 0 评论 -
Java面试
java通过不同的系统、不同的版本、不同位数的java虚拟机,来屏蔽不同系统指令集差异而对外提供统一接口(java API),对于我们普通的java开发者而言,只需要按照接口开发即可,如果我们的系统需要部署到不同的环境时,只需在系统上安装对应版本的虚拟机即可。java是一个面向对象的语言,而基本数据类型不具备面向对象的特性。Integer类型缓存-128到127(p6)...原创 2019-08-22 01:00:17 · 224 阅读 · 0 评论 -
Synchronized锁升级
Synchronized锁升级锁的4中状态:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态(级别从低到高)为什么要引入偏向锁?因为经过HotSpot的作者大量的研究发现,大多数时候是不存在锁竞争的,常常是一个线程多次获得同一个锁,因此如果每次都要竞争锁会增大很多没有必要付出的代价,为了降低获取锁的代价,才引入的偏向锁。为什么要引入轻量...转载 2019-07-13 13:52:05 · 290 阅读 · 0 评论 -
java.lang.ClassNotFoundException: com.github.pagehelper.Page
警告:警告: Hessian/Burlap: 'com.github.pagehelper.Page' is an unknown class in WebappClassLoader context: delegate: false repositories:----------> Parent Classloader:ClassRealm[plugin>org....原创 2019-06-23 15:56:56 · 8128 阅读 · 0 评论 -
Dubbo学习笔记
Dubbo学习笔记简介简介Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护,为了与原有的Dubbo区分,故将其命名为Dubbox。Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbox就是个服务框架,如果...原创 2019-06-09 21:45:00 · 158 阅读 · 0 评论 -
Java设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。设计模式的分类:一、创建...原创 2019-04-09 16:08:39 · 136 阅读 · 0 评论 -
Java设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。设计模式的分类:一、...原创 2019-04-02 15:21:57 · 128 阅读 · 0 评论 -
Java中的逃逸分析
在Java的编译体系中,一个Java的源代码文件变成计算机可执行的机器指令的过程中,需要经过两段编译,第一段是把.java文件转换成.class文件。第二段编译是把.class转换成机器指令的过程。第一段编译就是javac命令。在第二编译阶段,JVM 通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢很多。这就...转载 2019-03-24 16:18:57 · 177 阅读 · 0 评论 -
浅谈对JIT编译器的理解
1. 什么是Just In Time编译器?Hot Spot 编译当 JVM 执行代码时,它并不立即开始编译代码。这主要有两个原因:首先,如果这段代码本身在将来只会被执行一次,那么从本质上看,编译就是在浪费精力。因为将代码翻译成 java 字节码相对于编译这段代码并执行代码来说,要快很多。当 然,如果一段代码频繁的调用方法,或是一个循环,也就是这段代码被多次执行,那么编译就非常值得...转载 2019-03-24 16:03:34 · 490 阅读 · 0 评论 -
java 字符串截取的几种方式
众所周知,java提供了很多字符串截取的方式。下面就来看看大致有几种。 1.split()+正则表达式来进行截取。 将正则传入split()。返回的是一个字符串数组类型。不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时。String str = "abc,12,3yy98,0";String[] strs=str.split(",");for(int i=0,len=strs.l...转载 2018-05-16 17:05:03 · 178 阅读 · 0 评论 -
试题公式解决方案--kindeditor集成jmeditor公式web编辑器
最近在搞一套在线的考试系统,一直为即支持公式编辑又得支持各种附件上传、图片上传、视频音频上传、文字编辑 的web编辑器而犯愁。于是乎试着把 kindeditor和jmeditor集成一下,多了不说了直接上图kindeditor版本: 4.1.7 http://kindeditor.net/jmeditor版本 0.94 http://www.jmeditor.com/1、复制 JMEditor-0...转载 2018-05-10 19:05:44 · 1286 阅读 · 2 评论 -
java基础知识
符号&和&&的区别:a&b不管a是否为false都需要判断b。a&&b当a为false时不需要判断b即b语句不会被执行。符号|和||的区别:a|b不管a是否为true都需要判断b。a||b当a为true时不需要判断b即b语句不会被执行。三目运算符:(a>b)?a:b;如果(a>b)成立则执行a语句不执行b语句,反之亦然。在java中输入char类型的数据:原创 2018-01-07 14:35:50 · 236 阅读 · 0 评论 -
常见的数据结构的优缺点
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要转载 2018-01-15 23:21:54 · 592 阅读 · 0 评论 -
Java中如何遍历Map对象的4种方法
在Java中如何遍历Map对象How to Iterate Over a Map in Java在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等) 方法一 在for-each循环中使用ent转载 2018-01-15 22:53:33 · 172 阅读 · 0 评论 -
Java遍历Set集合方法
对 set 的遍历一般是迭代遍历:Set set = newHashSet();Iterator it =set.iterator();while (it.hasNext()) { String str = it.next(); System.out.println(str);}for循环遍历:for (String str : set) {转载 2018-01-15 22:49:52 · 8834 阅读 · 0 评论 -
遍历List集合的三种方法
List list = new ArrayList();list.add("aaa");list.add("bbb");list.add("ccc");方法一:超级for循环遍历for(String attribute : list) { System.out.println(attribute);}方法二:对于ArrayList来说速度比较快, 用for循环, 以size为转载 2018-01-15 22:09:15 · 230 阅读 · 0 评论 -
Java 数组的三种创建方法
public static void main(String[] args) {//创建数组的第一种方法int[] arr=new int[6];int intValue=arr[5];//System.out.println(intValue);//创建数组的第二种方法int[] x={1,2,3,4};//System.out.println(x[1]);//创建数组的第三种转载 2018-01-07 14:31:24 · 3989 阅读 · 1 评论 -
常见dos命令
常用的内部命令有MD、CD、RD、DIR、PATH、COPY、TYPE、EDIT、REN、DEL、CLS、VER、DATE、TIME、PROMPT。常用的外部命令有DELTREE、FORMAT、DISKCOPY、LABEL、VOL、SYS、XCOPY、FC、ATTRIB、MEM、TREE。切换到其他盘符D:1.MD——建立子目录功能:创建新的子目录类型:内部命令ü格式:MD转载 2018-01-13 22:39:36 · 265 阅读 · 0 评论 -
JAVA的包装类
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。 包装类均位于java.lang包,包装类和基本数据类型的对应关系如下表所示:转载 2018-01-13 15:56:34 · 1329 阅读 · 0 评论 -
Java线程:概念与原理
Java线程:概念与原理一、操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe转载 2016-03-12 19:24:47 · 341 阅读 · 0 评论 -
java中的基本数据类型和引用数据类型(一)
8种基本类型 一、4种整型 byte 1字节 -128——127 short 2 字节 -32,768 —— 32,767 int 4 字节 -2,147,483,648 ——2,147,483,647(超过20亿) long 8 字节转载 2018-01-16 20:33:12 · 281 阅读 · 0 评论 -
Java中strictfp的使用方法
自Java2以来,Java语言增加了一个关键字strictfp,虽然这个关键字在大多数场合比较少用,但是还是有必要了解一下。 strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满转载 2018-01-16 21:05:57 · 1627 阅读 · 0 评论 -
接口成员特点
成员变量:只能是常量,而且是静态的 (默认修饰符:public static final )构造方法:接口没有构造方法,因为接口主要是扩展功能的,而没有具体存在所有类都继承object 类Object是类层次结构的根类,每个类都使用Object作为超类。 默认格式:class Dog extends Object {} 成员方法:只能是抽象方法 默认修饰符:public转载 2018-01-10 20:26:30 · 268 阅读 · 0 评论 -
java项目命名规范
一、命名规范1、 项目名全部小写2、 包名全部小写3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。如:public class MyFirstClass{}4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。如:int index=0; public void toString(){}5、 常量名全部转载 2018-01-10 12:30:25 · 15342 阅读 · 1 评论 -
"=="和equals方法究竟有什么区别?
==操作符专门用来比较两个变量的值是否相同,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个 基本类型的数据或两个引用变量是否相等只能用==操作符。equals方法用来比较两个独立对象的内容是否相同,就好比去比较两本书是否相同,ta比较的两个对象是独立的:看下面的代码String a = new String("AA");String b = new String(转载 2018-01-10 10:47:21 · 150 阅读 · 0 评论 -
static修饰符详解
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无转载 2018-01-10 10:42:57 · 327 阅读 · 0 评论 -
Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征:继承:存在继承关系的子类和父类重写:子类对父类的某些方法进行重写(多态下调用的是子类重写的方法)父类引用指向子类对象:即向上转型,将子类的引用赋给父类的对象然后,我们调用的时候,就是通过父类的对象去调用方法的。但是,一想接口好像转载 2018-01-09 23:46:49 · 608 阅读 · 0 评论 -
java中重载与重写的区别
首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。 (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数转载 2018-01-09 23:38:34 · 168 阅读 · 0 评论 -
Java中类方法与实例方法的区别
Java中类的方法分为类方法(用static修饰,也叫静态方法)和实例方法(没有用static修饰,也叫非静态方法),这两种方法之间有什么区别呢?一. 实例方法当类的字节码文件加载到内存中时,类的实例方法并没有被分配入口地址,只有当该类的对象创建以后,实例方法才分配了入口地址。从而实例方法可以被类创建的所有对象调用,还有一点需要注意,当我们创建第一个类的对象时,实例方法的入口地址会完成分配转载 2018-01-09 23:18:13 · 1677 阅读 · 0 评论