自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

灰灰是菇凉

欢迎访问本人个人博客--http://huihui.couplecoders.tech

  • 博客(32)
  • 收藏
  • 关注

原创 Thread的几种状态以及sleep/yield/join/wait/notify/notifyAll方法的区别

线程状态Java的Thread类中对线程的状态有如下定义:public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED;}NEWThread state for a thread which has not yet started.尚...

2018-12-26 17:13:32 736 1

原创 AbstractStringBuilder源码分析

抽象类AbstractStringBuilder实现了接口Appendable和CharSequence,接口Appendable中有三个重载的append方法,专门来处理字符串的添加操作。Appendable append(CharSequence csq) throws IOException;Appendable append(CharSequence csq, int start, ...

2018-12-17 16:34:38 245

原创 Java StringBuffer和StringBuilder源码阅读

StringBuffer和StringBuilder的类关系图如下,可以看出,两者都继承了序列化接口Serializable,都实现了抽象类AbstractStringBuilder。StringBuffer和StringBuilder的源码几乎相同,而且方法大都调用了父类AbstractStringBuilder的方法,不同之处就在于StringBuffer多了一个变量toStringC...

2018-12-16 19:16:16 231

原创 Java 源码--String

String类被定义为final,实现了Serializable、Comparable和CharSequence接口。String的值是char类型数组。private final char value[];在方法isEmpty()中,判断的其实就是字符串的长度,长度为0返回true。public boolean isEmpty() { return value.length ...

2018-12-16 19:15:19 146

原创 Java 源码--Long

字段MIN_VALUELong的最小值。@Native public static final long MIN_VALUE = 0x8000000000000000L;MAX_VALUELong的最大值。@Native public static final long MAX_VALUE = 0x7fffffffffffffffL;TYPE类原始类型long的类实例。@S...

2018-12-16 19:14:15 287

原创 Java 源码--LinkedList

LinkedList类继承了AbstractSequentialList抽象类,实现了List、Deque、Cloneable、Serializable接口。由此可以看出,LinkedList也是一种双端队列。LinkedList是基于链表实现的,每个元素是一个结点。private static class Node<E> { E item; Node<E&...

2018-12-16 19:13:30 104

原创 Java 源码--Character

Character被定义为final,不可以被继承,实现了Serializable和Comparable的接口。字段MIN_RADIX最小基数。public static final int MIN_RADIX = 2;MAX_RADIX最大基数。public static final int MAX_RADIX = 36;MIN_VALUE最小值。public stat...

2018-12-16 19:12:39 264

原创 Java 源码--Arrays

前言数组比较特殊,一个数组属于一个对象,但是它的创建方式却不同于一般对象。Java中的数组创建数组有以下三种方式:// 第一种int[] array = new int[5];// 第二种int[] array = {1, 2, 3, 4, 5};// 第三种int[] array = new int[]{1, 2, 3, 4, 5};判断数组是否属于一个对象可使用下列语句:...

2018-12-16 19:11:57 216

原创 Java 源码--Object

Object是Java的基类,它的大部分方法都是native修饰的,标记方法是Java中的本地方法,一般是用C/C++语言实现的。下面我们就来分析一下这个类。registerNatives方法将C/C++种的方法映射到Java中的native方法,实现方法命名的解藕。此函数在类的静态代码块中,在类首次加载时执行。private static native void registerNativ...

2018-12-16 19:11:13 86

原创 Java 源码--ArrayList

ArrayList类继承了AbstractList抽象类,AbstractList抽象类对于一些通用的方法提供了默认实现。ArrayList类实现了接口List、RandomAccess、Cloneable和Serializable。后三者都是语义标志接口,不提供任何实现,标记这个类具有某种功能。RandomAccess标记类具有随机访问的功能,Cloneable标记类具有克隆功能,Seriali...

2018-12-16 19:10:09 72

原创 Java 源码--Integer

Integer类继承Number类,实现Comparable接口。Integer类被修饰为final,所以其不可被继承。字段MIN_VALUE最小值,@Native表示该字段可以从本地代码引用。@Native public static final int MIN_VALUE = 0x80000000;MAX_VALUE最大值。@Native public static fina...

2018-12-16 19:09:02 211

原创 Java 源码--HashMap

HashMap结构HashMap采用数组+链表+红黑树的存储结构。当一个键值对要存储到HashMap中时,HashMap会根据它的键值的哈希值映射到数组的某个位置。如果发生了哈希碰撞,就以链表的形式接在碰撞元素的后边。当链表过长时,就会转变为红黑树。下边我们就先来看下链表和红黑树的数据结构。链表内部类Node定义了链表的每个结点的结构,它记录结点的hash、key、value和下一个结...

2018-12-16 19:07:09 133

原创 跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。方法一首先就是最笨的方法。n个台阶全部跳1级台阶,有1种跳法。n个台阶有一个跳2级台阶,有Cn−11C_{n-1}^1Cn−11​种跳法。n个台阶有一个跳3级台阶,有Cn−22C_{n-2}^2Cn−22​种跳法。…n个台阶有一个跳n/2级...

2018-12-12 16:25:09 93

原创 第K大元素

题目描述在数组中找到第k大的元素。给出数组 [9,3,2,4,8],第三大的元素是 4给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推要求时间复杂度为O(n),空间复杂度为O(1)问题分析如果不考虑时间复杂度和空间复杂度,这道题目有很多种方法,利用一种排序算法将数组倒叙排序,第k个数就是第k大元素。题目的重点在于返回第K大元素,...

2018-12-12 16:24:32 190

原创 旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。问题分析对于旋转数组来说,我们可以利用二分法查找其最小值。我们现在有两个选择,数组中间位的数与最低位比较或...

2018-12-12 16:24:04 77

原创 变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。问题分析假设跳n阶有f(n)种跳法。若第一次跳1阶,剩下n-1阶,有f(n-1)种跳法;若第一次跳2阶,剩下n-2阶,有f(n-2)种跳法;…若第一次跳n-1阶,剩下1阶,有f(1)种跳法;若第一次跳n阶,有1种跳法。则有f(n) = f(n-1) + f(n-...

2018-12-12 16:23:02 70

原创 位运算

位运算相加二进制相加可以用异或操作和与操作得到结果,异或操作得到每一位上的数值,与操作得到需要进位的位置。每次相加需要将异或操作得到值和与操作得到的值左移一位相加,不断循环此操作,直到与操作得到的值为0,此时不需要进位,异或操作得到的值即为二进制相加的结果。下面为1203+1111的实例,对应的二进制为10010110011+10001010111。 10010110011 000011...

2018-12-12 16:22:35 100

原创 从尾到头打印链表

题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。代码实现借助堆栈实现。public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> integerStack = new Stack<>(); ...

2018-12-12 16:22:01 89

原创 二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解决方法bitCount(int i)这是Integer源码中的一个方法,就是返回i的补码中1的个数。public static int bitCount(int i) { // 每两位存储每两位值为1的个数。 i = i - ((i >>> 1) & 0x555555...

2018-12-12 16:21:28 101

原创 二维数组中的查找

题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。问题分析如以下表格,我们把它当成一个为维数组。它的特征是从左到右递增,从上到下递增。128924912471013681115首先...

2018-12-12 16:20:54 97

原创 丑数

题目描述设计一个算法,找出只含素因子2,3,5 的第 n 小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...我们可以认为1也是一个丑数。要求时间复杂度为O(nlogn)或者O(n)问题分析因子只含2,3,5,那么必然是1乘以2,3,5得出的数再不断地乘以2,3,5。但是这样得出的数是无序的,并且存在重复值的。那么这道题的难度就在于怎么取到第n小...

2018-12-12 16:20:16 80

原创 阿里云搭建Hexo博客

目前比较流行的博客搭建免费方案有hexo和jekyll,两者优缺点对比可参考博客博客搭建可行性方案( jekyll , hexo , Wordpress ),博主选择了hexo来搭建博客。一开始博主没有自己的服务器,就借助github搭建了hexo。hexo+github搭建博客步骤可参考博客5分钟 搭建免费个人博客,next主题配置可参考博客hexo搭建个人博客–NexT主题优化。后来博主...

2018-12-11 15:48:36 4455 2

原创 Tomcat获取Nginx反向代理的客户端域名

问题Nginx反向代理之后,Tomcat应用通过request.getHeader("host")取到的是Nginx的host,并非客户端浏览器地址栏上的真实域名。例如在某一台服务器上,Tomcat的端口号为8080,Nginx的端口号为80,Nginx反向代理8080端口。server { listen 80; location / { proxy_pas...

2018-12-11 15:47:06 602

原创 Java基本类型和包装类

基本类型。byte、short、int、long、float、double、char和boolean。包装类。Byte、Short、Integer、Long、Float、Double、Character和Boolean。基本类型所占字节数及默认值。基本类型所占字节取值范围默认值byte1−27-2^{7}−27~27−12^{7}-127−1...

2018-12-11 15:44:57 113

原创 Java创建线程的三种方式

Javaz创建线程主要有三种方式:继承Thread类创建线程、实现Runnable接口创建线程和实现Callable和Future创建线程。继承Thread类public class Thread1 extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) {...

2018-12-11 15:44:00 93

原创 Java序列化与反序列化

序列化与反序列化Java对象是有生命周期的,当生命周期结束它就会被回收,但是可以通过将其转换为字节序列永久保存下来或者通过网络传输给另一方。把对象转换为字节序列的过程称为对象的序列化;把字节序列恢复为对象的过程称为对象的反序列化。Serializable接口一个类实现java.io.Serializable接口就可以被序列化或者反序列化。实际上,Serializable接口中没有任何变量...

2018-12-11 15:42:54 112

原创 Java 8 接口新特性

在Java SE 8之前,接口中是不能提供方法实现的,但是JDK8提供了接口的默认方法和静态方法的支持。默认方法方法前加default关键字就可以提供默认实现,类实现接口时,可以继承接口的默认方法,也可以覆盖默认方法。interface People { default void eat(String name) { System.out.println(name ...

2018-12-11 15:41:31 1882 2

原创 Hexo渲染数学公式

卸载Marked渲染器,安装Markdown it Plus渲染器。npm uninstall hexo-renderer-marked --savenpm install hexo-renderer-markdown-it-plus --save配置_config.yml文件。markdown_it_plus: highlight: true html: true ...

2018-12-11 15:40:32 2378

原创 Java 源码--ArrayList

ArrayList类继承了AbstractList抽象类,AbstractList抽象类对于一些通用的方法提供了默认实现。ArrayList类实现了接口List、RandomAccess、Cloneable和Serializable。后三者都是语义标志接口,不提供任何实现,标记这个类具有某种功能。RandomAccess标记类具有随机访问的功能,Cloneable标记类具有克隆功能,Seriali...

2018-12-11 14:49:07 75

原创 MySQL-各种锁的概念

乐观锁乐观锁大多是基于数据版本记录机制实现,一般是给数据库表增加一个"version"字段。读取数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。比如下单操作:查询出商品信息。select (quantity, version)from...

2018-12-04 12:06:44 912

原创 IDEA Maven项目导入本地jar包

打开侧面的maven,点击图中箭头指向的图标。出现如下弹窗,在Command line在中输入执行的指令。指令格式:install:install-file -Dfile=<Jar包的地址> -DgroupId=<Jar包的GroupId> -DartifactId=...

2018-12-04 12:03:02 1088

原创 Windows下Thrift安装与简单使用

安装下载下载地址:http://archive.apache.org/dist/thrift/0.10.0/。将thrift-0.10.0.exe放到一个文件下,如F:\thrift下,将其重命名为thrift.exe。如果不重命名,需要使用thrift-0.10.0调用thrift命令。配置环境变量向Path中添加变量值,值为thrift.exe的地址,如F:\thrift。...

2018-11-30 11:12:20 3281 3

空空如也

空空如也

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

TA关注的人

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