Java
文章平均质量分 70
mnmlist_tata
这个作者很懒,什么都没留下…
展开
-
MapStruct + lombok实现优雅实体转换
1、是什么?MapSturct 是一个生成类型安全, 高性能且无依赖的 JavaBean 映射代码的注解处理器(annotation processor)。抓一下重点:注解处理器可以生成 JavaBean 之间那的映射代码类型安全, 高性能, 无依赖性从字面的理解, 我们可以知道, 该工具可以帮我们实现 JavaBean 之间的转换, 通过注解的方式。同时, 作为一个工具类,相比于手写, 其应该具有便捷, 不容易出错的特点。具体见https://mapstruct.org/2、如何接入&原创 2021-05-12 20:15:37 · 853 阅读 · 1 评论 -
Java通用并发调度框架
1.背景为提高API接口性能,一般需要API接口依赖的对部分其它服务接口调用进行并行化处理。之前逻辑是采用ThreadPoolExecutor+CountDownLatch进行并行调度控制,该方案有个较大缺点为很容易造成代码膨胀和不可维护,需要开发一个新的调度框架来提高并行调度的友好程度。2.解决方案开发一套并行调度框架,底层逻辑仍然为ThreadPoolExecutor+CountDownLatch,降低并行开发接入难度。2.1执行单元抽象类TCallablepublic class TCall原创 2021-05-12 19:34:53 · 492 阅读 · 0 评论 -
JAVA的protected权限
1.派生类可以访问父类的protected数据,这是毫无疑问的。2.今天做Think in java的习题发现,同一个包内的一个类调用另一个类的protected数据是可以的。代码如下:package mnmlist;class Mnmlist{ public static void pt() { Hello hi=new Hello(100); System.out.原创 2014-11-06 19:48:49 · 1042 阅读 · 0 评论 -
Java实现将指定文件夹内的指定类型的文件归类
这两天在学Java IO流,正好让我产生了将自己的电子书归类的打算,说做就做,Why not?看着自己所学所用能解决生活中的实际问题,是不是很有成就感,那是必须的!package DepthSearch;import java.util.*;import java.io.File;import java.io.FileInputStream;import java.io.File原创 2014-12-18 09:26:15 · 5087 阅读 · 0 评论 -
leetcode_94_Binary Tree Inorder Traversal
2.思路a.先遍历左子树直至左孩子为空b.然后看当前节点的右子树是否为空,为空,则访问当前节点,弹出当前节点,重新判断;不为空,访问当前节点,然后将当前节点弹出,并将当前节点的右孩子进栈,返回ac.这中间需要注意的是,在弹出当前节点后,在获得栈顶的当前节点前先判断下栈是否为空原创 2015-03-16 20:49:49 · 1109 阅读 · 0 评论 -
leetcode_108_Convert Sorted Array to Binary Search Tree
思路:思路就是按二分查找的思路进行中序建树,递归建树。原创 2015-03-26 20:30:33 · 751 阅读 · 0 评论 -
leetcode_112_Path Sum
思路:由于是root-to-leaf,马上就想到了后序遍历,直接遍历到叶子节点,把从根节点到叶子节点的值统计一下看其和是否等于sum,相等的话则返回true,不等的话继续遍历直到下一个叶子节点。。。循环直至遍历结束。只是感觉,这么简单的一个题目,用后序遍历来解,杀鸡用牛刀?这感觉还挺不错!大笑忽然感觉,这树的几种遍历方式可真的很有用。原创 2015-03-26 20:16:51 · 729 阅读 · 0 评论 -
leetcode_98_Validate Binary Search Tree
思路:由于二叉排序树和对二叉树的中序遍历所形成的值是有序的是充分必要条件,所以仅需对二叉树进行中序遍历即可,并将遍历的结点的值存储到一个list中,然后依次比较list中的值,是有序的则二叉树为二叉排序树,否则则不是。当然,一个更好的方法是用一个temp暂存上一个结点的值,然后依次进行比较即可。原创 2015-03-26 20:48:01 · 764 阅读 · 0 评论 -
leetcode_102_Binary Tree Level Order Traversal
一般的层序遍历直接打印出结果,用队列即可,但是此次的要求尼是按层次打印结果,所以考虑到用两个队列来交替存储,遍历上一层次的同时将下一层的结点存储到另一个队列中,并在将上面一层的遍历完成后交换两个队列的值。原创 2015-03-20 13:58:40 · 1331 阅读 · 0 评论 -
leetcode_113_Path Sum II
思路:大致思路就是将pathsum 1中的存储节点的栈stack换成具有栈功能的LinkedList,这样每匹配依次将各个节点的值存储到一个list中,遍历完整棵树后返回一个满足条件的结点列表的列表。原创 2015-03-26 20:24:43 · 785 阅读 · 0 评论 -
leetcode_129_Sum Root to Leaf Numbers
思路:和pathsum系列是一个思路,后序遍历至某个节点,将root-to-leaf的所有结点的值表示成一个数和sum相加,直至遍历完所有的leaf结点,返回sum。原创 2015-03-26 20:37:07 · 903 阅读 · 0 评论 -
leetcode_107_Binary Tree Level Order Traversal II
一般的层序遍历直接打印出结果,用队列即可,但是此次的要求尼是按层次打印结果,所以考虑到用两个队列来交替存储,遍历上一层次的同时将下一层的结点存储到另一个队列中,并在将上面一层的遍历完成后交换两个队列的值。最后,将结果列表调换下顺序即可。原创 2015-03-20 14:17:07 · 824 阅读 · 0 评论 -
leetcode_144_Binary Tree Preorder Traversal
具体思路和中序遍历是一致的,只是访问结点的值的时机不同罢了,具体思路参见:http://blog.csdn.net/mnmlist/article/details/44312315原创 2015-03-20 14:41:11 · 865 阅读 · 0 评论 -
leetcode_103_Binary Tree Zigzag Level Order Traversal
思路:具体的思路和层序遍历一致,只是需要将偶数层的结点值颠倒一下即可,时间略长,可见本方法并非好的方法。思路详见层序遍历:http://blog.csdn.net/mnmlist/article/details/44490975原创 2015-03-20 15:10:34 · 830 阅读 · 0 评论 -
java中split方法的用法
想搞清楚这个问题的原因就是我无法把一个文本里的单词全部给找出来,因为接触C++的时候记得好像regex可以有好多个字符组成,这样就可以通过,。!和空格等标点来分割文本了,但是split的方法所接受的参数只有String类型的regex和int类型的limit,limit用来表示最多可以将字符串分成多少部分。后来通过在网上查找资料才知道原来String类型的regex可以由多部分组成,每个部分分别由 | 隔开,对于可能要出现的* + .等符号,可能需要 \\ 的转义,具体注意事项有以下几个部分:1.首先 .原创 2015-03-29 10:09:39 · 1306 阅读 · 0 评论 -
leetcode_117_Populating Next Right Pointers in Each Node II
思路:就是用两个list存储相邻两层的结点,把第i+1层结点存储到list中的同时,分别将第i层的各个节点指向下一个,跟Populating Next Right Pointers in Each Node I一个思路。原创 2015-03-29 10:53:43 · 892 阅读 · 0 评论 -
leetcode_99_Recover Binary Search Tree
思路:首先中序遍历二叉查找树并将遍历的节点存储到一个list中,然后对list中的值进行比较,查找出位置出现变化的两个结点,将两个结点的值进行互换,完成本题的要求。但是呢,对于如何发现位置出现变化的两个结点是本题的重点和难点,具体判断条件可以参见下面的程序,最后对查到的结点进行取舍也是一大问题,一般符合判断条件的结点会出现三个,我取的是第一个和第三个,这不好讲清楚,具体可自行推敲。原创 2015-03-29 11:06:17 · 935 阅读 · 0 评论 -
去哪儿网校园招聘笔试题(成都)--之一
描述:已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印。本例的输出顺序为:dear, dog, eye, bed。思路:将字母序列所代表的顺序值存入map中,然后再实现排序接口comparator中的compare方法,在compare方法中实现对字符串的排序。原创 2015-03-22 22:02:36 · 1515 阅读 · 0 评论 -
使用Java中Comparator接口实现自定义排序
一般情况下,自己动手写一个简单排序程序还是没有问题的,但是你能保证写出来的排序程序的时间复杂度吗?你能保证程序的正确性吗,鲁棒性呢,还有程序结构的清晰性,可维护性.......综上所述,学习一下排序接口来实现对复杂对象的排序还是很有必要的。Java中有两个用来实现排序的接口Comparator和Comparable接口,本人比较喜欢使用java的Comparator接口,在程序里实现Comparator接口里的compare(Object o1,Object o2)方法,然后在程序中通过调用Arrays.s原创 2015-03-29 10:41:07 · 1435 阅读 · 0 评论 -
腾讯2015实习生招聘模拟考--其中一题
腾讯2015实习生招聘模拟考--其中一题描述:DNA中有A、C、G、T等基因单元吧,ACGT算是在单词表中的正常顺序,而CA,GA,GC,TA,TC,TG算是逆序对,给你一个基因序列,即包含A、C、G、T的字符串数组,请在线性时间复杂度内求出逆序对的个数。思路:先用四个变量第i个字符前的A、C、G、T字符数存储起来,当道第i个字符时,假设第i个字符为C,则对于C前面出现的字符G,T所出现的次数即为构成的逆序对GC和TC逆序对的个数,题目得解。原创 2015-03-22 21:36:46 · 2241 阅读 · 0 评论 -
leetcode_23_Merge k Sorted Lists
思路:本来想模仿合并两个链表的方法,查找所有的lists链表一遍找出一个最小值,并将最小值链接到结果链表中,并将最小结点删除,将最小结点的next结点替代之,直至为null,将链表删去。但是当lists.size()比较大时,时间复杂度就上来了,而且每次只能选一个最小结点,O(N*N)的节奏。。。所以,想到不就是排序么,将所有的结点集合到一起,然后对其进行快速排序不就可以了么,啊哈,真的是这样,bravo!很显然,这种方法肯定不是最优方法,但是时间复杂度也只是O(N*logN),也是可以接受的。原创 2015-03-23 20:59:32 · 1001 阅读 · 0 评论 -
leetcode_101_Symmetric Tree
思路:判断一棵树是否是左右对称的,用这样几种可能,左右子树都为空时对称,左右子树有一个不为空时不对称,子树结点值相等&&左子树的左孩子的结点值等于右子树的右孩子的结点值&&左子树右孩子的结点值等于右子树左孩子的结点值,OK!原创 2015-03-24 14:27:32 · 906 阅读 · 0 评论 -
leetcode_114_Flatten Binary Tree to Linked List
思路:按照中序遍历的方式将结点存储到一个list列表中,然后分别将各个节点的left赋值为空,将right指向下一个节点,最后将最后一个结点的right赋值为空即可生成题目要求的树结构。结果对了是对了,好像不太符合题目要求,题目要求 do it in-place,不知道我的算不算in place。很显然,从时间上来看,我想到的思路也不能算好。刚开始以为是要生成一个链表,走了好多弯路,发现返回值就是一个void,题目要实现的就是改变下树是结构而已。原创 2015-03-24 14:59:19 · 796 阅读 · 0 评论 -
leetcode_100_Same Tree
思路:由于这题标识为easy,判断两棵树是否相等,想到了用递归。有这几种可能,两棵树相等的充要条件为root的值相等&&左子树相等&&右子树相等,两棵树都为空时也相等,其中一棵为空时就不相等原创 2015-03-24 14:18:40 · 769 阅读 · 0 评论 -
leetcode_104_Maximum Depth of Binary Tree
思路:用递归,很简单,树为空时返回0,左子树为空且右子树为空时返回1,否则就返回左子树或右子树的最大深度再加1原创 2015-03-24 14:36:45 · 815 阅读 · 0 评论 -
leetcode_111_Minimum Depth of Binary Tree
思路:和求最大深度思路是类似的,只是题目要求的最小深度是到最近的叶子节点的最小深度,所以当一个节点的深度为0时,很显然是没有叶子节点的,应该取另外一个num并加1原创 2015-03-24 14:42:09 · 788 阅读 · 0 评论 -
leetcode_110_Balanced Binary Tree
思路:走了好多弯路,最后才发现直接根据定义来就可以了,左右子树的深度不超过1且左右子树都是平衡二叉树,就是这么简洁明快。原创 2015-04-03 15:31:15 · 658 阅读 · 0 评论 -
leetcode_105_Construct Binary Tree from Preorder and Inorder Traversal
思路:1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找2.递归选取前序序列的第一个元素作为树的根节点,然后查找根节点在前序序列中位置inorderIndex,inorderIndex-startInorder可以得到左子树的长度3.根据左子树的长度和startPreOrder可以求出前序序列中左子树的起始位置4.从上面可以求出左右子树的前序序列和中序序列的起始位置,递归调用建树过程即可。PS:其实,对于这道题,有更简单的方法,可根据按前序序列元素出现的顺序依次作为树的根节点进行原创 2015-04-03 14:51:57 · 861 阅读 · 0 评论 -
leetcode_106_Construct Binary Tree from Inorder and Postorder Traversal
思路:1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找2.递归选取后序序列的倒数第一个元素作为树的根节点,然后查找根节点在后序序列中位置inorderIndex,endInorder-inorderIndex可以得到右子树的长度3.根据右子树的长度和endPreOrder可以求出后序序列中右子树的起始位置4.从上面可以求出左右子树的后序序列和中序序列的起始位置,递归调用建树过程即可。原创 2015-04-03 14:59:49 · 815 阅读 · 0 评论 -
leetcode_96_Unique Binary Search Trees
思路:这一道题呢,刚开始完全没有思路,拿笔在草纸上这样演算,那样演算,但是没有思路。这是一个二叉查找树,所以题眼很可能就是在这里,在网上一查还真是这样。由于这是一棵二叉查找树,所以当一棵树形态固定下来后,该树是唯一的。由于根节点的值大于左子树上的任何一个结点的值,小于右子树上任何一个结点的值,所以,当某个节点被当作树的根节点时,树的形态个数有num(root.left)*num(root.right)个,从num_0,num_1,num_2开始迭代计算即可。原创 2015-04-03 15:25:42 · 660 阅读 · 0 评论 -
leetcode_145_Binary Tree Postorder Traversal
思路:刚开始的时候由于刚做出前序和中序的遍历,落入这两种遍历的窠臼,总以为在中序遍历的基础上改改就可以了,但是,改了好久,费了了好大的劲,走了好多弯路,in vain!最后联想到后序遍历不就是在中序遍历的基础上,经由子树根节点访问右子树,然后再访问根节点,不是么?所以,想到再多用一个栈来标记是否是第一次访问子树根节点,第二次访问子树根节点时(当然不算第一次将所有左子树入栈的那一次)就存储根节点的值。bravo!It's done!原创 2015-03-25 08:39:58 · 784 阅读 · 0 评论 -
leetcode_173_Binary Search Tree Iterator
思路:这道题想了好久,知道用中序遍历来解决,用一个list将遍历的元素存储起来一下就解决了,但是空间复杂度不行。具体怎么解决,如何控制程序的终止困扰了我好久。知道我想起来至多用O(h) memory,我想到了直接把一趟遍历后返回开始之前的所有元素存储起来不就正好符合题目要求了么,bravo!原创 2015-04-03 15:14:24 · 790 阅读 · 0 评论 -
leetcode_Validate Binary Search Tree
思路:由于二叉排序树的中序遍历序列是有序的,所以考虑在遍历的过程中通过判断遍历序列是否有序从而来判断该排序树是否有效,但这又涉及到第一个元素的问题,所以可以设一个比Integer.MAX_INT还小的值作为参考值或者设一个flag来判断是否是第一个值,第一个值直接跳过即可。原创 2015-04-04 20:39:30 · 703 阅读 · 0 评论 -
leetcode_Min Stack
思路:本题目的解法是用到了两个栈,一个用来存元素,另一个用来存最小元素,元素入栈时和minStack栈里面的栈顶元素相比,小于栈顶元素则存入,大于栈顶元素则栈顶元素(当前元素中的最小值)入栈。其中,需要注意的是元素出栈时,要随时更新当前栈中的最小元素min=minStack.top()原创 2015-04-04 20:47:55 · 793 阅读 · 0 评论 -
leetcode_Climbing Stairs
思路:变形的斐波那契原创 2015-04-04 20:53:12 · 762 阅读 · 0 评论 -
cralwerDemo
package com.mnmlist.crawler2;import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.util.NodeList;import org.htmlparser.tags.*;import jav原创 2015-04-08 14:05:53 · 729 阅读 · 0 评论 -
leetocde_Binary Tree Right Side View
思路:按层序遍历的思路,每次只保存该层的最后一个元素即可。原创 2015-04-08 20:29:29 · 685 阅读 · 0 评论 -
leetcode_Number of 1 Bits
思路:java中如何表示无符号整数呢,很伤,那就用C写吧。二进制与运算和二进制循环移位搞定原创 2015-04-08 20:25:58 · 831 阅读 · 2 评论 -
去哪儿网2015春季校招笔试--回忆版
去哪儿网2015春季校招笔试--回忆版 第一次做笔试题,好激动。今年研发类的有三道题目,干净利落,比较喜欢去哪儿的题目类型,晚上回去做腾讯的在线笔试就比较坑了,各种多选与程序天空,各种C++语法。。。无力吐槽,C++学的太菜了。奋斗了一个半小时做出了两题,感觉也还行,谁知今天在电脑上跑一跑,两道都有问题!不管怎么说,大体思路是对的。下面把这几道题贴出来,希望对大家有一定的借鉴作用,欢迎拍砖。 1.找数组中的关键字,int indexOf(int array[],int key)原创 2015-03-22 21:24:31 · 1939 阅读 · 5 评论 -
leetcode_Letter Combinations of a Phone Number
思路:本题目要实现的效果就是产生一系列广义有序的字符串序列,本来想假如知道digits字符串长度的话,可以搞一个n层循环,但是digits的长度是未知的。想了好久,想到了用递归来实现本题目要实现的功能,每个数字循环到数字所代表字符的个数大小时,返回上一级递归,然后再在上一级的循环层次计数上再加1即可。当字符的长度等于digits的长度时,说明已经产生一组有效的字符串,存储起来,然后将最后一个字符删除,继续循环。。。。最后,当index<0时,说明整个循环已经结束,over!但是在具体实现的过程中,递原创 2015-04-09 21:06:16 · 811 阅读 · 0 评论