摘要:
一.什么是图?有哪些特性及其使用场景? 由来: 当我们需要表示多对多的关系的时候,就需要使用到图这种数据结构 定义: 图是一种数据结构,其中顶点可以是具有零个或多个相邻元素.两个顶点之间的连线称为边,节点被称为顶点 常用概念: 无向图表示顶点之间的连接没有方向,既可以A->B,也可以B->A,有向图 阅读全文
摘要:
一.Huffman树 定义: 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径达到最小,这样的二叉树称为最优二叉树,也称为霍夫曼树(Huffman树). 特点: Huffman树是带权路径长度最短的树,权值较大的节点离根节点较近 权值 = 当前节点的值 * 层数,wpl最小的值,就是H 阅读全文
摘要:
一.冒泡排序 基本思想:通过对待排序序列此前向后,依次比较相邻元素的值,若发现逆序则进行交换,使得较大的值从前面移动到后面, 类似于水下的气泡一样(是所有排序算法中效率最低的) public static void BobbleSort(int[] arr){ /*冒泡排序,时间复杂度为O(n^2) 阅读全文
摘要:
链表是一个有序的列表,它分为单向链表,双向链表,单向环形链表 一.单向链表 链表在内存中的存储如下: 它有如下特性: 1.链表是以节点的方式,是链式存储 2.每个节点都包含data域,next域来指向下一个节点 3.每个链表在内存中的分布不一定是连续的 4.链表分为有头结点的链表和没有头结点的链表, 阅读全文
摘要:
一.数据结构的分型 数据结构包括线性结构和非线性结构 线性结构: 1.线性结构是最常见的数据结构,其特点是数据元素之间一对一的线性关系 2.线性结构有两种不同的存储结构(数组)和链式存储结构(链表),顺序存储的线性表称为顺序表,顺序表中存储的元素是连续的 3.链式存储的表称为链表,链表中的存储元素不 阅读全文
摘要:
一.在JVM中什么是垃圾?如何判断一个对象是否可被回收?哪些对象可以作为GC Roots的根 垃圾就是在内存中已经不再被使用到的空间就是垃圾. 1.引用计数法: 内部使用一个计数器,当有对象被引用+1,没有就-1,但是没有办法解决循环引用的问题,JVM不采用此类回收法 2.枚举根节点可达性分析(GC 阅读全文
摘要:
一.请你谈谈实际的项目中在Java虚拟机会抛出哪些异常,每个异常都是怎么产生的? 1.java.lang.StackOverflowError 栈空间满了 public static void stackOverFlow(){ // 递归调用之后,把栈空间塞满了,当程序出现递归调用没有终止的时候,就 阅读全文
摘要:
一.什么是DLC双端锁?有什么用处? 为了解决在多线程模式下,高并发的环境中,唯一确保单例模式只能生成一个实例 多线程环境中,单例模式会因为指令重排和线程竞争的原因会出现多个对象 运行结果: 在10个线程下,出现了10个对象,显然违背了单例模式 改进 运行结果 二.JAVA如何保证原子性?它的底层是 阅读全文
摘要:
一.你在项目中用过CountDownLanuch,CyclicBarrier,Semaphore吗? 1.CountDownLanuch是一个同步的工具类,它允许一个或多个线程一直等待,直到其他线程执行完毕后才会继续往后执行. 通过内部的计数器实现的,计数器的初始化为线程的数量,每当一个线程执行完毕 阅读全文
摘要:
一.说说Java创建多线程的方法 1. 通过继承Thread类实现run方法 2. 通过实现Runnable接口 3. 通过实现Callable接口 4. 通过线程池获取 二. 可以写一个Callable的案例吗?如何调用Callable接口 三. 请你谈谈对阻塞队列的理解,为什么要是用阻塞队列,它 阅读全文