自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 红黑树

红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型用途是实现关联数组。它在1972年由鲁道夫·贝尔发明,被称为"对称二叉B树",它现代的名字源于Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文。红黑树的结构复杂,但它的操作有着良好的最坏情况运行时间,并且在实践中高效定义节点是红色或黑色根是黑色所有叶子都是黑色(叶子是NIL节点)每个红色节点必须有两个黑色的子节点(从每个叶子到根的所有路径上不能有两个连.

2021-05-18 23:41:24 164

原创 栈帧结构

栈帧栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表丶操作数栈丶动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧。与当前栈帧相关联的方法,称为当前方法。局部变量表局部变量表(Local Variable Table)是一组变量值存储空间,用于存放方法参数和方

2021-04-20 04:59:59 2747

原创 虚拟机类加载机制

title: 虚拟机类加载机制date: 2021-04-15 22:01:58categories: JVMtags: JVM前言虚拟机类加载机制概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验丶转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载丶验证丶准备丶解析丶初始化丶使用和卸载7个阶段。其中验证丶准备丶解析3个部分统称为连接。Java.

2021-04-19 00:38:26 171

原创 Java Class文件详解

Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列才Class文件之中,中间没有添加任何分隔符。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分隔成若干个8位字节进行存储。根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两个数据类型:无符号数和表。无符号数:属于基本的数据类型,以u1丶u2丶u4丶u8分别代表1个字节丶2个字节丶4个字节丶8个字节的无符号数,无符号数

2021-03-11 03:13:30 1282

原创 Java 内存分配与回收策略

内存分配对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代。对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。注:Minor GC 和 Full GC有什么不一样吗?新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为

2021-03-04 04:10:34 200

原创 Java 垃圾收集器

Serial

2021-03-02 02:07:32 376 2

原创 Java对象详解

1丶对象的创建当虚拟机遇到一个new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载丶解析和初始化过。如果没有,那么必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。假设Java堆中内存是绝对规整的,所有用过的内存都放一边,空闲的内存放别外一边,中间放着一个指针作为分界点的指示器,那所分配的内

2021-02-18 01:18:34 457 1

原创 Java 内存模型与线程

1丶硬件的效率与一致性由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器的运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据复杂到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也为计算机系统带来更高的复杂度,因为它引入了一个新的问题:缓存一致性。在多处理器系统中,每个处理器都有自己的高速缓存

2021-02-17 03:26:18 111 1

原创 TCP 三次握手 四次挥手

TCP的连接和建立TCP报文格式TCP的连接和建立主要关注报文中的几个字段字段长度(bit)含义序号32TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。确认号32是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。ACK1确认号有效标识。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。SYN1同步序号

2021-02-16 17:04:02 76

原创 TCP报文格式

IP数据报TCP报文字段长度(bit)含义源端口16源端口,标识哪个应用程序发送。目的端口16目的端口,标识哪个应用程序接收。序号32序号字段。TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。确认号32确认号,是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。数据偏移4数据偏移,即首部长度,指出TCP报

2021-02-16 04:36:36 330

原创 责任链模式

public abstract class AbstractHandler { /** * 下一个处理请求 */ protected AbstractHandler nextHandler; /** * 设置下个处理节点 */ public void setNextHandle(AbstractHandler nextHa...

2021-02-04 15:57:38 74

原创 Java 垃圾回收基础

1丶引用计数算法引用计数算法的基本思路是就是给对象添加一个引用计数器,每当一个地方引用它时,计数器的值就加1;但引用失效时,计数器的值就减一;任何时刻计数器为0的对象就是不可能再被使用的。缺点:引用计数算法它很难解决对象之间互相循环引用的问题。2丶可达性分析算法可达性分析算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。即使是不可达的对象,也并非是“非

2020-07-28 11:19:40 121

原创 Java JVM内存区域

前言Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将包括以下几个运行时数据区域。1丶程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支丶循环丶跳转丶异常处理丶线程恢复等基础功能都需要依赖计数器来完成。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行

2020-07-28 11:13:13 85

原创 java.util.Random 源码解析

public Random() { // 生成种子 seedUniquifier方法和System.nanoTime()时间进行 异或运算 this(seedUniquifier() ^ System.nanoTime());}private static final AtomicLong seedUniquifier = new AtomicLong(86825228071...

2020-07-28 11:08:54 196

原创 mybatis 拦截器实现 源码解析

@Intercepts —— 表明当前对象是一个Interceptor。@Signature —— 表明要拦截的接口、方法以及对应的参数类型。

2020-07-28 11:05:32 190

原创 Java8 Stream 流式编程

简介Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。1.创建流stream() : 为集合创建串行流parallelStream() : 为集合创建并行流List<String> list = Arrays.asList("A", "B", "C", "D");// 创建串行流对象Stream stream = list.str...

2020-07-25 21:51:34 255

原创 LRU算法 基于LinkedHashMap实现

简介LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。核心:如果数据最近被访问过,那么将来访问的几率也更高利用LinkedHashMap实现1.利用LinkedHashMap中的构造方法要完成LRU, accessOrder必须为truepublic LinkedHashMap(int initialCapacity,...

2019-09-24 01:13:40 201

原创 Java 实现 二叉树

1.定义节点/** * 定义节点 */public class BinaryTreeNode { private BinaryTreeNode leftChild ; // 左子树 private BinaryTreeNode rightChild; // 右子树 private Integer date; public BinaryTreeNod...

2019-09-02 23:33:30 74

原创 ES6 Map和Set

1.MapES6中提供了Map数据结构,是键值对的集合方法方法描述clear移除Map对象的所有键/值对forEach对映射中的每个元素执行指定操作。delete从映射中移除指定的元素get返回映射中的指定元素set添加一个新建元素到映射has如果映射包含指定元素,则返回 true示例var m = new Map...

2019-04-15 11:55:39 534

原创 《剑指offer》合并两个排序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:假设list1的头节点小于list2的头节点,合并后的链表的头节点必是list1的头节点,同理list2也是一样,比较完头节点之后,再将list1的下一个节点与list2的头节点进行比较,同样小的节点进入合并后的链表,然后再比较,直到两个链表比较完。递归public ListNode Me...

2019-04-03 10:37:02 104

原创 QT 多线程下信号和槽的使用

Qt的信号槽机制可以将任何继承自QObject类的对象捆绑在一起,使不同对象之间能相互通信。QThread继承自QObject,能够发射信号和定义槽函数thread.h#ifndef THREAD_H#define THREAD_H#include <QThread>#include <QString>class Thread : public QThre...

2019-04-03 09:56:39 2766 1

原创 《剑指offer》跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路从第一次跳分析,如果第一次跳的是1级台阶,那么剩下的是n-1个台阶,跳法是f(n-1),如果第一次跳的是2级台阶,那么剩下的是n-2个台阶,跳法是f(n-2),则总跳法为: f(n) = f(n-1) + f(n-2)。可以看出这是一个斐波那契数列public...

2019-03-25 13:08:45 147

原创 Windows下Nginx+PHP+ThinkPHP的安装与配置

下载:PHP: PHP5.6Nginx:NginxThinkPHP:ThinkPHPRunHiddenConsole:RunHiddenConsole 隐藏控制台界面工具1.解压PHP5.62.解压Nginx3.解压ThinkPHP:4.修改PHP文件夹目录下的php.ini-development文件,把“-development”去掉就可以,文件内容先不做任何修改。...

2019-03-25 10:39:15 1030

原创 《剑指offer》斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39动态规划不要用递归,数值大可能导致栈溢出public int Fibonacci(int n) { if(n <= 0)return 0; if(n == 1 || n == 2) return 1; int f1=...

2019-03-23 23:05:44 130

原创 《剑指offer》链表中倒数第k个结点

输入一个链表,输出该链表中倒数第k个结点。思路定义两个指针:top和tail。tail指针先走 k-1 步,到达第 k 个节点。然后两指针同时齐步走,当tail指针到达末尾时,top指针在倒数第 k 个节点上。public ListNode FindKthToTail(ListNode head,int k) { ListNode tail = head; ...

2019-03-22 10:33:42 106

原创 Hbase 映射 Hive

Hive内部表没被external关键字修饰,数据由Hive自身管理,hive drop掉此表时,hbase也被dropcreate TABLE hiveTableName( key string, name string)STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH...

2019-03-20 15:49:21 220

原创 《剑指offer》反转链表

输入一个链表,反转链表后,输出新链表的表头。思路把它们分成两部分: 未反转部分(一条链表) 和 已反转部分(别外一条链表)。这两部分是断开的,注意保存这两条链表的头节点。原链表:A -> B -> C -> D -> E(已反转部分)A<-B <-C (断开) D-> E (未反转部分)准备两个空结点 next节点和pre节点:next节...

2019-03-20 12:01:23 80

原创 《剑指offer》用两个栈实现队列

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路把元素压入stack1,弹出元素时先查看stack2是否为空,如果stack2不为空则弹出;stack2为空则将stack1中的元素全部弹出放到stack2import java.util.Stack;public class Solution { Stack&lt;Integer&gt;...

2019-03-18 09:33:01 86

原创 《剑指offer》从尾到头打印链表

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。利用栈实现先进后出的思路public ArrayList&amp;amp;lt;Integer&amp;amp;gt; printListFromTailToHead(ListNode listNode) { ArrayList&amp;amp;lt;Integer&amp;amp;gt; list = new ArrayList&amp;amp;lt;&amp;amp;gt;();

2019-03-17 01:33:53 87

原创 Hive 一些操作记录

无效ID在关联时的数据倾斜问题解决方法:函数过滤 null把空值的id变成一个字符串加上随机数,就能把倾斜的数据分到不同的Reduce上,从而解决数据倾斜问题。因为空值不参与关联,即使分到不同 的 Reduce 上,也不会影响最终的结果。SELECT * FROM tableName1 a LEFT OUTER JOIN tableName2 b ON CASE WHEN a.id ...

2019-03-12 10:23:26 635

原创 《剑指offer》 二维数组中的查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路利用二维数组由上到下,由左到右递增的规律,那么选取左下角或者右上角的数字与要查找的数字。首先选取数组中右上角的数字。当要查找的数字小于该数字时,那么要查找的数字必定在该数字所在列的左边,即列–;当...

2019-03-11 23:38:47 119

原创 《剑指offer》 替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy,则经过替换之后的字符串为We%20Are%20Happy时间复杂度为O(n)解法:先统计字符串中空格的个数,再计算出空格替换成%20后字符串的长度,然后从后往前处理,准备两个指针,一个指向新字符串的末尾,一个指向旧字符串的末尾。通过向前移来完成字符复制的过程。public String ...

2019-03-11 16:39:15 115

原创 中兴捧月-数字化婚姻配对

题目:建立一个模型,来模拟推导社会男女择偶过程。为了模型简化,一个人的特性指标有三个,这里假设为财富、样貌、品格,每个指标均可取值1-100之间任意数字。同样也对这3项指标有自己的需求。这3个需求值取值范围都在1-98间,当然三者的和必须为100.所以任意一个人可以用以下数组来表述:G(A、B、C、A1、B1、C1)G代表男,M代表女。举例G11(80、50、40、10、30、60),表示...

2019-03-06 00:25:41 471

原创 Java 简单实现数组

简单实现数组public class Array&amp;amp;lt;E&amp;amp;gt; { private E[] array; private int size; //无参构造函数,默认容量为10 public Array(){ this(10); } //有参构造函数 public Array(int capacity){ ...

2019-03-04 23:03:12 250

原创 Java 简单的实现单链表

简单的实现单链表public class Link&amp;amp;lt;E&amp;amp;gt; { private Node&amp;amp;lt;E&amp;amp;gt; head;//头结点 private int size;//个数 public Link(){ this.head = new Node&amp;amp;lt;&amp;amp;gt;(); } //结

2019-03-01 14:55:47 303

原创 Java通过JDBC操作Hive

连接前请确保hive开了远程服务连接驱动import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class HiveJDBCUtils { private static String driverName = &amp;amp;amp;quot;org.apache.hive.jdbc.Hi...

2019-02-26 12:15:55 3388

原创 Java 实现栈

链式存储结构实现public class LinkStack&amp;amp;lt;E&amp;amp;gt; { //链栈的节点 private class Node&amp;amp;lt;E&amp;amp;gt;{ Node&amp;amp;lt;E&amp;amp;gt; next; E e; public Node(E e,Node&amp;amp;lt;E&amp

2019-02-24 01:53:57 126

原创 Java 实现队列

链式存储结构实现public class LinkQueue&amp;amp;amp;amp;amp;lt;E&amp;amp;amp;amp;amp;gt; { //链栈的节点 private class Node&amp;amp;amp;amp;amp;lt;E&amp;amp;amp;amp;amp;gt;{ E e; Node&amp;amp;amp;amp;amp;lt;E&amp;amp;

2019-02-23 22:51:59 156

原创 Java集合 ArrayList实现

简单的实现 就不用泛型了import java.util.Arrays;public class MyArray { private Object[] elementData; private int size; private static final int DEFAULT_CAPACITY = 10; /** * 无参构造函数 *...

2019-02-23 11:31:01 181

RunHiddenConsole.exe和配置文件

RunHiddenConsole.exe是windows工具类。隐藏控制台界面的。RunHiddenConsole.exe 和 配置文件都在压缩包里面

2019-03-25

空空如也

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

TA关注的人

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