自定义博客皮肤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的学习之路

成长的路途还长

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

原创 Apollo部署踩坑记录

写在前面Apollo官方文档写的还是很详细的,但是坑怎么来的呢,没错就是我自己没有好好看文档了。。。这里附上GitHub:https://github.com/ctripcorp/apollo简介一下简单说下,Apollo分为三个服务:ConfigService、AdminService、Portal。采用分布式部署的话,不同的环境需要部署ConfigService和AdminSe...

2019-08-28 23:11:03 1383 1

原创 Mockito调用静态方法和void方法

静态类 首先给你的类添加以下注解:@PrepareForTest(**静态类**.class)@ContextConfiguration@RunWith(PowerMockRunner.class)@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)然后就可以使用了,与常用的Mockito不同,需要使用PowerMockit...

2018-08-27 11:36:50 13803 1

原创 java操作生成Excel报表

课程设计中遇到需要生成报表,于是在网上搜集了相关资料。下面贴上实现后的代码。首先,项目是maven项目。添加依赖。<!-- 输出报表依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId&g...

2018-06-19 15:49:06 3432 1

原创 VMware12装CentOS6.3虚拟机NAT方式上网

所有的操作可以参考这篇文章: 配置 然后一些关于ifcfg-eth0的配置具体如下: 注意一定要配置 /etc/resolve.conf 加上默认的网关(这里也会导致你无法上网)最后的最后!!!! 如果你还是不能上网,但是主机之间可以ping 那么: 将你能上网的适配器共享给net8即可...

2018-05-31 22:39:04 251

原创 LeetCode——寻找数组中第三大的数

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1. 示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3:输入: [2, 2, 3, 1]输出: 1解释: 注意,要求返回第三...

2018-05-05 22:24:43 7584

原创 LeetCode——缺失数字&旋转数组

给定一个数组,输出这个数组中元素向右边移动K位的新数组,要求算法的时间复杂度是O(n),空间复杂度是O(1) 例如,数组array={1,2,3,4,5,6},其中元素向右边移动4位的新数组为{3,4,5,6,1,2}解法:1.用额外空间存储 2。先将整个数组翻转,然后翻转前k个,再翻转剩下的(k%=nums.length—-避免k值越界)给出一个包含 0, 1,...

2018-05-04 22:59:45 378

原创 LeetCode—— 两数之和 II - 输入有序数组

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例:输入: numbers = [2, 7, 11, 15],...

2018-05-04 17:31:13 1455

原创 剑指offer——顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.刚开始,笔者也是没有头绪的,感觉循环条件不好写。后面在评论区看到了这种魔方解法,觉得这个想法甚是清奇,用Python实现非常方便,但...

2018-05-01 21:14:20 165

原创 区域和检索 - 不可变

给定一个数组,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。例如:给定nums = [-2, 0, 3, -5, 2, -1],求和函数为sumRange()sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3笔者第一个想到的就是,这么简单?直接...

2018-05-01 13:15:35 703

原创 LeetCode-打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1] 输出: 4 解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷...

2018-05-01 12:46:11 999

原创 买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...

2018-05-01 12:06:53 269

原创 希尔排序——Java

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

2018-04-24 22:57:19 212

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

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

2018-04-24 20:52:42 1098

原创 快速排序——Java

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

2018-04-24 14:47:09 158

原创 归并排序——Java

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

2018-04-23 21:49:59 194

原创 选择排序——Java

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

2018-04-23 19:22:38 134

原创 冒泡排序——Java

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

2018-04-23 13:09:53 262

原创 插入排序——Java

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

2018-04-23 12:57:01 133

原创 TCP三次握手简介

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

2018-04-22 22:55:26 395

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

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

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

原创 内存分配与回收策略

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

2018-04-22 15:01:31 130

原创 剑指offer-二叉树镜像

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

2018-04-21 21:29:59 127

原创 剑指offer-树的子结构

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

2018-04-21 21:06:55 145

原创 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 34451 12

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

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

2018-04-19 09:32:40 132

原创 剑指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 113

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

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

2018-04-18 12:41:42 106

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

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

2018-04-17 23:53:57 118

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

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

2018-04-17 23:16:01 316

原创 JVM垃圾收集器简述

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

2018-04-15 23:48:49 139

原创 JVM垃圾收集算法

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

2018-04-15 23:18:57 142

原创 剑指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 94

原创 剑指offer-矩形覆盖

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

2018-04-15 16:28:49 98

原创 剑指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 335

原创 剑指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 524

原创 剑指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 162 2

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

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

2018-04-15 11:50:53 95

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

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

2018-04-14 23:55:08 278

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

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

2018-04-14 22:35:00 172

原创 剖析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 326

ChromeDriver

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

2018-01-11

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

TA关注的人

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