自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 后端缓存

每日一课【后端缓存系统】后端缓存可以分为分布式缓存、本地缓存两种。两者区别: 分布式缓存需要远程调用,多了一次网络开销。 同样情况下,分布式缓存要慢于本地缓存。 本地缓存不能跨区域共享。 适用场景:缓存与数据库同步问题:第一种:Cache Aside优点:简单易实现。缺点:需要自己维护数据更新后的...

2020-03-19 11:47:25 844

原创 使用java8 Optional防止空指针

阿里规范推荐使用java8的Optional中,上面两个方法是最长用的1.ofNullable(T) 意思就是可以为空的范型2.of(T) 值不能为空,否则会抛出NullPointerException使用public class Test {public static...

2019-08-08 11:31:20 509

原创 docker安装nginx并运行

1.拉取nginx的镜像:docker pull ningx2.运行:docker run -d nginx-d表示后台运行,可以用docker run --help查看。可以用docker ps查看正在运行的容器。进入容器:docker exec命令docker有bridge、host和None三种网络模式。端口映射...

2019-03-31 14:03:23 528

原创 Feign com.netflix.client.ClientException: Load balancer does not have available server for client: e

弄了好久,依赖都导入了,网上查的都没有解决。。。解决办法:将server的下面两个注释掉。# 表示是否将自己注册到Eureka Server,默认为trueeureka.client.register-with-eureka=false# 表示是否从Eureka Server获取注册信息eureka.client.fetch-registry=false...

2019-03-09 14:47:03 3213

原创 leetcode 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4要求时间复杂度为O(n)。如果可以使用额外空间,最简单的就是用HashMap。键对应...

2019-03-03 13:37:14 178

原创 数据结构之散列表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。为什么需要散列表?如果忽略内存,我们将键作为数组的索引,那么所有的查找查找操作只需要访问一次内存即可。当键很多时,这需要太大的内存。散列的主要目的...

2019-03-02 10:13:48 365

原创 数据结构之二叉查找树

定义:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。如图就是一颗二叉查找树:根节点为8,根节点的左子树都比8小,根节点的右子树都比8大。...

2019-02-26 19:02:00 267

原创 数据结构之符号表及其实现(Map)

符号表主要就是用来将一个键和一个值联系起来。定义:符号表是一种存储键值对的数据结构,支持两种操作:插入(put),即将一组新的键值对存入表中;查找(get),即根据给定的键得到相应的值。在实现前,我们遵循以下规则:每个键只对应一个值; 当向表中存入的键值对和表中的已有的键冲突时,新的值会替代旧的值。 键不能为空 值不能为空无序链表,java实现:import jav...

2019-02-25 21:24:19 1362 1

原创 数据结构之字典树 Trie 单词查找树

参照算法第4版,强烈建议看书上的实现步骤,这里只是一个个人记录。单词查找树的性能:查找命中所需的时间与被查找的键的长度成正比。比如单词有7个字符,查找或插入操作最多只需要检查8个节点。 查找未命中只需检查若干个字符。  所需空间:在RN~RNw之间,其中R为字母表大小,N为键的个数,w为平均单词长度。import java.util.LinkedList;import jav...

2019-02-21 16:56:22 347

原创 leetcode 添加与搜索单词 - 数据结构设计

用单词查找树,实现方法有很多,但是看了算法第4版的实现发现代码真的简洁强大。可以先看这篇文章:单词查找树这里搜索单词只需要判断true或false,不需要全部匹配,稍稍修改了下。class WordDictionary { private Node root; private static int R = 26; static cl...

2019-02-21 16:34:48 233

原创 剑指offer 二叉搜索树的第k个节点

题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。思路:如果按照中序遍历一个二叉搜索树,则遍历序列为{2,3,4,5,6,7,8}。所有先用中序遍历二叉搜索树,就容易找到第k个节点了。/** * @author yuan * @date 2019/2/21 * @descript...

2019-02-21 11:26:42 291

原创 leetcode 数组中的第K个最大元素

题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。思路:...

2019-02-20 12:04:49 235

原创 剑指offer 最小的k个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解法一:根据快速排序,基于数组的第k个数字来调整,使得k左边的数字都小于k,k右边的数字都大于k。调整后,左边的k个数字就是最小的k个数字,时间复杂度O(n)。/** * @author yuan * @date 2019/2/19 * @...

2019-02-19 13:38:58 203

原创 剑指offer 二叉树中和为某一值的路径

题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)例如,求路径和为22:有两条:10->5->7、10->12 由于路径是从根节点开始到叶节点的,要想到是用前序遍历,同时需要记录下当前的路径,当遍历...

2019-02-17 11:43:59 165

原创 剑指offer 连续子数组的最大和

题目描述输入一个整形数组,数组中的一个或连续多个整数组成的一个子数组。求所有子数组和的最大值。要求时间复杂度为O(n)。基础的动态规划,以dp(i)表示以i结尾的子数组的最大和,则有:dp(i) = max(dp(i-1)+a[i], a[i])   (i > 0)dp(0) = a[0]   最后对dp数组遍历,求出最大值即为整个数组的子数组和的最大值。/*...

2019-02-16 11:00:06 130

原创 剑指offer 字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。例如:"abc"可以先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。然后固定第一个字符,...

2019-02-15 12:51:33 131

原创 剑指offer 二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 例如,输入数组a={5,7,6,9,11,10,8}在后序遍历中,最后一个是树的根节点的值。二叉搜索树中,左子树节点都比根节点小,右子树节点都比根节点大。以数组a为例,前3个数字5、7、5都比根节点小,是根节点的左子树,9、11...

2019-02-15 11:49:38 191 1

原创 剑指offer 把二叉树打印成多行

题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。和层次遍历类似,为了把二叉树的每一行单独打印到一行里,需要增加两个变量,一个变量记录当前层中还没有打印的节点数,另一个变量记录下一层的节点数目。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/*...

2019-02-14 11:58:04 144

原创 剑指offer 从上往下打印二叉树

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。 就是二叉树的层次遍历,用队列,根节点入队列,每次打印一个节点时,如果该节点有子节点,则子节点放入队尾,直到队列中所有的节点都被打印出来。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/** * @...

2019-02-14 11:36:46 134

原创 剑指offer 包含min函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 我们的第一反应可能是每次压入一个新元素进栈时,将栈里的元素排序,让最小的元素位于栈顶,这样能在O(1)时间内,但这样不能保证最后压入栈的元素最先出栈,这样的数据结构已经不是栈了。接着我们可以想到保存最小的元素,但是当最小的元素被弹出后,如何得到下一个最小的元素?我们可...

2019-02-14 10:17:33 167

原创 springboot 读取配置

方法1:通过Environment的getProperty的方法获取。 @Autowired private Environment environment; /** * 1.通过Environment获取配置 * @return */ @GetMapping("/port") public String port(){...

2019-02-13 17:42:14 157

原创 剑指offer 对称的二叉树

题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。可以通过二叉树的前序遍历和对称前序遍历来判断二叉树是否对称。对称前序遍历:先遍历右节点,在遍历左节点。其实就是利用了二叉树的遍历。/** * @author yuan * @date 2019/2/13 * @description */publi...

2019-02-13 11:24:54 122

原创 剑指offer 二叉树的镜像

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

2019-02-13 11:09:50 112

原创 剑指offer 树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)第一步:在树A中查找与根节点相等的节点,可以用递归。第二步:判断A中以某个根节点的子树是否和树B具有相同的子树,同样可以用递归实现。注意空指针的处理。/** * @author yuan * @date 2019/2/13 * @description */publi...

2019-02-13 10:56:12 102

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

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:先比较链表1的头节点的值和链表2的头节点的值,将小的做为新链表的头节点,接下来继续比较。。(递归)例如图:1比2小,作为新链表的头部,继续比较2和3。。。当list1为null时,合并后即为list2。同样,当list2为null时,合并后即为list1。/** * @auth...

2019-02-12 16:37:37 100

原创 剑指offer 反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。需要定义3个指针,分别指向节点、节点的前一个节点和节点的后一个节点。/** * @author yuan * @date 2019/2/12 * @description */public class 反转链表 { static class ListNode { int val; ...

2019-02-12 16:16:37 171

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

输入一个链表,输出该链表中倒数第k个结点。最简单的思路:两次遍历,第一次获取链表长度n,第二次遍历n-k+1步即可。只遍历一遍:定义两个指针,第一个指针走k-1步,第二个不动,从第k步开始,两个指针同时遍历,当第一个走到链表尾节点,第二个指针正好指向倒数第k个节点。代码:/** * @author yuan * @date 2019/2/12 * @descripti...

2019-02-12 11:34:30 181

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

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 import java.util.Arrays;/** * @author yuan * @date 2019/2/10 * @description */public class Solu...

2019-02-10 13:20:33 136

原创 剑指offer 表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 /** * @author yuan * @

2019-02-10 12:19:40 167

原创 二分查找

public class Search { public int search(int[] nums, int target) { int l = 0; int r = nums.length - 1; // 是<= 当nums={1}只有一个元素的情况 while (l <= r) { ...

2019-02-05 14:56:37 93

原创 leetcode 超级次方

你的任务是计算 a^b 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。示例 1:输入: a = 2, b = [3]输出: 8示例 2:输入: a = 2, b = [1,0]输出: 1024由于b是数组,可以对数组的每个数进行运算。例如:模运算: (a + b) % n = (a % n + b % n) % n ...

2019-02-05 12:24:26 413 1

原创 剑指offer 数值的整数次方 leetcode Pow(x, n) (快速幂)

实现 pow(x, n) ,即计算 x 的 n 次幂函数。公式:当n为负数,注意需要特殊数据:底数为0且指数为负数的情况。复杂度为O(lgn)。代码实现:public class Solution { public double myPow(double x, int n) { if (Double.compare(x, 0) == 0 &am...

2019-02-05 11:39:28 233

原创 二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。一个基本的思路:先判断二进制最右边一位是不是1,然后把整数右移一位,知道整数变为0。代码:  public int NumberOf1(int n) { int count = 0; while (n != 0) { if ((n & 1) =...

2019-02-02 13:14:58 129

原创 leetcode 链表的中间结点

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 这题主要记录下快慢指针法,当用慢指针 slow 遍历列表时,让另一个指针 fast 的速度是它的两倍。当 fast 到达列表的末尾时,slow 必然位于中间。 public ListNode middleNode(ListNode head) { int l...

2019-01-31 13:39:08 174 1

原创 leetcode 用栈实现队列

这题以前写过,不过效率很低,看过剑指offer后突然发现用两个栈实现如此简单:这里简单记录下,想看详细的可以参考剑指offer。现在假设有三个元素:{a,b,c}插入:直接插入stack1。此时stack1有{a,b,c},stack2为空。抛出:由于之前是直接插入stack1,队列是先进先出,所有最先被抛出的应该是a,而a在stack1中的最栈部,不能直接抛出,此时借助stack...

2019-01-30 17:34:58 242

原创 springboot AOP 记录系统日志

AOP(参考百度百科):面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。在springboot中使用,加入依赖即可。不需...

2019-01-28 14:33:40 924

原创 java LinkedHashMap示例

import java.util.LinkedHashMap;import java.util.Map;/** * @author yuan * @date 2019/1/24 * LinkedHashMap通常提供的是遍历顺序符合插入顺序,它的实现是 * 通过为条目(键值对)维护一个双向链表。注意,通过特定构造函 数,我们可以创建反映访问顺序的实例,所谓的put、get、comp...

2019-01-24 17:08:17 1021

原创 leetcode 实现 Trie (前缀树) (单词查找树)

208. 实现 Trie (前缀树)题目描述实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 ...

2019-01-23 13:44:55 470

原创 leetcode 单词搜索 dfs

79. 单词搜索给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 wor...

2019-01-21 12:12:44 201 2

原创 springboot 使用JsonSerializer将Date转为long 时间戳 另外json去掉为null的属性

写一个转换类import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.databind.JsonSerializer;import com.fasterxml.jackson.databind.SerializerProvider;import java.io.IOException;impo...

2018-05-15 21:00:16 7099 4

空空如也

空空如也

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

TA关注的人

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