java
文章平均质量分 94
HankingHu
这个作者很懒,什么都没留下…
展开
-
java多线程相关问题汇总
1、线程和进程的关系根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线...原创 2020-06-20 11:03:22 · 3039 阅读 · 0 评论 -
深入理解Jvm--Java静态分配和动态分配完全解析
jvm中绑定Binding的概念绑定是针对类型而言的,指的是类型确定的过程,通常发生在访问对象成员或者方法调用的过程中。当我们谈论方法或属性的访问时动态绑定还是静态绑定时,实际上指的是方法的接收者和属性的所有者的类型确定(determine by atual type or determine by static type)。根据类型确定发生在运行期还是编译期以及依据实际类型还是静态类型,可以将Bi原创 2017-06-10 17:00:12 · 3874 阅读 · 1 评论 -
Java进阶--Java中 i++完全解析
在讲 i++与++i之前先看两个在笔试面试中经常遇到的题目: 题目1//代码1 int x=2; int b=(x++)*3; System.out.println(b);/* 输出结果为:6*/题目2//代码1 int i=0; for(int j=0;j<100;j++)原创 2017-06-08 22:43:34 · 6430 阅读 · 0 评论 -
Java异常机制--try catch finally 执行顺序详解
引言关于try catch finally 执行顺序的笔试面试题目非常的多,我曾经在牛客网刷题的时候不止一次的碰到过,而且不止一次的做错过,这里面需要涉及的细节如果不弄清楚每次做题就会产生似是而非的感觉。这次查阅了很多相关资料,关于try catch finally 执行顺序各方面基本都讲到了。不足之处欢迎指出。try catch finally 执行顺序仅仅在下面4中情况下不会执行finally语原创 2017-06-20 16:52:23 · 18165 阅读 · 9 评论 -
Java并发编程--深入理解ReadWriteLock锁机制
Lock锁简介Lock和synchronized 同步代码块类似,是线程同步机制,但是Lock比synchronized 同步代码块更加灵活。Lock是通过synchronized关键字来实现的。从Java 5开始,java.util.concurrent.locks包含几个锁,下面通过自己实现的Lock来看看Lock的实现原理。简单的锁实现public class Lock{ private b原创 2017-06-05 18:03:34 · 960 阅读 · 0 评论 -
Java并发编程--深入理解Semaphore
Semaphore简介Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。Semaphore的用途Semaphore可以用于做流量控制,特别公用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程并发的读取,但是如果读到内存后,还需要存储到数据库中,而数据库的连接数只有1原创 2017-06-06 16:03:28 · 2176 阅读 · 0 评论 -
Java进阶--深入理解ArrayList实现原理
ArrayList简介ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小。要注意的是ArrayList并不是线程安全的,因此一般建议在单线程中使用ArrayList。ArrayList的继承关系public class ArrayList<E>extends Abstract原创 2017-05-19 16:21:08 · 37379 阅读 · 9 评论 -
Java进阶--ArrayDeque双端队列完全解析
ArrayDeque的基本用法public class DequeDemo { public static void main(String[] args) { int []arr={1,2,3,4,5,6,7,8}; ArrayDeque<Integer> aDeque=new ArrayDeque<Integer>(); f原创 2017-05-09 20:27:43 · 7595 阅读 · 3 评论 -
Java进阶--从源码理解Integer类的toString方法
Java中的jdk是深入学习Java编程的宝库,其中各种方法的实现不仅可以深入了解 设计模式的应用,还可以看到jdk编写者如何优化代码(这种优化已经到达了一种极端的程度)对我们编写自己的代码是有十分重要的作用的。read the fucking source code 是成为一名优秀程序猿必须的经历。本博客通过分析Integer类的toString方法来看看jdk编写者如何编写他们的代码的。Inte原创 2017-05-15 17:41:53 · 7053 阅读 · 1 评论 -
Java进阶--深入解析hashmap
HashMap原理先以一个简单的例子来理解hashmap的原理。在Java中先随机产生一个大小为20的数组如下:hash表的大小为7,将上面数组的元素,按mod 7分类如下图:将这些点插入到hashmap中(简单hashmap)后如下图:由上图可知: ① hashmap是用链地址法进行处理,多个key 对应于表中的一个索引位置的时候进行链地址处理,hashmap其实就是一个数组+链表的形式。②原创 2017-04-22 22:20:58 · 7057 阅读 · 8 评论 -
深入理解jvm--Java中init和clinit区别完全解析
init和clinit区别①init和clinit方法执行时机不同 init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行init方法,而clinit是类构造器方法,也就是在jvm进行类加载—–验证—-解析—–初始化,中的初始化阶段jvm会调用clinit方法。参考文献①深入JAVA虚拟机第二版. ②https://stackover原创 2017-06-10 10:43:57 · 30023 阅读 · 13 评论 -
深入理解jvm--Java类的初始化及主动引用和被动引用完全解析
初始化类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。 到了初始化阶段,才真正开始执行类中定义的Java程序代码(或者说是字节码)。初始化阶段是执行类构造器<clinit>()方法的过程。 主动引用对类进行引用时如果类没有进行过初始化,则先触发其初始化叫做主动引用。有且只有下面5中情况下才会进行主动引用原创 2017-06-10 20:45:56 · 2249 阅读 · 0 评论 -
Java进阶--Java泛型总结
一. 泛型概念的提出(为什么需要泛型)?首先,我们看下下面这段简短的代码:public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("qqyumidi"); list.add("corn");原创 2017-06-05 09:18:21 · 598 阅读 · 0 评论 -
Java clone方法深拷贝浅拷贝完全解析
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?1 使用new操作符创建一个对象2 使用clone方法复制一个对象那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操转载 2017-09-01 19:39:56 · 1058 阅读 · 2 评论 -
java进阶--深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
1.自动装箱与拆箱的定义装箱就是自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。Java中的数据类型分为两类:一类是基本数据类型,另一类是引用数据类型。如下图:由上可知Java中的基本数据类型有八种分别是:int(4字节) byte(1字节) short(2字节) long(8字节) float (4字节) double(8字节) char(2字节) b原创 2017-04-18 20:37:40 · 8725 阅读 · 6 评论 -
深入分析Java中CAS机制
前言在看到Java锁机制的时候,无意中看到了CAS这个词,然后在百度查找CAS看了很多文章始终没有看的太懂,今天又在Google上查找了一些资料,才算是真正弄清楚了CAS机制。什么是CAS在jdk 1.5中增加的一个最主要的支持是Atomic类,比如说AtomicInteger, AtomicLong,这些类可帮助最大限度地减少在多线程中对于一些基本操作(例如,增加或减少多个线程之间共享的值)的复杂原创 2017-08-29 22:39:33 · 3529 阅读 · 1 评论 -
Java IO--File完全解析
前言昨天室友电话面试阿里内推的时候问到了Java里面的File有关目录和文件遍历的问题,之前做项目的时候用到过,不过时间长了都忘了。File类作为Java IO的一个工具类在面试中碰到的概率很高,因此做一下总结。File类File类这个名字具有一定的误导性,我们可能会认为它指代的是文件,实际上却并非如此。它既能代表一个特定文件的名字,又能代表一个目录下的一组文件的名称。File类中的重要方法File原创 2017-08-07 19:43:21 · 1536 阅读 · 0 评论 -
由装饰者模式来深入理解Java I/O整体框架
前言Java里面的I/O这一部分看过很多遍,每次看完之后特别混乱,又是输入流,又是输出流,又是字符流,又是字节流,还有什么过滤流,缓冲流。每次看得我如入云里雾里,直到后面看了设计模式这一块,才算真正的对Java I/O这一块有了整体的了解,理解起Java流也就容易许多。这篇博客先介绍装饰者模式,然后结合Java流看看装饰者模式如何应用到Java流中的。装饰者模式装饰者模式:动态地将责任附加到对象上。原创 2017-07-22 17:51:18 · 2676 阅读 · 4 评论 -
深入理解--Java按值传递和按引用传递
引言最近刷牛客网上的题目时碰到不少有关Java按值传递和按引用传递的问题,这种题目就是坑呀,在做错了n次之后,查找了多方资料进行总结既可以让自己在总结中得到提高,又可以让其他人少走弯路。何乐而不为?Java按值传递和按引用传递首先问一句:Is Java “pass-by-reference” or “pass-by-value”? Java到底是按值传递还是按引用传递的呢?国外的网站上关于这个问题的原创 2017-07-20 15:48:49 · 13538 阅读 · 12 评论 -
Java进阶--static完全解析
前言现在深深的感觉到写一篇好的博客十分不容易,static关键字的考点在各种笔试面试中会经常遇到,在写这篇博客之前我也是大量的阅读了相关的文献,争取从全局上对static做一个分析,这里的全局包括JVM(Java虚拟机),JMM(Java内存模型)等。Java内存管理机制在讲static关键字之前必须先了解Java的内存管理机制,下面先分析一下Java的内存管理机制。如果有兴趣可以看看JMM(Jav原创 2017-06-13 17:08:49 · 1615 阅读 · 0 评论 -
Java并发编程--深入理解volatile关键字
前言一个月以前就准备写篇关于volatile关键字的博客,一直没有动笔,期间看了大量的文章,发现一个小小volatile关键字竟然涉及JMM(Java memory model),JVM(Java virtual machine),Java多线程同步与安全各个方面的知识,写起了非常的困难,后面附带的参考文献仅仅是我看过文献的一部分。Java memory model(Java内存模型)在讲volat原创 2017-06-12 17:39:06 · 784 阅读 · 0 评论 -
Java进阶--从源码理解Math.ceil()、Math.floor()、Math.round()
Math.ceil()首先看看Math.ceil()定义:Math.ceil()是常见编程语言中的常用代码,ceil() 方法执行的是向上取整计算,它返回的是大于或等于函数参数,并且与之最接近的整数。下面特殊情况:1.如果当前参数就是整数,直接返回。2.如果当前参数不是数值型、无穷大,或者是正0和负0,直接返回当前参数。3.如果当前参数小于0但是大于-1.0,则返回-0. 例如: Math.ce原创 2017-04-20 17:28:25 · 7410 阅读 · 0 评论 -
Java进阶--深入理解Java垃圾回收机制
一、垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。 ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的转载 2017-05-02 11:00:54 · 627 阅读 · 0 评论 -
Java中的多态总结
Java中的多态总结 1. 多态的运行机制。 2. 多态中方法与域的区别。 3. Static与final以及private对多态的影响。一:多态的运行机制。class Animal { public void bark() { System.out.println("animal bark"); }}class Dog extends Animal {原创 2016-08-07 15:57:34 · 708 阅读 · 0 评论 -
Java中的final关键字详解
Java中的final关键字详解 在一个运行时被初始化的值,你不希望它被改变,或者你需要一个编译时永不改变的常量,这时候就要用到final关键字。Final关键字的使用方式有以下几种: 1. final修饰变量,那么该变量相当于一个常量值,在初始化之后保持不变。 2. final修饰方法,那么该方法不能被重写,继承时不能被子类覆盖。 3. final修饰类,该类不能够被继承。 4.原创 2016-08-06 16:57:13 · 768 阅读 · 0 评论 -
Java中的File文件类详解
Java中的File文件类详解文件操作在Java的io操作中占有十分重要的地位,本文从以下几个方面来接受Java中对文件的操作。1. Java中新建或者删除一个文件,文件夹以及createNewFile(),delete(),mkdir(),mkdirs()函数的使用。2. 判断文件的函数:exists(),isFile(),isAbsolute(),isDirectory(),canRea原创 2016-08-02 22:00:35 · 40965 阅读 · 2 评论 -
Java中的对象流总结
Java中的对象流总结 Java中可以通过对象流将一个序列化的对象保存到硬盘中,或者硬盘中读取一个对象。对象流的存储和读取包含以下几点内容: 1. 所保存的对象必须实现Serializable接口。 2. 所保存的对象的属性也必须实现Serializable接口。 3. 最好要给该对象提供一个版本号,private static final long serialVersionId。原创 2016-08-05 16:31:04 · 830 阅读 · 0 评论 -
Java网络编程中的TCP,UDP通信方式详解
Java网络编程中的TCP,UDP通信方式详解1. TCP方式与UDP方式的区别。 2. TCP方式所使用的方法:Socket,ServerSocket以及服务端与客户端通信实例。 3. UDP方式所使用的方法:DatagramSocket,DatagramPacket以及服务端与客户端通信实例。 一:TCP方式与UDP方式的区别。 在了解TCP与UDP通信的区别之前,先看一下计算机原创 2016-08-04 17:27:15 · 4057 阅读 · 0 评论 -
Java多线程实现及同步互斥通讯详解
Java多线程详解 本文主要从三个方面了解和掌握多线程: 1. 多线程的实现方式,通过继承Thread类和通过实现Runnable接口的方式以及异同点。 2. 多线程的同步与互斥中synchronized的使用方法。 3. 多线程的通讯中的notify(),notifyAll(),及wait(),的使用方法,以及简单的生成者和消费者的代码实现。 下面来具体的讲解Java中的多线程:原创 2016-07-31 15:35:40 · 991 阅读 · 0 评论 -
Java中的IO流总结
Java中的IO流总结1. 流的继承关系,以及字节流和字符流。 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和BufferedOutputStream。以及对应的FileOutputWriter,FileInputReader,BufferedInputReader,BufferedOutputWriter。 3原创 2016-08-03 20:03:22 · 5582 阅读 · 1 评论 -
Java中正则表达式及Pattern和Matcher类详解
Java中正则表达式及Pattern和Matcher类详解 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规的代码。下面我们来由浅到深的介绍正则表达式的语法,以及在Java中常用的处理正则表达式的函数:Pattern和Matcher类。 先给出Java中常用的符号所代表的意思: 上面知道+,原创 2016-07-29 23:17:39 · 4072 阅读 · 0 评论 -
Java中的策略模式(strategy)完全解析
先给出策略模式的UML图,然后再根据之前很火的一款CS游戏来实例讲解策略模式。 怎样看上面的图呢,现在我们通过CS游戏来分析一下,在玩CS游戏时玩家在不同的场合可能会不断的进行武器的切换,一般有三种武器,刀,手雷,枪。这些武器是如何进行切换的呢,这里就用到了策略模式。 WeaponContext:public class WeaponContext { WeaponStrat原创 2016-11-02 15:47:43 · 1193 阅读 · 0 评论 -
装饰者模式(decorator)完全解析
先看一下装饰者模式的UML图: 装饰模式到底是什么呢?举个简单的例子来说明,现在有一杯白开水(WaterClass),想向白开水里面加茶叶(TeaClass),加点糖(SugarClass),或者加点盐(SaltClass)。也许会认为那还不简单吗,加茶叶的白开水就再生成一个(WaterWithTeaClass),加糖的白开水就再生成一个(WaterWithSugarClass)这样不就行了原创 2016-11-07 15:31:01 · 2593 阅读 · 1 评论 -
java进阶--Java中comparator及comparable完全解析
在讲解comparator之前,先举一个例子说明comparator的用法。假设武器库里有许多的枪,这些枪有两个重要指标一个是长度(len),另一个是威力(pow),现在对这些枪有个评价标准是:在威力相同的情况下长度越短越好,威力不同的情况下威力越大越好,对这些枪进行排序。原创 2017-04-30 16:58:47 · 1158 阅读 · 7 评论 -
Java中的string类详解
Java中的string类详解Java中的字符串类String是程序中使用十分频繁而且在各大公司招聘笔试中必考的知识点之一。本文主要String的用法进行分析。 用String来定义一个字符串一般有两种方法: 1.String str=”hello world”;, 2.String str=new (“hello world ”); 第一种方式:String str=”hel原创 2016-07-28 23:20:56 · 1772 阅读 · 0 评论 -
Java中的Scanner类(篇1)
Scanner是java.util包中的一个类,用于获取原始类型的输入,如int,double等和字符串。它是在Java程序中读取输入的最简单的方法,但是如果您想要一个输入法用于其中时间是竞争性编程中的约束的情况下不是非常有效。要创建Scanner类的对象,我们通常传递预定义的对象System.in,它代表标准输入流。如果我们想从文件中读取输入,我们可以传递一个File类的对象。 要读取某个数据类原创 2017-03-15 08:58:31 · 873 阅读 · 0 评论 -
华为机试-删除字符串中出现最少次数的字符
题目描述 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。输入描述: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。输出描述: 删除字符串中出现次数最少的字符后的字符串。输入例子: abcdd输出例子: dd 代码:import java.util.Scanner;pub原创 2017-03-02 22:38:49 · 424 阅读 · 0 评论 -
Java中比较两个日期的大小
public int compare_date(String DATE1, String DATE2) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { Date dt1 = df.parse(DATE1); Date dt2 = df.parse(DA原创 2016-12-28 15:53:34 · 1076 阅读 · 0 评论 -
JAVA中获取当前系统时间
import java.util.Date; import java.text.SimpleDateFormat;public class NowString { public static void main(String[] args) { SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);//设置日期格式原创 2016-12-19 15:01:54 · 469 阅读 · 0 评论 -
深入浅出Android中的MVP模式
MVP模式是在MVC模式的基础之上改进而来的。MVP模式分为:model,view,presenter三部分。三部分的关系如下图所示: 其中PresenterCompl实现IPresenter接口,PresenterCompl中的方法要改变view时通过调用IView中的方法来实现。Model层为PresenterCompl提供数据。 也就是说之前MVC中view的控制都是在activity中实原创 2016-10-28 15:19:51 · 657 阅读 · 0 评论