自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 SpringBoot之从零搭建博客网站(可提供源码)

文字不够,图片来凑。前言为什么想要搭建这个博客?我还记得,在大二寒假的某天,同往常一样的在家解决这某个bug,不停地问度娘,很巧的碰到了一个同行在他的博客中完美的记录了我的bug的解决方案,随后我又看了看他写的其他博客文章,觉得都非常的不错,并且同时也被他博客网站的简约清新吸引,也就在那刻,心中埋下了准备自己搭建myblog的种子…于是在寒假的时候我就开始了Bo...

2018-08-05 21:53:45 76101 196

原创 JDK1.7和JDK1.8中HashMap为什么是线程不安全的?

前言只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap。但是为什么HashMap是线程不安全的呢,之前面试的时候也遇到到这样的问题,但是当时只停留在***知道是***的层面上,并没有深入理解***为什么是***。于是今天重温一个HashMap线程不安全的这个问题。首先需要强调一点,HashMap的线程不安全体现在会造成死循环、数据丢...

2019-03-30 19:57:35 74526 39

原创 LinkedHashMap源码解读

前言之前在看HashMap的源码时看到几个空实现的函数,当时也没有在意,今天在了解LinkedHashMap时突然明白了那个空实现函数(钩子函数)的意义。本文源码版本依旧是JDK1.8。LinkedHashMap钩子函数首先先来看看HashMap中所谓的钩子函数。为什么在HashMap中会有这几个空实现的钩子函数呢,原因很简单,因为HashMap的子类要用啊。接着往下看就会明白这几个...

2019-03-15 16:34:19 503

原创 从源码初步了解ConcurrentHashMap

为什么要了解ConcurrentHashMap首先先说下为什么我们需要了解ConcurrentHashMap。原因其实很简单:①HashMap在多线程环境下会有线程不安全的情况,比如在put时会造成死循环。②线程安全的HashTable效率低,HashTable的所有方法都使用Synchroized来确保线程安全,但是这也是当一个线程进行get操作时,其他线程想要get也得靠边等待。为了保证线...

2019-02-23 16:57:41 449

原创 数据库索引到底是什么鬼?

进行后端开发经常会与数据库打交道,对于数据库的一些核心基础了解太浅,比如经常听到的数据库索引、锁等,在小项目开发过程中也没有过于严格的执行索引的建立,而是想当然的对表直接设置一个自增字段作为主键,这些还是源于对于索引的认识不够深喃。索引在此之前,对于索引的认识如下:索引相当于一张表的附加表,存储着表中建立索引的字段值以及对应记录值的地址,在进行查询操作时,首先在索引表中进行查询,根据查询的...

2019-01-13 13:03:38 784 1

转载 Intellij IDEA 快捷键整理

【常规】Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ OR ],可以跑到大括号的开头与结尾Ctrl+F12,可以显示当前文件的结构Ctrl+F7,可以查询当前元素在当前文件中的引用,然后按 F3 可以选择Ctrl+N,可以快...

2019-01-08 11:06:30 420

原创 逝去的2018年,年度总结

特意选在2018年的最后一天来总结下今年都干了些什么蠢事时间过得很快,转眼间就到了一年的最后一天。在我的脑海里对于2018好像没有什么记忆,不过仔细想想今年干过的事还挺多的,于是打算花点时间对这一年做一个总结。写在前面以前,对于自己的生活都是匆匆过往,没有留下点什么东西,也感觉比较遗憾的。也许是我的记性不太好,对于一些平常到尘埃的小事,往往都是过段时间就觉得没有发生过一样,我也想让生活...

2019-01-04 11:38:24 1230 3

原创 如何通关设计模式之适配器模式

“补救模式”经常在业务开发过程中都会遇到需求变动等情况,一个再好的程序猿也难免设计出一个“完美”的业务系统。因为,需求永远是变化的。“智者千虑必有一失,愚者千虑必有一得”,我们都是平庸之人,无法做到百分百的完美系统,对于有些“意外”,该来的总会来,而为了去弥补这些意外,就需要使用到一些补救措施。这个补救措施叫做适配器模式,也可以说是一种补救模式。适配器的“补救”假如我是一个公司的老大,今天...

2018-12-30 17:24:01 202

原创 如何通关设计模式之责任链模式

责任在哪?责任链模式看名称可以理解为责任连成一条链。这也没有什么毛病,责任链模式的重点也在于“链”上,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应的结果。责任链模式的核心在“链”上,链是由多个处理者组成的。“古代妇女的枷锁”——责任链的体现中国古代对于妇女指定了“三从四德”的道德规范。“三从”是指“未嫁从父、既嫁从夫、夫死从子”,也就是说,一位女性在结婚前要听从于父亲,结...

2018-12-28 22:22:36 274

原创 如何通关设计模式之代理模式

代理模式在我们平常应用中极为常见,尤其是对于JavaWeb开发来说,使用的Spring框架中AOP(面向切面编程)就是使用的代理模式中的动态代理。代理模式的定义对其他对象提供一种代理以控制对这个对象的访问。听起来有点玄乎,换个栗子来将,平常在生活中打官司,你会请名律师,律师的任务就是帮你处理中间的所有事,而解放你的双手,律师就相当于代理,通过他我们可以完成我们想要完成的事。栗子首先先通过...

2018-12-22 20:37:34 202

原创 你必须知道的HashMap面试题

1.HashMap的工作原理,其中get()方法的工作原理?HashMap基于hash原理,通过put()和get()方法存储和获取元素。它内部使用数组+链表或红黑树的结构,通过hash运算找到bucket位置来存储Entey对象,通过equals()方法找到正确的键值对。HashMap使用链地址法来解决hash碰撞问题,当发生碰撞时,对象会存储在链表的下一个节点处。get()首先通过计算ke...

2018-12-20 22:15:28 1373 2

原创 如何通关设计模式之工厂模式

何为工厂模式?工厂模式主要为创建对象提供过渡接口。屏蔽对象的实例化具体过程,以达到灵活的作用。工厂模式分为以下三种:简单工厂模式(静态工厂模式)工厂方法模式抽象工厂模式简单工厂模式和抽象工厂模式是对工厂方法模式的扩展。与工厂方法模式也有千丝万缕的关系。下面就以工厂方法模式为例。工厂方法模式在单例模式中,要求只能存在唯一类实例,也就是只能有一个女朋友实例存在,今天,我们通过工厂模...

2018-12-19 20:49:08 181

原创 如何通关设计模式之单例模式

一、单例模式的定义单例模式可谓是设计模式中最简单的一个,没有之一。它的作用也跟其名一样,单例单例,只能生成一个该类的实例。通常我们可以使用new来创建对象,想要多少女朋友就new多少女朋友。但是现在不行了,单例模式规定,你只准有一个女朋友。于是乎…二、单例模式的实现现在我们想要有一个女朋友,而且必须有且仅有一个,多了在一起会打架,所有我们现在该怎么做呢。public class GirlF...

2018-12-18 20:01:00 194

原创 从源码深入理解HashMap(附加HashMap面试题)

HashMap向来是面试中的热点话题,深入理解了HashMap的底层实现后,才能更好的掌握它,也有利于在项目中更加灵活的使用。本文基于JDK8进行解析一、HashMap解析1. 结构HashMap结构由数组加**链表(或红黑树)**构成。主干是Entry数组,Entry是HashMap的基本单位,每一个Entry包含key-value键值对。每个Entry可以看成是一个链表(或红黑树)...

2018-12-17 14:09:48 218

原创 排序算法之基数排序

基本思想基数排序是将整数按位数分割成不同的数字,然后按每个位数分别比较,得到一个有序的序列。具体做法则是将一个数组中的每一个数统一成相同位数,位数不足高位补零。从个位开始按大小排序,当遇到位数大小相同时,要保证顺序与原数组相同。这样从个位一直到高位,就得到一个有序的序列。实现思路文字性的语言总是那么不便于理解,那么我们来通过图文说明下基数排序的思路。假设有这样一个大小为10的数组:{6,6...

2018-11-23 22:06:23 260

原创 排序算法之交换排序(冒泡排序、快速排序)

前言在前面几篇博客中总结了插入排序(直接插入和希尔排序)、选择排序(直接选择和堆排序)以及归并排序,这里将讲下两种选择排序算法——冒泡排序和快速排序。冒泡排序基本概念冒泡排序相对快速排序而言相对简单。冒泡就如同水里的鱼吐泡泡一样,刚开始时泡泡很小,但随着上浮离水面越来越近,泡泡也逐渐变大。冒泡排序也是因此而来,在每一趟排序中,依次比较相邻的两个数,选出最大的数将它移到一端,最终将得到一个有...

2018-11-12 13:52:24 1105 1

原创 排序算法之归并排序

基本思想归并排序是利用归并的思想,合并两个已排序的表,将结果输出到第三个表中。基本的合并算法是去两个输入数组A和B,一个输出数组C,以及3个计数器Actr、Bctr、Cctr,它们初始置于对应数组的开始端,当数组A[Actr]或数组B[Bctr]中的较小者被拷贝到C中的下一个位置时,相关的计数器向前推进一步。归并排序采用经典的分治策略,它将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶...

2018-11-07 14:03:38 254

原创 关于垃圾收集器的内存回收机制

前言对于垃圾收集器回收内存应该有以下几点思考:哪些内存需要回收?什么时候被回收?如何回收?哪些内存需要被回收?在Java内存运行时区域中,虚拟机栈、本地方法栈、程序计数器3个区域随线程而生,随线程而亡。所以它们不需要垃圾收集器来管理。而堆和方法区则不一样,堆中存放的对象实例和方法区中的内存只有在运行期间才知道,这部分内存的分配和回收都是动态的,垃圾收集器关注的就是这部分内存。内...

2018-11-03 22:17:13 170

原创 JVM的内存区域的划分

JVM运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。分别是方法区、虚拟机栈、本地方法栈、堆、程序计数器。程序计数器字节码解释器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令。每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响。因此程序计数器为“线程私有”内存。虚拟机栈每个方法在执行时会创建一个栈帧,用于...

2018-11-02 21:55:26 226

原创 排序算法之选择排序(直接选择、堆排序)

排序算法稳定性假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 ————百度百科排序原理每一趟从待排序序列中找出最小的元素,顺序放在已排好序的序列最后,直到全部序列排序完毕。直接排序原理假设...

2018-11-01 18:10:43 1679

原创 排序算法之插入排序(直接插入、希尔排序)

前言一个好的排序算法对于程序的优化会有很大的提升,虽然在许多语言的类库中就存在了N种排序方法,但是只有在了解了每一种排序算法后才能更好的在实际中运用这些算法。这里我主要说明插入排序中的直接插入以及希尔排序的实现。直接插入直接插入排序是最简单的排序算法之一。对于直接插入排序,它始终维护着一个有序序列,在每一次插入操作时都将元素插入到这个有序序列对应的位置上。对于一个待排序序列:3 1 4 8...

2018-10-31 16:19:45 408

原创 Java中的注解原来是这样回事的

前言在我们平常的代码开发过程中,遇见过无数的注解,大多数注解都是我们使用的框架所给我们集成好了的,相信也很少有人使用自己编写的注解,我也如此,但是只有当你了解了注解背后的秘密后,一定会对它有不同的看法。注解,也被称为元数据,可以为我们在代码中添加信息提供一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据注解的优点使用注解有许多的优点:注解能使编译器来测试和验证格式,...

2018-10-24 22:32:06 310

原创 云服务器CentOS安装mysql数据库

之前也不止一次在服务器上安装mysql了,为了以后方便,于是记录下本次安装过程。开始准备服务器:腾讯云服务器操作系统:CentOS 7.5 64位CPU:1核内存:2GB公网带宽:1 Mbps安装方式使用yum方式安装自己下载mysql安装包进行安装腾讯云的CentOS系统自带了yum,所以我这里使用yum方式安装,因为方便啊

2018-10-21 20:33:52 920

原创 完全二叉树——二叉堆(BinaryHeap)

前言优先队列是允许至少下列两种操作的数据结构:insert(插入)以及deleteMin(删除最小者),其中deleteMin的工作是找出、返回、并删除优先队列中最小的元素。insert操作等价于enqueue(入队),而deleteMin则相当于dequeue(出队)。二叉堆的性质二叉堆的使用对于优先队列的实现相当普遍。二叉堆具有结构性和堆序性:结构性质堆是一棵被完全填满的二叉树,有可...

2018-10-20 15:48:20 2908

原创 AVL平衡树的旋转与实现

前言上一篇博客中讲解了二叉查找树的实现,但是我们在对其进行删除操作时,采用的是用被删除节点的右子树中的最小元素代替该节点,并将最小元素节点删除,这样导致的后果可想而知,再经过不断的remove操作后,整棵树会处于极度不平衡状态,会导致该树的左子树过深,而右子树过浅的问题。要想解决这种问题,就需要实现一种平衡查找树。平衡查找树我们这里将介绍一种古老的平衡查找树————AVL树。平衡的条件:任...

2018-10-13 13:11:58 276

原创 查找树之二叉查找树

写在前面最近一直在专心学习数据结构,刚好看到树这一章。之前大一学习的数据结构是以C语言为基础的,然而当时也没有好好听讲,现在也是比较后悔,通过接下来的这段时间准备好好学习一下树的知识,也通过博客来记录一下对于其中的理解。概述先简单介绍一下树以及二叉树的概念。树的概念树(Tree)是一些节点的集合,这个集合可以是空集,则该树就是一棵空树。而对于一棵非空树而言,这棵树是由一个称为根root...

2018-10-07 19:48:32 240

原创 数据结构之栈篇

前言栈是一种只能在一端进行插入和删除操作的特殊线性表。其中,允许插入和删除的一端称为栈顶,另一端称为栈底。对于栈的操作有两种:进栈(push)和出栈(pop)。前者相当于插入栈元素,后者则是删除栈元素。由于对于栈元素的操作只能位于栈顶,因此,栈中最先插入的元素一定位于栈底,而最后插入的元素位于栈顶。栈又叫做“后进先出(LIFO)”表对于栈的实现有两种:通过数组实现通过单链表实现...

2018-10-07 19:46:17 463

原创 Java集合中的ArrayList和LinkedList

前言在平时的开发过程中我们会使用到许多的数据结构,其中表也许是使用最多的一种。明白Collections容器的朋友一定都是使用过其中的List容器。这里我将通过创建自己的List来说明表的源码实现。这里主要实现两个库类重要子集ArrayList和LinkedList的代码。区别ArrayList和LinkedList分别是表的两种实现方式。各自有着各自的优点和缺点。我们都知道ArrayLi...

2018-10-02 14:23:46 207

原创 死磕Java正则表达式

前言正则表达式是一种强大而灵活的文本处理工具。通过正则表达式,我们能够以编程的方式,构建复杂的文本模式,对输入的字符串进行搜索。一旦找到匹配的部分,我们就能随心所欲的对它们进行处理。初学正则表达式时,它的语法是对初学者的一门考验,只有琢磨透了其真正的内涵,我们才能从本质上看到它确实是一种简洁、动态的语言。万事开头难嘛正则表达式不像我们平常看到的那么简单,它,真的很变态。通过复杂...

2018-09-04 23:43:12 325

原创 Java多态的动态绑定和静态绑定

在上一篇文章《详解Java中的覆写与重载》中介绍了什么是覆写以及重载,如何理解区分这两者的概念还是十分重要的。而谈到覆写和重载又会引入一个概念,那就是多态。多态有两种具体的表现,那就是上面所说的覆写以及重载了。先来看个小栗子:public class Main { public static void main(String[] args) { Base ba...

2018-08-27 15:30:33 423

转载 详解Java中的覆写与重载

区别1.override 覆写(重写)重写发生在子类继承父类时,覆写(重新实现)父类中的方法。重写方法的参数列表必须完全与被重写的方法相同,否则不能称为重写而是重载。重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。重写的方法的返回值必须和被重写的方法的返回值一致。重写的方法所抛出的异...

2018-08-24 12:48:26 289

原创 Linux基础扫盲篇之高级键盘技巧

UNIX 是专为喜欢敲键盘的人设计的操作系统UNIX中存在命令行就恰好说明了这点。往往用户希望能够敲更少的键盘而实现更多的功能,UNIX也很好的解决了这个问题。省事(即用最少的击键次数执行最多的任务)是命令行最希望达到的目标之一。编辑命令行光标移动 组合件 作用 Ctrl-A 移动光标到行首 Ctrl-E 移动光标到行尾 ...

2018-08-23 20:51:06 299

原创 Linux基础扫盲篇之Shell中的重定向和管道

I/O 重定向I/O 是输入/输出的缩写,通过I/O重定向可将命令行的输入重定向为从文件中获取内容,也可以将命令行的输出结果重定向到文件中。重定向标准输出需要使用到的重定向符>,但是这只能用于标准输出,标准错误信息仍会显示在屏幕上。//将ls命令的输出保存到文件中[zhy@ubuntu ~]$ ls -l /user/bin > ls-output.txt...

2018-08-23 20:49:38 402

原创 Linux基础扫盲篇之神奇的Shell

当我们谈起命令行时,我们实际上指的是shell。当使用图形用户界面时,需要另一种叫做终端仿真器的程序与shell进行交互。终端仿真器的存在就是便于用户访问shell。shell是及其强大的,有时对于图形界面的操作使用shell能够更快的达到我们的需要。 shell是一个接收由键盘输入的命令,并将其传递给操作系统来执行的程序。//命令组成由用户名+@+机器名+当前路径(~表示用户主...

2018-08-23 20:48:46 297

原创 服务器压力测试之JMeter篇(二)

前言在上一篇《服务器压力测试之JMeter篇(一)》中我简单的介绍了一下JMeter的下载安装以及基本使用,在这一节中我将给大家说一说JMeter如何通过读取参数化进行web调试。说之前先放出JMeter的官方文档:http://jmeter.apache.org/usermanual/index.html,每次看官方文档都是件劳民伤身的活,但是就是如此还必须耐下性子来去阅读,不仅仅涉及到...

2018-08-23 20:47:45 777

原创 服务器压力测试之JMeter篇(一)

前言前两天突然发现博客网页登不进去,急坏了我,后来排查问题发现,在那天的中午某一时间段内有较多用户连接该网站,导致了服务器CPU猛升,直达100%了,这也就导致了网站无法访问。于是今天想着测试一下网站的服务器能承受的压力有多大。目前网络上可提供的压测工具有很多,Apache JMeter、Httperf、OpenSTA、LoadRunner等,在衡量了一下工具的操作以及价格之后,毅然的选择...

2018-08-23 20:46:41 1384

原创 《操作系统》第五章 虚拟存储器

第五章5.1 虚拟存储器的概述5.1.1 常规存储管理方式和局部性原理1.常规存储器管理方式的特征(1)一次性 (2)驻留性2.局部性原理(1)时间局限性如果程序中的某条指令被执行,则不久以后该指令可能再次执行;如果某数据被访问过,则不久以后该数据可能再次被访问。(2)空间局限性一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内...

2018-05-24 21:23:31 949

原创 《操作系统》第四章 存储器管理

第四章4.1 程序的装入和连接4.1.1 程序的装入1.绝对装入方式用户程序经编译后,将产生绝对地址(物理地址)的目标代码。2.可重定位装入方式根据内存的具体情况将装入模块装入到内存的适当位置。3.动态运行时的装入方式把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行。4.1.2 程序的链接...

2018-05-24 21:22:16 1196

原创 《操作系统》第三章 处理机调度与死锁

第三章3.1 处理机调度的层次和调度算法3.1.1 处理机调度的层次1.高级调度又称长程调度或作业调度。调度对象是作业。功能是根据某种算法,将外存上处于后备队列中的哪几个作业调入内存,为他们创建进程、分配资源,并放入就绪队列。2.低级调度又称进程调度或短程调度。调度对象是进程。功能是根据某种算法,决定将就绪队列中的哪个进程应获得处理机,并由分派程序将处理机分配给被选中的...

2018-05-24 21:20:53 710

原创 《操作系统》第二章 进程管理

第二章2.1 前趋图和程序执行2.1.1 前趋图前趋图是指一个有向无循环图2.1.2 程序顺序执行特点: - 顺序性:一个程序开始执行必须要等到前一个程序已执行完成 - 封闭性:程序一旦开始执行,其计算结果不受外界因素影响 - 可再现性:程序的结果与它的执行速度无关(即与时间无关),只要给定相同的输入,一定会得到相同的结果2.1.3 程序并发执行...

2018-05-24 21:18:10 603

阿里云短信验证码jar包

阿里云短信验证码jar包,测试可用,测试代码私信我可以给你发完整demo

2018-03-07

空空如也

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

TA关注的人

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