自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【深入学习并发之三】AQS:Abstract Queed Synchronizer源码分析

若阅读过程中出现疑问,可先阅读并发学习总览 Abstract Queed Synchronizer 源码分析 一、AQS是什么 我们先来看看Doug Lea(JUC包编写者)留下的类前注释: Provides a framework for implementing blocking locks and related synchronizers (semaphores, events, etc...

2019-10-16 00:03:20 150

原创 【深入学习集合类之一】集合类学习总览

集合类学习角度及学习内容分类 学习角度 通常,在我们关注集合类的时候,我们关注的是它们的以下几点 存储数据结构 容量和扩容方式 线程安全及实现方法 增删改查的实现(包括一些常用API的实现) 除此之外,各个类还有一些需要各自注意的点,如List接口的迭代器和其子类等。 学习内容 首先,最关键的是集合类的类结构,可以从总体上把握集合类的设计思路和使用场景。 如图所示,是主要集合类的类结构,其中...

2019-05-14 16:20:21 202

原创 【深入学习并发之三】synchronized关键字详解

若阅读过程中出现疑问,可先阅读并发学习总览 synchronized关键字 一、synchronized满足三种特性的方式 syschronized通过对共享对象加锁的方式实现并发下的同步。 原子性和有序性十分好理解: 加锁了之后其他线程自然不可访问,自然存在原子性; 线程访问共享对象时,一定是按顺序获取锁的,于是可以保证有序性。 可见性:获取锁时,会将工作线程内的共享变量清空,从主存重新读取;释...

2018-12-18 20:40:00 225

原创 【深入学习并发之二】volatile关键字详解

volatile关键字

2018-12-14 14:12:46 287 1

原创 【LeetCode】 77 组合

解题思路: 1 此题和LeetCode 22 有效括号思路很像,都是对所有可能的情况全排列,然后去除不符合要求的结果,即使用回溯法。 2 比较难的点是,如何设置递归条件和回溯丢弃条件。 递归条件较好理解,对每一个正在构建的数组,如果当前长度和k相等,那么就可以加入最后结果集中; 回溯丢弃条件则是,检测(当前数组长度)与(剩余元素)之和 与结果长度k之间的大小,也就是说,在理论上当前操作的数组能...

2018-12-14 11:07:42 112

原创 【LeetCode】 69 x的平方根

解题思路: 1 这题思路很简单,坑比较多,可以从判断条件,遍历方式等去优化 2 最先想到的一定是判断条件:i * i < x && (i+1) * (i+1) > x. 3 其次就会想到,很粗暴的遍历。会出现两个问题:①太慢②int溢出 4 判断条件优化:改为除法,即 x / i < i,避免了溢出; 5 遍历优化:改为二分法; 6 另外,还有牛顿开方法,完全...

2018-12-11 10:29:20 193

原创 【LeetCode】 两数之和与二进制求和——列表归并操作通用解法

2018-12-10 11:38:56 190

原创 【LeetCode】 67 二进制求和

解题思路: 1 这个也是两个表经过操作合成一个表的题目,最大的问题就是两表长度不一致。可以每次都把两个表放进for循环,如果长度短的表没有可以操作的内容,就用条件语句将它跳过。 这样代码相对简洁 2 每次运算的结果有0、1、2和3四种情况。其中,0和2需要在结果前加一个“0”、1和3需要加一个“1”;2和3需要进位,0和1不需要进位。 代码: class Solution { publ...

2018-12-10 11:27:27 151

原创 【深入学习Java并发之一】并发学习总览

一、 并发的主题和三个问题 主题:线程安全 1 我们到底要干什么 从程序员的角度来讲,线程安全,即并发时必须保证多线程任务执行顺序的正确性。为了保证这个正确性: · JMM(Java Memory Model)提供了一些保障:happens-before、as-if-serial机制; · JMM提供了一些API:volatile、sychronized; · JDK也提供了一些并发包:JUC...

2018-12-04 17:43:34 208

原创 【LeetCode】 27 移除元素

解题思路: 1 最直接的,对数组内等于val的值进行处理,令其后的元素依次覆盖它,直到数组尾。 2 反向思维,反正都要遍历一遍数组,直接将不等于val的元素覆盖掉数组内的元素,并记录长度值即可。 代码(直接): class Solution { public int removeElement(int[] nums, int val) { int length = nu...

2018-12-04 09:19:29 121

原创 【LeetCode】 24 两两交换链表中的节点

解题思路: 1 重点:如何在交换完了之后,获得进行交换动作的两个节点的前驱节点;思路和反转链表类似,维护一个前驱节点即可。 代码: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { ...

2018-12-03 22:24:20 127

原创 【LeetCode】 23 合并k个有序链表

解题思路: 1 之前的某道题有将两个有序链表排序的解法,思路很简单,可以拿来直接用。 2 利用分治的思想,分根据下标来分;两两合并,再两两合并…以此类推。 代码: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Li...

2018-12-03 22:20:27 312

原创 【LeetCode】 22 有效括号

解题思路: 1 最朴素的想法是:对每种可能出现的序列情况排列组合,将最后不符合条件的情况剔除。 2 回溯法:和上方的思路差不多,但是只要在组建字符串的过程中,出现了不符合要求的情况,直接将其丢弃。 3 所有序列可以被看成是一个二叉树,根节点是空字符串,左孩子加左括号,右孩子加右括号。每个结果都对应了树里的一个从根到节点的序列。对每个节点进行丢弃分析,需要我们把字符串形成过程中每加一个左/右括号...

2018-12-03 21:01:49 110

原创 【LeetCode】 13 罗马数字转整数

解题思路: 1 很明显,有两种字符形式:一个字母和两个字母,可以进行分别讨论。 2 对两种分别建字典,分别处理。 3 这种方法思路较清晰,但是较慢;较快的思路是对字符串连续读,如果右边字母表示的数字比左边的大,则在结果中减去此值,代码就不贴了。 代码: class Solution { final static String[] ROMAN = {"M", "D", "C", "L",...

2018-12-03 19:50:08 181

原创 【LeetCode】 12 整数转罗马数字

解题思路: 1 思路很简单,就是检测是否大于某个模板值(如1000,900),如果大于某模板值则减去此值,再在字符串中加入相应符号。 2 此题问题主要是如何循环。最复杂的办法是将每个值分别检测,写一堆while;但是可以使用静态数组,将其模板字符和数字存放起来,就可以使用大循环套小循环的简洁编写方法了。 代码: class Solution { static String[] roma...

2018-11-29 13:26:50 322 2

原创 【LeetCode】 2 两数相加

解题思路: 1 每个节点相加的结果需要一个进位flag,注意置空。 2 以前的思路是当某个链表加完之后,再在结果上接上另一个链表即可,但是此题存在连续进位问题。 3 所以让指到结尾的链表指针(为null)陪跑即可,即如果null则加0,这样可以保持程序的一致性。 代码: class Solution { public ListNode addTwoNumbers(ListNode l1...

2018-11-29 13:19:50 124

原创 【LeetCode】 127 单词接龙

解题思路: 1 这道题要找一个最短路径,可以联想到图的相关算法(虽然我当时没想到…),那么是不是应该使用最短路径的相关算法呢。其实不用…因为这个图里每条边的长度都是1,用一个广度优先算法就搞定了。 2 规模的问题,如果你遍历List里的每个单词的话,你会发现一直超时,因为有的List的规模给到了上千,每次查找图中的相邻节点都会是一个O(n)。解决办法是对规模很大的List,给每个当前操作单词建...

2018-11-25 21:28:12 323

原创 【LeetCode】 125 验证回文串

解题思路: 1 哦 看呐,这是我们的老朋友双指针,3Sum这道题也是用这个来做的。设定两个指针从前后分别向中间遍历,验证遇到的对应位置的字符是不是相等。 2 需要注意:统一大小写的时候别用Character的API toUpperCase,耗时较多,直接x-=32即可;同时注意不可以x = x - 32,会报类型转换错误; 代码: class Solution { public boo...

2018-11-25 21:05:08 157

原创 【LeetCode】 98 验证二叉搜索树

解题思路: 1 二叉搜索树和中序遍历有着密不可分的关系,中序遍历的结果是所有树中的节点从左到右的排列。如上图示例2中的树 中序遍历结果应是15346 2 基于1,我们易知,如果中序遍历的结果是升序排列的,那么此树符合二叉搜索树的要求,所以可以用中序遍历并检测检测结果的升序情况来做。 3 更快速的算法是:通过定义来做,对每个节点设置一个最大值和最小值,判断完了之后将左右子树分别递归调用此方法。 ...

2018-11-25 20:48:35 120

原创 【LeetCode】88 合并两个有序数组

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m +n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,...

2018-11-20 16:10:35 84

原创 【LeetCode】 73 矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例 2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ ...

2018-11-20 15:30:30 103

原创 【LeetCode】70 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶 解...

2018-11-20 15:11:35 81

原创 【LeetCode】65 有效数字

验证给定的字符串是否为数字。 例如: “0” => true " 0.1 " => true “abc” => false “1 a” => false “2e10” => true 说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。 解题思路: 这道题的情况十分复杂,需要自己一个一个尝试某个形式算不算数字,也正因此,这道题斩获...

2018-11-20 14:59:26 359

原创 【LeetCode】56 合并区间

给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间[1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。 解题思路...

2018-11-12 09:56:28 100

原创 【Spring】Sping Data JPA 深入学习之①查询方法原理探究

基本概念 Spring Data JPA是Spring公司开发的Java Persistence API 相对于 sun公司开发的JPA Spring Data JPA 整合了Hibernate,换句话说,Spring Data JPA 的默认实现是用的Hibernate 一个疑问:为什么JPA没有实现类? 在项目中观察到前辈们自定义的repository层接口没有实现类,查阅源码和资料得知...

2018-11-08 14:54:00 510

原创 【LeetCode】21 合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解题思路: 1 先根据两个链表的第一个节点判断并建立result的头结点。 2 对两个链表同时遍历,判断两个链表的当前元素的大小,将小的接在result后面,...

2018-11-01 15:47:22 106

原创 【LeetCode】28 实现strSTR()

实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack = “hello”, needle = “ll” 输出: 2 示例 2: 输入: haystack = “aaaaa”, needle = “bb...

2018-11-01 15:34:43 71

原创 【LeetCode】20 Valid Parentheses 有效括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false 示例 4: 输入: “([...

2018-10-28 21:11:28 76

原创 【LeetCode】15 三数之和3Sum

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0? 找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 弯路: 1 最先想到的应...

2018-10-28 17:04:17 153

原创 【项目】迄今为止遇到的问题及表面(即用法)学习

@Transaction 在类或方法上进行@Transactional注解,表明对该方法或类下所有方法进行事务处理。 只有对于public方法才有效! 几个比较重要的参数: 事务嵌套时的传播属性 propagation() 即方法在被调用时,起事务的条件和方法。假设methodA是被@Transaction注解了的方法 PROPAGATION_REQUIRED:如果调用methodA的方法在事务中...

2018-10-26 21:01:41 104

原创 【LeetCode】08 String to Integer (atoi)

实现 atoi,将字符串转为整数。 该函数首先根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。 当字符串中...

2018-10-24 20:21:13 87

原创 【LeetCode】01 Two Sum与HashMap

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解法1:暴力求解 class Solution { public int[] twoSum...

2018-10-23 22:46:10 164

空空如也

空空如也

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

TA关注的人

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