2 detachment_w

尚未进行身份认证

暂无相关简介

等级
TA的排名 9w+

数据结构与算法之美 - 11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?如何分析一个"排序算法"?排序算法的执行效率排序算法的内存消耗排序算法的稳定性冒泡排序(Bubble Sort)插入排序(Insertion Sort)选择排序(Selection Sort)内容小结排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会用到排序。排序非常重要,所以我会花多一点时间来

2020-05-14 06:46:17

数据结构与算法之美 - 10 | 递归:如何用三行代码找到“最终推荐人”?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 10 | 递归:如何用三行代码找到“最终推荐人”?如何理解"递归" ?递归需要满足的三个条件如何编写递归代码?递归代码要警惕堆栈溢出递归代码要警惕重复计算怎么将递归代码改写为非递归代码?解答开篇内容小结课后思考推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多App都有这个功能。这个功能中,用户A推荐用户B来注册,用户B又推荐了用户C来注册。我们可以说,用户C的”最终推荐人”为用户A ,用户B的”最终推荐人”也为用户A,而用户A没有”最终

2020-05-12 16:11:04

数据结构与算法之美 - 09 | 队列:队列在线程池等有限资源池中的应用

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 09 | 队列:队列在线程池等有限资源池中的应用如何理解”队列” ?顺序队列和链式队列循环队列阻塞队列和并发队列解答开篇内容小结课后思考我们知道,CPU资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致 CPU频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这个请

2020-05-12 15:11:50

数据结构与算法之美 - 08 | 栈:如何实现浏览器的前进和后退功能?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 08 | 栈:如何实现浏览器的前进和后退功能?浏览器的前进、后退功能,我想你肯定很熟悉吧?当你依次访问完一串页面a-b-c之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a°当你后退到 页面a ,点击前进按钮,就可以重新查看页面b和c。但是,如果你后退到页面b后,点击了新的页面d ,那就无法 再通过前进、后退功能查看页面c了。假设你是Chrome浏览器的开发工程师,你会如何实现这个功能呢? 这就要用到我们今天要讲的”栈”这种数

2020-05-12 14:35:52

数据结构与算法之美 - 07 | 链表(下):如何轻松写出正确的链表代码?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 07 | 链表(下):如何轻松写出正确的链表代码?技巧一:理解指针或引用的含义技巧二:警惕指针丢失和内存泄漏技巧三:利用哨兵简化实现难度技巧四:重点留意边界条件处理技巧五:举例画图,辅助思考技巧六:多写多练,没有捷径内容小结课后思考上一节我讲了链表相关的基础知识。学完之后,我看到有人留言说,基础知识我都掌握了,但是写链表代码还是 很费劲。哈哈,的确是这样的!想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表

2020-05-12 11:46:36

数据结构与算法之美 - 06 | 链表(上):如何实现LRU缓存淘汰算法?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 06 | 链表(上):如何实现LRU缓存淘汰算法?五花八门的链表结构单链表循环链表双向链表链表VS数组性能大比拼解答开篇内容小结课后思考今天我们来聊聊 ”链表(Linked list) “ 这个数据结构。学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是LRU缓存淘汰算法。缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。缓存的大

2020-05-12 11:21:00

数据结构与算法之美 - 05 | 数组:为什么很多编程语言中数组都从0开始编号?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 05 | 数组:为什么很多编程语言中数组都从0开始编号?如何实现随机访问?低效的”插入”和”删除”警惕数组的访问越界问题容器能否完全替代数组?解答开篇内容小结课后思考提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊。是的,在每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构。尽管数组看起来非常基础、简单,但是我估计很多人都并没有理解这个基础数据结构的精髓。在大部分编程

2020-05-12 10:35:10

数据结构与算法之美 - 04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度最好、最坏情况时间复杂度平均情况时间复杂度均摊时间复杂度内容小结课后思考上一节,我们讲了复杂度的大O表示法和几个分析技巧,还举了一些 O(logn)、O(n)、O(nlogn)复杂度分析。掌握了这些内容,对于复杂度这个知识点,你已经可以到及格线了。但是,我想你肯定不会满足于此。0复杂度分析的例子,比如。(1)、今天我会继续给你讲四个复杂度分析方面的知识点,最好情况时间复杂度

2020-05-12 09:49:38

数据结构与算法之美 - 03 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 03 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?为什么需要复杂度分析?大O复杂度表示法时间复杂度分析几种常见时间复杂度实例分析空间复杂度分析内容小结课后思考我们都知道,数据结构和算法本身解决的是”快”和”省”的问题,即如何让代码运行得更快,如何让代码更省 存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间、空间复杂度分析。其实,只要讲到数

2020-05-12 08:54:34

数据结构与算法之美 - 02 | 如何抓住重点,系统高效地学习数据结构与算法?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 02 | 如何抓住重点,系统高效地学习数据结构与算法?内容小结课后思考你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨? 实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书。正是这个原因,让很多初学者对这门课望而却步。我个人觉得,其实真正的原因是你没有找到好的学习方法,没有抓住学习的重点。实际上,数据结构和算法的东西并不多,常用的、基础的知识点更是屈指可数。只要掌握了正确的学习

2020-05-12 02:07:50

数据结构与算法之美 - 01 | 为什么要学习数据结构和算法?

这系列相关博客,参考 数据结构与算法之美数据结构与算法之美 - 01 | 为什么要学习数据结构和算法?内容小结课后思考你是不是觉得数据结构和算法,跟操作系统、计算机网络一样,是脱离实际工作的知识?可能除了面试,这辈子也用不着?尽管计算机相关专业的同学在大学都学过这门课程,甚至很多培训机构也会培训这方面的知识,但是据我了解,很多程序员对数据结构和算法依旧一窍不通。还有一些人也只听说过数组、链表、快排这些最最基本的数据结构和算法,稍微复杂一点的就完全没概念。当然,也有很多人说,自己实际工作中根本用不到数

2020-05-12 01:39:54

设计模式之美 - 55 | 享元模式(下):剖析享元模式在Java Integer、String中的应用

这系列相关博客,参考 设计模式之美设计模式之美 - 55 | 享元模式(下):剖析享元模式在Java Integer、String中的应用上一节课,我们通过棋牌游戏和文本编辑器这样两个实际的例子,学习了享元模式的原理、实现以及应用场景。用一句话总结一下,享元模式中的“享元”指被共享的单元。享元模式通过复用对象,以达到节省内存的目的。今天,我再用一节课的时间带你剖析一下,享元模式在 Java Integer、String 中的应用。如果你不熟悉 Java 编程语言,那也不用担心看不懂,因为今天的内

2020-05-11 10:51:16

设计模式之美 - 54 | 享元模式(上):如何利用享元模式优化文本编辑器的内存占用?

这系列相关博客,参考 设计模式之美设计模式之美 - 54 | 享元模式(上):如何利用享元模式优化文本编辑器的内存占用?上一节课中,我们讲了组合模式。组合模式并不常用,主要用在数据能表示成树形结构、能通过树的遍历算法来解决的场景中。今天,我们再来学习一个不那么常用的模式,享元模式(Flyweight Design Pattern)。这也是我们要学习的最后一个结构型模式。跟其他所有的设计模式类似,享元模式的原理和实现也非常简单。今天,我会通过棋牌游戏和文本编辑器两个实际的例子来讲解。除此之外,我

2020-05-11 10:35:34

设计模式之美 - 53 | 组合模式:如何设计实现支持递归遍历的文件系统目录树结构?

这系列相关博客,参考 设计模式之美设计模式之美 - 53 | 组合模式:如何设计实现支持递归遍历的文件系统目录树结构?结构型设计模式就快要讲完了,还剩下两个不那么常用的:组合模式和享元模式。今天,我们来讲一下组合模式(Composite Design Pattern)。组合模式跟我们之前讲的面向对象设计中的“组合关系(通过组合来组装两个类)”,完全是两码事。这里讲的“组合模式”,主要是用来处理树形结构数据。这里的“数据”,你可以简单理解为一组对象集合,待会我们会详细讲解。正因为其应用场景的特殊

2020-05-11 09:44:48

设计模式之美 - 52 | 门面模式:如何设计合理的接口粒度以兼顾接口的易用性和通用性?

这系列相关博客,参考 设计模式之美设计模式之美 - 52 | 门面模式:如何设计合理的接口粒度以兼顾接口的易用性和通用性?前面我们已经学习了代理模式、桥接模式、装饰器模式、适配器模式,这 4 种结构型设计模式。今天,我们再来学习一种新的结构型模式:门面模式。门面模式原理和实现都特别简单,应用场景也比较明确,主要在接口设计方面使用。如果你平时的工作涉及接口开发,不知道你有没有遇到关于接口粒度的问题呢?为了保证接口的可复用性(或者叫通用性),我们需要将接口尽量设计得细粒度一点,职责单一一点。但是,

2020-05-11 09:22:05

设计模式之美 - 51 | 适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?

这系列相关博客,参考 设计模式之美设计模式之美 - 51 | 适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?前面几节课我们学习了代理模式、桥接模式、装饰器模式,今天,我们再来学习一个比较常用的结构型模式:适配器模式。这个模式相对来说还是比较简单、好理解的,应用场景也很具体,总体上来讲比较好掌握。关于适配器模式,今天我们主要学习它的两种实现方式,类适配器和对象适配器,以及 5种常见的应用场景。同时,我还会通过剖析 slf4j 日志框架,来给你展示这个模式在真实项目中的应用。除此之外,

2020-05-11 09:05:20

设计模式之美 - 50 | 装饰器模式:通过剖析Java IO类库源码学习装饰器模式

这系列相关博客,参考 设计模式之美设计模式之美 - 50 | 装饰器模式:通过剖析Java IO类库源码学习装饰器模式上一节课我们学习了桥接模式,桥接模式有两种理解方式。第一种理解方式是“将抽象和实现解耦,让它们能独立开发”。这种理解方式比较特别,应用场景也不多。另一种理解方式更加简单,类似“组合优于继承”设计原则,这种理解方式更加通用,应用场景比较多。不管是哪种理解方式,它们的代码结构都是相同的,都是一种类之间的组合关系。今天,我们通过剖析 Java IO 类的设计思想,再学习一种新的结构型

2020-05-11 05:34:07

设计模式之美 - 49 | 桥接模式:如何实现支持不同类型和渠道的消息推送系统?

这系列相关博客,参考 设计模式之美设计模式之美 - 49 | 桥接模式:如何实现支持不同类型和渠道的消息推送系统?上一节课我们学习了第一种结构型模式:代理模式。它在不改变原始类(或者叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。代理模式在平时的开发经常被用到,常用在业务系统中开发一些非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志。今天,我们再学习另外一种结构型模式:桥接模式。桥接模式的代码实现非常简单,但是理解起来稍微有点难度,并且应用场景也比较局限,所以,相当于代

2020-05-11 04:51:07

设计模式之美 - 48 | 代理模式:代理在RPC、缓存、监控等场景中的应用

这系列相关博客,参考 设计模式之美设计模式之美 - 48 | 代理模式:代理在RPC、缓存、监控等场景中的应用前面几节,我们学习了设计模式中的创建型模式。创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。其中,单例模式用来创建全局唯一的对象。工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象。原型模式针对创建成本比较

2020-05-11 04:16:11

设计模式之美 - 47 | 原型模式:如何最快速地clone一个HashMap散列表?

这系列相关博客,参考 设计模式之美设计模式之美 - 47 | 原型模式:如何最快速地clone一个HashMap散列表?对于创建型模式,前面我们已经讲了单例模式、工厂模式、建造者模式,今天我们来讲最后一个:原型模式。对于熟悉 JavaScript 语言的前端程序员来说,原型模式是一种比较常用的开发模式。这是因为,有别于 Java、C++ 等基于类的面向对象编程语言,JavaScript 是一种基于原型的面向对象编程语言。即便 JavaScript 现在也引入了类的概念,但它也只是基于原型的语法

2020-05-10 06:10:27

查看更多

勋章 我的勋章
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。