谈谈你对锁的理解?如何手动模拟一个死锁?

在并发编程中有两个重要的概念:线程和锁,多线程是一把双刃剑,它在提高程序性能的同时,也带来了编码的复杂性,对开发者的要求也提高了一个档次。而锁的出现就是为了保障多线程在同时操作一组资源时的数据一致性,当我们给资源加上锁之后,只有拥有此锁的线程才能操作此资源,而其他线程只能排队等待使用此锁。当然,在所
2020年06月02日 392次浏览

synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别?

在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并不是为了替代 synchronized,而是在 synchronized 不适用的情况下,提供一种可以选择的高级功能。我们本
2020年06月02日 385次浏览

详解 ThreadPoolExecutor 的参数含义及源码执行流程?

线程池是为了避免线程频繁的创建和销毁带来的性能消耗而建立的一种池化技术,他是把已经创建的线程放入 “池” 中,当有任务来时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说线程的活一定离不开ThreadPoolExecutor,在阿里巴巴《Java开发手册》中这样
2020年04月16日 483次浏览

线程的状态有哪些?它是如何工作的?

线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,也因此被称为轻量级的进程。当然,线程也是面试中常被问到的一个知识点,是程序员必备的基础技能,使用它可以有效
2020年04月16日 388次浏览

题目:有效的括号

问题给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: &quo
2020年04月15日 512次浏览

题目: K 个一组翻转链表

题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1-
2020年04月15日 505次浏览

HashMap 底层实现原理是什么

HashMap是使用频率最高的类型之一,同时也是面试经常被问到的问题之一,这是因为HashMap的知识点有很多,同时它又属于Java基础知识的一部分,因此在面试中经常被问到。
2020年04月14日 455次浏览

String 是如何实现的?它有哪些重要的方法?

回答JDK 版本 1.8 ,String 内部实际存储结构为 char 数组,源码如下:public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
2020年04月14日 426次浏览

(Dijkstra 算法)有权有向图求一个点到其它所有点最短路径

思想Dijkstra算法其实是贪婪算法,贪婪算法一般分阶段求解一个问题,在每个阶段它都把出现的当作是最好的去处理。Dijkstra算法按阶段进行,正像无权最短路径算法一样。在每个阶段,Dijkstra 算法选择一个顶点v,它在所有 unknown 顶点中具有最小的dv。同时算法声明从s到v的最短路径
2020年04月14日 478次浏览

AlphaGo Zero探索:从头开始

摘要阿尔法元是Deepmind围棋软件AlphaGo的一个版本。AlphaGo团队于2017年10月19日在“自然”杂志上发表了一篇文章,介绍了AlphaGoZero,这个版本不用学习人类的游戏数据,比之前的版本更强大。AlphaGoZero在三天内通过自我对弈拥有了超过了AlphaGoLee的实力
2020年04月06日 496次浏览