
java
文章平均质量分 78
无怨_无悔
了解这个世界,了解更完整的自己 再繁茂的树木都是从根长起的,再多困扰我们的问题都是由一个问题引起的。 所以无论是坏是好,请你珍惜拥有我的机会。
展开
-
HashMap put如何存储元素的?
1.HashMap重要成员属性/** * The default initial capacity - MUST be a power of two. 默认的初始化容量 2的幂等次方 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** ...原创 2020-03-06 10:54:30 · 758 阅读 · 0 评论 -
Java LinkedList 源码分析
简介LinkedList 是一个常用的集合类,用于顺序存储元素。 LinkedList 经常和 ArrayList 一起被提及。大部分人应该都知道 ArrayList 内部采用数组保存元素,适合用于随机访问比较多的场景,而随机插入、删除等操作因为要移动元素而比较慢。 LinkedList 内部采用链表的形式存储元素,随机访问比较慢,但是插入、删除元素比较快,一般认为时间复杂都是 O(1)翻译 2017-10-30 08:19:57 · 585 阅读 · 0 评论 -
Java内存模型深度解读
Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。如果你想设计表现良好的并发程序,理解Java内存模型是非常重要的。Java内存模型规定了如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。原始的Java内存模型存在一些不足,转载 2017-10-30 08:43:02 · 294 阅读 · 0 评论 -
Java注解实践
JDK 基本Annotation注解说明@Override重写@Deprecated已过时@SuppressWarnings(value = "unchecked")压制编辑器警告@SafeVarargs修饰”堆污染”警告@FunctionalInte转载 2017-10-30 08:35:26 · 364 阅读 · 0 评论 -
Java 反射机制详解
动态语言动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。(引自: 百度百科)var execString = "alert(Math.floor(Math.random()转载 2017-10-30 08:31:41 · 302 阅读 · 0 评论 -
Google 十年 Java 技术栈
java技术栈参考了众多资料,这里就不再详细列举了,可以自行去搜索1 java基础:1.1 算法1.1 排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序1.2 二叉查找树、红黑树、B树、B+树、LSM树(分别有对应的应用,数据库、HBase)1.3 BitSet解决数据重复和是否存在等问题1.2 基本2.1转载 2017-05-05 10:09:40 · 11032 阅读 · 6 评论 -
从代码层读懂 Java HashMap 的实现原理
概述Hashmap继承于AbstractMap,实现了Map、Cloneable、Java.io.Serializable接口。它的key、value都可以为null,映射不是有序的。Hashmap不是同步的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。Map map = Collectio转载 2017-03-22 13:53:30 · 2528 阅读 · 0 评论 -
javax.xml.namespace.QName 解释以及作用JDK
最近在搞webService调用,使用到了QName这个类,经过查找JDK以及一些资料,才明白这个累的作用。 QName 英文全名: qualified name 中文翻译:表示 XML 规范中定义的限定名称QName 的值包含名称空间 URI、本地部分和前缀。QName 中包括前缀,以保留词汇信息(当在 X原创 2016-12-07 16:17:56 · 16070 阅读 · 1 评论 -
9个基于Java的搜索引擎框架
转载 codeceo 原文连接:http://www.codeceo.com/article/8-java-search-engine.html 本文由码农网 – 小峰原创,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在转载 2016-07-06 09:17:48 · 363 阅读 · 0 评论 -
java jre和jdk
一直以来,很多刚开始开发的人员对jre和jdk都有点模糊的概念,不太能够分清楚两者之间有什么区别,现就个人见解来讲解。 JRE全称: Java Runtime Enviroment JDK全称: Java Development Kit Java的源代码是以*.java的纯文本文件,可以使用任何文本编辑器来进行编写,但是这个源代码是无法执行的。执行源原创 2016-07-27 09:19:03 · 650 阅读 · 0 评论 -
java线程之间的通信(等待/通知机制)
线程开始运行,拥有自己的栈空间,就如同一个脚本一样,按照代码一步步的执行直到终止。但是,每个运行中的线程,如果仅仅是孤立地运行,那么没有太大的价值,但如果多个线程能够相互配合完成工作,这将会带来巨大的价值。而java多线程的等待和通知机制就是用来完成线程之间的通信。一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,而最终执行又是另一个转载 2017-10-24 09:37:24 · 331 阅读 · 0 评论 -
Java NIO核心组成部分
Java NIO 核心部分Channels 通道Buffers 缓冲区Selectors 选择器基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。这里有个图示: ChannelChannel的实现: (涵盖了UDP 和原创 2017-10-24 17:14:03 · 2543 阅读 · 0 评论 -
java nio和io
基本概念:Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当原创 2017-10-24 17:09:39 · 1420 阅读 · 0 评论 -
String为什么是final
最近在很多文章中看到很多人问:String为什么是final的,所以自己写下这篇文章,来深入了解下。 首先先了解两个问题:Java中 final的定义:Java的关键字final的含义存在着细微的区别,但是通常它是指"这是无法改变的"。不想做出改变可能处于两种理由:设计和效率。 final 修饰的类是不被能继承的,所以 final 修饰的类是不能被篡改的。jdk源码Str...原创 2018-10-10 22:12:49 · 13682 阅读 · 4 评论 -
RESTful API 设计相关的一些原则
本文总结了 RESTful API 设计相关的一些原则,只覆盖了常见的场景。有些规则只是针对自己项目而言,并非其他做法都是错误的。1. URIURI 表示资源,资源一般对应服务器端领域模型中的实体类。URI规范不用大写;用中杠-不用下杠_;参数列表要encode;URI中的名词表示资源集合,使用复数形式。资源集合 vs 单个资源URI表示资源的两种方式:资源集合、单个资源。...转载 2018-08-06 21:31:39 · 989 阅读 · 1 评论 -
开源规则引擎 drools
前言在很多企业的 IT 业务系统中,经常会有大量的业务规则配置,而且随着企业管理者的决策变化,这些业务规则也会随之发生更改。为了适应这样的需求,我们的 IT 业务系统应该能快速且低成本的更新。适应这样的需求,一般的作法是将业务规则的配置单独拿出来,使之与业务系统保持低耦合。目前,实现这样的功能的程序,已经被开发成为规则引擎。规则引擎是一种推理引擎,它是根据已有的事实,从规则知识库中匹配规则...转载 2018-08-06 21:30:34 · 81471 阅读 · 2 评论 -
mapstruct
配置MapStruct到目前为止我们的准备工作差不多完成了,下面我们开始配置使用MapStruct。我们的最终目的是为了返回一个自定义的DTO实体,那么我们就先来创建这个DTO,DTO的代码如下所示:package com.yuqiyu.chapter30.dto;import lombok.Data;/** * 转换Dto */@Datapublic class Goo...原创 2018-08-06 21:29:36 · 2811 阅读 · 0 评论 -
lombok
lombok简介lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特此来推荐一下。lombok的官方地址:https://projectlombok.org/lombok的Github地址:https://github.com/rzwitserloot/lombok那么lombok到...原创 2018-08-06 21:27:59 · 712 阅读 · 0 评论 -
基于Java NIO框架区别对比
一.通信框架流行基于Java NIO通信框架有Mina、Netty、Grizzly等。接下来说下它们之间的对比。二.它们的出身1、Mina出身于开源界的大牛Apache组织;2、Netty出身于商业开源大亨Jboss;3、Grizzly则出身于土鳖Sun公司。三.它们的设计理念1、Mina Mina(Multipurpose Infrastructure for Network Applicati...转载 2018-05-23 08:58:08 · 2754 阅读 · 1 评论 -
Set,Map集合与数组互转
@org.junit.Testpublic void test4() {Set set=new HashSet();//数组转集合set.addAll(Arrays.asList("aa","bb","cc","dd"));//集合转数组//方式1String[] array = set.stream().toArray(String[]::new);System原创 2017-12-07 11:06:37 · 1095 阅读 · 0 评论 -
可变参数创建Java中集合的工厂方法
要解决什么问题?Java中并没有对集合(java.util.collection)类型实现任何的简单初始化语法,如果你需要创建一个集合,并将一些数据放置到集合中,你需要写比较多的语句。如要创建一个水果名称的Set,并将苹果、橙子、香蕉加入到这个集合中,我们会这样写:Set fruits = new HashSet();fruits.add("apple");fr原创 2017-10-17 15:47:46 · 848 阅读 · 0 评论 -
9个基于Java的搜索引擎框架
转自:http://www.codeceo.com/article/8-java-search-engine.html在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广告骗子)。那么如果在你自己开发的网站系统中需要能让用户搜索一些重要转载 2017-10-17 16:23:24 · 754 阅读 · 0 评论 -
【深入Java虚拟机】之五:多态性实现机制——静态分派与动态分派
方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给Java带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法的符号引用在类加载阶段或第一次使用时转化为直接引用,这种转化称为静态解析。这在前面的“Java内存区域转载 2016-06-24 11:03:34 · 376 阅读 · 0 评论 -
【深入Java虚拟机】之四:类加载机制
类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Jav转载 2016-06-24 11:01:08 · 371 阅读 · 0 评论 -
【深入Java虚拟机】之三:类初始化
类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化:遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发其初始化。生成这四条指令最常见的Java代码场景是:使用new关键字实例化对象时、读取或设置一个类的静态字段(转载 2016-06-24 10:59:07 · 243 阅读 · 0 评论 -
java:快速文件分割及合并
文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并。很多高大上的分布式文件系统(比如:google的GFS、taobao的TFS)里,也是按block为单位,对文件进行分割或合并。看下基本思路:如果有一个大文件,指定分割大小后(比如:按1M切割)step 1:先根据原始文件大小、分割大小,算出最终分割的小文件数N转载 2015-06-15 11:17:53 · 586 阅读 · 0 评论 -
Java单元测试(Junit+Mock+代码覆盖率)
单元测试是编写测试代码,用来检测特定的、明确的、细颗粒的功能。单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的。单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复、改进或重构之后的正确性。一般来说,单元测试任务包括接口功能测试:用来保证接口功能的正确性。局部数据结构测试(不常用):用来保证接口中的数据结构是正确的比如变量有无初始值变量是转载 2015-06-12 08:56:54 · 736 阅读 · 0 评论 -
怎样使用 Junit Framework 进行单元测试的编写
怎样使用 Junit Framework 进行单元测试的编写随着 Refactoring 技术和 XP 软件工程技术的广泛推广,单元测试的作用在软件工程中变得越来越重要,而一个简明易学、适用广泛、高效稳定的单元测试框架则对成功的实施单元测试有着至关重要的作用。在 java 编程语句环境里,Junit Framework 是一个已经被多数 java 程序员采用和实证的优秀的测试框转载 2015-06-12 08:58:30 · 507 阅读 · 0 评论 -
CGLib与JDK的动态代理
一、CGLib 简介 CGLib (Code Generation Library) 是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO字节码的动态生成。CGLib比 Java 的 java.lang.reflect.Proxy 类更强的在于它不仅可以接管接口类的方法,还可以接管普通类的方转载 2015-06-06 10:53:28 · 601 阅读 · 0 评论 -
Java mail 邮箱发送
这几天做一个服务器的监测,发送邮件。由于新申请了两个163邮箱账号,用于测试,总是提示不被授权。报出以下错误: avax.mail.AuthenticationFailedException,经过网上查找很多资料,都不能实际解决问题。自己使用以前(通过手机验证)申请经过验证后的邮箱,就可以发送到邮箱。 最终的原因是:以下两种 1.. 先用OutLo原创 2015-04-25 16:01:23 · 868 阅读 · 0 评论 -
get请求乱码问题
全局范围的处理方法:/** * */package com.hsrj.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import ja原创 2015-01-21 15:10:38 · 451 阅读 · 0 评论 -
Log4J日志管理类使用详解
一、前言:log4j是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现, 当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中实际使用最多的还是log4j, 人们遗忘了sun的日志工具类。 它的一个独有特性包括在类别中继承原创 2015-01-18 18:35:27 · 611 阅读 · 0 评论 -
ssh hibernate和spring 的注解介绍
最近在做ssh架构的项目,用到了注解。然后就找了些资料,总结了下: 有关的设置 9.5.5. 有关的设置这一节里将描述通过 标签来指定不同的事务性设置。默认的 设置如下:事务传播设置是 REQUIRED隔离级别是 DEFAULT事务是 读/写事务超时默认是依赖于事原创 2015-01-18 18:22:18 · 988 阅读 · 0 评论 -
SSH开发框架中,实现系统启动加载类,读取数据库常用数据进入内存以及将数据放在application
如果想让bean类在初始化时启动某个方法,在xml里设置 或者使用annotation在方法上配置@PostConstruct即可。但如果bean类设置为scope="prototype"或@Scope("prototype") 那该bean类只有在调用是才被初始化,那init方法也只能在改bean被调用是才执行,因为设置了prototype的原因每次请求都会创建一个新的bean类,所以每转载 2015-01-18 18:25:48 · 2270 阅读 · 0 评论 -
深入理解Java:注解(Annotation)基本概念
什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。 Annotation(注解)是JDK5.0及以后版本引入的。它可以用于转载 2015-07-06 11:00:32 · 522 阅读 · 0 评论 -
深入理解Java:注解(Annotation)自定义注解入门
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target,转载 2015-07-06 11:02:11 · 517 阅读 · 0 评论 -
深入理解Java:注解(Annotation)--注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Anno转载 2015-07-06 11:03:07 · 370 阅读 · 0 评论 -
【深入Java虚拟机】之二:Class类文件结构
平台无关性 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。Java语言中的各种变转载 2016-06-24 10:51:36 · 281 阅读 · 0 评论 -
深入Java虚拟机(1):Java内存区域与内存溢出
内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器(Program Counter Register) 一块较小的内存空间,它转载 2016-06-24 10:47:10 · 374 阅读 · 0 评论 -
Java 虚拟机结构分析
本博文主要介绍了JVM(Java Virtual Machine)的组成部分以及它们内部的工作机制和原理。需要注意的是,虽然平时我们用的大多是Sun(现已被Oracle收购)JDK提供的JVM,但是JVM本身是一个规范,所以可以有多种实现,除了Hotspot外,还有诸如Oracle的JRockit、IBM的J9也都是非常有名的JVM。1. 结构下图展示了JV转载 2016-06-02 14:24:59 · 309 阅读 · 0 评论