数据结构
文章平均质量分 79
HelloWorld搬运工
HelloWorld是学习程序的第一个程序,搬运工是将一件东西从一个地方运到另一个地方。HelloWorld搬运工,分享技术知识,有原创也有转发,彼此交流,一起学习,共同进步。
展开
-
用命令手写mysql常用监控指标
任何东西不应过重关注其外表,要注重内在的东西,往往绚丽的外表下会有对应的负担和损耗。mysql 数据库的监控支持通过 SQL 方式从 performance_schema 库中访问对应的表数据,前提是初始化此库并开启监控数据写入。对于监控而言,不在于手段的多样性,而需要明白监控的本质,以及需要的监控项内容,找到符合自身项目特色的监控方式。在选择监控工具对 mysql 监控时,需要关注监控工具本身对于数据库服务器的消耗,不要影响到其自身的使用。原创 2022-08-22 19:21:40 · 667 阅读 · 0 评论 -
Java中的单链表、栈、队列三种数据结构
一、单链表1、在我们数据结构中,单链表非常重要。它里面的数据元素是以结点为单位,每个结点是由数据元素的数据和下一个结点的地址组成,在java集合框架里面 LinkedList、HashMap(数组加链表)等等的底层都是用链表实现的。2、下面是单链表的几个特点:数据元素在内存中存放的地址是不连续的:单链表的结点里面还定义一个结点,它里面保存着下一个结点的内存地址,在实例化对象的时候,jvm会开辟不同内存空间,并且是不连续的。添加效率高:添加一个元素时,先找到插入位置的前一个,只需要将1,2个.原创 2021-02-08 13:55:23 · 321 阅读 · 0 评论 -
程序员常用的8种数据结构
个人博客请访问http://www.x0100.top快速介绍8种常用数据结构数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键主题。因此,作为开发...原创 2020-04-29 17:59:33 · 2999 阅读 · 0 评论 -
排序算法:堆排序
在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿。堆是一棵顺序存储的完全二叉树。其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。其中每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。举例来说,对于n个元素的序列{R0, R1, … , Rn}当且仅当满足下列关系之一时,称之为堆:(1) Ri <= R2i+1 且 Ri <= R...原创 2018-08-27 21:25:48 · 237 阅读 · 1 评论 -
排序算法:归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序的基本思想将待排序序列R[0…n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表...原创 2018-08-27 21:30:28 · 402 阅读 · 1 评论 -
深入理解树(二叉、二叉搜索树)
1树什么是树?树是一种类似于链表的数据结构,不过链表的结点是以线性方式简单地指向其后继结点,而树的一个结点可以指向许多个结点;数是一种典型的非线性结构;树结构是以表达具有层次特性的图结构的一种方法;相关术语 根节点:根节点是一个没有双亲结点的结点,一棵树中最多有一个根节点(如上图的结点A就是根节点); 边:边表示从双亲结点到孩子结点的链接(如上图中所有的链接);...原创 2018-08-20 22:11:36 · 1492 阅读 · 0 评论 -
Java实现斐波那契数高效算法
前段时间去面试,被问到了斐波那契数算法,在此回顾总结一下。1、什么是斐波那契数算法斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n&...原创 2018-09-20 21:10:52 · 7922 阅读 · 0 评论 -
bitmap计数,求TopK最快的方法
上篇介绍了TopK的四种解法,其中随机选择(randomized select)最为经典,用减治法(Reduce & Conquer)的思想,将数据规模急速降低,总体复杂度为O(n)。结尾挖了一个坑:求TopK,有没有比随机选择更快的方法呢?空间换时间,是算法优化中最常见的手段,如果有相对充裕的内存,可以有更快的算法。画外音:即使内存不够,也可以水平切分,使...原创 2018-10-04 20:53:06 · 2345 阅读 · 0 评论 -
Docker常用命令
1. 容器操作新建容器:sudo docker run -t -i -p 1800:1800 -v /Users/**/Desktop:/Desktop kaixhin/caffe /bin/bash-v -p 端口映射-d退出容器按ctrl+D 或 exit 退出当前容器。查看正在运行的容器docker ps查看所有容器docker ps -a...原创 2019-01-31 22:03:37 · 357 阅读 · 0 评论 -
Java零拷贝
1、MappedByteBufferjava nio提供的FileChannel提供了map()方法,该方法可以在一个打开的文件和MappedByteBuffer之间建立一个虚拟内存映射,MappedByteBuffer继承于ByteBuffer,类似于一个基于内存的缓冲区,只不过该对象的数据元素存储在磁盘的一个文件中;调用get()方法会从磁盘中获取数据,此数据反映该文件当前的内容,调用pu...原创 2019-05-23 07:49:06 · 1889 阅读 · 0 评论 -
计算机算法基础总结
00 前言本文主要是通过通俗易懂的算法和自然语言, 向大家介绍基础的计算机排序算法和查找算法, 还有一些作为一名程序猿应该知道的名词, 数据结构, 算法等等. 但是仅仅止于介绍, 因为本人能力不足, 对一些高级的算法和数据结构理解不够通透, 所以也不作太多的深入的剖析.. demo都在我的Github中能找得到。同样的, 通过最近面试实习生的机会, 把一些基础都捡起来, 巩固巩固, 同时...原创 2019-06-03 20:47:56 · 809 阅读 · 0 评论 -
统治世界的十大排序算法!
0 算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原...原创 2019-07-11 07:52:53 · 306 阅读 · 0 评论 -
排序算法:简单选择排序
简单选择排序是一种选择排序。选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。简单排序处理流程(1)从待排序序列中,找到关键字最小的元素;(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。如图所示,每趟...原创 2018-08-27 21:21:47 · 726 阅读 · 1 评论 -
排序算法:希尔排序
希尔(Shell)排序又称为缩小增量排序,它是一种插入排序。它是直接插入排序算法的一种威力加强版。该方法因DL.Shell于1959年提出而得名。希尔排序的基本思想是:把记录按步长 gap分组,对每组记录采用直接插入排序方法进行排序。随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到1时,整个数据合成为一组,构成一组有序记录,则完成排序。我们来通过演示图,更...原创 2018-08-27 21:19:30 · 568 阅读 · 1 评论 -
排序算法:直接插入排序
直接插入排序是一种最简单的插入排序。插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。先拿一张5在手里,再摸到一张4,比5小,插到5前面,摸到一张6,嗯,比5大,插到5后面,摸到一张8,比6大,插到6后面,。。。最后一看,我靠,凑到全是同花顺,这下牛逼大了。...原创 2018-08-27 21:16:05 · 1254 阅读 · 1 评论 -
多对多业务,数据库水平切分架构一次搞定
本文将以“好友中心”为例,介绍“多对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。一、什么是多对多关系所谓的“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的关联关系,一个学生可以选修多个课程,一个课程可以被多个学生选修,这里学生与课程时间的关系,就是多对多关系。二、好友中心业务分析好友关系主要分为两类,弱好友...原创 2017-10-26 18:36:41 · 533 阅读 · 0 评论 -
多key业务,数据库水平切分架构一次搞定
数据库水平切分是一个很有意思的话题,不同业务类型,数据库水平切分的方法不同。本篇将以“订单中心”为例,介绍“多key”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。一、什么是“多key”类业务所谓的“多key”,是指一条元数据中,有多个属性上存在前台在线查询需求。订单中心业务分析订单中心是一个非常常见的“多key”业务,主要提...原创 2017-10-26 18:55:50 · 327 阅读 · 0 评论 -
数据库软件架构设计些什么
一、基本概念二、数据库架构设计思路(1)可用性(2)读性能(3)一致性(4)扩展性一、基本概念概念一“单库”概念二“分片”分片解决的是“数据量太大”的问题,也就是通常说的“水平切分”。一旦引入分片,势必有“数据路由”的概念,哪个数据访问哪个库。路由规则通常有3种方法:(1)范围:range优点:简单,容易扩展缺点:各库...原创 2017-11-13 22:24:14 · 1141 阅读 · 0 评论 -
如何快速实现高并发短文检索
一、需求缘起某并发量很大,数据量适中的业务线需要实现一个“标题检索”的功能:(1)并发量较大,每秒20w次(2)数据量适中,大概200w数据(3)是否需要分词:是(4)数据是否实时更新:否二、常见潜在解决方案及优劣(1)数据库搜索法具体方法:将标题数据存放在数据库中,使用like来检索优点:方案简单缺点:不能实现分词,并发量扛不住(2)数据库...原创 2017-12-04 08:09:17 · 507 阅读 · 0 评论 -
Base64编码换行符问题解决
概述Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 “+“ “/“这一共64个字符来编码原始字符(还有垫字符“=“)。一个字符本身是1个字节,也就是8位,而Base64编码后的一个字符只能表示能表示6位的信息。也就是原始字符串中3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME传输需求,在传输过程中都是用ASCII支持的可见字符。Base64是基...原创 2020-03-18 17:17:16 · 15765 阅读 · 0 评论 -
海量数据面试题分析
海量面试题的条件一般都要求我们处理一批计算机内存放不下的数据。当我们遇到这种面试题时,常有以下几种思想: 哈希切分 哈希切分就是将一个大文件,利用哈希的原理,将其分为若干个小文件。相同的数据都被分到同一个文件里。例如我有一个存放着100亿个整数的大文件,将其分为100个小文件。将每个数都模100,结果相同的数存放到一个文件里。如果这100亿个数理想均匀,则每个小文件大约为1亿个数。 ...原创 2020-03-18 18:01:37 · 421 阅读 · 0 评论 -
数据结构-红黑树解析
小明:老师,红黑树是什么树呀?老师:红黑树是数据结构的一种,在JDK的TreeMap,TreeSet中都用应用,JDK8的HashMap中,当链表树超过8的时候链表会转换为红黑树可以提高查询效率。小明:好深奥哦,可以详细讲讲吗?老师:好吧,要学习红黑树,咱们需要先来理解二叉查找树(Binary Search Tree)。二叉查找树(BST)具备什么特性呢?1.左子树上所有结点的...原创 2018-04-08 17:54:00 · 402 阅读 · 0 评论 -
常用数据结构总结
小明:最近常有人讨论数据结构和算法,听他们讨论时总是感觉晕乎好多都不懂,可以普及一下吗?老师:难得你这么爱学习,我们今天就普及一下数据结构的基础知识。数据结构与算法是程序设计的两大基础,是否熟练掌握可以在一定程度上证明你是否有良好的逻辑思维。我们先看一下常用数据结构和算法的整体内容。1.数据的逻辑结构集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系。...原创 2018-04-18 21:49:29 · 1781 阅读 · 1 评论 -
程序开发常用加密策略解析
系统开发中,为了系统数据安全,数据加密不可缺少,开发人员需要掌握常见的加密策略。一、数字摘要数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash函数对消息进行计算而产生。如果消息在传递的途中改变了,接收者通过对收到消息采用相同的Hash重新计算,新产生的摘要与原摘要进行比较,就可知道消息是否被篡改了,因此消息摘要能够验证消息的完整性。消息摘要采用单向H...原创 2018-04-18 21:54:17 · 5281 阅读 · 1 评论 -
HashMap底层数据结构原理解析
老师:JDK中我们最常用的一个数据类是HashMap。那么,谁可以回答一下HashMap的底层数据结构原理是什么呢?小明:老师,我知道。众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。...原创 2018-04-18 22:00:53 · 26396 阅读 · 10 评论 -
排序算法:快速排序
快速排序是一种交换排序。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。详细的图解往往比大堆的文字更有说明力,所以直接上图:上图中,演示了快速排序的处理过程:...原创 2018-08-27 21:12:56 · 309 阅读 · 0 评论 -
二叉树概述
1、什么是二叉树二叉树跟树有区别,最大的一点就是:树的度没有限制,而二叉树最多则不能超过2个度二叉树由结点组成,结点包含的链接可以为空( null)或者指向其他结点,在二叉树中,每个结点只能有一个父结点(只有根节点例外), 而且每个结点都只有左右两个链接,分别指向他们自己的左子节点和右子节点。2、二叉树类型:完全二叉树:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1)...原创 2017-02-16 16:19:46 · 628 阅读 · 0 评论