自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 新一代垃圾回收器ZGC

JVM垃圾收集器的发展过程从某种角度来说可以看作人类在不断追求STW尽量短暂的过程,而这个过程中涌现了很多优秀的垃圾收集器。从开始的单线程 Serial GC到 CMS 再到 G1,直到 ZGC的出现让GC提升到了一个新的高度。虽然官方已经在JDK11中加入了ZGC并且成为了标配,但是其神秘的面纱一直未被揭开,以至于很多人还对他有些陌生。如果说CMS的出现大大缩短了STW的时间,实现了第一款伪并发GC收集器,那么G1就是一次更大的跨越,G1中提出的Fegin概念让垃圾回收变得可期待,人们能够按照自己的意愿

2020-12-22 14:18:38 680

原创 MySql —— MVCC版本链

前言MVCC版本控制是一种Mysql实现隔离级别的机制,其利用版本链以及对应的undo日志,通过快照读取的方法来控制各个级别的事务所能够读取到的信息。从事务隔离级别问题来说,MVCC能够解决脏读,不可重复读的问题,但是对于幻读则无能为力,所以这里也会顺带总结一下关于数据库幻读的解决方法,便于读者整理完整的思路。作者本身对于Mysql理解有诸多不足,如果有表述错误或者不当的地方,请及时指出,非常感谢您的阅读。隔离级别Mysql提供四隔离级别,分别用来解决四种事务一致性的问题。那么问题来了,为什么

2020-12-22 14:10:31 1950 1

原创 concurrentHashMap简析

concurrentHashMap是java.util.concurrent包下的一个类,该包中提供了非常多的容器,能够有效支持并发操作。而其中concurrentHashmap则是比较常用的一个集合,可以简单理解为一个线程安全的HashMap,至于concurrentHashmap与Hashtable的具体区别,我们在接下来说。HashMap与ConcurrentHashMap对于单线程...

2018-11-17 19:32:22 273

原创 JVM学习笔记(1)

Java虚拟机(Java Virtual Machine) 简称JVM,Java虚拟机是一个想象的虚拟机器,通过在实际计算机上的软件模拟来实现,一个Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。Java程序通过这个虚拟的机器,加载代码,管理代码存放位置,执行代码。换句话说,JVM= 类加载器 (classloader)+ 执行引擎(execution en...

2018-11-14 10:59:29 225

原创 多线程总结——尾篇

关于这一篇一直想做一个最后结尾,但是总不知道该写点什么东西比较好,最近打算把它完成ThreadLocalThreadlocal类,称为本地线程变量,或者本地线程储存。简单来说,即通过该类能为变量在每个线程中储存一个副本,在线程任何时候都能够使用该副本。在这里我们模拟下ThreadLocal如何使用public class demo { //单例模式开启数据库连接 Connec...

2018-11-09 19:49:08 222

原创 HIbernate笔记(1)

近来基本将Hibernate进行了一个理解和应用,虽然现在使用SSH框架的企业很少了,但是三大框架主流思维还是相对较为相似,Hibernate上手难度较低,更容易理解,同时也是通过XML进行配置的典型框架,我认为还是有必要进行一个了解。  Hibernate是一个持久层框架,其思想为ORM(Object Relational Maps)对象关系映射。能够通过XML文件进行配置,同时其框架为我们...

2018-11-07 20:01:27 167

原创 servlet+JSP学习笔记

之前也学习了一段时间的Servlet和JSP,但是没有实际操作,很短时间内就忘记了。最近从网上找了个很小的JSP+Servlet项目自己实现一下,希望能更加深刻的理解这两项技术如何进行交换和使用。按照自己的思维画了一张图,便于理解动态页面在Web项目中运行过程如何进行操作的。Tomcat首先从Tomcat开始学习,在我的理解里,Tomcat就像一个巨大的容器,许多Servlet在其...

2018-09-23 14:15:50 501

原创 JSP+Servlet实现注册模块

在实现注册模块时遇到了很多坑,在这里记录一下。技术内容很简单,通过form表单向后台提交一组String类型的键值对,然后我们进行获取。并将其封装进入实体类。在开始搭建环境时,按照MVC三层架构进行搭建,主要是servlet,service,dao层,各自进行各自管理。这里遇到的第一个坑是关于Date类型转换的,通过request所获取到的都是String类型,在向数据库进行封装时需要...

2018-09-18 20:34:13 522

原创 LeetCode 翻转链表 206

今天在做Leetcode时,刷到了这道题,刚开始觉得下手非常简单,但是越想越觉得需要考虑的东西很多,想了很长时间终于能够用迭代的方式解决,递归方式通过网上的实例能够理解,但是如果自己来设计,恐怕很难想到如此巧妙的方法。反转一个单链表。示例:输入: 1->2->3->4->5->NULL           输出: 5->4->3->2-&...

2018-09-10 19:42:01 164

原创 手写数据库连接池

最近复习JDBC的一些知识,看到C3P0连接池,虽然用过很多次,但是如果说具体原理和实现方法。一时半会竟然无法回答,于是把C3P0的内容看了一下,同时自己简单的按照这个思路去手写了一个数据库连接池。先来整理一下思路,对数据库连接池进行一个总结。在我们对数据库进行操作时,一般分为以下几个步骤.加载数据库驱动 获得数据库资源 获得数据库连接 编写SQL语句 关闭数据库连接在这种情...

2018-09-05 17:48:31 635

原创 多线程总结——中篇

在上一篇总结中,我们提到了synchronized关键字,在这里还要提及一个关键字,volatile。这两个关键字是在我们处理线程安全问题中非常重要的问题。synchronized  被该关键字所修饰的代码块,同一时间只能由获得锁的线程执行,其他线程进入阻塞状态 volatile  关键字则是用于修饰共享变量,使该变量能够在缓存中被改变后能被其他线程及时更新这里不进行过多的赘述,这两个关键...

2018-08-17 12:25:14 146

原创 多线程总结——开篇

Java多线程一直是面试中的必考点,满打满算学习Java也有一年的时间了。从开始入门的C语言到现在的JavaEE,过程中学了非常多的东西,但是很多基础由于开始理解的不够透彻。最近想放慢一些脚步,将自己基础扎实后再去攻坚三大框架,所以总结内容基本上都是JavaSE,数据结构算法之类的内容。线程与进程这两个概念很容易理解,我们可以认为线程为进程的子集,一个进程可以包含多个线程,这些线程独立工作...

2018-08-16 20:49:34 196

转载 转载——多线程面试题

原文链接:http://www.importnew.com/12773.html  不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。  在典型的Jav...

2018-08-16 10:41:35 178

原创 Volatile关键字

Volatile这个关键字在学习的时候并未太过注意,但是前段时间,在测试自己所用的一个小项目时,意外发现其等待时间太长,当时用的是synchronized关键字。后来使用Volatile关键字后,性能明显有所改善。Volatile 在Java是可视化的意思,字面意思来说就是被该关键字所修饰的变量能被看见。听上去类似static,但是这个可视化是对于访问该变量的各个线程来讲的。在了解该关键字...

2018-08-15 19:01:48 153

原创 造轮子——配置文件读取工具

因为自己做一些Demo的时候,数据库连接池等等使用的很频繁,而我又不喜欢将配置信息写入源码,就一直使用读取配置文件的方法,并没有使用XDOM解析XML,太麻烦了,经常使用properties,轻巧便捷,但是为了更省时,就将其封装成一个读取配置文件的工具。package 配置文件读取;import java.io.FileInputStream;import java.io.FileNo...

2018-08-15 12:10:24 149

原创 LeetCode——二叉树剪枝

非常简单的一道题,题号814整体上来说就是递归的思想,先从最底层开始剪枝,当所有子叶剪完再剪上一层,所有我们需要用后续遍历/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * ...

2018-08-14 16:20:29 361

原创 数据结构——平衡查找树与红黑树(2)

在前面我们已经粗略的说过了平衡二叉树和2-3树的基本概念,但是我们并没有进行代码的实现,原因是二叉平衡树的完美平衡要求过高,实现困难并且不利于维护,而2-3树中则需要维护2种结点(如果算上临时4-结点就是三种),同时还要将这几种节点进行相互转化,实现成本高,代码量巨大,而且其结构非常脆弱,很容易在疏忽的情况下其查找性能退化为一棵普通的二叉查找树甚至更糟。我们需要一种既能简单实现,同时又像2-3...

2018-08-13 13:23:15 392

原创 数据结构——平衡查找树与红黑树(1)

今天来总结一下红黑树,因为红黑树的复杂性,打算分为三四次总结完成,话不多说,开始。红黑树是一种特殊的二叉树,相比一般的二叉查找树,有着诸多的有点,在总结红黑树之前,我们先来谈谈AVL即平衡查找树。在理想情况下,我们的二叉查找树能够保证所有的查找都在lgN次比较中结束,但是当我们按照顺序输入时,将达到最坏的情况,二叉查找树将变成类似链表的一种结构,在这种情况下,将丧失其速度优势。当我们按...

2018-08-12 19:38:12 2043

原创 杂谈

今天基本上都在健身房,只有早晨看了看红黑树的部分知识,也没什么太多要总结的,就想将最近的健身的一些东西写下来,做一个记录。首先三大项成绩卧推        无保护  80KG     辅助    90KG 硬拉        100KG 深蹲        110KG目前净身高180,体重75KG,希望能在今年将皮脂减下去的同时保证体重,同时能提高卧推成绩到达100KG。 ...

2018-08-12 15:49:01 171

原创 LeetCode-wordPattern(单词模式)

这几天一直在刷LeetCode,看到一道很有意思的题。下面来看题干要求            给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。            这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。            输入:pattern = "...

2018-08-11 18:28:06 307

原创 数据结构——树(1)

在数据结构中,树是其中非常重要的一种,其优秀的结构和易于处理的方式使其在底层数据处理中被普遍使用。其实从名字上来看,我们就能了解到,这种数据结构就是类似我们生活中树的结构,从树根出发,出现枝杈,然后每个枝杈又分成多个分支。我们今天就先用二叉树和二叉查找树这两种较为简单的树形结构来总结下树的性质。二叉树二叉树是指每个节点只有两个分支,我们将左边的分支叫做左子树,右边为右子树。用图表示为...

2018-07-30 22:07:23 199

原创 排序算法——归并排序与快速排序

今天总结一下两种性能优秀的排序算法,归并排序与快速排序。首先,二者都运用了递归和分治的两种重要思想。在这里递归就不做详细介绍。分治:顾名思义,分而治之,这是在排序中我们非常常见的一种思想,同时也是在其他场景乃至日常生活的优秀解题方法。当我们遇到一个大的难题无从下手时,我们往往都会将其分成几个小块,当我们处理好每个小模块问题后,将其合并,大的问题便能够的以解决。同样,在我们处理排序问题时,也...

2018-07-27 20:50:08 20945 6

原创 排序算法——插入排序与希尔排序

最近一直在看《算法》,正好复习到了排序这部分,就都总结一下。插入排序插入排序和选择排序都属于非常简单而且容易理解的排序算法。插入排序就像我们平时玩的纸牌,在排顺序的时候,会按照顺序一张一张插入。在一个乱序数组中,同样如此,我们会在遍历中,将数据按照升序或降序方式向之前已经排列好的数据中进行插入。插入排序优势在于对于一个大部分数据已经有序,只有少数无序数据分布其中的模型有着很好的性能。但同样...

2018-07-26 11:02:33 223

原创 排序算法——选择排序

选择排序,除去冒泡排序之外最简单的排序算法。首先我们来总结下选择排序的基本思路。我们先要找到需要排序集合中最小的元素(或者最大,根据升序或降序,我们这里按照升序),然后将它和集合第一个元素交换位置。这里我们需要注意一下,我们在选择最小的过程中,需要时刻记录当前最小数的索引,可能这句话有些难理解,待会结合代码就能很轻松的搞懂。通过往复处理,我们就能够将整个数据进行排序。对于长度为N的数组,选...

2018-07-25 21:36:08 352

原创 数据结构——浅谈链表

上午翻源码,翻到了原来学习数据结构时自己实现的链表源码,特此总结一下。源码可能有很多不完善的地方,请多谅解。按照惯例,还是先来介绍下什么是链表。链表是一种数据结构,在内存中通过节点记录内存地址而相互链接形成一条链的储存方式。相比数组而言,链表在内存中不需要连续的区域,只需要每一个节点都能够记录下一个节点的内存地址,通过引用进行查找,这样的特点也就造就了链表增删操作时间消耗很小,而查找遍历时...

2018-07-24 11:42:37 19146

原创 数据结构——浅谈HashMap

嗯,今天我们来谈一谈HashMap,也叫哈希表,最近看了看Java中HashMap的源码,粗略的有个了解,希望通过这片文章能给和我一样在面对源码一脸懵b的小伙伴一个方向。哈希表(HashMap)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术核心就是在内存中维护着一张巨大的哈希表。而HashMap的实现原理也经常出现在各种面试题中,由此可见其重要性。目录:什么是哈希...

2018-07-23 20:32:48 6817

原创 数据结构——栈的基本总结

最近刷数据结构的黑宝书,顺便将数据结构进行下总结,就先从最熟悉的栈开始吧。栈(stack),数据结构中的一种,准确的来说,应该是数据逻辑结构。栈的基本特点为: 后进先出,就像生活中我们取放盘子,当一摞盘子在桌子上时候,我们总是会取最上边的盘子,同时,我们在放盘子时,也会放在最上面。同样这种机制也在我们浏览网页时也有出现,在我们浏览网页时,左上角的转到上一页就是这种,最近浏览的网站在最上层,...

2018-07-23 17:26:34 7159

空空如也

空空如也

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

TA关注的人

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