自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zwz的学习之路

成长的路途还长

  • 博客(40)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 希尔排序——Java

希尔排序是八大经典排序算法之一,但是它不是稳定算法,因为它并不是像插入排序,规规矩矩的进行比较,而是采用激进的增量策略。但是,这个增量却是是它成为第一批冲破O(N^2)时间限制的算法之一。希尔排序实际上是改良的直接插入排序直接上代码: /** * shell排序是对插入排序的一种改进,它的效率与选择的增量有关(这里为了测试,采用最简单的) * 该排序在效率...

2018-04-24 22:57:19 225

原创 JAVA从Random类的实现原理来了解CAS

关于CAS(compare and swap),网上已经存在很多博客。笔者今天准备从我们常用的Random类的部分实现,来讲解CAS。CAS在Java中的实现——java.util.concurrent包,它完全建立在CAS之上。 CAS是一种乐观锁,其实现原理可以简单的认为是自旋锁(关于自旋锁请参考《深入理解Java虚拟机》)首先我们应该明确,CAS的实现不是单单只靠软件就能实现,...

2018-04-24 20:52:42 1122

原创 快速排序——Java

快速排序是一种很优秀的经典排序算法。 下面是Java代码实现,注意枢纽元的选择!/** * 快速排序基于分治的思想,同时,此处选取枢纽元也有一定讲究,并不是你经常看见的直接选取最左边或者最右边的元素 * 作为枢纽元。而是采用更为“安全”的方式。你可以这样理解:如果使用快速排序的数组已经是有序的,那么此时依旧采用 * 原始的枢纽元选取,时间效率将急剧下降(O(...

2018-04-24 14:47:09 171

原创 归并排序——Java

为了方便起见,程序将分与治写在同一个函数中,并且部分代码不合理,比较消耗资源,但是胜在程序容易理解。/** * 归并排序是一种分治算法,思想在于分而治之,一下是测试50000个随机数时,排序效率: * (其他两个排序代码请见以前的文章) * 冒泡排序用时:5370 * 归并排序用时:19 * 选择排序用时:1352 */ ...

2018-04-23 21:49:59 209

原创 选择排序——Java

选择排序类似于冒泡,但是不要混淆了。两者虽然最坏时间效率相同,但是在实际使用中,选择排序更快。/** *选择排序思想与冒泡很像,但是区别在于选择排序是记录最大值的下标,然后在外层交换。两者的最坏时间效率都是O(N^2) *但是相对来说,在平时使用中,选择排序的效率高于冒泡排序 */ public static void selectSort(int ar...

2018-04-23 19:22:38 148

原创 冒泡排序——Java

给出代码:/** * 冒泡排序思想在于每一轮比较,都会将这一轮最大的放到最后,第一轮是所有数最大,第二轮是所有数次大.... * 每一轮都会少比较一次,直到最后得到最终结果。 * 时间效率O(N^2) */ public static void bubbleSort(int []arr) { int length=arr.le...

2018-04-23 13:09:53 280

原创 插入排序——Java

具体解释看: 插入排序总结自己写的Java代码: /** * 插入排序思想:从第二个数开始不断向前比较,如果小于前一个数,且大于前前一个数,则将前一个数与当前数交换 * 这里的实现思路是,从当前数开始向前比较,每次连续满足小于前一个数时,将前一个数后移到当前位置,将所有大于当前数的 * 值全部后移,直到找到插入位置。 */ pub...

2018-04-23 12:57:01 143

原创 TCP三次握手简介

要理解三次握手,有必要知道TCP报文头的结构组成。这里直接引用: 源端口和目的端口,各占2个字节,分别写入源端口和目的端口; 序号,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始; 确认号,占4个字节,是期望收到对方下一个报文的第一个数据...

2018-04-22 22:55:26 410

原创 虚拟机类加载过程简述

类的生命周期如图: 这些阶段并非严格进行区分,因为有些阶段执行时,同时还会执行下一阶段的某些功能。加载加载,即将类加载到虚拟机中,其实这一阶段是为了后面的所有阶段做准备。 因为后面的操作都是对于方法区或者堆等内存进行操作,只有加载才是对字节码文件进行操作。 这里主要执行3个步骤:使用类加载器,通过全限定名来获取该类的二进制字节流。将该字节码文件所代...

2018-04-22 16:32:34 515 1

原创 内存分配与回收策略

对象优先分配在Eden对于大多数情况来说,新生代优先在Eden区中分配,当Eden中内存不够时,会触发 MinorGC. 举个例子,当Eden区为8M,两个Survivor区,各1M(Hotspot虚拟机),那么新生代总的可用空间就是9M。 某个时刻,新生代已用内存6M(3个2M的对象),此时,新创建一个4M的对象,发现新生代可用内存不足,此时触发MinorGC,在G...

2018-04-22 15:01:31 139

原创 剑指offer-二叉树镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10...

2018-04-21 21:29:59 142

原创 剑指offer-树的子结构

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)递归思想:我们想从当前节点,作为匹配的根节点开始找,如果返回FALSE,则递归选择左子树,然后是右子树。public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { ...

2018-04-21 21:06:55 155

原创 leetcode-最大子序和(四种)

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。这道题在LeetCode中被归类为简单类,但是,却有三种甚至更多的解法,值得探讨。1.暴力破解法——时间效率O(N^3),超时 这是最容...

2018-04-21 14:58:08 35105 12

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

题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。很容易想到,每个链表从头开始比较,选择其中较小的,然后该链表后移一位继续与前面为移动的比较,知道一个链表为空时,直接赋值。就是链表节点的引用关系比较难以理清。递归代码:public class Solution { public ListNode Merge(ListNode...

2018-04-19 09:32:40 143

原创 剑指offer-反转链表

题目描述 输入一个链表,反转链表后,输出链表的所有元素很简单:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public List...

2018-04-18 22:56:33 129

原创 剑指offer-链表中倒数第k个节点

题目描述 输入一个链表,输出该链表中倒数第k个结点这道题其实很简单,设置两个节点,开始时都指向头,根据k来确定前一个走了多少步长之后,指向结果的节点才开始走, 刚开始笔者陷入了误区,哎,想通过计数的方式来完成距离控制,后来发现只需在第一次进行控制即可。/*public class ListNode { int val; ListNode next = null; ...

2018-04-18 12:41:42 116

原创 剑指offer-调整数组使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。对于这个数组,要求偶数位于后面,奇数位于前面,重点在于要求奇数与奇数、偶数与偶数相对位置不变,其实,我们这样想: 使用一个临时等大于array的数组temp来存储结果。我们对于奇数与偶数进行分别遍历,虽然这样会...

2018-04-17 23:53:57 127

原创 剑指offer-数值的n次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。这个题目其实和前面的快速幂一毛一样啊,刚开始想底数是double会不会有不同,想了想,靠,没有关系。这里就只需考虑底数为0,指数为1,指数小于0时的情况。 指数我们拷贝一份,原始底数保留作为判断条件。当底数小于0时,最后我们返回的值肯定是1/result了public...

2018-04-17 23:16:01 328

原创 JVM垃圾收集器简述

补充几个概念: stop the world 指该收集器执行时,将阻塞一切线程 parallel 并行,可以多线程执行 concurrent并发,用户进程可以与垃圾回收同时执行下面介绍新生代收集器serial收集器顾名思义,串行收集器,在该收集器工作时,将stop the world。 优点:简单高效(相对于其他单线程收集器) 缺点:stop the world ,单线...

2018-04-15 23:48:49 150

原创 JVM垃圾收集算法

标记-清除算法 算法核心思想很简单,就是对可回收对象进行标记,然后直接由垃圾收集器回收即可。如图,这就产生了一个问题,内存中的空间变得离散化,即内存碎片(对象的分配需要找到一片足够大小的连续内存空间,如果不足,还是会触发GC)。复制算法 复制算法的核心就是,只使用一半内存用来分配对象,当使用的区域不足以分配时,复制算法将存活对象复制到预留的一半空间,并且是顺序排列的,然后清除本区域...

2018-04-15 23:18:57 154

原创 剑指offer-二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(刚刚做完58的笔试,嗯,伤心了刷几道题。) 直接进行位运算即可:public class Solution {public int NumberOf1(int n) { int count = 0; if(n==0)return 0; while(n!=0)...

2018-04-15 22:51:24 106

原创 剑指offer-矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?题目看似与前面的题不同,实际上和前面跳台阶本质上没啥不同。 这里我们需要注意,即使我们横着将2*1的矩形放入填充(即此时高只是2*n矩形的一半),但是!!!这样填充过后,这一段就确定了,因为2*1的矩形不可能在竖着放入!! 然后就是竖着放入的方式,就很...

2018-04-15 16:28:49 109

原创 剑指offer-变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。这是上一道题的升级版,不过递推思想还是一样: 我们从后往前想: 1.当n级台阶时,假设有n中跳法 2.青蛙第一次跳1级,剩下n-1级,则有n-1种跳法 3.青蛙第一次跳2级,剩下n-2级,则有n-2种跳法 ………………………. ………………………. n.青蛙一...

2018-04-15 16:05:11 349

原创 剑指offer-跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目很简单,一个递归搞定。public class Solution { int count=0; public int JumpFloor(int target) { if(target==0) {count++;return 0;} ...

2018-04-15 15:25:17 539

原创 剑指offer-斐波那契数列

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39这道题目描述简单,如果使用暴力法也是能够计算出结果的,但是既然是算法,我们必然要考虑时间复杂度。我们可以有这样一个递推公式:[Fib(n+1)Fib(n)]=[1110][Fib(n+1)Fib(n)]=[1110]\begin{bmatrix}Fib(n+1) \\Fib(n...

2018-04-15 12:03:31 174 2

原创 剑指offer-旋转数组的最小数字

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。非递减序列,即递增或者存在相同元素的序列。通过分析我们能够知道,第一个数字肯定大于最后一个数字(否则就没有...

2018-04-15 11:50:53 110

原创 JVM——对象已死吗?(Java对象引用分析)

对象已死?谈到JVM,就不得不提到他的自动内存管理,那么就离不开垃圾回收,那么,作为Java中,占据首要位置的对象,JVM如何确定它已经死亡? 或者说,何时GC将其回收?现在主流的两个方式是:1.引用计数法 2.可达性分析算法引用计数法顾名思义,就是在对象每被引用一次,就将其自身用于计数的变量加一,当GC进行时,通过判断该变量是否等于0,从而决定是否回收。目前使用该方式的有Pyth...

2018-04-14 23:55:08 288

原创 CentOs7 安装mysql5.6(源码安装)

笔者前几天发过一篇博客,是通过yum方式安装mysqlCentOS 7 安装Mysql5.7 本来以为可以愉快的开始部署项目,但是没想到安装上的mysql抽风了,死活都启动不了,笔者尝试了多种方法,仍旧没有解决,只能卸载重新安装。这次决定换源码安装的方法。首先,按照这篇教程进行:Linux下MySQL卸载和安装图文教程然后当你进行到这一步时: (3)修改/etc/my.cnf和...

2018-04-14 22:35:00 185

原创 剖析HashMap底层原理(JDK1.8)

1.HashMap的底层数据结构?看源码:static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; //注意此处的Next Node<K,V> next;...

2018-04-11 22:21:19 343

原创 CentOS 7 安装Mysql5.7 (亲测成功)

笔者这几天准备将自己的项目部署到服务器上,首先当然是安装Tomcat和数据库。Tom猫已经安装成功了,但是Mysql却有点让人头痛,网上类似的教程很多,但是亲自实践时却总会出现这样那样的错误。下面的方法笔者亲自通过测试,并且在发生错误的时候成功解决。首先,请按照该教程进行安装操作: CentOS7 64位下MySQL5.7安装与配置(YUM)前面的操作都很自然 ,笔者在这一步遇到了...

2018-04-11 19:17:06 172

原创 SpringMVC文件大小控制及js模拟post提交数据

springMVC文件大小控制需要在springMVC的配置文件中设置bean:<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncodin...

2018-04-10 16:45:44 338

原创 KMP算法入门——保证你会

KMP匹配算法,笔者在之前就有过研究,看了网上很多博客,但是还是懵懵懂懂,今天又拿起来重新研究,终于是搞懂了计算方法以及原理。 这里附上一篇很好的博客,笔者正是通过这个,懂得了next的计算。kmp的next数组值得求法下面开始简单讲解一下: 模式串pattern=“abaabcac”——我们该如何求它的next数组呢?为了方便理解,我们数组下标从1开始。相信你从网上其他很多资料对...

2018-04-10 15:59:53 239

原创 JVM运行时数据区内存模型简单总结

数据区图解: 程序计数器首先,它是一块分配的较小的内存空间,线程私有,作用类似于PC寄存器,单它仅仅是逻辑上的。 如果线程正在执行Java方法,那么计数器记录的为正在执行的虚拟机字节码的指令地址,如果为Native方法,计数器值为空。同时,它是唯一一个没有规定 OutOfMemoryError的区域虚拟机栈线程私有,毕竟每个线程都要执行独立的方法对吧。 它是描述Java...

2018-04-09 22:25:27 369

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

题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。这道题目很简单,不能使用其他数据结构,这里我们将一个栈作为队列入队,另一个栈作为出队。可知,队列入队顺序与栈出顺序相反。public class Solution { Stack<Integer> stack1 = new Stack<Integer>()...

2018-04-09 21:06:15 120

原创 剑指offer-重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。相信大家对于这道题的原理应该很清楚了,很容易想到这是一个递归思想,但是笔者的代码在本地IDE中所有测试用例均正确,在牛客网却提示相同的测试用例发生了...

2018-04-09 20:42:56 83

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

题目描述 输入一个链表,从尾到头打印链表每个节点的值。/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/imp...

2018-04-08 20:31:35 101

原创 剑指offer-替换空格

题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Solution { public String replaceSpace(StringBuffer str) { int spaceCount=0; //计算出有...

2018-04-08 20:29:28 101

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

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数public class Solution { public boolean Find(int target, int [][] array) { if(array==null||ar...

2018-04-08 20:25:23 92

原创 eclipse点击图标启动无反应问题

今天,在启动eclipse的时候突然发生了故障: 点击桌面图表无法应,管理员权限依旧如此。 网上查询资料后, 在打开eclipse下的eclipse.ini 发现里面的jdk配置不见了解决方法: 配置jdk路径即可,如图: ...

2018-04-08 11:32:13 13285 2

原创 SSM框架ClassNotFind ContextLoaderListener以及不能实例化sqlsessionFactory的解决方法

只需要选中项目 buildpath->configure build path-> deployment assembly->add ->Java build path entries 选中所有的jar包 导入即可 此问题针对你已经将jar包buildpath之后,依旧出现不能找到类的错误。...

2018-04-02 22:53:57 495

ChromeDriver

谷歌浏览器的驱动,适用于v62-64。虽然是win32的,但是亲测64位操作系统仍旧课使用。

2018-01-11

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

TA关注的人

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