自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

转载 面试中如何回答volitile关键字

一,什么是JMM?JMM是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平台的统一的保证。值得注意的是,JMM是一个抽象概念,不是真实存在的。JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据,而Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访...

2018-04-12 12:05:14 804

原创 什么情况下会触发gc root?

young gc 触发的条件? 1.新生代中eden空间不足的时候会触发full gc 出发的条件1.老年代的内存空间不足的时候2.方法区内存空间不足的时候3.当young gc时,从新生代往老年代中移的对象的内存空间大小大于历次晋升的平均空间大小时4.当调用system.gc时,系统会建议执行full gc 但不一定会执行...

2018-04-01 19:59:51 583

原创 对象的空间分配策略

1.对象会优先分配在堆的Eden区上面,如果Eden区的内存不足的话,将会触发一次yuoung gc2.大对象将直接进入老年代中(指的是那种很长的字符串或者数组),经常出现大对象会导致内存还有不少空间时就提前触发垃圾收集。虚拟机中提供了一个参数用来设置,超过这个设置值的对象就会直接在老年代中分配,这样做避免在eden区与两个survior区中发生大量的复制。3.长期存活的对象将会直接进入老年代,虚...

2018-04-01 19:53:21 509

原创 说一下java的垃圾回收机制

     它使得java程序员在编写程序的时候可以不用考虑对内存的管理,垃圾回收器通常是作为一个单独的级别比较低的线程存在的,在不可预知的情况下对堆中的已经死亡的对象或者长时间没有引用的对象进行清除或回收。程序员是不可以手动调用垃圾回收器对某个对象进行回收的。程序员可以手动的调用System.gc(),通知GC来运行,但是java语言规范并不保证GC一定会运行。垃圾回收机制可以从三方面来说,也就是...

2018-04-01 17:53:01 1114

原创 对于Spring中事务的readonly属性理解

spring中readOnly的定义,并不是不能在事务中进行修改等DML操作,它只是一个“暗示”,提示数据库驱动程序和数据库系统,这个事务并不包含更改数据的操作,那么JDBC驱动程序和数据库就有可能根据这种情况对该事务进行一些特定的优化,比方说不安排相应的数据库锁,以减轻事务对数据库的压力,毕竟事务也是要消耗数据库的资源的。 只读事务仅仅是一个性能优化的推荐配置而已,并非强制你非要这样处理不可。结...

2018-03-29 12:43:15 6510

转载 java的join方法总结

虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结。  一、作用  Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。具体看代码:  public class JoinTest { public static void main(String [] args) throws Int...

2018-03-28 09:43:58 1196

原创 13. String、StringBuffer与StringBuilder的区别。

1.从线程安全方面来说String和StringBuffer是线程安全的,而StringBuilder是线程不安全的。2.从初始化方式来说String可以通过String a=“123”的方式直接赋值,而StringBuffer和StringBuilder必须通过new的方式来创建对象。3.从可变性与不可变性来说String是属于不可变对象,用final修饰,而StringBuffer和Strin...

2018-03-26 15:08:53 153

原创 12. Static class 与non static class的区别。

static classnon static class1、用static修饰的是内部类,此时这个内部类变为静态内部类;对测试有用;2、内部静态类不需要有指向外部类的引用;3、静态类只能访问外部类的静态成员,不能访问外部类的非静态成员;1、非静态内部类需要持有对外部类的引用;2、非静态内部类能够访问外部类的静态和非静态成员;3、一个非静态内部类不能脱离外部类实体被创建;4、一个非静态内部类可以访问...

2018-03-23 23:16:51 421

转载 MySQL索引背后的数据结构及算法原理(最强总结)

摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第一部分主要从...

2018-03-23 11:37:35 206

原创 浅谈String创建对象与String的intern()方法

1.String创建对象的方式String a ="123";如果常量池中有这个字面值的话,直接将a指向常量池中的这个值;否则,创建一个123,并将a指向他String a =new ("123");如果常量池中有这个对象的话,则在堆中也会创建一个对象;如果常量池中没有的话,在推中创建出这个对象的同时,在池中也会添加这样一个字面值。2.String的intern方法// jdk1.6// fal...

2018-03-21 21:08:23 511

原创 对于JVM内存模型的理解(对比jdk1.7与1.8)

首先介绍一下java虚拟机规范所规定的java内存模型:1.程序计数器(java内存模型中唯一不会发生oom的空间),负责记录正在执行的虚拟机字节码地址,如果是native方法,则计数器值为空,线程私有区2.java虚拟机栈,生命周期与线程相同。描述java方法执行的内存模型,每个方法执行时都会创建一个帧栈,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表存放了java的基本数据...

2018-03-21 20:39:25 7789 2

原创 13. String、StringBuffer与StringBuilder的区别。

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String  String最慢的原因:  String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对...

2018-03-21 11:18:56 237

转载 深入理解String

一、String类想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码:public final class String implements java.io.Serializable, Comparable<String>, CharSequence{ /** The value is used for character storag...

2018-03-21 09:46:48 227

原创 11. Interface与abstract类的区别。(含jdk8新特性)

一.在jdk8之前1.抽象类中可以普通属性,方法,抽象方法,构造方法;而接口中只能public final static属性和抽象方法;2.一个类只能继承一个抽象类;一个接口可以继承多个接口;一个类可以同时实现多个接口;3.通常使用抽象类表示一个概念(一类事物),而接口表示一种能力二。jdk8之后从JKD8开始,添加了一种新功能-默认方法。默认方法允许接口方法定义默认实现,而所有子类都将拥有该方法...

2018-03-20 23:29:58 611

原创 9. Java面向对象的三个特征与含义。

面向对象三大特性 封装,继承,多态。1.封装属性的封装和方法的封装。把属性定义为私有的, get(),set()方法。 好处是信息隐藏和模块化,提高安全性。封装的主要作用在于对外隐藏内 部实现细节,增强程序的安全性。Java支持4种不同的访问权限。   默认的,也称为default,在同一包内可见,不使用任何修饰符。 私有的,以private修饰符指定,在同一类内可见。 共有的,以public修饰...

2018-03-20 23:02:55 867

转载 8. OOM你遇到过哪些情况,SOF你遇到过哪些情况。

学习《深入理解Java虚拟机 JVM高级特性域最佳实践》,学习到了JVM中常见的OutOfMemory和StackOverFlow产生的机理,感觉非常有用。1.平时代码运行时遇到这两种错误后就可以根据具体情况去适时地调整JVM参数来处理问题2.平时写代码的时候也会多加注意,不要让代码产生这两种异常下面就记录下,当作学习笔记。首先必须了解JVM运行时数据区域方法区 用于存储已被JVM加载的类信息,常...

2018-03-19 23:31:51 1125

原创 7.try catch finally,try里有return,finally还执行么?

1.不论try,catch有没有return,finally都会执行2.try和catch中有return的话,执行到return之前会执行finally,然后执行return,但注意返回的为finally代码执行前的值package com.zgq.test;public class Test { public static void main(String[] args) { //...

2018-03-19 23:06:17 232

转载 门面设计模式

医院的例子  现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。  首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划...

2018-03-19 20:27:39 133

转载 抽象工厂模式解析例子

抽象工厂模式中的有以下的四种角色: 抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。抽象产品(Abstract Product)角色:担任这个角色的...

2018-03-15 19:33:43 317

原创 NIO与BIO的比较与理解

1.首先介绍两个概念:阻塞与非阻塞阻塞与非阻塞主要是从CPU的消耗来说的,阻塞就是CPU在遇到一个比较慢的操作时,停下来去等待,直到这个操作完成为止,才进行下一个工作。而非阻塞是指CPU在遇到一个慢的操作时,进行线程切换,先执行另一个操作,等这个慢的操作完成时,再接着完成后续的工作。虽然从表面上看,非阻塞可以提高CPU利用率,但是频繁的进行线程之间的切换,增加的CPU使用时间能不能补偿系统切换成本...

2018-03-15 11:21:13 2534

原创 6. equals与==的区别。

1.首先要理解,equals是Object类的一个方法,而==是java中的一个运算符。2.对于==这个运算符来说,当比较的是值类型(int,char,boolean)等,用==判断其相等性,而比较的是两个对象的时候,就用来判断指的是否是同一个对象。3.对于equals来说,它是要交给开发者去重写的,自己可以定义一个比较的规则,但是当重写equals方法的时候,注意要同时重写has

2018-02-06 20:08:11 3356

转载 5. Java的四种引用,强弱软虚,用到的场景。

1、强引用(StrongReference)         强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:                                   1Object o=new Object();   //  强引用当内存空间不足,Java虚拟机宁愿抛出OutOfMemory

2018-02-03 11:34:27 213

原创 4. Object有哪些公用方法?(对Object类的11个方法进行源码层次的理解)

首先看一下jdk8版本的Object类的源码:(此段内容为转载)package java.lang;/** * **Class {@code Object} is the root of the class hierarchy. * Every class has {@code Object} as a superclass. All objects, * including arra

2018-01-27 23:06:23 407

转载 对于java中的native方法的一些理解

一. 什么是Native Method(转载)简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C”告知C++编译器去调用一个C的函数。“A native m

2018-01-27 21:18:46 299

原创 3. 你重写过hashcode和equals么,要注意什么?

SUN官方的文档中规定"如果重定义equals方法,就必须重定义hashCode方法,以便用户可以将对象插入到散列(哈希)表中" 那么 SUN 公司是出于什么考虑做了这个规定呢? 在集合框架中的HashSet,HashTable和HashMap都使用哈希表的形式存储数据,而hashCode计算出来的哈希码便是它们的身份证。哈希码的存在便可以: 快速定位对象,提高哈希表集

2018-01-25 19:58:28 2147 1

原创 对于httpsession与cookie的理解

由于http协议的无状态,无连接的特性,使得不能在服务器端保存客户端传输的状态信息。因此web server引入了session的概念,通过一定方式来存储客户端传输过来的状态信息。       一   session是由web容器创建的,存储在服务器端,并且每一个session有自己独特的标识,session有一定的存活时间,默认为30分钟,当然也可以自己手动来设置session的最大间隔时间。s

2018-01-18 21:10:41 192

转载 四种mysql存储引擎

前言数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。存储引擎查看MySQL给开发者提供了查询存储引擎的功能,我这里使用的是MySQL5

2018-01-14 11:49:22 153

原创 Integer关于equals与==的比较(自动拆装箱技术和常量池技术)

首先介绍下 equals方法遵循的规则:自反性,一致性,传递性,对称性,与null相比,返回false;      1.JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后

2017-12-18 22:30:59 314

原创 java八种基本类型大小及封装类

1.整型(4个)         byte->Byte 1bit     short->Short 2bit    int->Integer  4bit   long->Long  8bit2.浮点型(2个)        float->Float 4bit    double->Double 8bit(小数定义默认double)3.字符型(1个)        char->C

2017-12-18 21:39:48 458

空空如也

空空如也

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

TA关注的人

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