Java
huzhigenlaohu
这个作者很懒,什么都没留下…
展开
-
扔鸡蛋问题详解(Egg Dropping Puzzle)
经典的动态规划问题,题设是这样的:如果你有2颗鸡蛋,和一栋36层高的楼,现在你想知道在哪一层楼之下,鸡蛋不会被摔碎,应该如何用最少的测试次数对于任何答案楼层都能够使问题得到解决。如果你从某一层楼扔下鸡蛋,它没有碎,则这个鸡蛋你可以继续用如果这个鸡蛋摔碎了,则你可以用来测试的鸡蛋减少一个所有鸡蛋的质量相同(都会在同一楼层以上摔碎)对于一个鸡蛋,如果其在楼层i扔下的时候摔碎了,对于任何原创 2016-10-04 17:55:46 · 1548 阅读 · 0 评论 -
Spring Assert(方法入参检测工具类-断言)
Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回。类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查,如果入参不符合要求,方法将通过抛出异常的方式拒绝后续处理。举一个例子:有一个根据文件名获取输入流的方法:InputStream getData(String file),为了使方法能够成功执行,必须保证 file 入参不能为 null转载 2016-08-28 20:11:14 · 1411 阅读 · 0 评论 -
Largest Rectangle in Histogram(在柱形图中画出最大矩形)
Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.Above is a histogram where width转载 2016-08-18 11:20:26 · 709 阅读 · 0 评论 -
Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的:(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一转载 2016-08-01 09:43:22 · 451 阅读 · 2 评论 -
贪心算法,递归算法,动态规划算法比较与总结
一般实际生活中我们遇到的算法分为四类: 一>判定性问题 二>最优化问题 三>构造性问题 四>计算性问题而今天所要总结的算法就是着重解决 最优化问题 《算法之道》对三种算法进行了归纳总结,如下表所示: 标准分治动态规划贪心算法原创 2016-08-05 15:09:12 · 689 阅读 · 0 评论 -
Permutations 全排列生成算法
1、使用递归生成算法/* * 递归输出序列的全排列 */void permutation(char* array, size_t array_size, unsigned int index){ if(index >= array_size) { for(unsigned int i = 0; i < array_size; ++i) { cout << array[原创 2016-08-04 19:10:36 · 991 阅读 · 0 评论 -
内部类访问局部变量的时候,为什么变量必须加上final修饰
这里的局部变量就是在类方法中的变量,能访问方法中变量的类当然也是局部内部类了。我们都知道,局部变量在所处的函数执行完之后就释放了,但是内部类对象如果还有引用指向的话它是还存在的。例如下面的代码:class Outer{ public原创 2016-07-31 09:20:42 · 673 阅读 · 0 评论 -
剑指offer-机器人的运动范围
剑指offer-机器人的运动范围分享此题的目的是目前对回溯类型算法不太熟悉,这里做个记录,题目并不难 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格35,38),因为3+5+3+原创 2016-07-09 17:26:40 · 621 阅读 · 0 评论 -
剑指offer-矩阵中的路径
剑指offer-矩阵中的路径问题描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径原创 2016-07-09 16:15:14 · 2365 阅读 · 0 评论 -
ClassNotFoundException和NoClassDefFoundError的区别
正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序。ClassNotFoundException的产生原因:Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都原创 2016-07-29 10:35:22 · 398 阅读 · 0 评论 -
剑指offer-正则表达式匹配
正则表达式匹配题目描述 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配,特别的注意,a* 、a*b* 等模式是可以匹配0一个字符串的问题分析下面是匹原创 2016-07-07 16:40:04 · 451 阅读 · 0 评论 -
JDK源码一句注释:c.toArray might (incorrectly) not return Object[] (see 6260652)
最近在看JDK的源码:CopyOnWriteArrayList.Java和ArrayList.java,这2个类的构造函数,注释中有一句话看不懂。[java] view plain copy public ArrayList(Collectionextends E> c) { elementData = c.toArray(); size原创 2016-06-17 21:40:42 · 2017 阅读 · 0 评论 -
Java集合迭代器之fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器原创 2016-06-17 17:40:09 · 746 阅读 · 1 评论 -
Java虚拟机之对象探秘
Java虚拟机之对象探秘对象的创建虚拟机遇到一条new指令时,首先会检查指令参数是否能够在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。类加载过程通过后,接下来就是虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可确定,即在Java堆中分配一块确定大小的内存。- 如果Java堆内存是绝对规整的,原创 2016-07-14 16:53:53 · 379 阅读 · 0 评论 -
JVM的GC日志分析
JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-原创 2016-07-14 15:56:56 · 418 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask
一般常见的创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执原创 2016-07-25 22:51:58 · 405 阅读 · 0 评论 -
剑指offer-数组中只出现一次的数字
数组中只出现一次的数字 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。分析:相信大家对数组中只有一个数字对出现一次,其他都出现2次的题目(算法)都清楚,嗯,对,就是异或。/*** 数组a中只有一个数出现一次,其他数都出现了2次,找出这个数字* @param a* @return*/public static int find1From原创 2016-07-02 17:51:50 · 359 阅读 · 0 评论 -
程序语言类型总结
编译型语言:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的。编译程序将源程序翻译成目标程序后保存在另一个文件中,该目标程序可脱离编译程原创 2016-08-07 10:53:39 · 375 阅读 · 0 评论 -
LeetCode OJ 之 Maximal Rectangle (最大的矩形)
题目:Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.给一个二维的二进制矩阵,只包含0和1,找出只包含1的最大矩形并且返回这个矩形的面积。思路:本题通过下图变换可以转换为求 :Lee转载 2016-08-18 15:34:25 · 2118 阅读 · 1 评论 -
【分治法】最接近点对问题
问题场景:在应用中,常用诸如点、圆等简单的几何对象代表现实世界中的实体。在涉及这些几何对象的问题中,常需要了解其邻域中其他几何对象的信息。例如,在空中交通控制问题中,若将飞机作为空间中移动的一个点来看待,则具有最大碰撞危险的2架飞机,就是这个空间中最接近的一对点。这类问题是计算几何学中研究的基本问题之一。 问题描述:给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点转载 2016-10-22 19:21:29 · 2879 阅读 · 1 评论 -
JDK里的设计模式(全)
下面是JDK中有关23个经典设计模式的示例,在stakeoverflow也有相应的讨论:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patternsStructural(结构模式)Adapter:把一个接口或是类变成另外一种。java.util.Arrays#asList() jav转载 2016-08-14 13:07:28 · 731 阅读 · 0 评论 -
整数划分总结(动态规划)
先引入一个比较实际的问题:分苹果题目M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放。1<=M<=10,1<=N<=10例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法输入 7 3输出 8思路设f(m,n) 为m个苹果,n个盘子的放法数目:当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生原创 2016-08-13 11:23:52 · 4927 阅读 · 0 评论 -
和尚挑水(回溯法)
复习回溯法题目某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:和尚1: 星期二,四;和尚2: 星期一,六;和尚3: 星期三,日;和尚4: 星期五;和尚5: 星期一,四,六;和尚6: 星期二,五;和尚7: 星期三,六,日;请将所有合理的挑水时间安排表 思路 回朔法求解回朔法即每进行一步,都试图在当前部分解的基础上扩大转载 2016-08-13 10:01:19 · 949 阅读 · 0 评论 -
基于单链表的快排实现
快排最核心的思想就是划分,确定一个枢轴元素(pivot),每一趟划分的目的就是把待排序列分为两部分,前一部分比枢轴小(序列A),后一部分比枢轴大(序列B)。经过一趟划分之后序列变为:{A} pivot {B}。以下是具体步骤:1、确定每一次划分的枢轴元素为当前待排序列的头节点。2、设置Slow和Fast两个游标,Slow指向序列A中的最后一个元素,初始化为枢轴本身(待排序列头节点)。让Fa原创 2016-09-03 20:30:55 · 1444 阅读 · 0 评论 -
根据入栈顺序判断出栈序列正确与否
题目描述: 题目标题:铁路栈问题铁路的调度站如下:火车编号为:1~9,且不重复。如:编号分别为“1”、“2”、“3”、“4”、“5”的5个火车顺序进站,那么进站序列为“12345”,全部进站后再顺序出站,则出站序列为“54321”,如果先进1,2,然后2出站,然后1出站,然后再3进站、出站,4进站、出站,5进站、出站,那么出站序列就为21345.详细原创 2016-08-12 15:51:10 · 2274 阅读 · 0 评论 -
回溯法求迷宫问题
并不是什么新鲜算法,只是这儿当作回溯法经典案例复习下而已!以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。(1) 根据二维数组,输出迷宫的图形。(2) 探索迷宫的四个方向:RIGHT为向右,DOWN向下,LEFT向左,UP向上,输出从入口到出口的行走路径。[测试数据转载 2016-08-12 10:52:37 · 1164 阅读 · 0 评论 -
回溯法求解N皇后问题
回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解。这种迭代类似于穷举并且是试探性的,因为当转载 2016-08-12 10:13:15 · 898 阅读 · 0 评论 -
矩阵连乘-动态规划-(只是感觉描述的清晰易懂,并不是什么新算法)
矩阵连乘-动态规划-详解DEC 19TH, 2015 11:04 AM动态规划法以矩阵链ABCD为例按照矩阵链长度递增计算最优值矩阵链长度为1时,分别计算出矩阵链A、B、C、D的最优值矩阵链长度为2时,分别计算出矩阵链AB、BC、CD的最优值矩阵链长度为3时,分别计算出矩阵链ABC、BCD的最优值矩阵链长度为4时,计算出矩阵链ABCD的最优值转载 2016-08-11 15:20:05 · 2170 阅读 · 0 评论 -
网易笔试题--混合颜色(异或)
你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节原创 2016-08-20 23:23:17 · 2651 阅读 · 0 评论 -
网易笔试题--幸运袋子(数列各项和大于数列各项乘积)
一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以原创 2016-08-20 22:23:13 · 2308 阅读 · 3 评论 -
java如何实现进程间的通信?
先看看传统的进程间通信的手段:(1) 管道(PIPE)(2) 命名管道(FIFO)(3) 信号灯(Semphore)(4) 消息队列(MessageQueue)(5) 共享内存(SharedMemory)(6) Socket(当然也有Socket)如果加上上面提到的临时文件(临时文件其实是很难处理的,不同的进程间单靠临时文件可以交互信息,但是做到进程的调度控制确是很费力原创 2016-09-09 17:10:33 · 15082 阅读 · 0 评论 -
google笔试题 -- 根据已知数列得到不能组合求和的最小数
开始是Google笔试题 https://code.google.com/codejam/contest/4244486/dashboard#s=a&a=2 (翻墙看)网易笔试也出现了,如下:小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2原创 2016-08-18 21:31:11 · 1082 阅读 · 0 评论 -
Redis的持久化方式
Redis的持久化Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件):RDB持久化方式会在一个特定的间隔保存那个时间点的一个数据快照。AOF持久化方式则会记录每一个服务器收到的写操作。在服务启动时,这些记录的操作会逐条执行从而重建出原来的数据。写操作命令记录的格式跟Redis协议一致,以追加的方式进行保存。Redis的持久化是可以禁用的,就是说你可以让数据的转载 2016-08-29 15:19:55 · 643 阅读 · 0 评论 -
[Leetcode] Maximal Square 最大正方形
题目:Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.For example, given the following matrix:1 0 1 0 01 0 1 1 11 1 1 1 1转载 2016-08-18 16:00:14 · 1065 阅读 · 0 评论 -
剑指offer-两个链表的第一个公共结点
两个链表的第一个公共结点 输入两个链表,找出它们的第一个公共结点。分析关键点: 这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率非常高。如果两个单向链表有公共的节点,也就是说两个链表从某一个节点开始,它们的m_pNext都指向同一个节点。但由于是单向链表的节点,每个节点只有一个m_pNext,因此从第一个公共节点开始,之后它们所有的节点都是重合的,不原创 2016-07-02 11:33:21 · 539 阅读 · 0 评论 -
Java源代码分析之Stack栈
Stack 源代码分析每个Java程序员应该了解的特性LIFO后进先出的特性在多线程环境下线程安全类图可以看到Stack直接继承Vector类层次图可以看到,jdk还啰嗦的为大家添加了一个实现类,StringStack,其实根本没必要的吧,大体看了下,一共只有5个方法,加一个序列号字段,内部实现全部是复用父类的方法,完全可以自己实现的,有点多余啦,另外在继承Vector类中也就Stack了,原创 2016-06-16 10:44:57 · 1017 阅读 · 0 评论 -
HashMap方法hash()、tableSizeFor()
HashMap#hash() /** * Computes key.hashCode() and spreads (XORs) higher bits of hash * to lower. Because the table uses power-of-two masking, sets of * hashes that vary only in bit原创 2016-07-01 16:21:44 · 4948 阅读 · 5 评论 -
ClassNotFoundException和NoClassDefFoundError的区别
正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序。ClassNotFoundException的产生原因:Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参原创 2016-05-17 16:48:04 · 440 阅读 · 0 评论 -
深入Java 1.5枚举类型的内部实现原理
Java是一种面向对象的高级编程语言。它的出众之处就在于它的简洁。一个程序员所要做的就是创建类(Create Class)以及定义接口(Define Interface),如此而已。当然,这种简洁和优美是有代价的,比如失去了Enum这种广泛使用的数据类型就是一个不小的损失。在Java 1.5以前,程序员们不得不通过一些变通的方法来间接的解决这一问题。比如说,被普遍使用的整数枚举替代法和类型安全类替原创 2016-05-28 11:42:20 · 2985 阅读 · 0 评论 -
Java动态修改Enum实例
众所周知,enum类型实例数量是固定的,甚至还被用来设计单例。但有时候仍然存在需要动态增加Enum实例的场景,这也并非一定是设计失败,也可能是增加灵活性的实际需求,比如一些web框架,再比如HanLP 中的动态用户自定义词性。然而最大的障碍是switch语句生成的虚构类,本文参考Java Specialists第161期,提供一份可用的解决方案与实例代码。一段有问题的代码原创 2016-05-28 10:49:14 · 14778 阅读 · 0 评论