Java
文章平均质量分 82
电子狗到程序猿
这个作者很懒,什么都没留下…
展开
-
java中的==、equals()、hashCode()源码分析
java中的==、equals()、hashCode()源码分析在java编程或者面试中经常会遇到 == 、equals()的比较。自己看了看源码,结合实际的编程总结一下。java中的==是比较两个对象在JVM中的地址。比较好理解。看下面的代码:public class ComAddr{ public static void main(String[] args) throws ...原创 2019-03-28 17:39:30 · 213 阅读 · 0 评论 -
Java基础复习之-----依赖、关联、聚合和组合之间区别的理解
依赖、关联、聚合和组合之间区别的理解在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。依赖(Dependency)关系是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House...原创 2019-03-08 23:17:00 · 539 阅读 · 0 评论 -
Java基础16:深入理解Java多线程基础3
多线程的实现以及线程之间的状态转换代码体现多线程的几种实现方法public class 多线程实例 { //继承thread类 @Test public void test1() { class A extends Thread { @Override public void run() { ...转载 2019-01-15 23:16:24 · 92 阅读 · 0 评论 -
Java基础16:深入理解Java多线程基础2
线程同步&synchronize关键字的用法synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修饰一个静态的方法,其作用的范围是整个静...原创 2019-01-15 21:52:22 · 117 阅读 · 0 评论 -
Java基础16:深入理解Java多线程基础1
深入理解Java多线程基础Java中的线程Java之父对线程的定义 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源)。java.lang.Thread对象负责统计和控制这种行为。 每个程序都至少拥有一个线程-即作为Java虚拟机(JVM)启动参数运行在主类main方法的线程。在Java虚拟机初始化过...原创 2019-01-15 20:30:52 · 205 阅读 · 0 评论 -
深入理解JVM虚拟机10:JVM常用参数以及调优实践
本文转自[JVM常用参数以及调优实践](https://blog.csdn.net/a724888/article/details/78367780) JVM常用参数选项 jvm 可配置的参数选项可以参考 Oracle 官方网站给出的相关信息:http://www.oracle.com/techne...转载 2019-01-09 22:12:46 · 365 阅读 · 0 评论 -
深入理解JVM虚拟机9:JVM监控工具与诊断实践
深入理解JVM虚拟机9:JVM监控工具与诊断实践转载JVM监控工具与诊断实践在常见的线上问题时候,我们多数会遇到以下问题:内存泄露某个进程突然cpu飙升线程死锁响应变慢…等等其他问题。如果遇到了以上这种问题,在线下可以有各种本地工具支持查看,但到线上了,就没有这么多的本地调试工具支持,我们该如何基于监控工具来进行定位问题?我们一般会基于数据收集来定位,而数据的收集离不开监控工具...转载 2019-01-09 22:04:33 · 114 阅读 · 0 评论 -
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
深入了解JVM虚拟机8:Java的编译期优化与运行期优化java编译期优化java语言的编译期其实是一段不确定的操作过程,因为它可以分为三类编译过程:1.前端编译:把.java文件转变为.class文件2.后端编译:把字节码转变为机器码3.静态提前编译:直接把*.java文件编译成本地机器代码从JDK1.3开始,虚拟机设计团队就把对性能的优化集中到了后端的即时编译中,这样可以让那些不是...转载 2019-01-09 21:25:53 · 142 阅读 · 0 评论 -
深入理解JVM虚拟机7:Tomcat类加载器实现
深入理解JVM虚拟机7:Tomcat类加载器实现打破双亲委派模型 上文提到过双亲委派模型并不是一个强制性的约束模型,而是 Java设计者推荐给开发者的类加载器实现方式。在Java 的世界中大部分的类加载器都遵循这个模型,但也有例外。 双亲委派模型的一次“被破坏”是由这个模型自身的缺陷所导致的,双亲委派很好地解决了各个类加载器的基础类的统一问题(越基础的类由越上层的加载器进行加载) ,基础...转载 2019-01-09 17:50:01 · 161 阅读 · 0 评论 -
深入理解JVM虚拟机6:深入理解JVM类加载机制
深入理解JVM虚拟机6:深入理解JVM类加载机制简述:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。下面我们具体来看类加载的过程:类从被加载到内存中开始,到卸载出内存,经历了加载、连接、初始化、使用四个阶段,其中连接又包含了验证、准备、解析三个步骤。这些步骤总体上是按照图中顺序进行的...转载 2019-01-09 13:22:28 · 165 阅读 · 0 评论 -
Java并发指南1:并发基础与Java多线程
Java并发指南1:并发基础与Java多线程what is 并发?过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。随着多任务对软件开发者带来的新挑战,程序不在...转载 2019-01-24 15:45:45 · 156 阅读 · 0 评论 -
Java基础复习之--------代理模式之动态代理,JDK实现和CGlib实现
代理模式之动态代理,JDK实现和CGlib实现本文参考了http://www.cnblogs.com/ygj0930/p/6542259.html1.代理模式既然说是代理,那就要对客户端隐藏真实实现,由代理来负责客户端的所有请求。当然,代理只是个代理,它不会完成实际的业务逻辑,而是一层皮而已,但是对于客户端来说,它必须表现得就是客户端需要的真实实现。静态代理的实现:1:首先定义一个接口,...原创 2019-03-09 02:43:08 · 142 阅读 · 0 评论 -
Java集合容器复习3—————Iterator和fail-fast机制
IteratorIterator iterator = list.iterator();while(iterator.hasNext()){ String string = iterator.next(); // do something } 迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。Iterator模式是用于遍历集合...原创 2019-03-13 21:12:16 · 142 阅读 · 0 评论 -
Java集合容器复习4————HashMap、Hashtable、ConcurrentHashMap的原理与区别
HashMapHashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口...原创 2019-03-13 23:06:46 · 320 阅读 · 0 评论 -
Java集合容器复习2————LinkedList和Queue
LinkedListLinkedList 的简介LinkedList是基于链表实现的,LinkedList是一种双向链表,双向链表我认为有两点含义:1、链表中任意一个存储单元都可以通过向前或者向后寻址的方式获取到其前一个存储单元和其后一个存储单元2、链表的尾节点的后一个节点是链表的头结点,链表的头结点的前一个节点是链表的尾节点LinkedList的基本存储单元,它是LinkedList...原创 2019-03-13 19:55:47 · 270 阅读 · 0 评论 -
Java 集合容器复习1————ArrayList,Vector与Stack
ArrayListArrayList介绍ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、...原创 2019-03-13 16:35:56 · 367 阅读 · 0 评论 -
设计模式之————面向对象7大设计原则及实例
面向对象7大设计原则及实例开闭原则(Open-Closed Principle,OCP)开闭原则是这七大设计原则中最常见、最基本的开闭原则定义:软件实体对扩展是开放的,但对修改是关闭的。意思就是说在不修改软件实体的基础上去扩展其他功能。开闭原则实例:比如实现一个绘制图线的功能设计方案如下图所示用户类中直接调用画直线类,但是如果有一个新需求,要求我们画斜线或者曲线的话,这时就需要修改...转载 2019-03-11 11:01:13 · 598 阅读 · 0 评论 -
设计模式之——初探Spring中的设计模式魔力
初探Spring中的设计模式魔力1.简单工厂模式又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况...转载 2019-03-10 02:06:10 · 111 阅读 · 0 评论 -
设计模式之————JDK中的设计模式
JDK中的设计模式经典设计模式在JDK中的体现1.Singleton(单例)作用:保证类只有一个实例;提供一个全局访问点JDK中体现:(1)Runtime(2)NumberFormatpublic class Runtime { private static final Runtime currentRuntime = new Runtime(); public s...转载 2019-03-10 01:01:38 · 181 阅读 · 0 评论 -
设计模式之————从JAVA的IO包重谈装饰者模式和适配器模式
从JAVA的IO包重谈装饰着模式装饰者模型详解装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰者模式设计类之间的关系其中Component是一个超类,ConcreteComponen是被装饰者,Decorator是装饰者,装饰者和被装饰者有共同的超类Component,但是此时我们发现Decorator和Component还有另外一条线,这条线...原创 2019-03-10 00:24:59 · 157 阅读 · 0 评论 -
设计模式之————结构型设计模式
结构型设计模式//结构型模式总结:/*代理模式是做方法增强的,适配器模式是把鸡包装成鸭这种用来适配接口的,桥梁模式做到了很好的解耦,装饰模式从名字上就看得出来,适合于装饰类或者说是增强类的场景,门面模式的优点是客户端不需要关心实例化过程,只要调用需要的方法即可,组合模式用于描述具有层次结构的数据,享元模式是为了在特定的场景中缓存已经创建的对象,用于提高性能。*//////...原创 2019-03-09 14:02:50 · 111 阅读 · 0 评论 -
设计模式之————结构型设计模式
二、结构型模式旨在通过改变代码结构来达到解耦的目的,使得我们的代码容易维护和扩展。*///1.代理模式/*既然说是代理,那就要对客户端隐藏真实实现,由代理来负责客户端的所有请求。当然,代理只是个代理,它不会完成实际的业务逻辑,而是一层皮而已,但是对于客户端来说,它必须表现得就是客户端需要的真实实现。*/public interface FoodService { Foo...原创 2019-03-09 12:36:46 · 87 阅读 · 0 评论 -
设计模式之————创建型设计模式
创建型设计模式//工厂模式//1.简单工厂模式public class FoodFactory { public static Food makeFood(String name) { if (name.equals("noodle")) { Food noodle = new LanZhouNoodle(); no...原创 2019-03-09 12:33:16 · 80 阅读 · 0 评论 -
Java集合容器复习5————HashSet、TreeSet 与LinkedHashSet
Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不会接受这两个对象。HashSet与TreeSet都是基于Set接口的实现类。其中TreeSet是Set的子接口SortedSet的实现类。Se...原创 2019-03-14 00:50:04 · 208 阅读 · 0 评论 -
深入理解JVM虚拟机5:虚拟机字节码执行引擎
深入理解JVM虚拟机5:虚拟机字节码执行引擎虚拟机字节码执行引擎转自https://juejin.im/post/5abc97ff518825556a727e66所谓的「虚拟机字节码执行引擎」其实就是 JVM 根据 Class 文件中给出的字节码指令,基于栈解释器的一种执行机制。通俗点来说,也就是 JVM 解析字节码指令,输出运行结果的一个过程。接下来我们详细看看这部分内容。方法调用的本质...转载 2019-01-08 21:42:03 · 176 阅读 · 0 评论 -
深入理解JVM虚拟机4:Java class介绍与解析实践
深入理解JVM虚拟机4:Java class介绍与解析实践转自https://juejin.im/post/589834a20ce4630056097a56前言身为一个java程序员,怎么能不了解JVM呢,倘若想学习JVM,那就又必须要了解Class文件,Class之于虚拟机,就如鱼之于水,虚拟机因为Class而有了生命。《深入理解java虚拟机》中花了一整个章节来讲解Class文件,可是看...转载 2019-01-08 15:20:26 · 109 阅读 · 0 评论 -
Java基础6——深入理解五种类型的代码块与代码加载顺序
代码块与代码加载顺序代码块public class Test { { //// }} 这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号({ })将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法。一般来说代码块是不能单独运行的,它必须要有运行主体。在Java中代码块主要分为一下几种:1.普通代码块 普通代码块是我们用得最多的...原创 2018-12-28 23:33:27 · 164 阅读 · 0 评论 -
Java基础5——深入理解抽象类和接口
抽象类和接口抽象方法和抽象类 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:abstract void f(); 《Java编程思想》一书中将抽象类定义为包含抽象方法的类,但准确来说,包含抽象方法的类一定是抽象类,但抽象类不 一定有抽象方法,只要用abstract修饰即可为抽象类。(不必纠结具体的概念)[public] abstract class ...原创 2018-12-28 22:11:31 · 144 阅读 · 0 评论 -
Java基础4——深入理解final关键字和static关键字以及初始化顺序
深入理解final关键字和static关键字final关键字(基础1中提到)final关键字可以修饰类、方法和引用。修饰类,该类不能被继承。并且这个类的对象在堆中分配内存后地址不可变。修饰方法,方法不能被子类重写。修饰引用,引用无法改变,对于基本类型,无法修改值,对于引用,虽然不能修改地址值,但是可以对指向对象的内部进行修改。...原创 2018-12-28 17:03:53 · 1105 阅读 · 0 评论 -
Java基础3——深入理解String类
深入理解String类String类的不变性 java.lang.String类使用了final修饰,不能被继承。Java程序中的所有字面值,即双引号括起的字符串,如"abc",都是作为String类的实例实现的。String是常量,其对象一旦构造就不能再被改变。换句话说,String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创造了一个全新的String对象,以包含...原创 2018-12-28 00:00:51 · 136 阅读 · 0 评论 -
Java基础2——深入理解基本数据类型与常量池
基本数据类型与常量池基本数据类型 Java中的基本数据类型只有8个:byte(1字节=8位)、short(2字节)、int(4字 节)、long(8字节)、float(4字节)、double(8字节)、char(1字 节)、boolean(1位)。 除了以上8种基本数据类型,其余的都是引用数据类型。 对应的包装类分别是:Byte、Short、Integer、Long、Float、Do...原创 2018-12-27 21:37:36 · 841 阅读 · 0 评论 -
Java基础1——深入理解Java面向对象三大特性
java基础1深入理解Java面向对象三大特性Java的三大特性:封装、继承和多态封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只 能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自 治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们 编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐 藏的东西,只向外界提供最简单的编程接口...原创 2018-12-26 21:27:33 · 447 阅读 · 3 评论 -
Day2 coding one Dijkstra双栈计算求值算法
需求:计算算术表达式的值,例如:(1+((2+3)∗(4∗5)))(1+((2+3)*(4*5)))(1+((2+3)∗(4∗5)))解决方法: Dijkstra 用两个栈(一个是保存运算符,一个用于保存操作数)流程:算术表达式由括号、运算符和操作数组成。我们根据以下4种情况来实现。1、将操作数压入操作数栈2、将运算符压入运算符栈3、忽略左括号4、在遇到右括号时,弹出一个运算符,...原创 2018-11-12 19:35:47 · 102 阅读 · 0 评论 -
Day1 coding two palindrome
题目:Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.翻译 :给定一个字符串,判断它是否回文,只考虑数字字母字符并忽略大小写。比如:“A man, a plan, a canal: Panama” is a palindrom...原创 2018-11-11 23:04:20 · 96 阅读 · 0 评论 -
Day1 coding one BinarySearch
二分查找问题:从数组{10,11,12,16,18,23,29,33,48,54,57,68,77,84,98}中查找16,20对应的位置public class BinarySearch {//对有序数组进行二分查找 public static void main(String[] args) { int[] arr = {10,11,12,16,18,23,29,33,48,54,...原创 2018-11-11 21:54:56 · 86 阅读 · 0 评论 -
Day3 Coding one 用容器模拟实现堆栈和队列结构
需求:利用容器实现堆栈和队列结构解决方案:1.collection接口中存在着子接口List接口,List接口中有LinkedList的实现类,LinkedList中有特有的定义方法,利用头尾展开定义。可以创建一个堆栈或者队列的数据结构对象,该对象是使用LinkedList来完成的。import java.util.LinkedList;public class MyQueue {//用...原创 2018-11-13 12:44:45 · 81 阅读 · 0 评论 -
Java基础7——深入理解Java类与包
java类与包(文章部分内容转载于How 2 Play Life )*.Java文件问题:一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。为什么一个java源文件中只能有一个publ...转载 2018-12-29 15:28:39 · 219 阅读 · 0 评论 -
Java基础12——深入理解Class类和Object类
深入理解Class类和Object类一、所有类的类型信息的记录员——Class类先来简单了解一下Java虚拟机中类的加载过程:「加载」阶段是「类加载」过程的第一个阶段,虚拟机需要完成以下三件事情:1. 通过一个类的全限定名来获取定义此类的二进制字节流(.class文件即保存 着类的二进制数据)。2. 将该字节流所代表的静态存储结构转化为方法区的运行时数据结构。3. 在Java堆中生成一...原创 2019-01-03 20:41:22 · 315 阅读 · 0 评论 -
Java基础13——深入理解java中的反射机制
java中的反射机制什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。 简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。 程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译...原创 2019-01-03 22:38:41 · 140 阅读 · 0 评论 -
深入理解JVM虚拟机3:垃圾回收器详解
深入理解JVM虚拟机3:垃圾回收器详解转自How 2 Play Life 垃圾回收器详解关于 JVM 内存管理或者说垃圾收集,大家可能看过很多的文章了,笔者准备给大家总结下。这算是系列的第一篇,接下来一段时间会持续更新。本文主要是翻译《Memory Management in the Java HotSpot Virtual Machine》白皮书的前四章内容,这是 2006 的老文章了,当...转载 2019-01-08 14:33:54 · 151 阅读 · 0 评论