自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 BitSet的实现原理

1.BitSet介绍Bitset是Java中的一种数据结构。Bitset中主要存储的是二进制位,做的也都是位运算,每一位只用来存储0,1值,主要用于对数据的标记。Bitset的基本原理是,用1位来表示一个数据是否出现过,0为没有出现过,1表示出现过。使用的时候可以根据某一个位是否为0表示此数是否出现过。JDK中的BitSet集合对是布隆过滤器中经常使用的数据结构Bitmap的相对简单的实现...

2018-08-31 15:19:35 21728 2

原创 反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。链表的数据结构如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}[反转链表]也叫做[链表逆置].比如一个链表是这样的:1->2-&...

2018-08-30 12:36:31 274

原创 青蛙变态跳台阶问题

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级跳1级,剩下n-1级,则剩下跳法是f(n-1)跳2级,剩下n-2级,则剩下跳法是f(n-2)所以f(n) = f(n-1) + f(n-2) + ... + f(1)因为f(n-1) = f(n-2)...

2018-08-29 23:17:21 3256 2

原创 青蛙跳台阶问题

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。首先我们考虑最简单的情况。如果只有1级台阶,那显然只有一种跳法。如果有两级台阶,那就有两种跳法:一种是分两次跳,每次跳1级;另一种就是一次跳2级。接着我们再谈论一般情况。我们把n级台阶时的跳法看成n的函数,记为f(n)。当n>2 时,第一次跳的时候就有两种...

2018-08-29 21:41:45 2388

原创 MYSQL存储引擎

1.什么是存储引擎?有什么作用?MySQL是用来保存数据的,MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者特定的功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。因此我们就可...

2018-08-29 16:25:48 799

原创 MYSQL索引

1.什么是索引?怎么样创建索引?索引是对数据表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。(1)直接创建索引CREATE INDEX index_name ON table(column(length))(2)修改表结构的方式添加索引ALTER TABLE table_name ADD INDEX index_name ON (column(...

2018-08-29 14:42:44 228

原创 数据库中的事务

1.事务的特性:ACID如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:(1)原子性( Atomicity):事物作为单个逻辑单元执行的一组操作, 事务中的所有操作要么全部执行成功,要么全部执行失败。要么全都执行,要么全都不执行。(2)一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须...

2018-08-29 12:28:01 263

原创 HTTP报文的结构

1.HTTP报文HTTP通信过程包括客户端往服务器端发送请求以及服务器端给客户端返回响应两个过程。在这两个过程中就会产生请求报文和响应报文。那么什么是HTTP报文呢?HTTP报文是用于HTTP协议交互的信息,HTTP报文本身是由多行数据构成的字符串文本。客户端的HTTP报文叫做请求报文,服务器端的HTTP报文叫做响应报文。HTTP报文由哪几部分构成?各部分都有什么作用?HTTP...

2018-08-29 09:52:01 50838 2

原创 Java中的序列化

什么是Java对象序列化?Java中的序列化主要是指对Java对象的序列化。Java对象的序列化就是把Java对象转换成跟平台无关的二进制流,反序列化就是把序列化的二进制流恢复成原来的JAVA对象。为什么要进行序列化?当虚拟机停止运行之后,内存中的对象就会消失,Java对象经过序列化可以将对象转换成二进制流保存下来,比如保存在磁盘中,一般是保存到文件中,或者将对象的序列化为字符串保存到...

2018-08-28 21:09:33 337

原创 TCP协议的三次握手和四次挥手

TCP协议是面向连接的,所以在传输数据前必须先建立连接。在建立连接的过程中用到了TCP报文的两个序号和三个标志位:这些序号和标志位在TCP报文的首部定义。下面先来看一下TCP报文段的首部格式:两个序号和三个标志位的描述如下:两个序号:seq和ack。(1)发送序号:seq序号,占32位。TCP连接中传送的字节流中的每一个字节都按顺序编号,TCP首部中的序号字段的意思是本报文...

2018-08-28 11:19:54 306

原创 ConcurrentHashMap的实现原理

HashMap是Java当中很常用的数据结构。但是HashMap不是线程安全的,单线程环境下还可以正常使用,不过在并发插入元素的时候有可能出现带环链表,让下一次读操作出现死循环。那么什么样的哈希数据结构可以保证线程安全呢?线程安全的哈希数据结构主要有HashTable和ConcurrentHashMap。而ConcurrentHashMap比HashTable的扩展性更好。在多并发...

2018-08-27 14:08:56 2720 1

原创 HashMap和线程安全

HashMap是Java当中很常用的数据结构。那么HashMap是线程安全的吗?高并发情况下HashMap会出现什么问题?为什么HashMap在高并发情况下会出现死锁?Java8中,HashMap的结构有什么样的优化呢?下面我们一起来看一下高并发情况下,HashMap可能出现的致命问题。在分析高并发场景之前,我们需要先搞清楚[rehash]这个概念。Rehash是HashMap...

2018-08-27 12:36:02 8147

原创 HashMap的实现原理

HashMap是Java当中很常用的数据结构。众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。对于HashMap,我们最常使用的是两个方法:Put( )和Get( )。1.Put方法的原理调...

2018-08-27 09:25:14 210

原创 Zookeeper实现分布式锁

如何用Zookeeper实现分布式锁?在学习分布式锁之前,需要首先了解一下Zookeeper的[临时顺序节点]。什么是临时顺序节点?让我们来回顾一下Zookeeper节点的概念:Zookeeper的数据存储结构就像一棵树,这棵树由节点组成,这种节点叫做Znode。Znode分为四种类型:1.持久节点 (PERSISTENT)默认的节点类型。创建节点的客户端与zook...

2018-08-26 17:11:54 32442 25

原创 Redis实现分布式锁

在多线程并发的情况下,我们可以使用锁来保证一个代码块在同一时间内只能由一个线程访问。比如Java的synchronized关键字和Reentrantlock类等等。这样子可以保证在同一个JVM进程内的多个线程同步执行。如果在分布式的集群环境中,如何保证不同节点的线程同步执行呢?怎么才能在分布式系统中,实现不同线程对代码和资源的同步访问?对于单进程的并发场景,我们可以使用语言...

2018-08-26 16:03:43 39450 19

原创 Mysql索引数据结构

首先,数据库索引使用树来存储,因为树的查询效率高,而且二叉查找树还可以保持数据的有序。那么索引为什么没有使用二叉树来实现呢?其实从算法逻辑上讲,二叉查找树的查找速度和比较次数都是最小的,但是从Mysql的角度讲,我们不得不考虑一个现实问题:磁盘IO。查找都是索引操作,一般来说索引非常大,尤其是关系型数据库这种,当数据量比较大的时候,索引的大小有可能几个G甚至更多,数据量大的索引能达到亿...

2018-08-26 11:55:58 17929 2

原创 二叉树的前序中序和后续遍历及应用场景

二叉树的结构定义public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}二叉树的遍历通常有前序,中序和后续三种。遍历算法通常使用递...

2018-08-25 21:42:37 14763 1

原创 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析:首先需要判断n是不是负数,当n为负数的时候,直接用while循环判断会导致死循环,因为负数向左移位的话最高位补1 。针对这种情况,要不就是对正数和负数的操作应该分开处理,要不就是找到一个对正数和负数都可以处理的方法。如果是第二种方法可以把int型转成二进制的string类型,再统计string类型中1的个...

2018-08-25 20:12:38 8721 2

原创 Java中的小数是怎么存储的?

Java中的小数使用double和float表示,小数属于浮点型(默认为double)。对于float型的值,则要在数字后加f或F,如12.3F,它在机器中占32位,4个字节来存储,表示精度较低。double是64位。那么一个小数在Java中是如何存储的呢?1.Java语言中,float类型数字在计算机中的存储遵循IEEE-754格式标准:(1)一个浮点数有3部分组成:符号位,指数...

2018-08-25 17:18:11 9383 1

原创 Spring Bean的作用域

在Spring中,bean作用域用于确定哪种类型的bean实例应该从Spring容器中返回给调用者。目前Spring Bean的作用域或者说范围主要有五种。作用域 描述 singleton 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。 prototype 每次从容器中调用Bean时,都返回一个新的实例,即每...

2018-08-25 14:05:02 67521 5

原创 Spring Bean的实现方式

Spring Bean的实现方式主要有三种。(1)使用类的无参构造函数实例化(90%通常使用的一个方法)1.首先定义一个bean。package com.spring.demo;public class Bean { //默认构造方法 Bean(){} public void print(){ System.out.println("Bean.....

2018-08-25 09:43:42 1007

原创 maven的用法和几个常用的命令

做项目时使用maven构建项目已经是现在的流行做法了。那么maven的作用是什么呢?maven中的几个常用的命令都有什么用?下面我们来看一下。maven最大的作用就是用于对项目中jar包依赖的统一管理。通常项目中如果不使用maven的话,项目中用到的jar包需要自己下载,然后放到项目的lib目录,比较麻烦。如果使用maven构建项目,项目中就会有有一个pom文件,该pom文件的作用就是...

2018-08-24 21:38:58 34604 2

原创 线程安全

1.线程安全概述使用多线程可以在一段时间内并发处理多个任务,在提高CPU运行效率的同时也为我们批量处理这些任务带来了便利。但是,使用多线程的时候要格外小心,多个线程在某一时间对同一个变量的处理,如果处理不当,就会造成数据不一致的问题,出现的这种数据不一致的现象就是非线程安全。非线程安全是多线程才会出现的问题。上面的情况只是非线程安全的一种。非线程安全出现的原因是各个线程的控制流彼此独立,线...

2018-08-24 19:45:01 324

原创 ReentrantLock和ReentrantReadWriteLock类的使用

在Java中,可以使用synchronized关键字实现线程之间同步互斥,除此以外,JDK中的Lock对象也能实现同步的效果,而且在使用上更加方便灵活,扩展功能也更加强大。常用的两个Lock类为ReentrantLock和ReentrantReadWriteLock。ReentrantLock类在功能上相比synchronized关键字更多。下面先介绍一下ReentrantLock类的使用...

2018-08-24 19:44:04 644

原创 ThreadLocal类的使用

线程中变量值的共享可以使用public static变量的形式,所有的线程都使用同一个public static变量。那么如果想实现每一个线程都有自己的私有共享变量该怎么实现?可以使用Java的JDK中提供的ThreadLocal类实现这样的功能。ThreadLocal类主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程的私有数据...

2018-08-23 17:33:48 276

原创 线程间通信

线程和线程之间不是独立的个体,它们彼此之间可以互相通信和协作。线程通信就是在线程之间传递信息,保证他们能够协同工作。在线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务的处理过程进行有效的把控与监督。1.等待/通知机制(1)不使用等待/通知实现线程间通信如果不使用线程间的通信机制,两个线程想要根据同一个数据实现通信的话,就必须使用whi...

2018-08-23 16:50:41 197

原创 关键字synchronized的使用

为了解决非线程安全问题,就需要使用线程同步。实现线程同步的一种方式就是使用synchronized关键字。1.synchronized的用法(1)synchronized可以修饰方法,表示这个方法在任意时刻只能由一个线程访问。(2)synchronized用在类声明中,表明该类中的所有方法都是synchronized的。(3)synchronized还可以用在一段代码中,被sync...

2018-08-23 16:45:06 870

原创 关键字volatile的使用

关键字volatile的作用主要有两个。1.关键字volatile使变量在多个线程间可见Java内存模型分为工作内存和主内存。工作内存是线程的私有堆栈,主内存是所有线程共享的公共堆栈。根据Java的内存的内存模型,一个变量会存在公共堆栈和线程的私有堆栈中。每次变量的最新值都是公共变量的值,不使用volitale时取得的可能是私有堆栈中的值,私有堆栈的值在读取之前需要和公共堆栈的值进行同步,...

2018-08-23 15:16:53 347

原创 单例模式与多线程

单例模式是设计模式的一种,在应用中也是比较常见的。单例模式本身是比较简单的,但是如果使用在多线程环境时,就会造成一些意想不到的情况。多线程的应用现在也很普及,因此有必要了解单例模式在多线程环境下使用时会遇到的问题,以及使用多线程技术如何解决这些问题。当单例模式应用在多线程环境中,我们要考虑的是:如何使单例模式遇到多线程时是安全的,正确的。下面介绍单例模式结合多线程技术在使用时的相关知识。...

2018-08-23 15:03:32 1090 1

原创 Mycat-server is not running

在linux上安装了mycat后,输入命令启动mycat时,[root@itcast mycat]# cd /usr/local/software/mycat[root@itcast mycat]# bin/mycat startStarting Mycat-server…[root@itcast mycat]#检查mycat运行的状态[root@itcast mycat]#...

2018-08-21 12:16:02 6013 1

原创 redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException:Connection refuse

在Java访问虚拟机中的redis时可能会出现以下错误:redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException:Connection refuseredis拒绝访问。解决方案:首先找到redis的配置文件redis.conf,该配置文件就在redis的安装包中。如果配置文件...

2018-08-14 22:20:04 30625

原创 Error creating bean with name 'com.taotao.content.service.ContentCategoryService': Cannot resolve……

配置了spring的项目中,tomcat启动时报错:严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanCr...

2018-08-13 11:10:37 1426 2

原创 idea mybatis逆向工程执行不报错但是没有代码文件的问题

windows 下的路径是.\srcmac下路径是./src  所以,要是mac的话改一下生成文件的路径就好了。。记录一下。参考:https://blog.csdn.net/wjy329/article/details/79309649 ...

2018-08-07 15:33:08 3572 1

原创 JVM----垃圾收集器与内存分配策略

Java和C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。对Java程序员来说,JVM有自动内存管理机制,不需要自己手动进行内存分配和回收,也不容易出现内存泄露和内存溢出的问题。那么JVM是怎么对内存进行管理的呢?JVM制定了一些内存分配策略对内存进行合理的分配,使用垃圾收集器对回收内存。Java程序员不需要关心内存的分配和回收是怎么进行的,...

2018-08-01 21:24:26 395

原创 JVM----Java虚拟机内存结构

Java和C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。1.JVMJava摆脱了硬件平台的束缚,实现了“一次编写,到处运行”。那是什么让Java实现了Java语言最重要的特性,即:平台无关性呢?那就是Java虚拟机(Java virtualmachine)。平台无关性原理:编译后的 Java程序(.class文件)由 JVM执行...

2018-08-01 21:24:09 269

空空如也

空空如也

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

TA关注的人

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