自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于租房的一点小小感触和建议

   从一个新城市开始生活,首先需要找到一个住的地方。

2020-07-15 00:06:24 327

原创 神奇的Lambda表达式-----函数式编程

Lambda表达式是jdk1.8出现的一种重要的新特性,它允许将函数作为参数进行传递(函数式编程),能够极大的简洁代码。点击查看Oracle官网有关于jdk8的新特性描述。以最常见到的使用Runnable创建线程为例。使用匿名内部类创建:Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println(.

2020-06-27 15:31:29 770

原创 Java高级技巧之注解(Annotation)

我又更新了,今天总结一下java开发中一个比较常见的东西-----------注解(Annotation),看起来很高大上的样子。说明:版本Java8(最新版本14),差的辈分有点多关于注解,在日常开发中很常见的就是@Override,这是覆写某个方法;@Deprecated表面方法已经过时,不建议使用(Java8有好多方法都被标记为已过时);还有在看一些源码的时候,很多代码都有注解的存在,...

2020-04-29 16:36:04 462 2

原创 怎么用IDEA快速生成自己的注释

今天写一期有关于IDEA使用技巧的文章吧,就是如何设置类注释和方法注释。那为什么会有这样的想法呢? 你看:对于一个强迫症患者来说,下划波浪线简直就不可容忍嘛!!!然后我发现这其实是一个插件带来的结果,Alibaba Java Coding Guidelines(阿里巴巴编程规范),它要求注释应该使用javadoc形式的注释,像这样但是又不能卸载这个插件,毕竟还是非常好用的,叮!那么...

2020-04-20 12:58:59 6330 1

原创 Java中的日期表示

博客好久没有更新了,整天腐朽,忘记学习。但是,我今天洗心革面了,我要开始认真学习了!!!注:以下代码基于JDK8(14都出来了,你还用8,太low了)一、Date类说起java中的日期表示,大家第一时间想到的应该是Date吧,毕竟它存在的时间很久,那么我们先来看看用Date类时怎么获取时间的。(一)Date基本表示Date date = new Date();System.out....

2020-04-16 21:42:10 2599

原创 行为型设计模式------备忘录模式

目录前言备忘录模式模式定义模式结构模式设计举例方案一方案二优缺点适用场景模式扩展前言在平时使用软件的过程中,难免会碰到误操作的时候,这个时候就需要有一种“回退”机制。软件可以保存用户每一次操作时系统的状态,这样如果出现误操作,就可以将存储的历史状态取出,即回到之前的状态。比如我们经常使用的Ctrl+z(撤销),就是解决误操作的问题。备忘录模式模式定义在不破坏封装的条件下,捕获一个对象的...

2020-04-01 15:29:52 149

原创 行为型设计模式------职责链模式

文章目录什么是行为型设计模式职责链模式引子什么是行为型设计模式行为型设计模式是对在不同的对象之间的责任划分和算法的抽象化。它不仅关注类和对象的结构,而且重点关注他们之间的相互作用。通过行为型设计模式,可以更加清晰的划分类和对象的职责,并研究系统在运行时不同实例对象之间的交互。在系统运行的过程中,对象的存在并不是孤立的,它可以通过相互通信和协作来完成某些复杂的功能,一个对象的运行也会影响到其他...

2020-03-27 20:16:30 192

原创 结构型设计模式----装饰模式

目录引子模式简介举个例子优缺点适用场景一些问题引子先列举一个生活中的场景。假如我们买了一套房(买不起。。),但是是一个毛胚房(指没有任何装修的房子),只能住。那么我们为了让房子变得温馨舒适,就要进行装修了,这样没有改变房子原本用来居住的功能,还增加了很多新的功能(比如做饭)。那么这一期的装饰模式就是基于这样的动机,在不改变原有功能的情况下添加新功能。那么给一个类或对象增加新的行为可以通过两...

2020-03-25 20:45:26 197

原创 结构型设计模式----外观模式

引子我们先来讲一个故事,比如我现在要组装一台电脑。方案一:去电子市场买cpu,内存条,显卡,磁盘等所有用到的部件,然后再进行组装。但是这个方案的问题在于,要对这些部件有所了解,选择性能好的,考虑不同部件的兼容性问题等。方案二:自己组装太麻烦了,找个装机公司吧,然后说自己的需求,之后就等着拿电脑就完事了。假设我们把电子市场看成一个系统,把卖配件的公司看成不同的子系统,那么客户端(我)需要...

2020-03-24 16:37:10 187

原创 结构型设计模式----适配器模式

目录简介结构型设计模式适配器模式类适配器模式对象适配器缺省适配器模式优缺点比较适用场景简介结构型设计模式结构型设计模式描述如何将类和对象结合在一起形成更大的结构。分类:类结构型和对象结构型类结构型关心得是类的组合,由多个类组合成一个更大的系统,在类结构中一般存在继承和实现关系。对象结构型关心得是类和对象得组合,通过在一个类中定义另一个类得实例得方式将它们关联起来。一般用关联关系来代替...

2020-03-22 16:32:16 226

原创 创建型设计模式-----原型模式(浅克隆、深克隆)

今天继续讲创建型设计模式中的原型模式,大家可以从标题中略微猜测一下,这个原型模式是个什么东东。简介定义:用原型实例创建对象的种类,然后通过复制这些原型创建新的实例。无须知道具体的创建细节。动机:使用原型模式来复制一个对象,从而克隆出多个一模一样的对象。说到这里大家应该明白了,这个原型模式其实就是克隆。当然克隆也有深克隆和浅克隆,下面举例子的时候我会说明的。模型结构图:说明:Prot...

2020-03-21 15:57:44 545

原创 创建型设计模式----建造者模式

目录简介模式结构举个栗子优缺点适用场景简介建造者模式:将一个复杂对象的构建和表示分离,使得同样的构造过程可以创建不同的表示。说明:对象构建型模式就是一步步创建一个复杂的对象,用户只需要指定一个复杂对象的类型就可以构建它们,不需要知道具体的内部细节。比如汽车,用户只需要指定汽车的类型(如面包车)就可以得到了,不需要知道车的轮子,发动机这些是怎么制造安装的。模式结构说明一下具体成分:Bu...

2020-03-20 13:53:00 239

原创 创建型设计模式----简单工厂、工厂、抽象工厂

目录简单工厂模式工厂模式抽象工厂模式简单工厂模式在简单工厂中可以根据字符串的不同返回不同的实例。它定义了一个专门的工厂类去创建类的实例,将类的创建和使用解耦。具体实现如下,1、定义一个接口public interface Fruit { String fruitName();}2、定义具体的实现class Apple implements Fruit { @O...

2020-03-17 14:40:35 179

原创 Java多线程---线程的取消和关闭

目录取消标志中断中断机制中断机制的正确理解如何响应中断总结启动一个线程是很容易的,无论是继承Thread类或者实现Runnable方法。大多数时候我们都是希望它能正常运行直到结束,或者自行停止。然而有时候我们希望能够提前结束线程,这个可能是用户取消了某个操作,或者应用程序需要快速关闭。Java语言本身没有提供任何机制来安全的终结某个线程。但是提供了中断(Interruption),这是一种协作...

2020-03-16 21:12:26 1250

原创 Java并发之锁优化

引子我们在java开发中常可以听到各种各样的锁,乐观锁+悲观锁、共享锁+独占锁、公平锁+非公平锁、读写锁、可重入锁、分段锁…那么为什么会有这么多的锁的类型嘞?其实java对锁的分类并没有一个非常严格的限制,我们常见的分类一般都是从锁的特性、锁的设计思想、锁的状态等不同角度来整理的。比如ReentrantLock既是独占锁(从锁的状态来说,阻塞),也是可重入锁(锁特性,同一个同步代码块是可重入的...

2020-03-13 21:29:56 164

原创 Java中的线程安全

什么是线程安全定义:当多个线程访问一个对象时,如果不用考虑这些这些线程在运行时环境下的调度和交替执行,而不用进行额外的同步 ,或者在调用方面进行其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。这个定义看起来很严格,因为它默认一个类已经封装了所有必要的正确性保障手段(如互斥同步等),让调用者不需要担心线程安全问题,更无须自己采用任何措施来保证多线程的正确调用。...

2020-03-08 14:55:10 190

原创 Java抽象类和接口

我们来聊聊抽象类和接口吧,复习和总结一下。抽象类类是具有相同功能和属性的对象的集合,而抽象类是对类的高度抽象,在类层次中处于上层,位于上层的类更具有通用性。抽象类用abstract关键字修饰。通俗得讲,含有抽象方法的类就是抽象类。但是,一个类即使没有抽象方法也是可以声明为抽象类的,如果你不想让这个类创建实例的话。抽象类的一些特性:抽象类有构造方法,但不可以被实例化。构造方法是子类用来初...

2020-03-07 22:03:52 334

原创 Java面向对象的三大特性,六大原则

今天面试被问到了java的多态、封装,答得不太好,感觉自己在这个问题上还是不太明白。所以来整理一下java面向对象思想得三大特性,五大原则。(像不像是武侠小说的三大圣地,五大门派,哈哈^ - ^)三大特性封装含义:隐藏对象的属性和实现细节,仅对外提供公共的接口来控制程序中属性的访问级别。目的:增强安全性和简化编程,使用者不必要了解具体的实现细节,仅通过外部 接口就可以访问类的成员。jav...

2020-03-07 16:59:25 352

原创 HTTP协议那些不得不说的问题

本文主要是讲一些HTTP常见的问题,可能不够系统,欢迎小伙伴们指出。如果后续有时间,我会从底层详细梳理一下TCP/IP协议栈的内容。HTTP状态码常见的状态码1XX100 Continnue:表面到目前为止都很正常,客户端可以继续发送请求2XX200 OK:请求被正常处理204 No Content:客户端的请求被服务器正常处理,服务器没有内容可返回206 Partial Co...

2020-03-06 22:59:46 336

原创 深入理解JVM(五)----七种垃圾收集器和内存分配、回收策略

一:七种垃圾收集器新生代收集器SerialParNewparallel老年代收集器Serial OldCMSparallel Old新生代和老年代收集器G1几种垃圾收集器是相互配合使用,连线代表可以写作使用。二、新生代垃圾收集器Serial概述:Serial是一类用于新生代的单线程收集器,采用复制算法进行垃圾收集。Serial进行垃圾收集时,不仅只用一条单...

2020-03-03 00:11:23 274

原创 深入理解JVM(四)垃圾回收目标和垃圾回收算法

先谈引用不论是是引用计数还是可达性分析,判断一个对象是否存活都和引用有关。java将引用分为了4种,强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Reference),虚引用(Phantom Reference),引用的强度依次减弱。强引用:指java种普遍存在的引用关系,如Object obj = new Object();这类的引用...

2020-03-02 18:30:36 244

原创 JUC---Executor框架

前言我们知道创建线程的方式有4种1、继承Thread类,重写run方法2、实现Runable接口,覆写run方法(推荐)原因:实现Runable接口避免多继承局限实现Runable接口更好的体现了共享的概念3、实现Callable接口,可以有返回值,可以抛出异常鉴于Callable平时用的可能比较少,举个简单的栗子public class CallableTest imple...

2020-02-29 21:32:58 194

原创 进程与线程的区别

进程和线程的比较1、进程是资源分配最小单位,线程是系统调度的最小单位;2、进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间;线程没有独立的地址空间,它使用相同的地址空间共享数据;3、多进程程序更健壮,一个进程死掉不会对另一个进程造成影响(源于有独立的地址空间);一个线程死掉,整个进程就死掉了(因为共享地址空间);4、CPU切换一个线程比切换进程花费小;5、创建一个线程比...

2020-02-28 15:26:55 141

原创 深入理解JVM(三)----Java线程内存模型和线程

引子在物理机中,并发执行多个任务,充分利用计算机处理器的性能,看起来顺理成章,但实际上并不像看起来那么简单。其中一个重要的原因就是绝大多数的任务不能只靠处理器“计算”就能完成,处理器至少要与内存交互,比如读取、存储数据,这个I/O操作是很难消除的。而储存设备和处理器的运算速度差了好几个量级,所以引入了高速缓存(cache)来作为缓冲。即将运算要使用的数据复制到缓存,让运算快速进行,运算结束后从缓...

2020-02-28 15:16:57 415

原创 JUC----Lock框架

JUC指java中并发编程常用的包,即java.util.concurrent。比如常见的原子类,lock框架,线程池,阻塞队列等,都在这个包内。有关于JUC的其他内容我会在后续的文章中阐述,这篇文章的主题是其中的lock框架,也是我们经常用到的并发安全框架。(写的不对的地方请大家多多指教)为什么出现Lock框架已经有了synchronized为什么还要有Lock的出现?1、首先性能方面早已...

2020-02-27 14:57:29 166

原创 深入理解JVM(二)----对象的内存分布和创建

对象的内存分布hotspot虚拟机中,对象在内存中的布局可以分为三个区域,对象头、实例数据、对齐填充。对象头hotspot虚拟机的对象头包括两部分信息,一部分用于存储对象自身的运行时数据(被称为Mark Word),如hash码,GC分代年龄,锁状态标志,偏向线程ID,偏向时间戳等。这部分在32位和64位虚拟机(未开启压缩指针)中占32位和64位。虽然对象在运行时的数据很多,远远超过32或...

2020-02-26 13:44:39 173

原创 创建型设计模式----单例模式

单例模式的特点:单例模式构造器私有持有自己类型的属性对外提供获取实例的静态方法我在每一种模式前都有相关介绍,这样看起来方便一些/* * 懒汉模式 * 延迟初始化(典型的竞态条件---先检查后执行的常见情况),这种情况下 通过一个可能失效的观测结果来查看下一步动作 * 线程不安全的 * */class Lazy { private Lazy() {} pr...

2020-02-16 10:46:08 100

原创 TCP、UDP详解

首先看下传统的OSI七层模型和TCP/IP五层模型的对应关系Tcp和Udp属于传输层协议,下面详细讲一下这两个协议。UDPUDP的特点UDP是无连接的UDP不支持可靠传输,是经最大可能交付的UDP没有拥塞控制UDP支持一对一,一对多,多对多的交互通信UDP是面向报文的,即对上层交付下来的报文既不合并也不拆分,仅添加一个UDP首部UDP的首部格式首部字段只有 8 个字节,包...

2020-02-15 15:28:21 269

原创 JAVA集合-----映射

映射java类库为映射提供了两个通用的实现HashMap,TreeMap。如果不要求有序,则使用HashMap能稍快。HashMap可以存放null的键和值如果查询一个不存在的键则返回null键是唯一的,如果对同一个键写入俩次,第二次会覆盖第一次的值更新映射项map.put(key,newValue);map.putIfAbsent(key,value);//不存在则添加...

2020-02-11 19:29:00 167

原创 常见的查找算法

本文简单介绍一下7中查找算法,首先查找就是根据给定的值,在查找表中找到它的位置。查找算法的分类:静态查找和动态查找(都是针对查找表而言的。动态表示查找表中有增删操作)无序查找和有序查找(有序查找要求必须为有序数列,无序则不要求)平均查找长度(ASL):需要和目标关键字进行比较的次数对于含有n个数据元素的查找表,查找成功的平均查找长度为:ASL = Pi*Ci的和。  Pi:查找表中...

2020-02-06 14:44:11 535 1

原创 常见的排序算法

常见的排序算法|排序方法平均时间最好时间最坏时间冒泡排序(稳定 )O(n2 )O(n)O(n2)选择排序(不稳定)O(n2 )O(n2 )O(n2 )插入排序(稳定)O(n2 )O(n)O(n2)希尔排序(不稳定)O(n1.5)快速排序(不稳定)O(nlogn)O(nlogn)O(n^2)归并排序(稳定)O(n...

2020-02-04 20:49:46 223

转载 字符串的全排列算法

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路这是一个递归求解的问题,递归求解的四个特点:1、必须有可达到的终止条件,否则程序陷入死循环2、子问题在规模上比原问题小3、子问题可通过再次递归调用求解4、子问题的解应能组合成整个问题的解对于字符串的...

2020-01-20 19:03:53 496

转载 深入了解JVM---压缩指针

什么是压缩指针通常64位JVM消耗的内存会比32位的最多会多用1.5倍,这是因为对象指针在64位架构下,对象指针长度会翻倍。 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不愿意看到的。 幸运的是,从JDK 1.6 update14开始,  64 bit JVM正式支持了 -XX:+UseCompressedOops (需要jdk1.6.0_14) 这...

2020-01-20 15:23:31 1050

原创 深入理解JVM(一)JAVA内存区域和内存溢出异常

JAVA内存区域      上图展示了java内存划分成了哪几个区域,这些区域都有各自的用途,创建和销毁时间,有的区域随着虚拟机的启动而存在,而有的则依赖用户线程的启动和结束而创建和销毁。      接下来我们来说说具体的区域。程序计数器  &nbs...

2020-01-20 14:46:54 146

原创 二叉搜索树转为有序的双向链表

将二叉搜索树转为有序的双向链表什么是二叉搜索树?二叉搜索树(二叉排序树)或者是一颗空树,或者是具有一下性质的二叉树:1、如果左子树不为空,则左子树所有节点小于根节点2、如果右子树不为空,则右子树所有节点大于根节点3、它的左右子树均为二叉搜索树题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。简单来看,就是执行...

2020-01-05 20:03:52 220

原创 复制一个复杂链表

复杂的链表的复制题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。节点结构:public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = nul...

2020-01-05 11:35:53 192

原创 二叉树中和为某一值的路径

二叉树中和为某一值的路径题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:递归先序遍历二叉树,判断若是根节点,且目标值已经为0,则找到一条路径。移除最后一个节点返回上一层。代码如下:public class Solutio...

2019-12-29 16:39:28 109

原创 判断是否为某二叉搜索树的后序遍历

二叉搜索树的后序遍历二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree)。二叉搜索树是具有有以下性质的二叉树:(1)若左子树不为空,则左子树上所有节点的值均小于或等于它的根节点的值。(2)若右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值。(3)左、右子树也分别为二叉搜索树。题目描述:输入一个整数数组,判断该数组是不是某...

2019-12-29 15:49:47 227

原创 判断弹栈顺序

判断弹栈顺序题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)**思路:**利用辅助栈遍历压栈顺序,每次判断栈顶元素是否与给定出栈序...

2019-12-28 18:55:58 231

原创 顺时针打印矩阵

顺时针打印矩阵题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10思路1:用4个变量控制打印的边界,顺时针打印即可代码如下:import java.util.ArrayL...

2019-12-28 17:10:31 109

空空如也

空空如也

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

TA关注的人

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