自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring控制反转和依赖注入

引言:学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,下面这篇文章就是从原理到实现方式各个角度分析了IOC和DI的区别,谨以此作为交流学习。一、概念解释IOC(控制反转):是对组件对象控制权的转移,从代码本身转移到了外部容器,通过容器来实...

2019-08-04 11:22:39 345

原创 线程的同步和异步

一、同步和异步的概念同步:就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作。根据这个定义,Java中所有方法都是同步调用,应为必须要等到结果后才会继续执行。我们在说同步、异步的时候,一般而言是特指那些需要其他端协作或者需要一定时间完成的任务。简单来说,同步就是必须一件一件事做,等前一件做完了才能做下一件事。异步(Async) 异步与同步...

2019-07-29 20:23:21 1832

转载 多线程面试问题汇总

1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:(1)发挥多核CPU的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少...

2019-07-29 19:54:50 181

原创 线程(二)----五种状态的转换

一、线程状态线程的状态转换是线程控制的基础。线程状态的转换图如下:(五种)1、新状态:线程对象已经创建,还没有在其上调用start()方法。2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。3、运行状态:线程调度程序从...

2019-07-29 19:50:36 865

原创 线程(一)

一、Java中的线程在Java中,“线程”指两件不同的事情: 1、java.lang.Thread类的一个实例; 2、线程的执行。在 Java程序中,有两种方法创建线程: 一是对 Thread 类进行派生并覆盖 run方法; 二是通过实现Runnable接口创建。 使用java.lang.Thre...

2019-07-26 17:06:50 129

原创 进程和线程的区别

一、概念线程:是CPU独立运行和独立调动的基本单位,是一个程序内部的顺序控制流。进程:进程是资源分配的基本单位;进程是系统中正在运行的一个程序,程序一旦运行就是进程。二、进程和线程的区别1、地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。2、资源拥有:同一进程内的线程共享本进程的资源,但是进程之间的资源是独立的。3、一个进程崩溃后,在保护模...

2019-07-26 16:37:33 333

原创 生产者-消费者模型

一、引言 生产者和消费者问题是线程模型中的经典问题。 什么是生产者-消费者模型? 生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。 现实生活中的例子:12306抢购火车票、...

2019-07-26 15:21:35 167

原创 强引用、软引用、弱引用、虚引用

一、引言 众所周知,Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商...

2019-07-26 14:31:59 184

原创 Hashtable、HashMap和cocurrentHashMap的异同

HashTable(1)底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化(2)初始size为11,扩容:newsize = olesize*2+1(3)计算index的方法:index = (hash & 0x7FFFFFFF) % tab....

2019-07-24 17:01:52 327

原创 设计模式(六)观察者模式

观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。类图: ...

2019-07-24 16:38:03 130

原创 红黑树

红黑树是一种特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。其原理产生于2-3-4树,它是用来定义红黑树规则的(面试可能会问到)红黑树的每个节点上都有存储位表示该节点颜色,节点非黑即红每个插入的结点最初都为红的,然后,进行调整以下是其具体性质:* 每个结点非红即黑* 根结点是黑的* 每个红结点...

2019-07-24 15:51:23 181

原创 Java有关迭代器浅谈

一、概念 可迭代是Java集合框架下的所有集合类的一种共性,也就是把集合中的所有元素遍历一遍。迭代的过程需要依赖一个迭代器对象,那么什么是迭代器呢? 迭代器(Iterator)模式,又叫做游标模式,它的含义是,提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。 注意:Java的集合框架的集合类,有的时候也称为容器。 ...

2019-07-23 16:35:22 234

原创 Java堆和栈的区别

一、栈和堆的概念: 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈...

2019-07-23 15:29:07 177

原创 GC的几种垃圾收集器

引言:如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现Serial收集器 串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会Stop The World(服务暂停)参数控制:-XX:+UseSerialGC串行收集器 ...

2019-07-23 10:03:39 423

原创 JVM的GC原理

垃圾回收机制1、什么是GCGC(GarbageCollection)是垃圾自动回收机制,将对象中不再被使用的对象进行回收,主要作用于堆内存。在Java中开发人员无法使用指针来自由的管理内存,GC是JVM对内存(实际上就是对象)进行管理的方式。GC使得Java开发人员摆脱了繁琐的内存管理工作,让程序的开发更有效率。Java中GC的主要任务是:分配内存 确保被引用对象的...

2019-07-22 11:43:37 299

原创 序列化ID的详解及其作用

有关序列化和反序列化的内容前面已经整理过,这里就不再继续,详见链接:https://blog.csdn.net/Snowing1234_5/article/details/93710280本文主要描述的是序列化ID 和 其作用一、序列化实现方式序列化Serializable的方式特别简单 实现Serializable接口,再在类中声明如下这一个属性即可。private sta...

2019-07-22 10:50:09 3368

原创 String、StringBuffer和StringBuilder的区别

一、String、StringBuffer、StringBuilder概念1 、StringString:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。String类的包含如下定义:/** The value is used for character storage. */private final char value[];...

2019-07-21 10:38:20 148

翻译 "==",equals和hashcode的作用区别

参考:https://blog.csdn.net/hla199106/article/details/469077251."=="(1)如果是基本数据类型,也称原始数据类型byte,short,char,int,long,float,double,boolean 可以直接使用==来比较其对应的值是否相等int a=1,b=1;System.out.prin...

2019-07-21 09:54:13 125

原创 volatile关键字

volatile是java中的一个类型修饰符。它是被设计用来修饰被不同线程访问和修改的变量。如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。一、volatile关键字特性1、可见性,但不能保证原子性可见性指的是在一个线程中对该变量的修改会马上由工作内存(Work Memory)写回主内存(Main Memory),所以会马上反应在其它...

2019-07-20 18:01:00 103

原创 final 、finally 、finalize的区别

一、final如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在new一个对象时初始化(即只能在声明变量或构造器或代码块内初始化),而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,...

2019-07-20 16:25:59 118

翻译 this 和 super的区别

参考:https://www.cnblogs.com/hasse/p/5023392.htmlhttps://blog.csdn.net/mm_3_by/article/details/821943691、this关键字(1.)每个类的每个非静态方法(没有被static修饰)都会隐含一个this关键字,它指向调用这个方法的对象;当在方法中使用本类属性时,都会隐含地使用this关键字,当然也可...

2019-07-20 15:35:29 91

翻译 Java内部类

具体详见参考:https://blog.csdn.net/sinat_34344123/article/details/81942427**一、为什么要使用内部类?java内部类有什么好处?为什么需要内部类?首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口。由于内部类对外部类...

2019-07-20 11:01:09 91

翻译 抽象类和接口的区别

参考:https://blog.csdn.net/fenglibing/article/details/2745123https://blog.csdn.net/qq_41933748/article/details/82670072抽象类和接口的区别(理解上的):首先,需要明确的是选择抽象类和接口的依据是什么?接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表...

2019-07-20 10:11:55 92

原创 覆盖(重写)与重载的区别

参考:https://blog.csdn.net/xujiangdong1992/article/details/76853118一、覆盖(又叫做重写)具体解释是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。重写(覆盖)的规则:1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.2、重写方法的访问修饰符一定...

2019-07-19 11:12:23 3963

翻译 多态的实现机制

参考:https://blog.csdn.net/bornlili/article/details/55213563http://blog.sina.com.cn/s/blog_5fd19dd60102wmvp.html一、Java多态的实现机制是什么?答:开门、开窗户、开电视。这里的“开”就是多态。多态性可以简单的概括为“一个接口,多种方法”。在程序运行的过程中才决定调用哪个函数。多态性...

2019-07-18 10:42:02 296

翻译 组合与继承的区别联系

参考:https://blog.csdn.net/qq_31655965/article/details/54645220https://blog.csdn.net/zh15732621679/article/list/2?t=1&组合优点:1.- 不破坏封装,整体类与局部类之间松耦合,彼此相对独立2.- 具有较好的可扩展性3.- 支持动态组合。在运行时,整体对象可以选择不同类...

2019-07-18 09:54:55 808

原创 Java对象的初始化顺序

初始化顺序(1)父类静态字段初始化(2)父类静态代码块(3)子类静态字段初始化(4)子类静态代码块(5)父类普通字段初始化(6)父类构造代码块(7)父类构造函数(8)子类普通字段初始化(9)子类构造代码块(10)子类构造函数代码实现:package com.tulun.src1;public class tt extends BaseClass { s...

2019-06-28 10:50:38 116

转载 设计模式(五)装饰模式

一、概念装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,可以在不创建更多子类的情况下,将对象的功能加以扩展,是继承关系的一个替代方案。用意:动态地为对象添加一些额外的功能,就好比为房子进行装修一样。特点:装饰者和被装饰者拥有相同的超类型(可能是抽象类也可能是接口);在装饰类中包含一个被装饰组件类的对象引用;可以为被装饰对象添加额外的功能;在装...

2019-06-27 09:47:32 120

原创 设计模式(四)迭代器模式

迭代器(Iterator)模式又叫作游标(Cursor)模式,是一种对象的行为模式。提供一种方法顺序访问一个聚合(指一组对象的组合结构,如:Java中的集合、数组等)对象中各个元素,而又不需暴露该对象的内部表示。**迭代器模式的本质:**控制访问聚合对象中的元素。设计意图:无须暴露聚合对象的内部实现,就能够访问到聚合对象中的各个元素。迭代器模式的角色构成(1)迭代器角色(Iterator...

2019-06-27 08:57:54 193

转载 设计模式(三)代理模式

一、基本概念1、代理模式:代理对象一般用来对既有对象增加或者修改一些功能使用,是源对象的副本。一般拥有源对象的所有方法,java中一般都是继承原来的对象。可以不修改原来对象前提下,实现我们期待的行为。在实际应用中,根据单一职责原则,代理对象一般只是负责代理,不负责其它处理逻辑,处理逻辑一般由handler完成2、使用目的:解决在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在...

2019-06-26 15:43:56 145

原创 设计模式(二)工厂模式

**工厂模式:**主要是为创建对象提供了接口,主要分为三类:简单工厂模式(Simple Factory) 、工厂方法模式(Factory Method) 、抽象工厂模式(Abstract Factory)使用工厂模式的两种情况:(1)在编码时不能预见需要创建哪种类的实例。(2)系统不应依赖于产品类实例如何被创建、组合和表达的细节一、简单工厂模式简单工厂模式又叫静态工厂方法模式(Stati...

2019-06-26 15:08:33 122

原创 设计模式(一)单例模式

**单例模式:**无法使用new对一个对象进行实例,只能调用内部的一个方法,拿到一个对象实例。1、单例模式的好处:单例模式适合于应用中频繁创建的对象,如果是重量级的对象,更应该使用单例模式。比如配置文件,如果不采用单例模式的话,每个配置文件对象的内容都是一样的,创建重复的对象就会浪费宝贵的内存,所以有必要使用单例模式,达到性能的提升,减小了内存的开销和GC的压力。2、单例模式实现的一般方式:...

2019-06-26 11:28:33 94

原创 序列化和反序列化

一、序列化**1、序列化:**把对象转换为字节序列存储于磁盘或者进行网络传输的过程称为对象的序列化。具体如下:把对象的字节序列化永久的存放在磁盘上,通常放在一个文件夹下网络传输过程中产生的数据 对象(抽象) 具体的数字 英文 文档。。。。2、序列化作用:① 想把内存中的对象保存到一个文件中或者数据库中时候;② 想用套接字在网络上传送对象的时候;③ 想通过RMI传输对象的时候一些...

2019-06-26 09:11:41 331

原创 IO文件读取以及解决中文乱码

一、读取文件内容的三种方式1、文件的读取主要介绍两种常用的读取方法。按行读取和按字符块读取。1.1 一次读取一行作为输入//按行读取文件内容 public static String Read1(String infile) throws Exception //infile="data/in.txt" { StringBuffer sb = new StringBuffer();...

2019-06-26 08:30:39 3065

原创 IO操作filename与filefilter、List 和 listFiles()的区分

1、Filename 与filefilter 区别** FilenameFilter和FileFilter接口都是用于文件的筛选。但是方法的参数有所不同:**FilenameFilter 接口:boolean accept(File dir,String name); 其中dir为当前目录,name是文件名。其中第一个参数File dir为需要过滤文件所在目录,第二个参数为对应的文件名。...

2019-06-25 14:14:31 492

原创 IO流的常用方法总结

1、节点流和处理流boolean exists() //表示当前路径是否存在boolean isFile() //判断当前路劲是否是文件boolean isDirectory() //判断当前是否为目录boolean isHidden() //判断是否是隐藏文件void deleteOnExit() //在程序退出时删除boolean delete() //直接删除boolean c...

2019-06-25 09:57:52 1066

原创 IO流(一)

1、IO流的概念**流:**代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象**流的本质:**数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。**流的作用:**为数据源和目的地建立一个输送通道。2、IO流的分类按照不同的分类方式,可以把流分为不同的类型。常用的分类有三种(1)按照流的流向分,可以分为输入流和输出流。输入流:只能从中读取数据,而不...

2019-06-25 09:37:22 150

原创 Web总结(一)

1、什么是Web?Java Web,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分,主要是为了实现网络交互。Web系统应用的是B/S,是一种浏览器服务器模型,主要应用的协议是HTTP协议和HTTPS协议。HTTPS协议相比于HTTP只是多了一层加密的过程。(HTTP协议属于应用层协议)2、Web系统的消息传递过程:(应用的是TCP的三次...

2019-06-25 08:37:05 415

原创 网络--TCP的传输

TCP的三次握手:(1)第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。(2)第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_...

2019-04-17 10:38:02 209

原创 快排和堆排

一、快速排序最常用的排序算法,速度通常也是最快的。时间复杂度:O(nlogn)最坏:O(n^2)空间复杂度:O(nlgn)不稳定(比如 5 3 3 4 3 8 9 10 11 这个序列,在中枢元素5和3交换就会把元素3的稳定性打乱)实现原理:快排主要是通过选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。依此递归,达到总体待排...

2019-04-17 10:29:41 3489

空空如也

空空如也

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

TA关注的人

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