自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Curry4ever

好记心不如烂笔头

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

原创 如何突破“Java高并发并发编程”的难关?面试题整理(含答案)

高并发编程一直是我的痛点,面试被问到基本都答不上来。我相信很多朋友跟我一样,不系统学习整理一把,真的难受。下面是我花了不少时间整理的Java并发编程相关的面试题,知识点等。部分答案在公众号可以找到。感兴趣的话,可以私下和我一起讨论学习哈。大家一起进步。...

2020-12-18 15:45:22 358 1

原创 并发包下Lock是如何解决原子性问题的(实例讲解)

原创公众号:Java尖子生     除了synchronized能解决原子性性问题,Jdk1.5以后,在java.util.concurrent.locks.Lock包下的Lock也能解决原子性问题。java.util.concurrent.locks.Lock下有一组实现线程同步的接口和类。Lock是接口,使用时我们是使用的他的实现类。Lock的实现类有很多,我们常使用的是ReentrantLock。PS:使用IDEA的同学,在选中接口类的情.

2020-11-27 19:20:52 663 2

原创 线程的终止-面试题stop和interrupt方法区别?

了解了线程的生命周期之后,我们知道,一个线程执行完run方法,或者发生异常之后都会自动终止。但是,这里要说的是在一个线程A中去终止另一个线程B的情况。在Thread类里面有2个方法可以达到此目的。stop()和interrupt()stop()方法:用stop() 方法会真的杀死线程,不给线程喘息的机会,如果线程持有 ReentrantLock 锁,被 stop() 的线程并不会自动调用 ReentrantLock 的 unlock() 去释放锁,那其他线程就再也没机会获得 ReentrantLoc

2020-11-16 16:39:43 443

原创 搞定等待通知机制-wait/notify/notifyall的2个经典面试题(实例详解)

目录前言1、你要知道的基本知识2、典型的生产者消费者模式的样例3、notify和notifyAll有什么区别4、为什么wait方法要写在while循环里面而不是if呢5、总结前言关于wait/notify/notifyall有2个经典的面试:notify和notifyall有什么区别?为什么wait方法要写在while循环里面而不是if呢?带着这2个问题,我们来学习下synchronized提供的等待通知机制。1、你要知道的基本知识wait/notify/notifyall都是存在与O

2020-11-13 15:38:26 449

原创 Java8-Stream流操作List去重distinct、和指定字段去重(完整实例讲解)

使用Java8的Stream的distinct方法去重,我们的对象需要实现hashcode()和equals()方法。把学生类修改后如下:public class Student { private Long id; private String name; private int age; private Double height; public Student(Long id, String name, int age, Double height) {

2020-11-12 10:31:14 56800 7

原创 Java8-Stream流操作List排序(完整实例讲解)

废话少说,直接上代码。一个学生类的实体类ps:使用IDEA的同学,快捷键[Alt+Insert],可以一键生成对应的set/get/tostring/构造方法。public class Student { private Long id; private String name; private int age; private Double height; public Student(Long id, String name, int age, Dou

2020-11-12 10:24:20 3892 3

原创 守护线程和用户线程的真正区别(实例讲解)

    java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。用户线程:我们平时所创建的都是用户线程。守护线程:为用户线程提供服务。    任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolean);true 则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在 Thread.start()之前调用,否则运行时会抛出异常。

2020-11-10 13:00:54 478 1

原创 一图全面了解Java线程的生命周期

前言    线程的“生老病死”,我们称之为生命周期。    那java线程的生命周期都有哪些个阶段呢?请看下图:    重点是各个状态直接的转化在java代码层面上如何体现,你需要好好理解。new(初始化状态)    新建一个线程对象。    例如下面代码,new了一个MyThread的对象t1,

2020-11-09 19:00:41 401

原创 公平锁和非公平锁-ReentrantLock是如何实现公平、非公平的

目录)1、什么是公平锁与非公平锁2、ReentrantLock如何实现公平与非公平3、公平锁与非公平锁性能对比1、什么是公平锁与非公平锁公平锁:公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁。非公平锁:非公平锁则无法提供这个保障(先到的线程优先获取锁)。2、ReentrantLock如何实现公平与非公平Java并发包下面的ReentrantLock、ReadWriteLock默认都是非公平模式。下面我们就来一起看看ReentrantLock是如何实现公平与非公平的。Reen

2020-11-08 16:35:33 956 3

原创 可重入锁-synchronized是可重入锁吗?

目录前言1、什么是可重入锁呢?3、自己如何实现一个可重入和不可重入锁呢4、ReentrantLock如何实现可重入的5、可重入锁的特点前言    面试题:synchronized是可重入锁吗?    答案:synchronized是可重入锁。ReentrantLock也是的。1、什么是可重入锁呢?    关于什么是可重入锁,我们先来看一段维基百科的定义。若一个程序或子程序

2020-11-08 16:30:57 1543

原创 synchronized的三种应用方式(实例讲解)

目录前言1、什么时候加锁呢?2、Synchronized三种应用方式前言    上一节讲了i++并不是线程安全的,我们需要用synchronized来保证其线程安全。    这里我就介绍下synchronized的基本用法和简单原理。    便于说明,我写了个i++的例子:public class AddI { public static volatile int i =

2020-11-08 16:23:29 1119

原创 Java内存模型-volatile的应用(实例讲解)

目录)前言1、并发编程三要素2、并发编程的三大问题3、内存模型概念4、volatile解决缓存带来的可见性问题5、volatile解决编译优化带来的有序性问题总结前言“内存模型”、“volatile”这样的关键词是不是经常听到呢?我这里花点时间整理了下。1、并发编程三要素在并发编程的世界里,下面三要素你必须清楚:可见性:可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他的线程可以立即看到修改的结果。原子性:原子性指的是一个或多个操作,要么全部执行,并且执行过程中不被其它操

2020-11-08 16:12:41 405 1

原创 大彻大悟synchronized原理,锁的升级

前言    Synchronized原理是面试中的一个难点。网上的各种资料太乱了 ,概念晦涩难懂,看了不少资料、博客,花了不少时间,才整理成这篇笔记。看完对你大有帮助。1、内存布局    要想了解Synchronized的原理,你先必须了解下Java对象内存布局。    我这里就先介绍下Java内存布局。    当你通过关键字new关键字创

2020-11-08 11:56:28 771

原创 一文弄懂Java的线程池

前言工作中难免会使用线程池。对线程池的使用要格外的小心,说不定某天就出现了难搞的生产问题(OOM)。每次在使用的时候,我都会网上找找资料,今天我就自己整理这篇文章,不足或错误之处,希望大家看完后多多补充,提提意见。1、为什么要使用多线程我们使用多线程的本质是为了提升程序的性能。程序的性能我们可以用2个指标来度量:延迟:发出请求到收到响应这个过程的时间;延迟越短,意味着程序执行得越快,性能也就越好。吞吐量:在单位时间内能处理请求的数量;吞吐量越大,意味着程序能处理的请求越多,性能也就越好。同等条件

2020-10-26 18:52:29 3294 18

原创 Java8-默认方法和默认静态方法

目录前言1、什么是默认方法和静态默认方法2、为什么接口需要默认方法?3、默认方法冲突问题4、总结前言面试官:接口里面能有实现方法吗?库里:接口不可以有,但是抽象类有。面试官:确定嘛?那问个设计性的问题:假如有一个接口,有10个实现类,现在的需求可能要往接口加一个方法,这样就要改动10个实现类,但需求只需要改动其中两个实现类,要怎么设计呢?库里:emm…针对上面的问题,有2个方案: 再定义一个抽象类去实现这个接口,在抽象类中新增这个方法,然后其他两个实现类.

2020-10-18 10:33:32 615

原创 Java8方法引用,示例讲解

前言看过了Lambda表达式和函数式接口编程,再来看下方法引用。方法引用理解起来有点恶心,多花点时间,多写就好了。不过通过IDEA编辑器,会提示你用方法引用表达式来代替你写的代码【快捷键Alt+Enter】。如下图:如果是Lambda写法,左边会显示一个对应的Lambda符号,你可以选择用方法引用来代替Lambda表达式。1、四种不同方法的引用方法引用通过方法的名字来指向一个方法。 方法引用可以使语言的构造更紧凑简洁,减少冗余代码。 方法引用使用一对冒号 :: 。下面,我们.

2020-10-17 11:51:11 580 4

原创 Java8 Lambda表达式 和 函数式编程 原理详解

前言 1、前言   Java8既JDK1.8。Lambda表达式是Java8的新特性,除此之外Java8还提供了其他新特性,比如:函数式编程、方法引用、Stream、Optional类、默认方法、新的日期类型、Base64、Nashorn, JavaScript 引擎。  本篇详细介绍Lambda表达式,其他的后续慢慢介绍。  它是一个语法糖,糖是甜的,但是对于初学者并不是,当你熟悉之后,你会发现,它是真的香。  Lambda表达式的初衷是,进一步简化匿名类的语法(不过实现上,Lambda表达

2020-10-16 17:05:58 2169

原创 IDEA 常用快捷键

异常捕捉 try{}catch{}:选中一段代码 -> Ctrl+Alt+T -> 62、

2020-10-16 14:56:24 108

原创 IDEA 如何新建 Java 项目

第一步: 打开 IDEA打开 IDEA 后,我们可以通过两种方式来新建一个 Java 项目:第一种新建 Java 项目方式:第二种新建 Java 项目方式:第二步:开始新建 Java 项目选择 Java 项目; 选择 JDK (没有安装的要先安装哦) 其它包不用选 点击 Next, 进入下一步;勾选通过模板来新建 Java 项目,点击下一步:工程名,这里我们为:HelloWorld 项目路径 包名 点Finish,完成项目的创建...

2020-10-15 18:57:58 779

原创 阿里开发文档免费下载

链接为百度网盘下载链接。链接:https://pan.baidu.com/s/15dSUnzl6NAk4XwF58wdpIw提取码:7kjk复制这段内容后打开百度网盘手机App,操作更方便哦“人生当中成功只是一时的,失败却是主旋律,但是如何面对失败,却把人分成了不同的样子。有的人会被失败击垮,有的人能够不断地爬起来继续向前。真正的成熟,应该并不是追求完美,而是直面自己的缺憾。这,才是生活的本质 ”公众号:Java尖子生[关注公众号免费领取Java学习、面试资料。]...

2020-10-13 21:20:15 481

原创 Java异常(Error,Exception,异常处理、异常处理原则)

目录Exception 和 Error区别? 可查异常和不可查异常区别?异常类图异常的处理异常处理的两个基本原则try-catch-finally处理异常Throw 和 Throws自定义异常经典问题:Exception 和 Error区别? 可查异常和不可查异常区别?异常类图Error和Exception都是继承了Throwable 类。Error是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便

2020-05-08 20:48:06 887 1

原创 第3课:算法复杂度分析(下):最好、最坏、平均、均摊时间复杂度

最好、最坏时间复杂度我们先看一个例子:/* 例1:查找x在数组中出现的位置,如果没有找到,返回-1。n表示数组array的长度*/int findIndex(int[] array, int n, int x) { int i = 0; int index = -1; for (; i < n; ++i) { if (array[i] == x) { ...

2020-05-08 14:03:43 2373 1

原创 第2课:算法复杂度分析(上):时间、空间复杂度分析法

#1、算法的考量指标算法的考量指标,我们是用时间、空间复杂度来衡量的。时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。空间复杂度全称就是渐进空间复杂度,表示算法的存储空间与数据规模之间的增长关系。2、为什么需要复杂度分析?我把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小这种评估算法执行效率的方法是正确的。很多数据结构和算法书籍还给这...

2020-05-07 19:14:10 656

原创 第1课:为什么要学习数据结构与算法?如何学习?

为什么要学习数据结构与算法?如何学习?什么是数据结构什么是算法数据结构和算法的关系为什么要学习数据结构和算法学习数据结构算法难吗如何学习数据结构和算法什么是数据结构广义上讲:数据结构就是一组数据的存储结构。狭义上讲:队列、栈、堆、树 等常用的数据结构。什么是算法算法(Algorithm)就是操作数据的一组方法。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。比如:二分查找法、递归算...

2020-05-07 10:33:00 271

java复习资料20151125

Java 复习 资料 ,包括单选 多选 专项 综合 等考题

2015-11-25

空空如也

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

TA关注的人

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