随笔分类 - Data Structure-数据结构算法
包含 矩阵算法:Matrix Multiplication,二叉树
摘要:具体的图文讲解参考:链表翻转的图文讲解(递归与迭代两种实现)(百度面试) 如题: 定义一个方法(函数),实现输入一个链表的头结点,然后可以反转这个链表的方向,并输出反转之后的链表的头结点。 代码实现 解题思路: 从表头节点依次遍历,将当前节点的后继指针指向它的前驱节点即可;此时需要prev、next
阅读全文
摘要:具体的红黑树介绍参考:红黑树原理以及插入、删除算法 附图例说明 红黑树 查找算法:遍历、二分(有序序列,二叉查找树 2^x=n树高=lgn,O(lgn))、哈希(最高效)、插值(二分的优化)、索引(搜索引擎、lucene)、BFS/DFS(图论的遍历)、平衡树、B树、B+树、红黑树(高效的查找算法)
阅读全文
摘要:以HashMap为例,它不安全,什么叫不安全。简单理解就是多线程读写可能是脏数据,比如你在A线程读,B线程写了一个新数据,而A线程却不知道。可怕。。之前有一个奔溃是java.util.ConcurrentModificationException,就是线程不安全的操作,不过更专业的说法是快速失败。H
阅读全文
摘要:位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。 1.与运算符与运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,
阅读全文
摘要:需求是这样的,我希望使用一个字段来标记多个boolean属性, 不能使用json的形式,因为使用opensearch 不能通过json解析,但是可以使用位操作运算符号, 如果不熟悉位运算符号参考:Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^) 网上参考了很多,发现 明明是个小
阅读全文
摘要:一、概念 R-B Tree,全称是Red-Black Tree又称红黑树,它是一种特殊的二叉查找树,红黑树的每个节点上都有存储位表示节点的颜色,可以是红或黑。 二、特性 1、每个节点或者是红色,或者是黑色 2、根节点是黑色的 3、每个叶子节点(NIL)是黑色的。注意:这里的叶子节点,是指为空的叶子节
阅读全文
摘要:今天遇到一个问题,是要从1-100中找到缺失的数字,而且是杂序排列,开始的时候确实有点懵,怎么弄啊,后来看了别人的idea,自己动手做了一下,在这里做个记录,大家有更好的意见,请回复啊 参考:怎样查出连续数字中缺失的数字
阅读全文
摘要:原题如下: 有一个100G大小的文件里存的全是数字,并且每个数字见用逗号隔开。现在在这一大堆数字中找出100个最大的数出来。 我认为,首先要摸清考官的意图。是想问你os方面的知识,还是算法,或者数据结构。 如果是os: 无疑是外排序算法的选择。100g文件在当前的环境下是无法全部读入内存的。 如果是
阅读全文
摘要:线程不安全的问题:hashMap 的多线程安全问题- ConcurrentModificationException 多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成
阅读全文
摘要:redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的。B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍mysql的B+索引原理 参考:一步步分析为什么B+树适合作为索引的结构 以及索引原理 (阿里面试)
阅读全文
摘要:二分查找法的时间复杂度:O(logn) redis,kafka,B+树的底层都采用了二分查找法 参考:二分查找法 redis的索引底层的 跳表原理 实现 聊聊Mysql索引和redis跳表 redis的跳表原理 时间复杂度O(logn)(阿里) 参考:二分查找法 kafka如何实现高并发存储-如何找
阅读全文
摘要:Hashtable 初始容量是11 ,扩容 方式为2N+1; HashMap 初始容量是16,扩容方式为2N; 阿里的人突然问我为啥扩容因子是0.75,回来总结了一下; 提高空间利用率和 减少查询成本的折中,主要是泊松分布,0.75的话碰撞最小, HashMap有两个参数影响其性能:初始容量和加载因
阅读全文
摘要:1、多线程put操作后,get操作导致死循环。2、多线程put非NULL元素后,get操作得到NULL值。3、多线程put操作,导致元素丢失。 参考:多线程下HashMap的死循环问题 比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成: 1、多线程put操作后,get操作
阅读全文
摘要:从源码可以看出,Iterator除了能读取集合的数据之外,也能数据进行删除操作;而Enumeration只能读取集合的数据,而不能对数据进行修改。 Iterator支持fail-fast机制,而Enumeration不支持fail-fast机制。Enumeration 是JDK 1.0添加的接口。使
阅读全文
摘要:网易2017实习生招聘笔试题-Java开发工程师 有10000000条数据,用以下什么排序算法用时最短 A 堆排序 B 快速排序 C 希尔排序 D 归并排序 个人参考答案 A 堆排序 数据量为千万,设每个数据为整型int,即4字节,4000 0000字节约也就38Mb,暂时不用考虑内存问题即外排序(
阅读全文
摘要:事实上Collections.sort方法底层就是调用的Arrays.sort方法,而Arrays.sort使用了两种排序方法,快速排序和优化的归并排序。 快速排序主要是对那些基本类型数据(int,short,long等)排序, 而归并排序用于对Object类型进行排序。 使用不同类型的排序算法主要
阅读全文
摘要:参考:Java集合和数组的区别 集合和容器都是Java中的容器。 区别 数组特点:大小固定,只能存储相同数据类型的数据 集合特点:大小可动态扩展,可以存储各种类型的数据 转换 数组转换为集合: Arrays.asList(数组) 示例: 1 2 3 4 5 int[] arr = {1,3,4,6,
阅读全文
摘要:一、有序集合求交集的方法有 a)二重for循环法,时间复杂度O(n*n) b)拉链法,时间复杂度O(n) c)水平分桶,多线程并行 d)bitmap,大大提高运算并行度,时间复杂度O(n) e)跳表,时间复杂度为O(log(n)) 以下是方法的具体介绍: 方案一:for * for,土办法,时间复杂
阅读全文