自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小胖的博客

技术与生活

  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 ThreadLocal内存泄漏

为什么使用弱引用?key 使用强引用:引用的ThreadLocal的对象被回收了,但是ThreadLocalMap还持有ThreadLocal的强引用,如果没有手动删除,ThreadLocal不会被回收,导致Entry内存泄漏。key 使用弱引用:引用的ThreadLocal的对象被回收了,由于ThreadLocalMap持有ThreadLocal的弱引用,即使没有手动删除,ThreadLoc...

2019-02-27 08:55:59 221

原创 select/poll/epoll

epoll重大改进:支持一个进程打开的socket描述符不受限IO效率不会随着FD的数目增加而线性下降使用mmap加速内核与用户空间的消息传递api更加简单

2019-02-27 00:13:03 82

原创 Leetcode32最长有效括号

给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”class Solution { public int longestValidParentheses(String s) { if(s==null||s.length()==0)//很自然的想到用栈 ...

2019-02-26 23:20:43 289

原创 this逃逸

Executor 框架是Java5之后引进的,在Java 5之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。this逃逸是指在构造函数返回之前其他线程就持有该对象的引用. 调用尚未构造完全的对象的方法可能引发令人疑惑的错误。...

2019-02-26 17:29:00 279 1

原创 notify不立刻释放锁

当方法wait()被执行后,锁自动被释放,但执行完notify()方法后,锁不会自动释放。必须执行完notify()方法所在的synchronized代码块后才释放。

2019-02-26 15:43:53 1943

原创 Leetcode79单词搜索

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

2019-02-25 22:49:25 196

原创 LeetCode83删除链表中重复的数字

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3/** * Definition for singly-linked list. * public class ListNode { * in...

2019-02-25 21:28:14 535 1

原创 LeetCode199二叉树的右视图

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释:1 <—/ 2 3 <—\ 5 4 <—/** * Definition for a binary tr...

2019-02-25 20:59:19 161

原创 LeetCode19 删除链表的倒数第 n 个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5./** * Definition for singly-linked list. * public class ListNode { * int...

2019-02-24 22:53:09 93

原创 LeetCode337打家劫舍三

在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,n...

2019-02-24 22:03:33 418

原创 LeetCode213打家劫舍二

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出: 3解释: 你不能...

2019-02-24 13:58:43 77

原创 LeetCode198打家劫舍

输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。class Solution { public int rob(int[] nums) { if(nums==null||nums.length==0) return 0; ...

2019-02-24 12:19:13 120

原创 LeetCode300 最长上升子序列

给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。class Solution { public int lengthOfLIS(int[] nums) { if(nums==null||nums.length==0) ...

2019-02-24 11:05:55 294

原创 Leetcode70爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶//就是那个斐波纳期数列,我的天居然前面几行提交的时候报错了,后来加上,主体是对的,自底向上class Solution { publ...

2019-02-24 01:51:47 93

原创 LeetCode63不同路径二

网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0,1,0],[0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:向右 -> 向右 -> 向下 -> 向下向下 -> 向下 -> 向右 -> 向右c...

2019-02-24 01:39:53 131

原创 LeetCode64最小路径和

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。class Solution { public int minPathSum(int[][] grid) {...

2019-02-24 00:54:14 188

原创 LeetCode62 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 ->...

2019-02-24 00:20:56 112

原创 LeetCode53最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。//假设数组中只有两个元素,第一个元素就放在dp[0],那么dp[1]就要判断是dp[0]+nums[1]大,还是nums[1]本身大,因此要理解dp数...

2019-02-23 23:48:27 66

原创 剑指offer5替换空格

在这里插入代码片```public class Solution { public String replaceSpace(StringBuffer str) { String strl=str.toString(); if(strl.equals("")) return strl; char [] strArray...

2019-02-22 23:49:31 109

原创 剑指offer4 二维数组的查找

在这里插入代码片```public class Solution { public boolean Find(int target, int [][] array) { if(array==null) return false; int hang=0; int lie=array[0].length-1; wh...

2019-02-22 23:28:19 162

原创 剑指offer3 数组中重复的数字

//看了答案才想到这个方法,真是巧妙,比LeetCode上有个题设计的更巧妙public class Solution { // Parameters: // numbers: an array of integers // length: the length of array numbers // duplication: ...

2019-02-22 21:03:27 86

原创 LeetCode26 删除数组中的重复数字

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...

2019-02-22 20:52:17 464

原创 手写单例模式

//双检锁public class Singleton { private static volatile Singleton singleton; private Singleton() {} public static Singleton getInstance() { if (singleton == null) { s...

2019-02-22 19:34:19 1346

原创 LeetCode206反转链表

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *...

2019-02-22 18:54:02 97

原创 count(*)和count(字段名)和count(1)

1,比较count(*)和count(字段名)的区别:前者对行的数目进行计算,包含null,后者对特定的列的值具有的行数进行计算,不包含null,得到的结果将是除去值为null和重复数据后的结果。2.count(1)跟count(主键)一样,只扫描主键3.count(*)和count(主键)使用方式一样,但是在性能上有略微的区别,mysql对前者做了优化。count(主键)不一定比count...

2019-02-22 13:47:41 26996 2

原创 剑指offer10斐波那契数列

public class Solution { //动态规划的思想,这个星期好好学动态规划,不过还是要把搜索基础打牢,再剪枝 private int[] fib = new int[40]; public Solution() { fib[1] = 1; fib[2] = 2; for (int i = 2; i ...

2019-02-21 21:02:55 98

原创 剑指offer9 两个栈实现一个队列

import java.util.Stack;**//考虑一下两个队列实现一个栈**public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); ...

2019-02-21 20:48:21 77

原创 剑指offer 8二叉树的下一个节点

/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; }}*/如果...

2019-02-21 20:36:14 87

原创 LeetCode105 从前序和中序构建二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7只能从前序中序或或 中序后序遍历构建,思路很简单就是扣细节,难得扣/** * Definition for ...

2019-02-21 20:19:39 193

原创 剑指offer 6从头到尾打印链表

/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;//导包真的很麻...

2019-02-21 19:20:54 89

原创 Leetcode113

说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]/** * Definitio...

2019-02-21 13:08:41 321

原创 索引

创建高性能索引:B-Tree索引:如果不是按索引的最左列开始查找,索引无效不能跳过索引的列如果查询中有某个列的范围查询,则其右边所有列都无法使用索引查找哈希索引:一般是等值查找INNODB有一个自适应哈希索引...

2019-02-21 12:57:39 71

原创 AVL树基础知识

AVL树插入调整原则:**当最小不平衡子树根节点的平衡因子BF是大于1的,就右旋,小于-1就左旋,插入节点后,最小不平衡子树的BF与它子树的BF符号相反时,就需要对结点进行一次旋转以使得符号相同后,再反向旋转一次才能完成平衡操作。最小不平衡子树:距离插入结点最近的,且平衡因子的绝对值大于1的结点为根的子树。**...

2019-02-19 22:01:14 472

原创 LeetCode112路径总和

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 ...

2019-02-15 22:51:29 101

原创 LeetCode111二叉树的最小深度

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最小深度 2.解题思路:就是递归跟最大值不同,要考虑数的节点只在一边的情况,有点意思,思维的全面性/** * Definition fo...

2019-02-15 20:58:49 139

原创 LeetCode2两数相加——听说是小米手写代码题

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> ...

2019-02-15 19:47:13 199

原创 LeetCode104二叉树最大深度

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。/** * Definition for a binary tree node. * public class TreeN...

2019-02-15 19:34:50 166

原创 LeetCode101对称二叉树

给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3思路很简单,就是递归,关键是递归参数设计,写的比较套路,反正现在在练习/** * Definition for ...

2019-02-15 19:18:56 230

原创 lambda表达式与函数式接口

在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的。对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方。为了确保函数式接口的正确性,我们可以给这个接口添加@FunctionalInterface注解(当然,也可以不加此注解),这样当其中有超过一个抽象方法时就会报错。对于其他类型的接口,我们想要使用就需要定义一个类(或者使...

2019-02-13 16:57:21 398

原创 LeetCode141环形链表

给定一个链表,判断链表中是否有环。解题思路:双指针/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * ...

2019-02-12 18:39:09 82

空空如也

空空如也

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

TA关注的人

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