数据结构篇-二叉排序树 定义 二茬排序树(二叉搜索树)满足以下性质的二叉树1.若根结点的左子树非空,则左子树上的所有结点关键字均小于根结点关键字。2.若根结点的右子树非空,则右子树上的所有结点关键字均大于根结点关键字。3.根结点的左右子树本身又是一颗二叉排序树。 特点 中序遍历得到一个递增序列,平均查找时间O(logN) 创建12345678910BSTNode *CreateBST(KeyType A[],int 2020-12-27 基础算法 > 数据结构 #二叉排序树
数据结构篇-平衡二叉树(AVL树) 平衡二叉树定义 任意节点的子树的高度差都小于等于1,并且左右两个子树都是一棵平衡二叉树 B树(多路平衡搜索树) AVL树(二叉平衡搜索树) 时间复杂度:平均O(logN),最坏O(N) 添加元素总是作为叶子节点插入,当破坏平衡性,首先从该新节点向根节点查找第一个失去平衡的节点,然后以该失衡节点和它相邻的刚查找过的两个节点构成调整子树,使之成为新的平衡子树。当失衡的最小子树被调整为平衡子 2020-12-23 基础算法 > 数据结构 #平衡二叉树
Java篇-死锁的排查方法 死锁成立条件1、互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。2、占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。3、不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来。4、循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。 2020-12-21 编程语言 > Java > 性能调优 #死锁排查
算法篇-银行家算法 算法定义 银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。 123456789在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应 2020-12-20 基础算法 > 算法笔记 #银行家算法
资料篇-Java学习资料汇总 学习路线architect-awesome 相关书籍Java 技术书籍大全 教学视频访问码:c8hx 面试相关语雀-阿提说说 技术纲要互联网应用服务端的常用技术思想与机制纲要 Java 技术书籍大全推荐书籍可以点击 -> 点击这里 书籍列表 -> 点击这里 入门书籍 基础书籍 多线程与并发 网络编程 数据结构 语言基础 进阶 性能优化 响应式编程 JVM虚拟机 代码&am 2020-12-14 学习资源 #学习资料
DevOps篇-Nginx配置SSL 获取证书 上传证书证书内容 1234567891011121314151617./├── Apache│ ├── 1_root_bundle.crt│ ├── 2_yangbiao.ink.crt│ └── 3_yangbiao.ink.key├── IIS│ ├── keystorePass.txt│ └── yangbiao.ink.pfx├── Nginx│ ├── 2020-12-09 基建相关 #Nginx
工具篇-Mermaid使用教程 Mermaid简介mermaid 美人鱼, 是一个类似 markdown,用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具,您可以在文档中嵌入一段 mermaid 文本来生成 SVG 形式的图形 比如插入下面的代码 编写代码 12graph TD Start --> Stop 生成图示 graph TD Start --> Stop 编写代码 1 2020-12-07 其他内容 #Mermaid
DevOps篇-Travis-CI环境搭建 环境准备 github账号 dockerhub账号 Travis-CI账号 开启服务进入Travis-CI官网开启服务 安装Travis12345678910sudo apt-get -y updatesudo apt-get -y install build-essential zlib1g-dev libssl-dev libreadline6-dev libyaml-devcd /tm 2020-12-06 基建相关 #CI/CD
Linux篇-select/poll/epoll源码分析 I/O复用使得程序同时监听多个文件描述符 通常网络程序在以下情况需要使用到I/O复用 客户端程序(用户进程)要同时处理多个socket 客户端程序要同时处理用户输入和网络连接 TCP服务要同时处理监听socket和连接socket(这是I/O复用最多的场景) 服务器需要同时处理TCP请求和UDP请求 服务器要同时监听多个端口,或者处理多种服务 Linux下实现I/O复用的系统调用主 2020-12-03 基建相关 > 服务器篇 > Linux服务器 #I/O
Linux篇-select/poll/epoll详解 用户态和内核态 首先,我们明确一个概念,Linux所谓的用户态和内核态,本质是对CPU提供的功能的一层封装抽象。现代CPU,其设计目标主要是为了完美高效的实现一个多任务系统,多任务系统的三个核心特征是:权限分级、数据隔离和任务切换。以X86_64架构为例,权限分级通过CPU的多模式机制和分段机制实现,数据隔离通过分页机制实现,任务切换通过中断机制和任务机制(TR/TSS)实现。 然后,给内 2020-12-02 基建相关 > 服务器篇 > Linux服务器 #I/O