自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

【Dyson】的博客

神码都是浮云

  • 博客(145)
  • 收藏
  • 关注

原创 谈谈Synchronized底层及其优化

Synchronized的引出同步问题的引出:由于多个线程对共享资源的操作而导致的同步问题Synchronized是JDK1.0提供的一种同步手段,来处理同步问题Synchronized保证了可见性与原子性可见性:确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程可见(即获得锁就同时获得了最新共享变量的值)原子性:保证在临界区中,只有一个线程去操控修改共享变...

2019-04-10 00:03:42 506

原创 2020-01-03

注册、登陆当进入一个网站时首先进行注册,注册时会提示输入手机号,利用阿里大鱼接口发送一条短信验证码到当前号码并将短信验证码保存到redis;注册时会提示输入邮箱账号,当点击注册时会给当前邮箱发送一条激活码给用户激活注册成功后会跳转到登陆页面并同时会把验证码保存到session,当用户输入验证码时会与session中的做比较,如果相匹配则验证成功,如果session中没有则验证码失效,如果不...

2020-01-03 10:34:26 356

原创 Java虚拟机 -- 垃圾收集器

介绍垃圾收集器之前先要了解三个知识点:Stop-the-World JVM由于要执行GC而停止应用程序的执行 任何一种GC算法中都会发生 多数GC优化通过减少Stop-the-world发生的时间来提高程序性能 Safepoint(安全点):程序执行时并非在所有的地方都能停顿下来开始GC,只有在到达安全点时才可以停止GC。 分析过程中对象引用关系不会发生变化的点 产生...

2019-08-01 15:55:40 340

原创 Java虚拟机 -- 垃圾回收模块

垃圾回收机制当对象被判为垃圾的标准,即没有被其他对象引用时,才会被收回。判断对象为垃圾的方法引用计数法:通过判断对象的引用数量来决定对象是否可以被回收 每个对象实例都有一个引用计数器,被引用时+1,完成引用时-1 任何引用计数为0的对象都有可以被当做垃圾进行回收优点:执行效率高,程序执行所受的影响比较小缺点:如果存在循环引用就会导致出现内存泄漏,就比如:父对象对子对...

2019-08-01 11:21:27 339

原创 Java虚拟机 -- JVM内存区域模块

JVM内存模型 -- JDK8线程私有程序计数器 当前线程所执行的字节码行号指示器 通过改变计数器的值来选取下一条需要执行的字节码指示器(比如:循环,跳转,异常处理都需要依赖该计数器来完成) 和线程是一对一的关系即“线程私有” 不会发生内存泄露问题,程序计数器是逻辑计数器而非物理计数器 虚拟机栈 生命周期与线程相同 每个方法在执行时都会创建一个栈帧,用于存...

2019-07-31 20:00:24 287

原创 Java虚拟机 -- 类加载模块

Java平台无关性是如何实现的?一次加载,到处执行,其实并不是Java语言实现了跨平台的特性,而是在任何的平台上都有JVM虚拟机,Java通过javac在编译时将.java文件生成字节码并存入到.class文件中,有了class文件才有了跨平台的基础,这样JVM才能解析,将字节码生成特定平台上的机器码 Java源码首先被编译成字节码,再有不同平台的JVM进行解析,Java语言在不同的平台上运...

2019-07-31 14:01:49 193

原创 MySQL数据库 -- 索引模块

首先介绍两种存储的数据结构:B树定义:(让每个索引块尽可能多的存储信息,然后查询过程中尽可能少的IO次数)根节点至少包括两个孩子 树中每个节点最多含有m个孩子(M>=2) 除根节点和叶子节点外,其他每个节点至少有ceil(m/2)个孩子(取上限) 所有叶子节点都位于同一层B+树B+树和B树类似,但多了几条规则 :非叶子结点的子树指针个数与关键字(节...

2019-07-31 11:08:32 260

原创 Java线程生命周期详解

2019-04-08 17:32:03 146

原创 Java中的信号量(Semaphore)

初识Semaphore“信号量”,也可以称其为“信号灯”,它的存在就如同生活中的红绿灯一般,用来控制车辆的通行。在程序员眼中,线程就好比行驶的车辆,程序员就可以通过信号量去指定线程是否可以执行,并且可以指定访问临界区的线程数量;信号量模型信号量的模型很简单,有:一个计数器,一个等待队列,三个方法(init,down,up)。在该模型中,计数器与等待队列对外是透明的,只能去通过三个方法区访...

2019-04-08 17:27:19 15639

原创 数据库基本语法使用

SELECT语句SELECT 列名 FROM 表明; 单行检索,多行检索SELECT DATABASE(); 显示当前使用数据库检索不同的行:SELECT DISTINCT 列名 FROM 表明; 只返回不同的值限制结果:SELECT 列名 FROM 表明 LIMIT 限制的行数;指定开始行数和行数:`SELECT 列名 FROM 表明 LIMIT 5,5;LI...

2019-01-17 16:38:35 1360

原创 数据库基础笔记

数据库基础关于数据库为了解决数据存储的安全性,方便数据的管理和查询,可以存储海量数据,从而设计出数据库。数据库的引出就是为了更方便的对数据进行管理,它能更有效的管理数据数据库存储的介质磁盘内存主流数据库SQL Sever:微软产品,.Net程序员的最爱,适合中大型项目Oracle:甲骨文产品,安全性好,适合大型项目,复杂的业务逻辑MySQL:并发性好,但不适合做复...

2018-12-25 15:38:38 240

原创 可中断获取锁与超时等待获取锁源码分析

可中断式获取锁可响应中断式锁可调用方法lock.lockInterruptibly();该方法的底层会调用AQS的acqireInterruptibly方法;acquireInterruptibly()方法:public final void acquireInterruptibly(int arg) throws InterruptedException { ...

2018-11-30 17:11:01 925

原创 深入理解AbstractQueuedSynchronizer(AQS)

                                             AQS详解在同步组件中,AQS是最核心部分,同步组件的实现依赖AQS提供的模板方法来实现同步组件语义。AQS实现了对同步状态的管理,以及对阻塞线程进行排队、等待通知等等底层实现。AQS核心组成:同步队列、独占锁的获取与释放、共享锁的获取与释放、可中断锁、超时锁。这一系列功能的实现依赖于AQ...

2018-11-26 21:21:01 228

原创 LeetCode -- 3. 无重复字符的最长子串 java

题目描述:解题思路:可以String类的方法,用两层循环,第一层循环是不断从前往后走,用  i  遍历字符串,第二层循环则从第一层循环开始往后查找最长无重复子串。在第二层循环中,每次按照索引  j  将字符串拆分成子串,然后再从  i  开始查找该子串的位置,如果该位置就是索引  j  当前的位置,则继续往下寻找, 否则跳出循环,更新 max class Solution { ...

2018-11-23 15:36:41 411

原创 生产-消费者模型

介绍生产消费者模型中所要用到的几个方法:wait() 方法public final void wait()throws InterruptedException;当调用wait()方法后,线程会立刻停止,并将该线程从锁对象的同步队列提取到等待队列(WAIT)中,直到下次被notify()方法唤醒,或者被中断为止。 wait()方法只能在同步代码块或同步方法中使用,必须为synchro...

2018-11-20 12:33:59 182

原创 每日一题--LeetCode 234(回文链表)java

题目描述:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?解题思路一:先使用快慢指针将链表划分,然后将划分出来的后半段链表逆置,这里使用额外的空间创建新的链表,再将两个链表从尾到头进行比...

2018-11-17 19:54:41 465

原创 java中的CAS操作以及锁机制详解

关于CAS操作CAS:Compare And Swap   --  乐观锁策略CAS(无锁操作):使用CAS叫做比较交换来判断是否出现冲突,出现冲突就重试当前操作直到不冲突为止。悲观锁(JDK1.6之前的内建锁):假设每一次执行同步代码块均会产生冲突,所以当线程获取锁成功,会阻塞其他尝试获取该锁的线程。乐观锁(Lock机制):假设所有线程访问共享资源时不会出现冲突,既然不会出现冲突...

2018-11-17 17:00:06 8046 7

原创 每日一题--LeetCode 25 (k个一组翻转链表)java

题目描述:给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3-&g...

2018-11-16 14:21:26 2235 1

原创 思维导图 --- 继承,封装,多态

思维导图 — 继承,封装,多态传送门: 继承、封装、多态.

2018-11-15 15:12:28 1096

原创 java学习笔记(十二)-- 线程同步与死锁

一 线程的同步   ***************同步问题:每一个线程对象轮番抢占共享资源带来的问题首先看一段代码:class MyThread implements Runnable{ private int ticket=10; @Override public void run() { while (this.ticket>0){...

2018-11-15 10:53:06 158

原创 每日一题--LeetCode 142 (环形链表II)java

题目描述:解题思路: 如图所示 , 当fast与slow相遇时,slow还没走完链表,而fast已经在环内循环了n圈了,假设slow在相遇前走了s步,则fast走了2s步,设环长为r,有2s=s+nr,即s=nr.由上图可知a+x=s, x+y=r,而我们的目标是找到a的位置。设上图那个拱起的曲线的长度为y,有a+x=s=nr=(n-1)r+r=(n-1)r+y+x ,则a=(n-1)r+...

2018-11-15 08:40:27 422

原创 每日一题--LeetCode 58 (最后一个单词的长度)java

题目描述:解题思路:可以使用String类中的trim()方法(将字符串左右空格去掉)和charAt(index)(将字符串按照索引转为单个字符)代码如下:class Solution { public int lengthOfLastWord(String s) { if(s.length()==0){ return 0; ...

2018-11-14 12:52:40 255

原创 每日一题--LeetCode 141(环形链表)java

题目描述:解题思路:快慢指针,若为环形链表,那么两个指针一定会在链表某处相遇,若不是环形链表,那么快指针一定会先走到空或者快指针的next指针为空代码如下:/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNo...

2018-11-13 21:28:32 177

原创 java学习笔记(十一)-- 多线程(线程的基本概念 & 多线程的实现 & 多线程常用操作方法) **** 重要 ****

一 线程和进程概念及其区别进程:OS中一个程序的执行周期线程:进程中的一个任务,一个进程可以包含n个线程进程:操作系统中一个程序的执行周期为一个进程进程线程区别1.每个进程拥有自己的一整套变量,是操作系统中资源分配的最小单位。线程依托于进程存在,多个线程共享进程资源,OS中任务调度的基本单位2.启动,撤销一个进程的开销要比启动,撤销一个线程大的多(轻量级进程)3.没...

2018-11-13 21:13:18 203

原创 每日一题--LeetCode 28(实现strStr())java

题目描述:代码如下(附有解析):class Solution { public int strStr(String haystack, String needle) { //如果为空直接返回0 if(needle.equals("")){ return 0; } //如果haystack长...

2018-11-12 18:36:26 173

原创 每日一题--LeetCode 53(最大子序和)java

题目描述:代码如下:class Solution { public int maxSubArray(int[] nums) { if(nums.length==1){ return nums[0]; } int frist,second,max; max=frist=nums[0]; ...

2018-11-11 09:34:31 731

原创 每日一题--LeetCode 108(将有序数组转化为二叉搜索树) java

题目描述:解题思路:二叉搜索树的特点是左子树>根节点>右子树,而且可以发现题目中所给的数字就是由二叉搜索树中序遍历得到,数组中间的值就为根节点,以根节点为划分线左边为左子树,右边为右子树,然后采用二分和递归的思想重建二叉搜索树即可;代码实现如下:/** * Definition for a binary tree node. * public class Tree...

2018-11-10 10:15:30 300

原创 每日一题--LeetCode 21 (合并两个有序链表) java

题目描述:代码如下(附有解析):/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { publ...

2018-11-09 09:49:22 164

原创 每日一题--LeetCode 2(两数相加)java

题目描述:代码如下:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public Lis...

2018-11-08 10:31:29 174

原创 每日一题--LeetCode 125 (验证回文串)java

题目描述:解题思路:先将特殊情况考虑,比如字符串为空或者字符串只有一个字符,然后可以将字符串中的字母都转化为大写或小写。自己编写一个方法判断该字符是否为数字字符或者为字母,再使用左右指针向中间扫描,当左右字符都为字母或数字时判断二者是否相等,若相等继续循环判断,若不相等直接返回false。代码实现如下:class Solution { public boolean isP...

2018-11-07 16:22:09 425

原创 Linux常见指令

Linux 常见基本指令显示当前目录文件  ls   ls -a 显示所有文件,包括.开头的隐含文件 ll  十个字母  第一个字母与文件类型有关 其余与文件权限有关 ls -i 文件的inde,在linux下一个文件一个inode  信息节点,将文件的属性信息用inode存起来  inode编号,相当于是身份证一样 ls -l 列出文件的详细信息  tree命令,将文件以树形结构表...

2018-11-07 15:25:35 236

原创 每日一题--LeetCode 415 (字符串相加)java

题目描述:解题思路:直接将两个字符串每一位提出来,相加,并且判断是否有进位insert方法和append方法的区别:insert可以在指定位置插入,append只能在最后位置插入代码如下:class Solution { public String addStrings(String Num1, String Num2) { //将字符串转变为数组 ...

2018-11-06 16:37:58 319

原创 java学习笔记(十)-- java新特性 (枚举 & 注解 & 接口定义加强 & Lambda表达式)

枚举 (enum)高级的多例模式java中枚举使用enum关键字定义枚举枚举就是一种多例设计模式enmu Color{    RED,BLUE,GREEN;    }enum Color{ RED,BULE,GREEN;}public class Test { public static void main(String[] args) { ...

2018-11-06 16:06:47 197

原创 java学习笔记(九)-- java新特性 ( 可变参数 & 泛型 & 静态导入 & 类型擦除 )

JDK1.5新特性 方法的可变参数             设计一个方法,可以接收任意个数的整数,并返回他们的相加结果            早期实现方式:public class Test { public static void main(String[] args) { System.out.println(add(new int[]{1,2,3}...

2018-11-05 15:59:31 210

原创 每日一题--LeetCode 387 (字符串中的第一个唯一字符)java

题目描述:代码如下:class Solution { public int firstUniqChar(String s) { String tmp=s; char []data=tmp.toCharArray(); if(data.length==1){ return 0; } ...

2018-11-05 15:42:05 203

原创 indexOf 和 lastIndexOf

indexOf 和 lastIndexOf使用indexOf 的用途是在一个字符串中寻找一个字的位置 lastIndexOf 也是找字 , 它们俩的区别是前者从字符串头开始找,后者是从字符串末端开始找。一但指定的字被找到,就会返回这个字的当前的位置号码。如果没有找到就返回 -1.public class Test { public static void main(Str...

2018-11-05 15:35:11 286

转载 Git -- 解决github提交代码不用输入密码

解决方案:方案一: 在你的用户目录下新建一个文本文件.git-credentials Windows:C:/Users/username Mac OS X: /Users/username Linux: /home/username 注意:鼠标右键新建文件重复命名是成功不了的,需要借助Sublime等IDE工具来创建文件。 .g...

2018-11-04 21:28:33 4438

原创 java学习笔记(八)-- 异常

异常体系图Error:描述Java运行时内部错误与资源耗尽错误(OOM,StackOverflow)应用程序不抛出此类异常。这种内部错误一旦出现,除了告知用户并使用安全终止之外,再无能为力。 Exception(程序本身错误):Java应用程序抛出异常。 IOException:程序本身没有问题,由于IO处理导致的程序出错。 RuntimeExcpetion:运行时异常关于受查异常...

2018-11-03 19:11:42 180

原创 java异常练习题:定义一个MulException类继承Exception类,要求两数相乘等于100报错,在主类中定义一个方法,在方法中抛出此异常,在主方法观察结果

题目描述:定义一个MulException类继承Exception类,要求两数相乘等于100报错,在主类中定义一个方法,在方法中抛出此异常,在主方法观察结果。  定义一个DivException类继承RuntimeException类,要求两数相除等于2报错,在主类中定义一个方法,在方法中抛出此异常,在主方法观察结果代码如下:package www.Dyson.java;//继承受...

2018-11-01 11:52:01 1517

原创 javaSE三个特殊的类 -- 包装类

包装类--包装类的存在可以使Object接受一切 包装类就是将基本数据类型封装到类中 范例:class IntDemo{ private int num; public IntDemo(int num){ this.num=num; } public int intValue(){ return num; }...

2018-10-30 17:54:15 216

空空如也

空空如也

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

TA关注的人

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