自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(263)
  • 资源 (3)
  • 问答 (10)
  • 收藏
  • 关注

原创 Java编程思想之 ------ 再谈重写equals需要重写hashcode?

这其实是个老生常谈的问题了,不过还是有人不理解,所以这里就总结一下一、介绍我们知道任何对象都直接或者间接继承Object类,而我们今天要探讨的问题就定义在Object中,瞅一瞅public boolean equals(Object obj) { return (this == obj);}public native int hashCode();可以看出来,equals方法在Object类中默认实现,其含义是比较两个引用所指向的对象是否一样(仔细理解一下)而hashcod

2020-06-01 23:05:02 239

原创 Java编程思想之 ----- 序列化和反序列化

一、入门首先当然得理解什么是序列化和反序列化序列化是将Java对象序列化成二进制(即字节序列)的过程。反序列是将被字节序列重新变成Java对象的过程。理解:本质上是改变了Java对象的生存周期,使得Java对象可以持久化存储,同时也实现了对象也可以作为网络传输的数据。二、如何实现通过继承 Serializable 接口便可实现对象的序列化。挖坑:查看Serializable 接口可以看到是空实现,具体作用下面讲解怎么实现直接上代码(ps:例子是抄的附上链接 序列化和反序列化的

2020-06-01 13:27:53 253

原创 JAVA编程思想之 ------ final关键字

一、概念final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。final所修饰的内容一旦赋值之后就不会再被改变理解:本质就是标识一个资源不能被修改二、使用1. final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。2. final修饰方法以下

2020-05-26 20:17:40 238

转载 一篇搞懂Linux目录结构

参考:https://www.cnblogs.com/fengdejiyixx/p/10822012.html一、文件系统介绍当在使用Linux的时候,如果您通过ls –l / 就会发现,在/下包涵很多的目录,比如etc、usr、var、bin … … 等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件。文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称...

2020-05-05 23:13:44 183

原创 不看后悔系列-Spring源码(七):标签解析——BeanDefinition装载、注册,IOC第一阶段完结

/*** Parse the elements at the root level in the document: * "import", "alias", "bean". * @param root the DOM root element of the document */protected void parseBeanDefinitions(Element root, Bean...

2020-04-22 14:43:03 230

原创 Springboot集成flywaydb(以及解决加载顺序问题)

一、Springboot集成flywaydb引入依赖<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>5.0.3</version> </dep...

2020-04-21 10:40:18 3999 1

原创 不看后悔系列-Spring源码(五):Resource、ResourceLoader接口体系

前面说过,IOC的构建分成三个步骤1)资源定位:定位资源文件,比如xml2)装载:将资源文件中的bean定义转换成BeanDefinition3)BeanDefinition注册:将BeanDefinition注册进beanFactory这一章就介绍有关一个步骤的基础知识在Java万物皆对象的思想下,资源(包括配置文件,url,文件等等)也会被抽象成一个对象。在Spring中,资...

2020-04-20 17:31:38 297

原创 不看后悔系列-Spring源码(六):IOC的资源文件定位、解析和BeanDefinition装载、注册

在Spring中关于BeanDefinition的装载和注册是这个方法,目的就是把BeanDefinition放到beanFactory中/** * Load bean definitions into the given bean factory, typically through * delegating to one or more bean definition readers...

2020-04-20 16:25:15 198

原创 不看后悔系列-Spring源码(三):Environment接口体系

这一章不难哦!耐心看下去,只有到最后才有恍然大悟的感觉!一、Environment接口体系介绍老规矩,先看类图设计(常回家看看)根据各路大佬解说,可以总结出来,整个Environment接口体系具体可以分成三部分:properties:属性简单来说就是对key-value数据的操作(增删改查)。从Spring角度看,properties存储了环境变量以及用户提供的key-value数...

2020-04-20 14:58:09 1733

原创 不看后悔系列-Spring源码(二):IOC阅读导航篇

前面我们介绍了Spring的整体内容,本章开始就直奔主题(上干货啦!打起精神!),开始源码的讲解。看官你要知道Spring core的核心在于对bean的管理,核心概念就IOC,那么第一部分我们就来瞅一瞅SpringIOC!!!一、IOC介绍IoC 全称为 Inversion of Control,翻译为 “控制反转”控制反转”就是由 Spring IOC 容器来负责对象的生命周期和...

2020-04-16 20:05:20 297

原创 不看后悔系列-Spring源码(一):再识Spring

参考博客:https://blog.csdn.net/weixin_42405670/article/details/83048002https://blog.csdn.net/xxieyyuhhui/article/details/80654296如果你还没有用过或者不熟悉spring框架,那其实这个教程并不适合你。这一节是Spring的概览,没有兴趣的看官可以跳过一、Spring介绍...

2020-04-13 19:46:52 263

转载 HashMap存自定义对象为什么要重写 hashcode 和 equals 方法?

HashMap的k放过自定义对象么?当我们把自定义对象存入HashMap中时,如果不重写hashcode和equals这两个方法,会得不到预期的结果。class Key{ private Integer id; public Integer getId() { return id; } public Key(Integer id) { ...

2019-10-31 19:58:18 446

原创 超卖问题

并发学习中,写收集些材料,后面些总结https://www.cnblogs.com/Leo_wl/p/4997645.htmlhttps://blog.csdn.net/weixin_38035852/article/details/81174802

2019-10-10 20:22:52 158

原创 PropertiesFactoryBean 和PreferencesPlaceholderConfigurer 使用properties配置

http://outofmemory.cn/code-snippet/3700/spring-bean-property-inject

2019-10-09 17:00:15 288

转载 linux虚拟内存统计命令:vmstat

前言Linux命令千千万,而我们在日常工作中真真切切用到的命令应该不超过50个,在接下来的日子里,我会对我经常使用的命令,以及使用过程中不熟悉的命令进行一个总结,一是自我总结,加深记忆;二是和大家分享。vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。它是对系统的整体情况进行统计,不足之处是无法对某个进程...

2019-10-09 14:35:11 290

转载 彻底理解String、StringBuffer和StringBuilder

区别: StringBuilder和StringBuffer的内部实现跟String类一样,都是通过一个char数组存储字符串的,不同的是String类里面的char数组是final修饰的,是不可变的,而StringBuilder和StringBuffer的char数组是可变的。1. StringBuilder为什么线程不安全查看JDK源码,知道append()方法public S...

2019-09-29 11:22:24 91

转载 设计模式学习八:单例模式

转载:https://www.cnblogs.com/zhaoyan001/p/6365064.html一、简介单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这...

2019-09-26 19:40:35 77

原创 设计模式学习五:迪米特法则

介绍一个对象应该对其他对象保持最少的了解2.类与类关系越密切,耦合度越大3.迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息。4.迪米特法则还有个更简单的定义:只与直接的朋友通信。5.直接的朋友:每个对象都会与其他...

2019-09-26 19:34:58 112

转载 迭代器

概述Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet…,每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作...

2019-09-24 16:38:36 74

原创 设计模式学习三:依赖倒置原则

介绍依赖倒置原则:1)高层模块不应该依赖低层模块2)抽象不应该依赖细节,细节应该依赖抽象3)依赖倒置的中心思想是面向接口编程4)依赖倒置的设计理念:相对于细节的多边性,抽象的东西要稳定的多,以抽象为基础搭建的架构比以细节为基础的架构要稳定的多,在java中,抽象指的是接口或抽象类,细节就是具体的实现类。使用接口或抽象类的目的就是制定好规范,而不涉及任何具体操作,把展现细节的任务交给他...

2019-09-23 11:46:05 61

原创 设计模式学习四:里氏替换原则

介绍依赖倒转原则:1)高层模块不应该依赖底层模块,二者都应该依赖其抽象2)抽象不应该依赖细节,细节应该依赖抽象3)依赖倒转(倒置)的中心思想是面向接口编程4)依赖倒转原则是基于这样的设计理念:相对于细节的多边性,抽象的东西要稳定的多,以抽象为基础搭建的架构比以细节为基础的架构要稳定的多,在java中,抽象指的是接口或抽象类,细节就是具体的实现类。5)使用接口或抽象类的目的就是制定好规...

2019-09-23 11:02:59 131

原创 设计模式学习二:接口隔离原则

介绍客户端不应该依赖她不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上举例类A通过接口interface1依赖于类B,类C通过interface1依赖类D,如果接口interface1对于类A和类C不是最小接口,那么类B和类D必须去实现他们不需要的方法。针对接口隔离原则,可以将接口interface1拆分成独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系...

2019-09-23 10:20:57 80

转载 java-导出Excel通用工具类

链接

2019-08-29 13:14:11 107

转载 正向代理和反向代理

理解:关键点在于对哪端是未知的,如果对于服务器端来说,客户端是未知就是正向代理。反之,对于客户端来说,服务器端是未知就是反向代理正向代理正向代理类似一个跳板机,代理访问外部资源。比如我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的...

2019-08-22 16:44:28 105

转载 评估算法及算法的时间复杂度

转载:https://baijiahao.baidu.com/s?id=1609024533531824968&wfr=spider&for=pc文章导读【对于一个给定的算法,通常要评估其正确性和运行效率的高低。算法的正确性评估不在本文范围之内,本文主要讨论从算法的时间复杂度特性去评估算法的优劣。】程序是用来解决问题的,是由多个步骤或过程组成的,这些步骤和过程就是解决问题的算...

2019-07-23 19:54:11 475

转载 并发设计模式二:多线程观察者模式

转载:https://www.cnblogs.com/luonote/p/10404316.html关于观察者模式:https://blog.csdn.net/qq_33366098/article/details/88633390在对观察者模式有了初步的了解后,接下来我们来对更具体的场景进行分析 通过观察者模式去实现如何对一个任务的生命周期进行观察首先需要定义一个枚举类型//任务生命...

2019-07-17 14:29:53 952

转载 并发编程学习十一:多线程的休息室WaitSet详细介绍

转载;https://www.cnblogs.com/ch-forever/p/10752499.html结论所有对象都会有一个wait set,用于存放调用了该对象wait方法之后进入block状态的线程;线程被notify之后,不一定会立即执行;线程从wait set中唤醒的顺序不一定是FIFO;线程被唤醒后,必须重新获取锁。举例public class WaitSe...

2019-07-17 11:50:31 187

转载 并发设计模式一:单例模式

转载:https://www.cnblogs.com/zhaoyan001/p/6365064.html一、简介单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这...

2019-07-17 11:13:11 160

原创 目标

本人刚毕业,普通二本,大学一直都是自学,所以技术一直学的都很浅薄,目前在南京的一家小公司就职。踏入社会后,来自各方面的压力。但是人肯定得有目标的。所以我决定在明天年底去杭州,然后面试阿里的工作。我知道这一路可能很艰辛,不过只是一家公司,有能力我不觉得进不去,算是现阶段的一种追求吧。哈哈!不过大家一起努力吧。 ...

2019-07-17 09:30:46 98

原创 有关学习方法的思考

近来一段时间陆陆续续学习了redis、kafka、quartz、spring源码以及docker,虽然学习的挺快,但是总感觉并不是很会,在遇到实际的问题时,并没有深刻的思维去分析,归根结底是因为对学习掌握的知识并不深刻,并没有挖到自己想要的那一层。不过通过这一段时间的思考。发现学习最好还是得有流程,有计划。不然永远都是停留在表层,得不到想要的思考。尤其是这一技术对于整个职业发展很重要,但是实际工作...

2019-07-17 09:12:48 106

转载 并发编程十:volatile关键字

转载:https://blog.csdn.net/BushQiang/article/details/81349031当多个线程进行操作共享数据时,可以保证内存中的数据可见。 相较于 synchronized 是一种较为轻量级的同步策略。缺点:volatile 不具备“互斥性”volatile 不能保证变量的“原子性”内存可见性是指当某个线程正在使用对象状态而另一个线程在同时修...

2019-07-16 10:43:00 82

转载 并发编程九:java内存模型

转载:https://blog.csdn.net/qq_34964197/article/details/80937147注意:内存模型和内存区域不是一个概念。(有兴趣自己去学习)明确:内存模型定义了共享内存系统中多线程程序读写操作行为的规范。一、CPU cache模型CPU的处理速度和内存的访问速度差距太大,于是在CPU和主存之间增加了缓存。CPU cache模型如图:Ca...

2019-07-16 10:09:38 99

转载 并发编程八:死锁

转载:https://www.cnblogs.com/xujingyang/p/6677160.html概念:当一个线程永远地持有一个锁,并且其他线程都尝试去获得这个锁时。如果线程A持有锁L并且想获得锁M,线程B持有锁M并且想获得锁L,那么这两个线程将永远等待下去,这种情况就是最简单的死锁形式。一、死锁实现//死锁类(注意这里一定要有"Thread.sleep(2000)"让线程睡一觉...

2019-07-15 17:15:30 93

转载 并发编程五:interrupt中断

转载:https://blog.csdn.net/axman/article/details/562249

2019-07-15 16:28:09 192

转载 并发编程四:wait()和notify()和notifyAll()

转载:https://www.cnblogs.com/xrq730/p/4853932.htmlwait()释放锁以及notify()不释放锁需求:线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作。想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处理?一个办法就是,B线程while(i == 10...

2019-07-15 16:06:49 144

原创 并发编程七:线程状态转化

转载:https://www.cnblogs.com/happy-coder/p/6587092.html线程共包括以下5种状态。新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从...

2019-07-12 14:25:03 105

转载 并发编程三:对象锁和类锁

转载:https://www.cnblogs.com/dolphin0520/p/3923737.html注意:对于synchronized方法或者synchronized代码块,当出现异常时,JVM会自动释放当前线程占用的锁,因此不会由于异常导致出现死锁现象。在了解synchronized关键字的使用方法之前,我们先来看一个概念:互斥锁,顾名思义:能到达到互斥访问目的的锁。个简单的...

2019-07-12 13:20:08 115

转载 Docker学习五:Dockerfile

1. FROM指定基础镜像,并且必须是第一条指令,语法如下:FROM <image>FROM <image>:<tag>FROM <image>:<digest> 三种写法,其中 < tag>和< digest> 是可选项,如果没有选择,那么默认值为latest;尽量使用官方的image作为base...

2019-07-11 13:32:18 75

转载 Docker学习四:容器

转载:http://blog.itpub.net/31556785/viewspace-2564296/1. 什么是容器?容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行,Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例且容器具备一定的生命周期。2. Docker容器和虚拟...

2019-07-11 13:18:46 110

转载 Docker学习三:镜像

转载:http://blog.itpub.net/31556785/viewspace-2564295/https://blog.csdn.net/huangjun0210/article/details/857643571. 镜像管理(1) 镜像搜索(docker search)在搭建项目环境的时候我们可以通过检索docker官方为我们提供的镜像云仓库,查看是否已经有别人构建好的镜...

2019-07-11 11:41:28 84

spring-test.zip

学习spring模板代码,学习

2020-04-16

IOC-死磕.xmind

此资源对于想要观看spring源码的童鞋会很有帮助,但是要自己一步步跟代码才会有效果,另外关于ioc实现细节众多,这里只是提供一个整体的思路,要想完全吃透,必须得配合自己写的大量测试用例来跟代码

2019-08-24

自己写spring框架.zip

总共包含10篇代码,从IOC的实现到AOP的实现。自己学习一步步写spring框架。仔细阅读临摹对于准备阅读spring框架源码的人会有很大帮助

2019-07-04

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

TA关注的人

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