自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 曾经的前端学习笔记

前端三板斧:HTML:Hyper Text Markup Language 超文本标记语言 常用的标签(使用标签展示效果)CSS:Cascading Style Sheet 层叠样式表 用于修饰标签原生的 JS(DOM编程):Javascript(面试中会问到DOM)前端框架:Jquery:封装的 JS以后小项目:网页版的计算器(js/jquery)javaWeb:​ ...

2020-03-28 09:52:42 905 1

原创 曾经的Mysql学习笔记

文件保存数据缺点:​ 文件的安全性问题​ 文件不利于数据查询和管理​ 文件不利于存储海量数据​ 文件在程序中控制不方便连接服务器mysql -h 127.0.0.1(默认本地连接) -P 3306(端口号) -u root(用户名)-p xxx(密码,明文,不推荐)注意:连接前需要打开mysql服务 (运行窗口:services.msc 打开服务)或者​...

2020-03-28 09:50:14 605

原创 浅谈字符串匹配算法 —— BM算法

概述BF算法在某些极端情况下,性能会退化的比较严重。RK 算法需要用到哈希算法,设计一个可以应对各种类型字符的哈希算法则并不简单。BM算法BM(Boyer-Moore)算法是一种非常高效的字符串匹配算法,性能约是著名的KMP 算法的 3 到 4 倍。但是BM算法的实现原理也很复杂。BM算法的思想我们把模式串和主串的匹配过程,可以看作模式串在主串中不停地往后滑...

2020-03-27 14:29:04 1263

原创 山大地纬笔试总结

收到山大地纬公司的笔试邀请,题出的比较基础,但是做的时候仍有些题目不是百分百确定,特此记录一下。单项选择下面概念中,不属于面向对象方法的是()A.对象、消息B.继承、多态C. 类、封装D.过程调用答案:D[解析] 面向对象的程序设计方法,对象,方法,属性及继承与多态性。面向对象方法是—种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。面向对象方法从...

2020-03-25 15:08:35 5467

原创 图 —— 深度优先搜索算法(DFS)

广度优先优先搜索算法是一种 “地毯式”层层推进的搜索算法,先查找离起始顶点最近的,然后是次近的,依次往外搜索。而深度优先搜索算法就像 “走迷宫” ,是一种 “不撞南墙不回头”的搜索算法假设站在迷宫的某个岔路口,然后想找到出口。随意选择一个岔路口来走,走着走着发现走不通的时候,你就回退到上一个岔路口,重新选择一条路继续走,直到最终找到出口。这种回退到上个岔路口,其实就是回溯...

2020-03-24 19:36:22 255

原创 浅谈字符串匹配算法 —— BF算法、RK算法

概述BF算法和RK算法都是单模式串匹配的算法。所谓单模式串匹配算法通俗来说就是一个串和一个串进行匹配常见的单模式串匹配算法还有BM算法和KMP算法。与之相对的就是多模式串匹配算法,就是在一个串中同时查找多个串,常见的有Trie 树和 AC 自动机。两个概念模式串和主串我们在字符串 A 中查找字符串 B,那字符串 A 就是主串,字符串 B 就是模式串。...

2020-03-24 15:28:52 623

原创 图 —— 广度优先搜索算法(BFS)

算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。图上的搜索算法,最直接的理解就是,在图中找出从一个顶点出发,到另一个顶点的路径。而深度和广度优先搜索就是图的众多搜索算法中最简单的,也是最“暴力”的搜索算法代码实现前提代码中的图结构是利用邻链表实现的无权无向图。import java.util.LinkedL...

2020-03-24 13:48:41 356

原创 Java高并发之魂:synchronized深度解析

本文整理自慕课网的讲师悟空老师,教学地址:http://www.imooc.com/learn/1086文章由_chenyl整理,原文地址https://blog.csdn.net/qwqw3333333/article/details/87358290#1_synchronized_4目录一、synchronized简介1 synchronized作用1.1 官方翻译1....

2020-03-22 12:42:07 411

原创 美菜网一面面经(成都——后端研发工程师(Java))

时长:80min面试官:张宏伟感觉比我大不了多少,很年轻1.上来第一句话长驱直入,讲一下散列表。2.你之前说了开放寻址法,说了链表法,大概讲了插入过程,那么查询过程呢?3.假如说就像你刚才讲的线性探测,我查询的时候通过散列函数计算到2这个位置,但是我要查寻的值并不是2这个位置的值,怎么查询到我想要的值,链表法解决散列冲突的话又怎么找到我想要的值呢?4.说一下二叉树吧,二叉树是一...

2020-03-21 12:23:38 1008 4

转载 JavaSE之彻底搞懂try,catch,finally与return的执行

版权声明:本文为CSDN博主「狼王神起」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_36262896/article/details/79779953在开始我的博客之前,我先引用马士兵老师的一句话,掌握了内存你就掌握了一切(滑稽)。一般情况下,程序执行到try里面的...

2020-03-12 18:23:31 110

原创 Java虚拟机是怎样运行Java字节码的?

以标准 JDK 中的 HotSpot 虚拟机为例,从虚拟机以及底层硬件两个角度来看Java 虚拟机具体是怎么运行 Java 字节码的。虚拟机视角从虚拟机视角来看,执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中。加载后的 Java 类会被存放于方法区(Method Area)中。实际运行时,虚拟机会执行方法区内的代码。在运行过程中,每...

2020-03-10 09:35:17 1170

原创 数据结构 —— 图

图树是一种非线性表的数据结构,图也是,图和树比起来,是一种更加复杂的非线性表数据结构。涉及图的算法有很多,也非常复杂,比如图的搜索、最短路径、最小生成树、二分图等等。树中的元素称为节点,而图中的元素称为顶点。图中的一个顶点可以与任意其他顶点建立连接关系。这种建立的关系叫作边(edge)。微博、微信等这些社交网络的好友关系就是一个非常典型的图结构。...

2020-03-08 17:30:50 255

原创 堆的应用

优先级队列优先级队列首先是一个队列,他符合队列的基本特性,先进先出。不过,在优先级队列中,数据的出队顺序不是先进先出,而是按照优先级来,优先级最高的,最先出队。实现优先级队列的方法有很多,用堆来实现是最直接、最高效的。堆和优先级队列十分相似,有时候一个堆就可以看作一个优先级队列。往优先级队列中插入一个元素,就相当于往堆中插入一个元素;从优先级队列中取出优先级最高的元素,就相...

2020-03-07 21:54:40 182

原创 解决MySQL等软件下载过慢问题

收藏一下http://mirrors.sohu.com/许多软件各个版本都有

2020-03-07 21:49:29 236

原创 阶段总结(四)——为什么同为O(n log n),快速排序的性能比堆排序要好?

在平均情况下,快速排序和堆排序的时间复杂度都是O(n log n),堆排序的时间复杂度甚至比快速排序的时间复杂度稳定。因为快速排序最坏情况下时间复杂度是O(n²)。但是,在实际的软件开发中,快速排序的性能要比堆排序好。为什么?主要有两方面原因堆排序数据访问的方式没有快速排序友好对于快速排序来说,数据是顺序访问的。对于堆排序来说,数据是跳着访问的。比如堆...

2020-03-06 15:55:33 796

原创 排序算法之堆排序分析

堆排序堆排序就是利用堆的特点所设计的一种排序算法。(完全二叉树,每个节点的值都大于其左右子节点(或者小于))堆排序的过程大致可以分解成两个步骤:建堆 和 排序。建堆我们可以将数组原地建成一个堆。原地就是不借助与别的数组,在原数组上操作建堆有两种方法:若原数组有n个数据,可以假设数组起初只包含一个数据,就是下标为1的数据。然后将下标从 2 到 n 的数据依次插入到...

2020-03-06 15:31:48 420

原创 数据结构 —— 堆

堆“堆”(Heap),实际上就是一种特殊的树。什么样的树才是堆?需要满足两个条件一、 堆是一个完全二叉树;二、 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值(也可以说是其左右节点的值)。大顶堆对于每个节点的值都大于等于子树中每个节点值的堆,我们叫作“大顶堆”。小顶堆对于每个节点的值都小于等于子树中每个节点值的堆,我们叫作“小顶堆”。...

2020-03-06 13:53:23 5174

原创 递归树——分析递归算法的时间复杂度

递归的思想就是,将大问题分解为小问题来求解,然后再将小问题分解为小小问题。这样一层一层地分解,直到问题的数据规模被分解得足够小,不用继续递归分解为止。如果我们把这个一层一层的分解过程画成图,它其实就是一棵树。我们给这棵树起一个名字,叫作递归树。如何用递归树求解时间复杂度递归树分析归并排序时间复杂度归并排序每次会将数据一分为二,因为每次分解都是一分为二,所以代价...

2020-03-04 20:18:52 6440

原创 数据结构 —— 红黑树

红黑树红黑树本质上是二叉平衡查找树,二叉平衡查找树有很多种,包括AVL树,Splay Tree(伸展树)、Treap(树堆)等红黑树是平衡二叉查找树中的一种,也是最常用的一种。二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于 log2n 的情况,从而导致各个操作的效率下降。极端情况下,二叉树会退化为链表,时间复杂度会退化到 O(n)。要解决频繁动态更新后复杂度退...

2020-03-04 17:32:34 576

原创 清晰理解红黑树的演变---红黑的含义

本文转自:甜菜波波的cnblog前言 红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。 本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑...

2020-03-04 14:49:40 293

原创 阶段总结(三)——为什么有了散列表我们还需要二叉树

二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。散列表也是支持这些操作的,而且散列表的这些操作比二叉查找树更高效,时间复杂度是 O(1)。既然散列表如此高效,那么散列表是不是可以完全替代二叉树呢。或者说有没有什么地方用散列表是做不了的,必须用二叉树呢?散列表的插入、删除、查找操作的时间复杂度可以做到常量级的 O(1),非常高效。而二叉查找树在比较平衡...

2020-03-03 21:02:43 292

原创 数据结构——二叉查找树(Binary Search Tree)

二叉查找树二叉查找树是二叉树中最常用的一种类型,也叫二叉搜索树。顾名思义,二叉查找树是为了实现快速查找而生的。实际上它除了支持快速查找一个数据,还支持快速插入、删除一个数据。之所以能支持这些,依赖于二叉查找树的特殊结构。二叉查找树要求,在树中的任意一个节点,左子树的每个节点的值都要小于该节点的值,右子树的节点值都大于这个节点的值。二叉树查找树的查找操作先...

2020-03-03 20:18:46 652

原创 二叉树的遍历以及递归、非递归实现 / 层次遍历

二叉树的遍历二叉树遍历的经典方法有四种,前序遍历、中序遍历、后序遍历和层次遍历。其中,前、中、后序,表示的是节点与它的左右子树节点遍历打印的先后顺序。前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。后序遍历是指,对于树中的任意节点来...

2020-03-01 19:14:03 994

原创 二叉树的存储方式 以及 为什么会有完全二叉树这一概念和定义???

二叉树的存储方式存储一棵二叉树有两种方法,一种是基于指针或者引用的二叉链式存储法,一种是基于数组的顺序存储法。链式存储法用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。二叉链每个节点有三个字段,其中一个存储数据,另外两个是指向左右子节点的指针。顺序储存法顺序结构存储就是使用数组来存储。我们把根节点存储在下标 i = 1 的位置,那左子节点存储在下标 ...

2020-03-01 11:56:46 1398

原创 数据结构——二叉树基础

树树的特征树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树?非树?树的概念树中的每个元素都叫做节点,用来连线相邻节点之间的关系,叫作“父子关系”A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。B、C、D 这三个节点的父节...

2020-02-29 19:46:39 561

原创 教你一秒钟得出 N个节点的完全二叉树有多少个叶子节点 / 度为1或2的节点个数

没耐心的同学们可以直接拉到最底下看结论,有兴趣的话可以浏览全篇文章完全二叉树的节点计算基本是几类,要么是求完全二叉树中的叶子节点个数或者度为1或者2的节点的个数。其实这些问题根本上一一类问题,求解方法也是基本相同的。先把题列出来:一棵完全二叉树具有1000个结点,则此完全二叉树有多少个度为2的结点?完全二叉树699个节点,则叶子节点有多少个?已知完全二叉树...

2020-02-29 19:46:00 26851 3

原创 数据结构——散列表(Hash Table)(哈希表)

散列表散列表英文是hashtable,经常被叫做Hash表,或者哈希表。哈希表其实就是由数组演化而来的,利用的就是数组支持按照下标随机访问数据的特性,可以说散列表就是数组的一种扩展。百度文库对散列表的解释:根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的...

2020-02-28 18:15:07 1805

原创 散列函数的设计方法

本文转自:https://www.cnblogs.com/zhuyf87/archive/2012/12/17/2821785.html好的散列函数要求:(1)计算简单,至少散列函数的计算时间不应该超过其他查找技术与关键字比较的时间;(2)计算出的散列地址分布均匀,这样可以保证存储空间的有效利用,并减少为处理冲突而耗费的时间。1.直接定址法取关键字或关键字的某个线性函数值为散列...

2020-02-28 15:03:56 2512

原创 不FQ就可访问维基(wiki)百科的方法

中文维基百科维基百科中文镜像

2020-02-27 14:53:36 18676

原创 数据结构——跳表(skip list)

跳表跳表是一种各方面性能都比较优秀的动态数据结构,可以支持快速的插入、删除、查找操作。跳表的实质就是一种可以进行“二分查找”的有序链表,跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。理解跳表对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率就会很低,时间复杂度会很高,时间复杂度是 O(n...

2020-02-27 13:48:22 1197

原创 二分查找问题以及常见的二分查找变种问题

二分查找二分查找又叫做折半查找,二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。查找效率假设数据大小是 n,每次查找后数据都会缩小为原来的一半,也就是会除以 2。最坏情况下,直到查找区间被缩小为空,才停止。那么被查找的区间变化就是:n,n/2,n/4,...

2020-02-26 16:11:24 1582

原创 排序算法阶段总结(二)——如何选择合适的算法

当数据符合线性排序对数据的要求当数据符合线性排序的要求时,优先使用线性排序。时间复杂度为O(n)。但是对于大多数情况下,数据并不一定符合线性排序的数据要求。小规模数据如果对于小规模的数据排序,我们可以选择时间复杂度是 O(n²) 的算法。因为在小规模数据面前,O(n²) 时间复杂度的算法并不一定比 O(nlogn) 的算法执行时间长。我们通常进行的复杂度分析是偏理...

2020-02-24 17:16:28 594

原创 排序算法之线性排序分析——桶排序、计数排序、基数排序

线性排序桶排序、计数排序、基数排序是时间复杂度是 O(n) 的序算法。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作。此外,线性排序对排序数据的要求很苛刻,要注意线性排序算法的适用场景。桶排序算法思想是将要排序的...

2020-02-24 14:05:50 429

原创 排序算法之快速排序分析

快速排序快速排序的执行效率快速排序的内存消耗快速排序的稳定性快速排序的代码实现

2020-02-23 14:08:05 566

原创 排序算法之归并排序分析

归并排序排序思想:归并排序使用的就是分治思想,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。这种将大问题分解成小问题的思想与递归很像,分治和递归的区别就是:分治是一种解决问题的处理思想,递归是一种编程技巧如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序...

2020-02-20 21:50:56 1644 1

原创 排序算法阶段总结(一)冒泡、插入、选择

可以看出来,同样是O(n²)的时间复杂度,冒泡和插入排序是优于选择排序的选择排序是不稳定的排序算法,而且无论数据的有序度如何,他的时间复杂度都是O(n²)。而冒泡排序和插入排序相比又如何呢?实际开发中,插入排序的受欢迎程度远高于冒泡排序,他们最大的区别就是冒泡排序是数据的交换,而插入排序是数据的移动。冒泡排序不管怎么优化,元素交换的次数是一个固定值,是原始数据的逆序度。插...

2020-02-20 16:04:07 272

原创 排序算法之选择排序分析

选择排序选择排序算法和插入排序算法类似,也分已排序区间和未排序区间。但是不同的是选择排序每次会从未排序区间中找到最小的元素,并将其放置到已排序区间的末尾。选择排序的执行效率选择排序的最好、最坏、平均情况下时间复杂度都为O(n²)因为无论数据有序度如何,都是每次遍历一次数组,排好一个数据。所以选择排序的时间复杂度为O(n²)。选择排序的内存消耗选择...

2020-02-19 20:07:52 718

原创 排序算法之插入排序分析

插入排序要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序。只要遍历数组,找到数据应该插入的位置将其插入即可,而插入排序算法正是建立在此方法之上的排序算法插入排序的执行效率最好情况下时间复杂度如果要排序的数据已经是有序的,我们并不需要搬移任何数据。如果我们从尾到头在有序数据组里面查找插入位置,每次只需要比较一个数据就能确定插入的位置。...

2020-02-19 14:17:31 880

原创 留个纪念:第一次写直接插入排序的“正确”代码

public void insertionSort(int[] a, int n) { if (n <= 1) return; for (int i = 0; i < n - 1; i++) { //i代表有序区间的最后一个数据下标 for (int j = i + 1; j > 0; j--) { ...

2020-02-19 14:16:23 290

原创 排序算法之冒泡排序分析

冒泡排序冒泡排序是重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(你所定义的逻辑顺序)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。冒泡排序的执行效率最好情况下时间复杂度最好情况为当要排序的数据已经是有序的,只需要进行一次冒泡排序,时间复杂度为O(n)。最坏情况下时间复杂度最坏...

2020-02-18 20:43:48 1787

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除