自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学海无涯乐作舟

知之为知之,不知为不知

  • 博客(51)
  • 资源 (2)
  • 收藏
  • 关注

原创 浅谈CAS底层原理和ABA问题

文章目录概述CAS底层原理CAS缺点ABA问题解决ABA问题AtomicStampedReference总结概述CAS的全称是Compare-And-Swap,它是CPU并发原语它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令,这是一种完全依赖于硬件的功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语

2020-09-30 23:12:25 696

原创 浅谈Volatile三大特性

文章目录JMMJMM是什么特性Volatile可见性原子性禁止指令重排Volatile针对指令重排做了什么?JMMJMM是什么JMM是Java内存模型,也就是Java Memory Model,简称JMM,本身是一种抽象的概念,实际上并不存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式JMM关于同步的规定:线程解锁前,必须把共享变量的值刷新回主内存线程解锁前,必须读取主内存的最新值,到自己的工作内存加锁和解锁是同一把锁

2020-09-30 22:29:31 878

原创 JVM之垃圾回收(1-概述+算法)

文章目录1.概述什么是垃圾大厂面试题为什么需要GC早期垃圾回收Java垃圾回收机制2. 垃圾回收相关算法2.1 标记阶段:法1_引用计数法 (java没有采用)2.2 标记阶段:法2_可达性分析算法2.3 对象的finalization机制2.4 清除阶段:法1_标记-清除算法2.5 清除阶段:法2_复制算法2.6 清除阶段:法3_标记-压缩(整理,Mark-Compact)算法2.7 小结2.8 分代收集算法2.9 增量收集算法、分区算法1.概述什么是垃圾Java = (C++)–什么是垃圾(

2020-09-29 23:57:16 1816

原创 LeetCode—面试题:移除重复节点(哈希集合)

移除重复节点(简单)2020年9月29日题目来源:力扣解题哈希集合记录非重复节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode removeDuplicateNod

2020-09-29 09:24:48 249

原创 JVM之字符串常量池StringTable

文章目录1.String的基本特性2.String的内存分配3.String的基本操作4.字符串拼接操作5.intern()的使用new String("ab")会创建几个对象,new String("a")+new String("b")呢关于String.intern()的面试题总结String的intern()的使用6.StrtingTable的垃圾回收7.G1中的String去重操作1.String的基本特性String:字符串,使用一对""引起来表示。String sl = “hell

2020-09-27 17:30:04 518

原创 JVM之执行引擎

文章目录执行引擎概述Java代码编译和执行过程什么是解释器( Interpreter),什么是JIT编译器?为什么说Java是半编译半解释型语言?机器码、指令、汇编语言机器码指令指令集汇编语言高级语言字节码C、C++源程序执行过程解释器JIT编译器HotSpot VM 为何解释器与JIT编译器共存热点代码及探测方式方法调用计数器热度衰减回边计数器HotSpot VM 可以设置程序执行方式HotSpot VM 中的JIT分类C1和C2编译器不同的优化策略执行引擎概述执行引擎是Java虚拟机的核心组成部

2020-09-27 17:12:14 706 1

原创 JVM之运行时数据区(对象的实例化内存布局与访问定位+直接内存)

1.对象的实例化1.1 创建对象的方式new最常见的方式变形1 : Xxx的静态方法变形2 : XxBuilder/XxoxFactory的静态方法Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone() :不调用任何构造器,当前类需要实现Cloneable接口,实现clone()使用反序列化:从文

2020-09-26 23:44:35 125

原创 JVM之运行时数据区(方法区)

文章目录1. 堆、栈、方法区的交互关系2. 方法区的理解3.设置方法区大小与OOM方法区OOM4.方法区的内部结构类型信息域信息(成员变量)方法信息non-final的类变量运行时常量池5.方法区的使用举例6.方法区的演进细节永久代为什么要被元空间替换StringTable 为什么要调整如何证明静态变量存在哪7.方法区的垃圾回收8. 总结面试题:1. 堆、栈、方法区的交互关系运行时数据区结构图堆、栈、方法区的交互关系2. 方法区的理解《Java虚拟机规范》中明确说明:‘尽管所有的方法区在逻辑上

2020-09-26 22:49:43 499

原创 LeetCode—面试题:字符串轮转(暴力+拼接)

字符串轮转(简单)2020年9月26日题目来源:力扣解题暴力模拟轮转,对了就返回true,速度太慢了class Solution { public boolean isFlipedString(String s1, String s2) { if(s1.length()!=s2.length()) return false; if(s1.length()==0 && s2.length()==0) return true;

2020-09-26 11:24:03 166

原创 LeetCode—面试题:零矩阵(暴力)

零矩阵(中等)2020年9月26日题目来源:力扣解题用布尔数组记录一开始的0,遍历的更改0值class Solution { public void setZeroes(int[][] matrix) { int x=matrix.length; int y=matrix[0].length; boolean[][] flag=new boolean[x][y]; for(int i=0;i<x;i++){

2020-09-26 10:53:49 106

原创 LeetCode—面试题:旋转矩阵(暴力)

旋转矩阵(中等)2020年9月25日题目来源:力扣解题使用另外的数组违背题目意思class Solution { public void rotate(int[][] matrix) { //使用额外内存空间 int x=matrix.length; int y=matrix[0].length; int[][] result=new int[x][y]; for(int i=0;i<x;i++)

2020-09-25 10:47:27 171

原创 LeetCode—面试题:一次编辑(暴力)

一次编辑(中等)2020年9月25日题目来源:力扣解题直接分三种情况进行讨论class Solution { public boolean oneEditAway(String first, String second) { if(Math.abs(first.length()-second.length())>1) return false; if(first.length()>second.length()){ if

2020-09-25 10:21:45 171

原创 LeetCode—面试题:回文排列(哈希集合)

回文排列(简单)2020年9月23日题目来源:力扣解题哈希集合出现重复元素就消除set中的元素,最后查看set大小是否小于2就可以。若为0,说明字符成对出现,是偶数,若为1,说明是奇数,有个落单的字符在中间。class Solution { public boolean canPermutePalindrome(String s) { Set<Character> set=new HashSet<>(); char[] ch=

2020-09-23 10:02:37 132

原创 LeetCode—面试题:URL化(暴力)

URL化(简单)2020年9月23日题目来源:力扣解题暴力遍历字符数组,每次判断是不是空格,用StringBuilder接收最后转成新字符串class Solution { public String replaceSpaces(String S, int length) { char[] ch=S.toCharArray(); StringBuilder sb=new StringBuilder(); for(int i=0;i&

2020-09-23 09:43:14 170

原创 LeetCode—面试题:判断是否互为字符重排(位运算)

判断是否互为字符重排(简单)2020年9月22日题目来源:力扣解题单纯使用异或可能会出现像“aa”和“bb”这样的字符串,异或结果为0。考虑加上ascall值计数,使得结果一定唯一。class Solution { public boolean CheckPermutation(String s1, String s2) { int res1=0,res2=0,count1=0,count2=0; char[] ch1 = s1.toCharArray(

2020-09-22 09:29:58 191

原创 LeetCode—面试题:判定字符是否唯一(哈希集合+排序)

判定字符是否唯一(简单)2020年9月22日题目来源:力扣解题哈希集合当有重复值出现时,即为falseclass Solution { public boolean isUnique(String astr) { Set<Character> set=new HashSet<>(); char[] ch=astr.toCharArray(); for(int i=0;i<astr.length();i++

2020-09-22 09:13:05 143

原创 LeetCode—剑指Offer:二叉树的最近公共祖先Ⅱ

二叉树的最近公共祖先Ⅱ(简单)2020年9月18日题目来源:力扣解题/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode lowes

2020-09-18 09:08:46 87

原创 Java锁机制的粗略总结

对【多线程】月薪20K必须知道的Java锁机制的笔记文章目录1. 什么是锁?1.1 Java锁机制是怎么设计的?2. 对象、对象头、结构2.1 Mark Word3. Synchronized3.1 Synchronized同步机制3.2 Synchronized同步机制为什么会存在性能问题?4. 无锁、偏向锁、轻量级锁、重量级锁4.1 无锁4.2 偏向锁4.3 轻量级锁4.3.1 轻量级锁和线程的绑定过程4.3.2 轻量级锁锁定后,其他线程想获取该怎么办?4.4 重量级锁1. 什么是锁?在并发环.

2020-09-16 16:04:51 699

原创 LeetCode—剑指Offer:扑克牌中的顺子(暴力+规律)

扑克牌中的顺子(简单)2020年9月14日题目来源:力扣解题暴力if-else语句可破class Solution { public boolean isStraight(int[] nums) { int king=0; Arrays.sort(nums); if(nums[0]==0) king++; for(int i=1;i<5;i++){ if(nums[i]==0) king+

2020-09-14 10:09:31 147

原创 JVM之运行时数据区(堆)

文章目录1.核心概述1.1 配置jvm及查看jvm进程1.2 分析SimpleHeap的jvm情况1.3 堆的细分内存结构2.设置堆内存大小与OOM2.1 查看堆内存大小2.2 堆大小分析2.3 OOM3.年轻代与老年代4.图解对象分配过程4.1 概述4.2 对象分配的特殊情况4.3 代码举例4.4 常用调优工具5.Minor GC、Major GC、Full GC6.堆空间分代思想7.内存分配策略8.为对象分配内存:TLAB(线程私有缓存区域)9.小结堆空间的参数设置10.堆是分配对象的唯一选择么(不是)

2020-09-13 13:46:07 219

原创 LeetCode—剑指Offer:n个骰子的点数(动态规划)

n个骰子的点数(简单)2020年9月13日题目来源:力扣解题参考自题解class Solution { public double[] twoSum(int n) { //初始化原数组,用来存放上个骰子概率数组 double[] pre={1/6d,1/6d,1/6d,1/6d,1/6d,1/6d}; for(int i=2;i<=n;i++){ //存放当前骰子概率数组,5*i+1由骰子点数[n,6n],确定

2020-09-13 10:07:22 1786

原创 JVM之运行时数据区(PC寄存器、虚拟机栈、本地方法栈)

文章目录1.程序计数器(PC寄存器)1.1 作用1.2 代码示例1.3 面试常问2.虚拟机栈2.1概述2.1.1 背景2.1.2 内存中的堆与栈2.1.3 虚拟机栈是什么2.1.4 栈的特点2.1.5 栈中可能出现的异常2.1.6设置栈的内存大小2.2 栈的存储结构和运行原理2.2.1 原理2.2.2 栈帧的内部结构2.3 局部变量表(Local Variables)2.3.1 概述2.3.2 变量槽slot的理解与演示2.3.3 slot的重复利用2.3.4 静态变量与局部变量的对比及小结2.4 操作数栈

2020-09-12 22:34:32 650 1

原创 JVM之内存与线程

文章目录内存与线程1. 内存2. 分区介绍3. 线程4. JVM系统线程内存与线程1. 内存内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区)2. 分区介绍java虚拟机定了了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁

2020-09-12 22:32:56 333

原创 LeetCode—剑指Offer:队列的最大值(辅助队列)

队列的最大值(中等)2020年9月12日题目来源:力扣解题辅助队列class MaxQueue { Queue<Integer> queue; LinkedList<Integer> max; public MaxQueue() { queue = new LinkedList<>(); max = new LinkedList<>(); } public int

2020-09-12 10:51:22 154

原创 LeetCode—剑指Offer:滑动窗口的最大值(暴力)

滑动窗口的最大值(简单)2020年9月11日题目来源:力扣解题class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums.length==0||k==0) return new int[0]; int l=0,r=k-1,j=0; int[] res=new int[nums.length-k+1]; while(r<nums.l

2020-09-11 09:54:50 82

原创 LeetCode—剑指Offer:左旋转字符串(暴力)

左旋转字符串(简单)2020年9月11日题目来源:力扣解题class Solution { public String reverseLeftWords(String s, int n) { String a=s.substring(0,n); String b=s.substring(n,s.length()); return b+a; }}如果不能用切片函数class Solution { public Stri

2020-09-11 08:53:12 87

原创 LeetCode—剑指Offer:翻转单词顺序(暴力)

翻转单词顺序(简单)2020年9月11日题目来源:力扣解题class Solution { public String reverseWords(String s) { String[] str=s.trim().split(" "); StringBuilder sb=new StringBuilder(); for(int i=str.length-1;i>=0;i--){ if(str[i].equals(

2020-09-11 08:43:42 127

原创 LeetCode—剑指Offer:和为s的连续正数序列(滑动窗口)

和为s的连续正数序列(简单)2020年9月10日题目来源:力扣解题class Solution { public int[][] findContinuousSequence(int target) { List<int[]> res=new ArrayList<>(); int l=1,r=1,sum=0; while(l<=target/2){ //如果窗口和小于目标和,窗口右边界往右

2020-09-10 11:02:44 94

原创 LeetCode—剑指Offer:和为s的两个数字(双指针法)

和为s的两个数字(简单)2020年9月10日题目来源:力扣解题一头一尾两指针,往中间靠class Solution { public int[] twoSum(int[] nums, int target) { int l=0,r=nums.length-1; while(l<r){ int he=nums[l]+nums[r]; if(he==target) return new int[]{nums

2020-09-10 09:49:29 128

原创 LeetCode—剑指Offer:数组中数字出现的次数Ⅱ

数组中数字出现的次数(中等)2020年9月10日题目来源:力扣解题每个数字都会出现3次的话,那么转成二进制相加,肯定会是3的倍数,对3求余的话,那个只出现一次的数字就会出现了。class Solution { public int singleNumber(int[] nums) { int[] tmp=new int[32]; for(int num:nums){ for(int i=0;i<32;i++){

2020-09-10 09:14:31 122

原创 LeetCode—剑指Offer:数组中数字出现的次数(暴力+位运算)

数组中数字出现的次数(中等)2020年9月9日题目来源:力扣解题暴力双指针暴力解class Solution { public int[] singleNumbers(int[] nums) { int[] res=new int[2]; int idx=0; for(int i=0;i<nums.length;i++){ if(nums[i]==-1) continue; for

2020-09-09 20:35:07 142

原创 LeetCode—剑指Offer:二叉树的深度(后序遍历)

二叉树的深度(简单)2020年9月9日题目来源:力扣解题每进一层就加一详细写法/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { private int

2020-09-09 09:40:47 85

原创 LeetCode—剑指Offer:二叉搜索树的第k大节点(中序遍历)

二叉搜索树的第k大节点(简单)2020年9月9日题目来源:力扣解题暴力中序遍历,用ArrayList记录,最后输出倒数第i个节点大小/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class

2020-09-09 09:31:19 85

原创 LeetCode—剑指Offer:0~n-1中缺失的数字(双指针法+二分法)

0~n-1中缺失的数字(简单)2020年9月9日题目来源:力扣解题双指针法利用两端和永远等于数组长度的特点,头尾双指针往中间靠拢class Solution { public int missingNumber(int[] nums) { int len=nums.length; int l=0,r=nums.length-1; while(l<=r){ if(nums[l]+nums[r]==len){

2020-09-09 09:10:02 185

原创 LeetCode—剑指Offer:在排序数组中查找数字Ⅰ(二分法)

在排序数组中查找数字Ⅰ2020年9月9日题目来源:力扣解题二分法查找这个数的起始位置和终点位置,相减可得结果class Solution { public int search(int[] nums, int target) { return find(nums,target)-find(nums,target-1); } private int find(int[] nums,int target){ int l=0,r=nums.len

2020-09-09 08:40:33 120

原创 LeetCode—剑指Offer:第一个只出现一次的字符(HashMap)

第一个只出现一次的字符(简单)2020年9月8日题目来源:力扣解题map中使用布尔值做键值对相对整型更好class Solution { public char firstUniqChar(String s) { Map<Character,Boolean> map=new HashMap<>(); char[] ch=s.toCharArray(); //如果map中出现了,更新为false;没出现过,添加为tru

2020-09-08 09:37:54 149

原创 LeetCode—剑指Offer:最长不含重复字符的子字符串(动态规划)

最长不含重复字符的子字符串(中等)2020年9月8日题目来源:力扣解题题目提到去重,首先会想到的就是HashSet与HashMap,这道题因为要存储索引,我选择了HashMap。审题可知,每次都要得到当前子字符串的最大长度,联想到动态规划,以此作为状态量。每次都把值存储到HashMap中,若有重复值会更新;那么我先查看HashMap中有无此键,有则取出它的索引,原本使用的是containsKey()判断是否存在,存在则用get()取出,后面发现有getOrDefault()更方便。若查找得到

2020-09-08 08:55:16 304

原创 LeetCode—剑指Offer:礼物的最大价值(动态规划)

礼物的最大价值(中等)2020年9月7日题目来源:力扣解题dfs第一个想到的方法是dfs,但是超时了class Solution { private int max=0; private int[][] dxy={{0,1},{1,0}}; private boolean[][] flag; public int maxValue(int[][] grid) { flag=new boolean[grid.length][grid[0].le

2020-09-07 08:42:22 176

原创 LeetCode—剑指Offer:把数字翻译成字符串(动态规划)

把数字翻译成字符串(中等)2020年9月6日题目来源:力扣解题状态量:记录当前最大翻译数状态转移方程:当后两个数的组合在[10,25]范围内,说明可以看作一个整体数,那么数字的数量就会比上一次的数量少一,那上上次的最大翻译数就是dp[i-2];若不在这个范围内,则说明不能看成整体数,结果与上次的最大翻译数一致。class Solution { public int translateNum(int num) { String str_num=String.valueOf

2020-09-06 08:46:35 135

原创 LeetCode—剑指Offer:把数组排成最小的数(快速排序)

把数组排成最小的数(中等)2020年9月5日题目来源:力扣解题1.明确两个数之间如何判断大小,可以采用字符串拼接,例如用"3"、“30"做比较“3”+“30”>“30”+“3”“330”>“303”看出"3”>“30”2.知道判断方法后,通过两两比对进行排序,这里选择快速排序class Solution { public String minNumber(int[] nums) { int len=nums.length; //

2020-09-05 20:39:47 914 1

MySQL5.5.zip

MySQL5.5的安装包,包括32位和64位。

2020-06-05

蓝桥杯往届真题.zip

蓝桥杯往届真题总结

2020-05-01

空空如也

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

TA关注的人

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