自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 vmware虚拟机配置

https://blog.csdn.net/fightxxl55/article/details/53009365

2018-07-20 20:46:21 234

原创 免密登录配置

1.ssh-keygen生成公钥和私钥2.ssh-copy-id ip地址   将生成的公钥拷贝到指定机器  这样就可以免密登录了。免密登录原理:1.登录方,生成随机字符串2.用对方提供的公钥加密,并传输过去3.对方用自己的私钥解密,然后把明文字符串发过去4.对比两个字符串,相等则登录成功

2017-09-28 20:54:05 506

原创 递归求累加和

//调用时传入一个参数为0的 sum private double caculate(double num,double sum) { if(num <= 0){ return sum; } sum += num*1.5; return caculate(num/2,sum); }

2017-08-11 19:42:46 1289

转载 sql语句优化

本文实例总结了常用SQL语句优化技巧。分享给大家供大家参考,具体如下:除了建立索引之外,保持良好的SQL语句编写习惯将会降低SQL性能问题发生。①通过变量的方式来设置参数好:?1stringsql = "select * from people p where p.id = ? ";坏:

2017-07-21 14:25:46 271

转载 spring源码

https://my.oschina.net/gongzili/blog/304101https://my.oschina.net/gongzili/blog/304692

2017-07-11 23:19:53 375

原创 java nio及操作系统底层原理

版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]相关资料IO基本概念Linux环境同步异步阻塞非阻塞同步与异步阻塞与非阻塞IO模型Reference Link阻塞IO模型非阻塞IO模型IO复用模型信号驱动异步IO模型异步IO模型总结AIOBIONIOJava对BIONIOAIO的支持AIORefer

2017-06-27 12:53:20 17853 8

原创 Synchronized

1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。2 术语定义术语英文说明CAS

2017-06-20 16:40:02 237

原创 ArrayBlockingQueue 和LinkedBlockingQueue

目的:本文通过分析JDK源码来对比ArrayBlockingQueue 和LinkedBlockingQueue,以便日后灵活使用。1. 在Java的Concurrent包中,添加了阻塞队列BlockingQueue,用于多线程编程。BlockingQueue的核心方法有:boolean add(E e) ,把 e 添加到BlockingQueue里。如果BlockingQueue可以容纳

2017-06-20 16:23:21 308

原创 CountDownLatch和CyclicBarrier的区别

先说两点都知道的:1.CountDownLatch减计数,CyclicBarrier加计数。2.CountDownLatch是一次性的,CyclicBarrier可以重用。然后我们用被大家说烂了的跑步的例子继续说事儿:1. 有五个人,一个裁判。这五个人同时跑,裁判开始计时,五个人都到终点了,裁判喊停,然后统计这五个人从开始跑到最后一个撞线用了多长时间。Jav

2017-06-20 14:09:41 244

原创 AQS原理与源码

一、细说AQS      在深入分析AQS之前,我想先从AQS的功能上说明下AQS,站在使用者的角度,AQS的功能可以分为两类:独占锁和共享锁。它的所有子类中,要么实现并使用了它独占锁的API,要么使用了共享锁的API,而不会同时使用两套API,即便是它最有名的子类ReentrantReadWriteLock,也是通过两个内部类:读锁和写锁,分别实现的两套API来实现的,到目前为止,我们只需要

2017-06-18 14:46:03 681 1

原创 J.U.C.Locks 体系结构

根据锁的添加到Java中的时间,Java中的锁,可以分为”同步锁”和”JUC包中的锁”。同步锁  即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就已经支持同步锁了。  同步锁的原理是,对于每一个对象,有且仅有一个同步锁;不同的线程能共同访问该同步锁。但是,在同一个时间点,该同步锁能且只能被一个线程获取到。这样,获取到同步锁的线程就能

2017-06-18 13:22:34 284

原创 post和get的区别

GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传送的参数是有长度限制的,而POST没有

2017-06-14 21:37:17 275

原创 ThreadLocal和WeakReference

ThreadLocal对象用法如下ThreadLocal tl =new ThreadLocal();public voidmultiThreadMethod(T t){  tl.set(t);  T t2 = tl.get();}这样就可以做到每个线程可以存取自己的T对象。但是这种实现的原理是什么呢。其实这里做到数据的线程隔离方法很简单,看一下Thread类即可发

2017-06-14 16:46:14 377

转载 全面理解Java内存模型(JMM)及volatile关键字

本篇主要结合博主个人对Java内存模型的理解以及相关书籍内容的分析作为前提,对JMM进行较为全面的分析,本篇的写作思路是先阐明Java内存区域划分、硬件内存架构、Java多线程的实现原理与Java内存模型的具体关系,在弄明白它们间的关系后,进一步分析Java内存模型作用以及一些必要的实现手段,以下是本篇主要内容(如有错误,欢迎留言,谢谢!)理解Java内存区域与Java内存模型

2017-06-14 12:21:49 406 1

原创 深入理解Java类加载器(1):Java类加载原理解析

1 基本信息  每个开发人员对Java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助

2017-06-11 00:08:08 257

原创 不同classloader装载的类不能互相访问?

一,有两个术语,一个叫“定义类加载器”,一个叫“初始类加载器”。比如有如下的类加载器结构:bootstrap  ExtClassloader    AppClassloader    -自定义clsloadr1    -自定义clsloadr2 如果用“自定义clsloadr1”加载java.lang.String类,那么根据双亲委派最终bootstrap会加载此类,那

2017-06-11 00:06:41 4032

原创 深入理解Java类加载器(2):线程上下文类加载器

1 线程上下文类加载器  线程上下文类加载器(context class loader)是从 JDK 1.2 开始引入的。类 Java.lang.Thread中的方法 getContextClassLoader()和 setContextClassLoader(ClassLoader cl)用来获取和设置线程的上下文类加载器。如果没有通过 setContextClassLo

2017-06-10 23:51:14 313

原创 mysql乐观锁总结和实践

乐观锁介绍:乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有以下2种方式:1.使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据

2017-06-06 17:33:21 324

原创 B树和B+树

维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作。B-tree算法减少定位记录时所经历的中间过程,从而加快存取速度。普遍运用在数据库和文

2017-05-16 11:12:51 1166

原创 java实现剑指offer

第二章 面试需要的基础知识数组 - 二维数组中查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。方法一public class Solution { public boolean Find(int [][] array, int targ

2017-05-14 19:53:01 715

原创 java面试题库

ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对

2017-05-14 18:31:39 477

原创 红黑树与AVL树

1,红黑树(RBT)的定义:它或者是一颗空树,或者是具有一下性质的二叉查找树:1.节点非红即黑。2.根节点是黑色。3.所有NULL结点称为叶子节点,且认为颜色为黑。4.所有红节点的子节点都为黑色。5.从任一节点到其叶子节点的所有路径上都包含相同数目的黑节点。2,如何理解和记忆这5个定义?称为“红黑树”,即节点非红即黑,给节点着

2017-05-14 16:02:02 524

原创 java希尔排序

package graph;import java.util.Arrays;/* * 希尔排序(基于增量的插入排序) */public class Main { private static void swap(int[] arr,int i,int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } p

2017-05-12 21:29:50 257

原创 java冒泡、简单插入、选择排序

package graph;import java.util.Arrays;/* * 简单排序总结(冒泡、选择、直接插入) */public class Main { private static void swap(int[] arr,int i,int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }

2017-05-12 20:06:12 210

原创 java快速排序的优化

当枢纽数选择为数组最大数时,一次partion操作只交换数组的一组数,导致没发生什么变化,int temp = arr[start]的取值很关键,故采取三数取中法。package moshi;/* * 快速排序优化一:优化中枢数的选取,三数取中法 */public class Main { public static void main(String[] args) {

2017-05-12 14:36:12 308

原创 java快速排序-原始未优化

package moshi;public class Main { public static void main(String[] args) { Main m = new Main(); int[] arr ={3,4,5,1,2}; m.快速排序(arr); System.out.println(); } public void 快速排序(int[] arr){

2017-05-12 10:35:52 201

原创 归并排序

package graph;public class Main { public void 非递归归并排序(int[] arr){ int tmpIndex,leftMin,leftMax,rightMin,rightMax; int[] tempArr = new int[arr.length]; //i为步长:1,2,4,8... for(int i=1;i<arr.le

2017-05-11 22:13:44 205

原创 数据结构-堆的java实现

最大堆:所有根节点元素大于子节点元素最小堆:所有根节点元素小于子节点元素已知一节点位置为i,其左孩子2i+1,右孩子2i+2,父节点(i-1)/2package moshi;import java.util.Arrays;/* * 数据结构->堆 */public class Heap { //最大堆-> 所有子树的根节点大于子节点的完全二叉树 //最小堆->

2017-05-10 20:03:10 795

转载 二叉树的前、中、后序遍历详解

前言在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的:    [cpp] view plain copy //Binary Tree Node  

2017-05-08 21:07:43 722

原创 二叉排序树详解

一、为什么要使用二叉排序树对于线性存储的数组来说,通过二分查找等算法其查找效率为log2n是不错的。但是其插入删除数据的效率是比较低的,为了维护数组的有序性,插入删除时必须将一些数据"挪"位置。此算法复杂度为O(n)。如果不需要维护数组的有序性的话,添加数据直接在数组尾添加,删除数据时,也只需要用数组尾数据覆盖删除的数据,并使长度-1即可,但是无序的序列对于查找来说,是十分不好的。所以引入了二

2017-05-08 20:05:29 518

原创 二分查找O(logn)

//二分查找O(logn),要求arr为有序数组 public static int 二分查找(int[] arr,int target){ int start = 0; int end = arr.length-1; while(start<=end){ int mid = (start+end)/2; if(arr[mid] > target){ end =

2017-05-08 09:35:31 1060

原创 静态查找-哨兵

//下标1-length-1存储的是数据,下标0的位置存储的是哨兵 //哨兵位置赋值为要查找的数,判断查找结果,若为0则没找到,非0则找到了 public static int staticFind(int[] arr,int target){ arr[0] = target; int length = arr.length-1; while(arr[length] != targ

2017-05-08 09:25:03 690

原创 拓扑排序-java

拓扑排序介绍拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。这样说,可能理解起来比较抽象。下面通过简单的例子进行说明! 例如,一个项目包括A、B、C、D四个子部分来完成,并且A依赖于B和D,C依赖于D。现在要制定一个计划,写出A、B、C、D的执行顺序。这时,就可以利

2017-05-07 19:22:33 260

原创 最短路径-弗洛伊德算法的java实现

弗洛伊德算法介绍和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。基本思想     通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入一个矩阵S,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点

2017-05-07 18:01:46 717 1

原创 JDK代理的基本使用

package suanfa;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;class MyHandler implements InvocationHandler{ Star star; public MyHandl

2017-05-07 13:35:55 265

原创 迪杰斯特拉-java实现

package suanfa;public class Main { public static void main(String[] args) { int max = Integer.MAX_VALUE-10000; int graph[][] = { {max,max,10,max,30,100}, {max,max,5,max,max,max},

2017-05-05 18:40:33 378

原创 克鲁斯卡尔算法的java实现

克鲁斯卡尔算法的核心思想是:在带权连通图中,不断地在边集合中找到最小的边,如果该边满足得到最小生成树的条件,就将其构造,直到最后得到一颗最小生成树。       克鲁斯卡尔算法的执行步骤:       第一步:在带权连通图中,将边的权值排序;       第二步:判断是否需要选择这条边(此时图中的边已按权值从小到大排好序)。判断的依据是边的两个顶点是否已连通,如果连通则继续下一条;

2017-05-05 14:25:28 2818 1

原创 并查集的理解与java实现

这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可

2017-05-05 12:12:20 2119 5

原创 prim算法的java实现

MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任

2017-05-05 09:51:01 2400

原创 特殊的线程池---Fork/Join框架介绍及实例讲解

什么是Fork/Join框架        Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。         我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这

2017-04-24 10:38:06 2040 5

空空如也

空空如也

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

TA关注的人

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