无重复字符的最长子串 发表于 2019-11-26 分类于 LeetCode Disqus: 本文字数: 1.4k 阅读时长 ≈ 1 分钟 题目描述给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 注意,你的答案必须是子串的长度,”pwke” 是一个子序列,不是子串。 阅读全文 »
两数相加 发表于 2019-11-25 分类于 LeetCode Disqus: 本文字数: 1.4k 阅读时长 ≈ 1 分钟 题目描述给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807 阅读全文 »
罗马数字转整数 发表于 2019-11-07 分类于 LeetCode Disqus: 本文字数: 1.3k 阅读时长 ≈ 1 分钟 题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 12345678字符 数值I 1V 5X 10L 50C 100D 500M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。 示例 1: 输入: “III”输出: 3 示例 2: 输入: “IV”输出: 4 示例 3: 输入: “IX”输出: 9 示例 4: 输入: “LVIII”输出: 58解释: L = 50, V= 5, III = 3. 示例 5: 输入: “MCMXCIV”输出: 1994解释: M = 1000, CM = 900, XC = 90, IV = 4. 阅读全文 »
两数之和 发表于 2019-11-06 分类于 LeetCode Disqus: 本文字数: 1.2k 阅读时长 ≈ 1 分钟 题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 阅读全文 »
浅谈 HashMap 发表于 2019-09-10 分类于 数据结构与算法 Disqus: 本文字数: 9.6k 阅读时长 ≈ 9 分钟 前言HashMap 是 Java 编程中非常常用的一种数据结构,在各种面试中也是频繁出现的问题。我是一次定位问题,发现了服务后台 CPU 和内存飙升,原因是使用 HashMap 的时候,并发插入数据在 resize() 方法中产生循环链表导致死循环(JDK8 已经解决)。看到代码中大量的 HashMap,不自然的就想先了解下 HashMap 的实现原理和其线程安全问题。此文主要是介绍 HashMap 的实现原理,关于如何定位 CPU 和内存飙升问题,可以看另外一篇博客: Jstack 使用介绍 | 笑话人生 阅读全文 »
JStack 使用介绍 发表于 2019-09-10 分类于 Java Disqus: 本文字数: 2.3k 阅读时长 ≈ 2 分钟 前言在项目中遇到一个问题,我们服务提供给外部的一个接口 queryXXX 一直返回 429 错误(Too Many Requests),接口没有返回值,而且服务越用越卡,要重启一下才能恢复。于是马上就想到是不是因为这个接口产生了死循环,导致接口无法正确返回,同时导致后台 CPU 和内存占用飙升,顺着这个思路定位下去,确实顺利的找到的问题所在。 阅读全文 »
愚人节快乐 发表于 2019-04-01 分类于 Java Disqus: 本文字数: 438 阅读时长 ≈ 1 分钟 事情起因是看到一个面试题,原题大概是,生成 N 个 1 到 1000 之间的随机数(N <= 1000),对于重复的数字,只取其中一个,并对结果进行从小到大排序。正好前几天了解了下 Java 的 Lambda 表达式和 Stream API,突然想起来,这可以一行代码搞定啊。于是就尝试的写了一下。【原题还是比较复杂的,我就提取了精华部分】 阅读全文 »
Java 8 的 Lambda 表达式和 Stream API 发表于 2019-03-18 更新于 2019-03-20 分类于 Java Disqus: 本文字数: 8.6k 阅读时长 ≈ 8 分钟 简介Java 8 的 Lambda 表达式提供了强大的函数化的编程能力,将函数作为参数传递进方法中。免去了使用匿名方法的麻烦,这样使可读性更好,表达更清晰。它是推动 Java 8 发布的最重要新特性。Lambda 表达式的简洁让人非常激动,但是如果第一次看到一段复杂的Lambda表达式的代码,会让你非常头疼,对于初学者来说,可能就是一段垃圾代码,因为你并不知道 Lambda 表达式到底在表达什么╮(╯▽╰)╭下面我们就举一些小例子由浅入深的了解下 Lambda 表达式。 阅读全文 »