![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
烟雨星空
公众号:「烟雨星空」,关注免费领取1000G学习资料
展开
-
面试官问我:创建线程有几种方式?我笑了
前言多线程在面试中基本上已经是必问项了,面试官通常会从简单的问题开始发问,然后再一步一步的挖掘你的知识面。比如,从线程是什么开始,线程和进程的区别,创建线程有几种方式,线程有几种状态,等等。接下来自然就会引出线程池,Lock,Synchronized,JUC的各种并发包。然后就会引出 AQS、CAS、JMM、JVM等偏底层原理,一环扣一环。这一节我们不聊其他的,只说创建线程有几种方式。是不是感觉非常简单,不就是那个啥啥那几种么。其实不然,只有我们给面试官解释清楚了,并加上我们自己的理解,才能在面原创 2020-10-24 13:46:32 · 1611 阅读 · 3 评论 -
全网最全JDK8新特性 3W 字总结(建议收藏)
微信搜「烟雨星空」,白嫖更多好文。现在 Oracle 官方每隔半年就会出一个 JDK 新版本。按时间来算的话,这个月就要出 JDK15 了。然而,大部分公司还是在使用 JDK7 和 8 。之前去我朋友家,竟然被嘲笑不会用 JDK8 。 不服气的我,回来之后,当然是重点学习之啊。话不多说,本文目录如下:目录:lambda 表达式接口默认方法和静态方法函数式接口方法引用OptionalStream API日期时间新 API一、lambda表达式先看下 lambda 表达式是怎.原创 2020-09-07 00:46:33 · 1102 阅读 · 0 评论 -
面试官:换人!他连哈希扣的都不懂...
前言相信你面试的时候,肯定被问过 hashCode 和 equals 相关的问题 。如:hashCode 是什么?它是怎么得来的?有什么用?经典题,equals 和 == 有什么区别?为什么要重写 equals 和 hashCode ?重写了 equals ,就必须要重写 hashCode 吗?为什么?hashCode 相等时,equals 一定相等吗?反过来呢?好的,上面就是灵魂拷问环节。其实,这些问题仔细想一下也不难,主要是平时我们很少去思考它。正文下面就按照上边的问题顺序,一个一原创 2020-06-23 19:59:45 · 533 阅读 · 1 评论 -
Linux 文件删除不了? 一招教你搞定!
前言最近不是redis 6.0 出了吗,官网介绍最新稳定版本是 6.0.3 。于是,我就准备在自己的破小服务器上安装一下。于是,出现了后续的糟心事 (linux 下的文件正常删除不了)。下载了最新版本,在源码包里边 make 之后,出现了好几个错误,上网查了下,有人说最新版本有问题,建议使用 5.0.8 。我嘞个去,我想也没想就相信了。(其实,也有可能跟我的系统没安装 tcl 有关系,这就是后话了)然后,我就下载了 5.0.8 版本的redis,重新安装。发现问题从官网下载了 5.0.8 的源码包原创 2020-05-27 09:22:38 · 5578 阅读 · 2 评论 -
我去,为什么最左前缀原则失效了?
问题最近,在 mysql 测试最左前缀原则,发现了匪夷所思的事情。根据最左前缀原则,本来应该索引失效,走全表扫描的,但是,却发现可以正常走索引。表结构如下( Mysql 版本 5.7.22):CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL, `age` int(11) DEFAULT NULL, `address原创 2020-05-20 09:19:24 · 1386 阅读 · 6 评论 -
技术人的福音!教你如何使用Typora+PicGo实现图片自动上传功能
前言写技术文章的小伙伴,对于 Typora 肯定不陌生,用来编写 Markdown 特别的方便。但是,有个问题,就是当我们插入一个图片,并且使之可以在公网访问时,操作流程特别的麻烦。首先,你需要截图生成一个图片文件。然后,把这个图片文件手动上传到图床,然后再复制图片的外链地址,然后,再把链接地址粘贴到文章中。沃德天,这一顿操作下来,想一想就可怕。而现在,我只需截图之后,直接 Ctrl+V 到 Typora,就会自动生成链接,并且自动上传图片到图床,简直不要太爽。因此,本篇文章就教你怎样用 Mark原创 2020-05-12 09:30:09 · 1003 阅读 · 1 评论 -
3W字详细解析 ConcurrentHashMap 1.7和1.8源码,再也不用担心被面试官吊打了。
前言上篇文章介绍了 HashMap 源码后,在博客平台广受好评,让本来己经不打算更新这个系列的我,仿佛被打了一顿鸡血。真的,被读者认可的感觉,就是这么奇妙。然后,有读者希望我能出一版 ConcurrentHashMap 的解析。所以,今天的这篇文章,我准备讲述一下 ConcurrentHashMap 分别在JDK1.7和 JDK1.8 的源码。文章较长,建议小伙伴们可以先收藏再看哦~说一下...原创 2020-04-21 09:51:31 · 3342 阅读 · 5 评论 -
面试官再问你 HashMap 底层原理,就把这篇文章甩给他看
前言HashMap 源码和底层原理在现在面试中是必问的。因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合。文章较长,介绍了很多原理性的问题,希望对你有所帮助~目录本篇文章主要包括以下内容:HashMap 的存储结构常用变量说明,如加载因子等HashMap 的四个构造函数tableSizeFor()方法及作用put()方法详解hash()方...原创 2020-04-13 10:16:14 · 54341 阅读 · 62 评论 -
线程中断 interrupt 和 LockSupport
本文章将要介绍的内容有以下几点,读者朋友也可先自行思考一下相关问题:线程中断 interrupt 方法怎么理解,意思就是线程中断了吗?那当前线程还能继续执行吗?判断线程是否中断的方法有几个,它们之间有什么区别?LockSupport的 park/unpark 和 wait/notify 有什么区别?sleep 方法是怎么响应中断的?park 方法又是怎么响应中断的?线程中断相关方法...原创 2020-03-01 22:47:50 · 859 阅读 · 1 评论 -
线程sleep,wait,notify,join,yield方法解析
线程的五种状态线程从创建到销毁一般分为五种状态,如下图:1) 新建当用new关键字创建一个线程时,就是新建状态。2) 就绪调用了 start 方法之后,线程就进入了就绪阶段。此时,线程不会立即执行run方法,需要等待获取CPU资源。3) 运行当线程获得CPU时间片后,就会进入运行状态,开始执行run方法。4) 阻塞当遇到以下几种情况,线程会从运行状态进入到阻塞状态。调用sl...原创 2020-02-29 22:28:26 · 1444 阅读 · 0 评论 -
并发编程之线程池ThreadPoolExecutor
前言在我们平时自己写线程的测试demo时,一般都是用new Thread的方式来创建线程。但是,我们知道创建线程对象,就会在内存中开辟空间,而线程中的任务执行完毕之后,就会销毁。单个线程的话还好,如果线程的并发数量上来之后,就会频繁的创建和销毁对象。这样,势必会消耗大量的系统资源,进而影响执行效率。所以,线程池就应运而生。线程池ThreadPoolExecutor可以通过idea先看下线...原创 2020-02-27 23:15:13 · 1037 阅读 · 0 评论 -
怎么用IDEA快速查看类图关系
做Java开发的,现在普遍都用上idea了。可以说,idea是当之无愧的Java开发神器。如果,你现在还没用idea,那肯定是你还没有感受过它的强大。好了,话不多说,今天的主题主要是教大家怎么通过idea快速的查看一个类的类图关系,即一个类继承了哪些类,实现了哪些接口,以及接口有哪些子接口和实现类。一、类关系以一个阻塞队列LinkedBlockingQueue为例:1)通过 Ctrl+Sh...原创 2020-02-26 11:10:43 · 24298 阅读 · 0 评论 -
面试官让我手写一个生产者消费者模式
不知道你是否遇到过面试官让你手写生产者消费者代码。别说,前段时间有小伙伴还真的遇到了这种情况。当时是一脸懵逼。但是,俗话说,从哪里跌倒就要从哪里爬起来。既然这次被问到了,那就回去好好研究一下,争取下一次不再被虐呗。于是,今天我决定手敲一个生产者消费者模式压压惊。(因为我也不想以后被面试官血虐啊)生产者消费者模式,其实很简单。无非就是生产者不停的生产数据,消费者不停的消费数据。(这不废话吗,字...原创 2020-02-25 22:58:25 · 1693 阅读 · 0 评论 -
怎么用wait、notify巧妙的设计一个Future模式?
我们知道多线程可以实现同时执行多个任务(只是看起来是同时,其实是CPU的时间片切换特别快我们没感觉而已)。现在假设一个做饭的场景,你没有厨具也没有食材。你可以去网上买一个厨具,但是这段时间,你不需要闲着啊,可以同时去超市买食材。设想这是两个线程,主线程去买食材,然后开启一个子线程去买厨具。但是,子线程是需要返回一个厨具的。 如果用普通的线程,只有一个Run方法,而Run方法是没有返回值的,这个...原创 2020-02-23 21:15:18 · 1404 阅读 · 0 评论 -
HashMap 与HashTable的区别(终结版)
HashMap 与HashTable的区别HashMap与Hashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如...转载 2020-02-22 12:02:54 · 282 阅读 · 0 评论 -
并发编程之Master-Worker模式
我们知道,单个线程计算是串行的,只有等上一个任务结束之后,才能执行下一个任务,所以执行效率是比较低的。那么,如果用多线程执行任务,就可以在单位时间内执行更多的任务,而Master-Worker就是多线程并行计算的一种实现方式。它的思想是,启动两个进程协同工作:Master和Worker进程。Master负责任务的接收和分配,Worker负责具体的子任务执行。每个Worker执行完任务之后把结...原创 2020-02-21 14:04:51 · 1117 阅读 · 0 评论 -
Java三大变量类变量、实例变量和局部变量
最近看到有的地方说: 成员变量包括实例变量和类变量。而有的地方说成员变量就是实例变量,不是包含关系。我又求证了一些群友和查资料,最终还是认为成员变量就是实例变量这种说法比较靠谱。因为类变量是在类加载的时候就存在了,是存在方法区的。随着类卸载才消失。而实例变量,就是随着对象的创建而创建,对象销毁也就销毁。实例变量别名叫做成员变量。(我理解就是对象中的一个成员,所以形象地称为成员变量)参考:h...原创 2020-02-19 10:19:51 · 480 阅读 · 0 评论 -
forkjoin及其性能分析,是否比for循环快?
最近看了网上的某公开课,其中有讲到forkjoin框架。在这之前,我丝毫没听说过这个东西,很好奇是什么东东。于是,就顺道研究了一番。总感觉这个东西,用的地方很少,也有可能是我才疏学浅。好吧,反正问了身边一堆猿,没有一个知道的。因此,我也没有那么深入的去了解底层,只是大概的了解了其工作原理,并分析了下它和普通的for循环以及JDK8的stream流之间的性能对比(稍后会说明其中踩到的坑)。一、...原创 2020-01-14 21:04:51 · 2185 阅读 · 1 评论 -
为什么大家都说Java中只有值传递?
最近跟Java中的值传递和引用传递杠上了,一度怀疑人生。查了很多资料,加上自己的理解,终于搞清楚了,什么是值传递和引用传递。也搞明白了,为什么大家都说Java只有值传递,没有引用传递。原来,我一直以来的认知都是错误的。。。首先,需要了解一些概念性的东西。形参与实参:形参,是指在定义函数时使用的参数,目的是用于接收调用该函数时传入的参数。简单理解,就是所有函数(即方法)的参数都是形参。实参,...原创 2020-01-08 21:57:10 · 5644 阅读 · 12 评论 -
集合排序Comparable和Comparator有什么区别?
Comparable和Comparator兄弟俩长得是真像。但是,需要注意下,使用中它们还是有不少区别的。下面,就一探究竟吧。一、Comparator做过集合排序的童鞋应该知道,可以使用Collections.sort方法对集合进行排序。我们点进去Collections类源码里边,会发现sort有两个重载方法。一个只需传一个List参数,另一个需要传两个参数:List和Comparator。...原创 2020-01-06 16:46:58 · 1529 阅读 · 0 评论 -
在子类中不能通过父类对象实例来访问父类的protected属性和方法
四种修饰符的作用域java中变量、方法和类有四种修饰符public,protected,default,private,它们的作用域范围如下:public: 拥有最大的权限,可以在本项目中的任意类中访问protected: 可以在本包下和其子类访问(本包子类或其他包的子类)default: 本包下的当前类和其他类可以访问private: 只能在当前类下访问访问修饰符当前类...原创 2019-07-22 17:04:38 · 4376 阅读 · 8 评论 -
java对象头 MarkWord
原文链接:[https://blog.csdn.net/scdn_cp/article/details/86491792#comments] 我们都知道,Java对象存储在堆(Heap)内存。那么一个Java对象到底包含什么呢?概括起来分为对象头、对象体和对齐字节...转载 2019-06-05 20:41:15 · 26070 阅读 · 10 评论 -
ArrayList扩容机制(基于jdk1.8)
一.ArrayList继承了AbstractList,实现了List接口,底层实现基于数组,因此可以认为是一个可变长度的数组。二.在讲扩容机制之前,我们需要了解一下ArrayList中最主要的几个变量://定义一个空数组以供使用private static final Object[] EMPTY_ELEMENTDATA = {};//也是一个空数组,跟上边的空数组不同之处在于,这个是在默...原创 2019-03-28 17:07:13 · 36294 阅读 · 1 评论