自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 利用数据库文件恢复MySQL数据

这个题目看上去很奇怪,但是问题却不难描述,在服务器中原先的数据库版本是MySQL5.1,因为某些需求,数据库版本必须进行升级,但是升级之前,忘记将一个应用的数据库导出,而当数据库升级到MySQL5.6之后,并且还把原5.1数据库服务器覆盖之后,才意识到这个应用的数据没有导出。因此现在的问题,就是只有5.1数据库的文件(通过查找my.cnf中查找datadir的路径),如何导出数据库的sql文件。当导

2017-05-19 22:53:46 4078

原创 windows 电源管理之禁用睡眠脚本

最近一个项目要写一个脚本对windows中睡眠功能禁用掉,对这个内容网上资料不多,所以做个分享。休眠还是睡眠首先要明确两个概念,休眠(hibernate)、睡眠(stand by)和混合睡眠三种概念。休眠 休眠是指操作系统将内容中的数据存储到硬盘的swap分区下,存储完成之后,系统断电。下次按电源键时,系统重新从BIOS开始引导,然后在系统完全启动时,windows读取swap分区中的数据,并将

2016-12-19 14:53:06 6469

原创 腾讯模拟题之取球问题

问题描述:假设有16个球,有david和cavin两个人轮流来取,每个人只能去1,3,6.先取完的为胜。由David先取,问David第一次去多少才能保证胜利。首先要感谢湛总,这个思路是它提供的。 首先建立两个建立,一个是必胜集,一个是必输集。而且只考虑一个人,比如David,如果当前球的数量正好在必胜集中,那么他一定可以取胜,假如自己在必输集里,假设Calvin智力正常,那David一定输了。

2016-09-02 10:22:52 1063

原创 从源码分析HashMap实现

HashMap可能是Java程序员最常用的数据结构之一了。网上关于它的解析也不少,可是看完之后,有些细节还不是很清楚。所以干脆直接看了HashMap的源码,然后在这里总结一下。原理先从它的基本原理开始讲起。HashMap内部使用数组来存储Node节点。其中Node节点是一种链表的结构(Node节点内部包含一个指向next的引用) 当put()的时候,首先map根据Key的hash值定位到数组中的某

2016-08-31 16:16:58 711

原创 谈谈ThreadLocal

ThreadLocal其实在很早以前就看到过,也看过一些介绍,但还是不甚了解。今天跟踪了一下源码,才觉得ThreadLocal非常巧妙。现在网上对ThreadLocal的介绍也有很多了,我主要想聊聊ThreadLocal的代码设计。作用为什么要引入ThreadLocal呢?具体应用我在项目中并没有遇到过,只是觉得当我们创建一个线程的时候,我的主线程中的所有数据都是对子线程可见的。也就是如果子线程想要

2016-08-25 17:27:05 713

原创 redis配置安装和使用

今天突发奇想,想玩玩redis,然后就简要记录一下玩的过程中发现的问题,总体来说,感觉redis很优雅!redis安装在官网上下载源码,以.tar.gz为结尾,貌似官网上没有Windows版的Linux上使用tar命令解压缩进入redis目录,然后查看README.md,里面介绍的非常详细依次调用make、make test、make install、然后进入util目录,执行./insta

2016-07-22 23:36:48 549

原创 String s1 = new String("abc")和String s2 = "abc"的区别

今天在看JVM的时候突然想到这样一个问题,即String s1 = new String("abc");String s2 = "abc";System.out.println(s1 == s2);//答案是false问题有两个:String s2 = “abc”时发生了什么?String s1 = new String(“abc”)时又做了什么?第二个问题是比较好回答的,根据官方文档:

2016-07-18 22:50:38 13737 2

原创 [leetcode-375]Guess Number Higher or Lower II(java)

这道题只要利用动态规划的算法,我们需要注意这样一个事实。 E(i,j) = min( k + max(E(i,k-1),E(k+1,j))(本来想用语言描述一下,但是怎么说,都表达不清楚) 其中E(i,j)表示范围在(i,j)之间的最优值。显然,我们最终要求的结果为E(1,n) k实际上是在遍历i,j时所猜的值,因此,k+max(E(i,k-1),E(k+1,j))实际上表示当猜数K时所需要的

2016-07-17 16:48:24 2047

原创 [leetcode-372]Super Pow(java)

思路:这道题实际是求a^b mode c的结果,因为大数取模时具有如下特征:a^b mod c = (a mod c)^c,也就是说在任何时候取模都可以。 那么我们可以计算出前10个数的计算结果,即a^0 mod 1337,,,,a^10 mod 1337。并保持到数组中。 然后对于指数b = b’ * 10 + b”,即a^b = a^(b’10 + b”) = (a^10) ^ b’ a^

2016-07-11 20:25:51 2083

原创 [leetcode-373]Find K Pairs with Smallest Sums(java)

思路:这道题就是简单地利用最小堆模型来完成。代码如下:public class Solution { public List<int[]> kSmallestPairs(int[] nums1, int[] nums2, int k) { List<int[]> res = new LinkedList<>(); Queue<int[]> queue = ne

2016-07-11 15:39:39 1159

原创 [leetcode-327]Count of Range Sum(java)

思路:首先想到的还是暴力搜索,这时时间复杂度为O(N2),N2的复杂度再降就是NlogN了,而是就是二分的思想,把大数据转化为求一堆小数据。想法很像归并排序,当然不是排序了。见代码二,AC。 时间复杂度分析:对问题研究为T(N) = 2*T(N/2) + (N/2)^2,这个公式计算之后仍然了O(N2)的复杂度。不过已经比暴力搜索快得多了。代码一(TLE)public class Solution

2016-07-06 22:46:43 2262

原创 [leetcode-354]Russian Doll Envelopes(java)

思路:首先最容易想到的就是暴力搜索,时间复杂度为O(n2),因此很容易超时。 在暴力搜索的时候,我们实际上是把字符串拼接之后再去判断是否为回文。那么换种思路,一个字符串确定之后,它所能形成的回文个数其实就已经确定了,因此,换种思路就是遍历每个字符串,然后在遍历每个字符串时找到它所所需要的回文样式,假设字符串最长为K,那么所可能形成的回文最大为2K,于是我们在遍历这2K个,看看它们算法在words中

2016-07-06 19:06:58 535

原创 [leetcode-354]Russian Doll Envelopes(java)

思路:首先对Envelope数组进行排序;然后剩下的就是一个二重迭代的过程了。public class Solution { class Envelope{ int width; int height; Envelope(int width,int height){ this.width = width;

2016-07-05 14:23:31 1562

原创 [leetcode-352]Data Stream as Disjoint Intervals(java)

思路:采用一个TreeMap的数据结构,因为TreeMap内部是红黑树的数据结构,整体是有序的,而且还可以很快的搜索到大于某个元素的项及小于某个元素的项。 但是不清楚为什么,我代码提交后一直提示Memory Limit Exceeded。我在网上找了一份相似的代码,见代码2,就可以AC,有知道原因的望不吝赐教。代码如下:/** * Definition for an interval. * p

2016-07-05 12:42:06 1023

原创 [leetcode-355]Design Twitter(java)

思路:想法很简单,维护一个人员表,维护一个twitter表代码如下:public class Twitter { class TwitterNode{ int userId; int twitterId; TwitterNode(int userId,int twitterId){ this.userId = userI

2016-07-03 16:27:34 1494

原创 [leetcode-357]Count Numbers with Unique Digits(java)

思路:这道题要求0<=x < 10^n的不重复数字的个数。因此,我们可以考虑1位时、2位时、3位时。。。然后累加起来。 注意此时首位不为0。 代码如下:public class Solution { public int countNumbersWithUniqueDigits(int n) { int sum = 0; if(n <= 10){

2016-07-03 15:53:10 785

原创 [leetcode-363]Max Sum of Rectangle No Larger Than K(java)

这道题我的想法就是使用暴力搜索,维护两个节点,第一个节点是矩阵的左上角,第二个节点是矩阵的右下角。然后在围起来的矩阵里面去计算面积。 假设矩阵的行为M,矩阵的列为N,那么上述算法的事件复杂度为O(MN*MN*MN)。因此肯定是不可行的。 于是只能采用用空间换取时间的方法,对于每个节点,将(0,0)看做矩阵的左上角,将当前节点看成矩阵的右下角,记录下当前节点对应的行和宽。 但是很不幸,代码TLE

2016-07-03 11:10:07 983

原创 [leetcode-365]Water and Jug Problem(java)

思路:把这个问题抽象一下,其实可以等价变换为:ax+by=c(其中a,b分别为瓶x,y的容量,c为最后所需要的),所以原问题可以转换为:求在ax+by=c这条直线上,是否存在一个点,满足如下条件 ax+by=c 其中,x,y为整数那接下来的工作就是怎么找的问题了。我们假设apublic class Solution { public boolean canMeasureWater(int

2016-07-02 19:53:48 1111

原创 [leetcode-367]Valid Perfect Square(java)

这道题利用了如下一个数学公式 1+3+5+..+(2N-1) == N^2; 因此我们从1开始累加即可,加法的速度要比乘法的速度快得多,而且还不用考虑一不小心就溢出的问题。代码如下:public class Solution { public boolean isPerfectSquare(int num) { for(int i = 1;num > 0;i+=2)

2016-07-02 18:42:55 1113 2

原创 [leetcode-368]Largest Divisible Subset(java)

这道题其实利用的就是这样一个事实,如果b|a,c|b,那么c|a,于是就可以利用动态规划算法. 当算法运行到第i个时,如果它能整除第j个,即nums[i] % nums[j] == 0,且在j处之前有N个可被j整除的,那么在第i处就有N+1个。代码如下:public class Solution { public List<Integer> largestDivisibleSubset(i

2016-07-02 18:31:32 1507 3

原创 [leetcode-371]Sum of Two Integers(java)

思路:模拟硬件加法器的实现,两个bit位相加,当前位结果为:a^b^c(c为上位的输入) 进位:(c&(a^b))^(a^b),至于原因,请参考一下全加器public class Solution { public int getSum(int a, int b) { int result = 0; int tmp = 1; int prev

2016-07-01 16:39:21 1060

原创 Morris遍历二叉树

通常,我们遍历一颗二叉树都会采用递归的方式,即前序遍历、中序遍历和后序遍历,这三种方法的时间复杂度为O(N),空间复杂度为O(logN);而Morris算法遍历一颗二叉树的时间复杂度为O(2N),空间复杂度为O(1).可以想象这是一件很吸引人的特性。 二叉树是一种非线性的结构,而前面说的三种遍历方法实际上是将非线性转换成线性的过程。即将一个树转变成一个链表的过程。那么除了链表的头和尾外,每个中间点

2016-06-13 08:51:37 570

原创 [leetcode-347]Top K Frequent Elements(java)

原题:这里写链接内容代码如下://使用容量为k的最大堆的数据结构,然后将所有元素都输入一遍,所以时间复杂度为O(nlogk)public class Solution { class Element{ int num; int count; public Element(int num,int count){ this

2016-06-06 09:05:55 997

原创 [leetcode-343]Integer Break(java)

这道题很神奇,看到了show hint,然后按照提示把7-10之间的数拆分来看,发现最大值的序列中全部是3或者2,于是我猜测这可能就是所谓的规律,然后写了如下代码。public class Solution { public int integerBreak(int n) { int val = 1; if(n <= 3)//当输入为2或者3时,因为要求必须要

2016-06-04 09:34:06 689

原创 [leetcode-342]Power of Four(java)

原题链接:https://leetcode.com/problems/power-of-four/ 思路:首先判断是否是2的幂,如果是的话,再去判断是否为4的幂,判断2的幂要求整数的bit位中只有一个1,而这可以根据num & (num -1)来判断。 得到结果后,最佳的方案是能找到1后面有多少个0,然后这个个数对2取余,如果为0,表示可以整除。但是我没找到方法。public class Sol

2016-06-01 10:22:52 1316

原创 [leetcode-341]Flatten Nested List Iterator(java)

这道题的思想是在调用hasNext的时候,将NestedInteger拆分,然后将第一个元素保存到域变量中即可。其他元素添加到链表的首部。/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its imp

2016-06-01 09:26:15 2039

原创 linux 读取U盘的VID和PID

工作需要,需要用程序读取U盘的VID和PID,VID是指idVendor,PID是指idProduct。我们借助于libusb来完成了这项工作,libusb是专门对usb设备进行的封装库,用来识别U盘的VID和PID有些大材小用。。libusb库中存储两个字段信息的数据结构为:struct libusb_device_descriptor。简单说流程分为四步调用libusb_init进行初始化,我

2016-05-19 22:42:28 6817 1

原创 彻底搞清referrer和origin

在http协议中有这两个字段,之前一直隐隐约约的觉得是,一种标记请求来源的方法(的确是),但是更细致的对这两个字段的比较却没有一个清楚的认识。referrer到底是referer还是referrer,没人能说得清,不过拼写上,后者是正确的,我们不做评论,下面都用referrer表示。 假设我们当前处于A网站下的某个页面:http://www.exampleA.com/some_page_of_a.

2016-04-15 13:51:36 28870 4

原创 java自动装箱和拆箱机制详解

我们还是从一个笔试题谈起把?/** * Created by dave on 2016/4/12. * 注释表示运行结果 */public class Main { public static void main(String[] args) { Integer int1 = new Integer(30); Integer int2 = 30;

2016-04-12 23:46:48 920

原创 前缀表达式、中缀表达式、后缀表达式

中缀表达式就是我们日常看到的数学表达式:比如(2+4)*2,对于人类来说很直观,但是对于计算机而言,这种表达式很不容易理解。于是就有了前缀表达式和后缀表达式。前缀表达式前缀表达式是指将操作符放在前面,然后再放置操作数,比如对前面表达式而言,前缀表达式为*、+、2、4、2;后缀表达式后缀表达式是指将先放操作数,然后再放操作符,比如对签名表达式而言,后缀表达式为2、4、+、2、*可以总结出规律,前缀表达

2016-04-06 22:13:08 10644

原创 [leetcode-329]Longest Increasing Path in a Matrix(java)

原题:这里写链接内容分析:这道题很容易想到DFS的做法,于是写成了代码1,但是TLE,其实也很正常,因为在遍历过程中可能多次经历了某些中间状态。而这些状态实际上只需要访问一次就可以了,于是又写出了代码2,DFS+动态规划。第一版:public class Solution { int[][] matrix; int matrixRow; int matrixCol;

2016-04-01 16:16:39 645

原创 [leetcode-330]Patching Array(java)

原题:这里写链接内容分析:一开始我的思路是这样,将所有未包含的数添加到一个set中,然后遍历nums集合,然后把可以组合起来的都去掉,显然了,这个超时,特别是当我看到有整数的最大数时,这个方法肯定就不能用了。 然后想不出什么好思路了,网上这种写法非常好,他是定义了一个值miss,表示当前可用表示的最大值(不包括),然后通过添加数来扩展这个miss,什么意思呢?假如说我当前可用表示为【1,100),

2016-04-01 14:08:19 600

原创 Verify Preorder Serialization of a Binary Tree

原題:这里写链接内容分析:这道题问给定一个序列化的书,判断是否是个有效的先序遍历结果,而且不允许重构树的方法。首先,我们从叶节点开始看,对于一个叶节点,它的接下来的那两个字母一定是#,因此,在遇到两个#的时候,不妨把叶节点删掉,也就是将该叶节点变成一个#,这样当遍历一遍的时候,对于合法的树,那么一定只剩下#public class Solution { public boolean isVa

2016-04-01 10:27:00 268

原创 记一次安全事故排查

项目组有个项目管理网站wss,搭建在公网之上,今天上班的时候发现访问网站时会跳转到一个广告页面(原地跳转,而不是打开一个新的页面)。 嗯,这就是现象。下面记录一下整个排查过程。使用Chrome查看网络数据是如何交互的,但是这个方法无效,因为在原地跳转的一瞬间,chrome中网络的数据就已经更新了,而我们希望看到的是如何跳转到这个广告页面的。使用wireshark,过滤,抓包,终于看到,在获取到

2016-03-31 10:52:39 756

原创 [leetcode-332]Reconstruct Itinerary(java)

原题:这里写链接内容分析:这到头应该使用DFS进行搜索。尽管写过很多次递归程序,可是每次遇到他还是觉得很发憷,递归的过程中要注意两个点,一个是边界点,一个是状态恢复的过程。public class Solution { HashMap<String,List<String>> maps; int count; public List<String> findItinerary

2016-03-30 23:21:06 1284

原创 Longest Substring with At Most K Distinct Characters

这道题要求给定一个字符串,然后一个k,求一个最大子串的不重复的字符不大于k的最大子串长度分析:这道题本质要维护一个窗口,即要维护一个hashmap,key为字符,value为窗口内的该字符的个数,然后在窗口扩张过程中,检查chars[end]是否被包含在map中,或者map的大小是否小于k,如果是直接添加;否则就要转为收缩,即start开始收缩,直到到达合适位置public class Soluti

2016-03-29 21:16:24 1056

原创 使用spring测试模块搭建自动测试平台

老大给了这么个任务,搭建一个自动测试平台,他希望的效果是,在改动代码之后,可以一键进行测试,想想看,这个东西是很有意义的,总不能改动一点代码,就要从页面上重新走遍回归测试吧?太傻了。于是调研了一些Spring的测试模块。 Spring的测试模块主要存放在org.springframework.test包下,它包括了集成测试和单元测试,这里我只处理了集成测试,原因有几点:处理起来简单,在构造HTT

2016-03-29 20:06:38 491

原创 [leetcode-335]Self Crossing(java)

原题:https://leetcode.com/problems/self-crossing/public class Solution { public boolean isSelfCrossing(int[] x) { int length = x.length; for(int i = 3;i<length;i++){ if(i

2016-03-29 15:42:38 618

原创 分析MockHttpServletRequestBuilder中content和param的区别

最近在做一个自动测试的平台,使用的是Spring的自带测试库。如何使用,这里不再说了,网上有很多,推荐开涛写的博客我的主要测试代码://主要构造mock请求类,可以不用看try { for(TestClass tmpClass:classes){ List<TestUrl> urls = tmpClass.getUrls();

2016-03-28 17:06:31 13869

原创 [leetcode-337]House Robber III(java)

原题:House RobberIII对于这种树形结构,应该很容易想到使用递归的方法,这里的难点在于递归的时候相邻点不能同时访问,因此我写成了第一种做法,也ac了,但是这样并不好,因为它对很多点都会重复遍历。于是在网上看到了第二种写法,很优雅,它定义了一个数据结构,对于当前节点,如果不使用该节点会拿多少钱,如果使用该节点又会多少钱。 很显然,对于一个节点而言,比如root, 那么rootMoney

2016-03-27 22:19:41 1773

空空如也

空空如也

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

TA关注的人

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