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

Java 

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

题目:有效的括号


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

题目: K 个一组翻转链表


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

HashMap 底层实现原理是什么

Java 

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

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

Java 

回答JDK 版本 1.8 ,String 内部实际存储结构为 char 数组,源码如下:public final class String implements java.io.Serializable, Comparable<String>, CharSequence {

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


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

AlphaGo Zero探索:从头开始


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

拓扑排序


思想存储:找一个存放入度为零的点,队列,表都可以。一个链表存放点,也就是邻接表。首先,对每个顶点计算它的入度。然后,将所有人度为0的顶点放人一个初始为空的队列中。当队列不空时,删除一个顶点v,并将与v邻接的所有顶点的入度均减1。只要一个顶点的入度降为0,就把该顶点放人队列中。

快速排序


思想基本思想是任取待排序对象序列中的某个对象(三值分割法取得)作为基准,按照该对象的排序码大小,将整个对象序列划分为左右两个子序列:左侧子序列中所有对象的排序码都小于或等于基准对象的值右侧子序列中所有对象的排序码都大于基准对象的值基准对象则排在这两个子序列中间(这也是该对象最终应安放的位置)。然后分

堆排序


思想若在输出堆顶值之后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素中的次小值。如此反复执行,便能得到一个有序序列。建堆:用顺序结构存完全二叉树,n个元素只需n个结点筛选:输出堆顶,即堆顶与堆的最后一个元素交换;再将剩余的元素自堆顶至叶子调整成堆。图片演示代码public class H