DWZ

了解红黑树的起源,理解红黑树的本质

一世执手 提交于 2021-01-10 12:54:32
前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。 你好,我是彤哥。 前面两节,我们一起学习了关于跳表的理论知识,并手写了两种完全不同的实现,我们放一张图来简单地回顾一下: 实现跳表的关键之处是在有序链表的基础上加上各层索引,通过这些索引可以做到O(log n)的时间复杂度快速地插入、删除、查找元素。 说起跳表,我们就不得不提另一种非常经典的数据结构——红黑树,红黑树相对于跳表来说,虽然时间复杂度都是O(log n),但是红黑树的使用场景相对更广泛一些,在早期的Linux内核中就一直存在红黑树的实现,也运用在了更高效的多路复用器Epoll中。 所以,红黑树是每一个程序员不得不会的知识点,甚至有些变态的面试官,还会让你手写红黑树的一部分实现,比如左旋、右旋、插入平衡的过程、删除平衡的过程,这些内容非常复杂,靠死记硬背往往很难彻底掌握。 彤哥也是一直在寻找一种红黑树的记忆法,总算让我找到了那么一种还算不错的方式,从红黑树的起源出发,理解红黑树的本质,再从本质出发,彻底掌握不用死记硬背的方法,最后再把它手写出来。 从本节开始,我也将把这种方法传递给你,因此,红黑树的部分,我会分成三个小节来讲解: 从红黑树的起源,到红黑树的本质 从红黑树的本质,找到不用死记硬背的方法 不靠死记硬背,手写红黑树 好了,下面我们就进入第一小节。 红黑树的起源 二叉树

了解红黑树的起源,理解红黑树的本质

戏子无情 提交于 2021-01-10 12:40:52
关注公众号“彤哥读源码”,解锁更多源码、基础、架构知识! 前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。 你好,我是彤哥。 前面两节,我们一起学习了关于跳表的理论知识,并手写了两种完全不同的实现,我们放一张图来简单地回顾一下: 实现跳表的关键之处是在有序链表的基础上加上各层索引,通过这些索引可以做到O(log n)的时间复杂度快速地插入、删除、查找元素。 说起跳表,我们就不得不提另一种非常经典的数据结构——红黑树,红黑树相对于跳表来说,虽然时间复杂度都是O(log n),但是红黑树的使用场景相对更广泛一些,在早期的Linux内核中就一直存在红黑树的实现,也运用在了更高效的多路复用器Epoll中。 所以,红黑树是每一个程序员不得不会的知识点,甚至有些变态的面试官,还会让你手写红黑树的一部分实现,比如左旋、右旋、插入平衡的过程、删除平衡的过程,这些内容非常复杂,靠死记硬背往往很难彻底掌握。 彤哥也是一直在寻找一种红黑树的记忆法,总算让我找到了那么一种还算不错的方式,从红黑树的起源出发,理解红黑树的本质,再从本质出发,彻底掌握不用死记硬背的方法,最后再把它手写出来。 从本节开始,我也将把这种方法传递给你,因此,红黑树的部分,我会分成三个小节来讲解: 从红黑树的起源,到红黑树的本质 从红黑树的本质,找到不用死记硬背的方法 不靠死记硬背

开发运维视角下,影响软件高可扩展性的6个因素

落花浮王杯 提交于 2021-01-08 11:41:52
<section id="nice" data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="font-size: 16px; color: black; padding: 0 10px; line-height: 1.6; word-spacing: 0px; letter-spacing: 0px; word-break: break-word; word-wrap: break-word; text-align: left; font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, 'PingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;"><p data-tool="mdnice编辑器" style="font-size: 16px; padding-top: 8px; padding-bottom: 8px; margin: 0; line-height: 26px; color: black;">软件可扩展性是一个有趣的话题。实现软件可扩展性涉及很多因素,我们在本文将讨论一些与开发和运维方面相关的因素。</p> <p

使用 Go 实现 Async/Await 模式

别说谁变了你拦得住时间么 提交于 2021-01-05 10:33:19
<section id="nice" data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="font-size: 16px; color: black; padding: 0 10px; line-height: 1.6; word-spacing: 0px; letter-spacing: 0px; word-break: break-word; word-wrap: break-word; text-align: left; font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, 'PingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;"><figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center;"><img src="https:/

7个最佳的学习Python编程的开源库

邮差的信 提交于 2020-12-30 11:31:58
开源最前线(ID:OpenSourceTop) 猿妹综合整理 项目来自: https://towardsdatascience.com/top-7-repositories-on-github-to-learn-python-44a3a7accb44 很多伙伴们在学习Python的过程中,更倾向于在Github上寻找Python学习资料,今天就和大家分享Github上7个绝佳的Python编程学习的开源库: 1、learn-python3 这个存储库一共有19本Jupyter笔记本。它涵盖了字符串和条件之类的基础知识,然后讨论了面向对象编程,以及如何处理异常和一些Python标准库的特性等。每一个主题都有一个“notebook”链接,它会向你介绍该主题和一些示例代码,当你完成这些内容之后,还有一个练习链接,点击后你就可以做一些测试题。 项目地址: https://github.com/jerry-git/learn-python3 2、learn-python 这个存储库还可以作为Python的介绍,帮助你从初级水平上升至中级,这里的中级指的是熟练地使用这种编程语言,而不仅仅是简单的循环和算法。该存储库是一个Python脚本集合,每个脚本都是一个核心类别的子主题,比如“操作符”、“数据类型”和“控制流”。 你不必完整地学习该课程,正如作者指出的那样,你还可以将存储库用作备忘单

资料 | 《 Linux 命令行与 shell 脚本编程大全 》

一世执手 提交于 2020-11-27 04:33:52
https://www.leiphone.com/news/202003/EwnNwrgbc86QtAYx.html 今日资料推荐 《 Linux 命令行与 shell 脚本编程大全 》 这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分:Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的最新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的使用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。 ❖ 扫码或点击阅读原文进社区收藏下载 ❖ 下载地址: https://www.yanxishe.com/resourceDetail/1122?from=leiphonecolumn_res0312 雷锋网雷锋网雷锋网 (公众号:雷锋网) 相关文章: 资料下载 | 数学分析八讲(修订版) :概述了数学分析的基本思想、基本概念和基本方法 资料 | 《 大话数据结构 》 资料 | 《 你不知道的 JavaScript(上卷) 》 资料 | 算法设计与分析基础(第 3 版) 资料 | 《 JavaScript 高级程序设计(第3版)中文-高清 》 资料 | 《 图解密码技术(第 3 版) 》 资料 | 《 Java

资料 | 《 Linux 命令行与 shell 脚本编程大全 》

岁酱吖の 提交于 2020-11-26 09:27:35
https://www.leiphone.com/news/202003/EwnNwrgbc86QtAYx.html 今日资料推荐 《 Linux 命令行与 shell 脚本编程大全 》 这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分:Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的最新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的使用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。 ❖ 扫码或点击阅读原文进社区收藏下载 ❖ 下载地址: https://www.yanxishe.com/resourceDetail/1122?from=leiphonecolumn_res0312 雷锋网雷锋网雷锋网 (公众号:雷锋网) 相关文章: 资料下载 | 数学分析八讲(修订版) :概述了数学分析的基本思想、基本概念和基本方法 资料 | 《 大话数据结构 》 资料 | 《 你不知道的 JavaScript(上卷) 》 资料 | 算法设计与分析基础(第 3 版) 资料 | 《 JavaScript 高级程序设计(第3版)中文-高清 》 资料 | 《 图解密码技术(第 3 版) 》 资料 | 《 Java

你知道Spring AOP @Before @Around@After 的执行顺序吗

萝らか妹 提交于 2020-11-21 23:56:35
做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 原文地址:https://dwz.cn/uLMHZN5P 用过spring框架进行开发的人,多多少少会使用过它的 AOP 功能,都知道有 @Before 、 @Around 和 @After 等advice。最近,为了实现项目中的 输出日志 和 权限控制 这两个需求,我也使用到了AOP功能。我使用到了 @Before 、 @Around 这两个advice。但在,使用过程中,却对它们的执行顺序并不清楚。为了弄清楚在不同情况下,这些advice到底是以怎么样的一个顺序进行执行的,我作了个测试,在此将其记录下来,以供以后查看。 前提 • 对于AOP相关类(aspect、pointcut等)的概念,本文不作说明。 • 对于如何让spring框架扫描到AOP,本文也不作说明。 情况一: 一个方法只被一个Aspect类拦截 当一个方法只被一个Aspect拦截时,这个Aspect中的不同advice是按照怎样的顺序进行执行的呢?请看: 添加 PointCut 类 该pointcut用来拦截 test 包下的所有类中的所有方法。 添加 Aspect 类 该类中的advice将会用到上面的pointcut,使用方法请看各个advice的 value 属性。 添加测试用Controller

格力斥资2000万成立医疗器械子公司,格力电器董秘望靖东出任董事长

泄露秘密 提交于 2020-10-28 06:53:38
https://www.leiphone.com/news/202002/MF0VyJqhsap180Oz.html 雷锋网了解到,格力电器于2月18日出资2000万成立珠海格健医疗科技有限公司(以下简称“格健医疗”),制造与销售范围包括Ⅱ类医护人员防护用品、紫外线消毒设备、手术室感染控制用品,董事长由格力电器董事会秘书望靖东担任。 图片来源:天眼查 格健医疗董事长望靖东表示:“格力电器成立格健医疗这个子公司,目前是为了防疫需要,它可以解决很多问题,满足一些资源调配的需求,但是成立子公司还是希望在该领域长远发展。” 雷锋网了解到,除了成立销售医疗防护用品子公司,此前格力电器董事长董明珠也曾在致武汉格力全体员工的一封信中提到格力电器正在加紧生产温度计、口罩生产设备、护目镜等一系列抗击疫情产品。 望靖东个人简介 望靖东:1992年至1997年,武汉洲际通信电源集团有限公司任技术员;2000年至2002年,审计署广州特派员办事处任主任科员;2002年11月加入格力电器,历任财务部部长、采购部部长、审计部部长;2006年4月至今,任格力电器总裁助理;2008年1月至今,兼格力电器财务负责人。 雷锋网 (公众号:雷锋网) 2009年7月至今,兼任格力电器董事会秘书;2009年10月,望靖东被聘任为公司副总裁;格力电器2019年1月16日,召开股东大会进行董事会换届选举

StackOverflow 上面最流行的 7 个 Java 问题!

核能气质少年 提交于 2020-10-28 04:21:40
原文:https://dwz.cn/Boy5tcHJ 译文:https://dwz.cn/j1hgReGd StackOverflow发展到目前,已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西。 这篇文章是在我们审阅了StackOverflow上最流行的Java问题以及答案后从中挑出来的。即使你是一个有丰富经验的开发者,也能从中学到不少东西。 一、分支预测 问题链接: https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array StackOverflow上最多投票的一个Java问题是: 为什么处理一个排序数组要比非排序数组快的多 。 为了回答这个问题,你需要使用分支预测(branch prediction)。分支预测是一种架构,旨在通过在真实的路径发生前猜测某一分支的下一步来提升处理过程。 分支在这里即一个if语句。这样的话,如果是一个排序数组,那么分支预测将会进行,否则不会进行。 StackOverflow上的一个回答者,链接: http://stackoverflow.com/questions/11227809/why-is-it-faster