DataStructure-Tree
常见二叉树类型完美二叉树(满二叉树)除了最底层外,其余所有层的节点都被完全填满。在 完美二叉树中,叶节点的度都为0,其余所有节点的度都为2,如果树的高度为h,那么节点总数是2^h+1^ - 1。
如图
完全二叉树只有底层没有被填满,且最底层节点尽量靠左填充。
完满二叉树除了叶子节点之外,其余所有节点都有两个子节点。
平衡二叉树任意节点的左子树和右子树的高度之差绝对值不超过1
二叉树如果没有特殊限制(例如平衡二叉树)的话,可能会成为线性结构。即子节点要么全部在左子树,要么全部在右子树。
二叉树遍历层序遍历(广度优先遍历)
一般通过队列实现,队列遵循“先进先出”的规则,广度优先是“逐层推进”十分相似。
代码示例如下:
1234567891011121314151617/* 层序遍历 */List<Integer> levelOrder(TreeNode root) { // 初始化队列,加入根节点 Queue<TreeNode> queue = new LinkedList<>(); queue.add(ro ...
MySQL-Index
索引篇为什么Mysql InnoDB选择B+树作为索引数据结构?1、B+ Tree VS B Tree
B+树只有在叶子节点才存储数据,非叶子节点只存储索引,B树的非叶子节点也要存储数据,所以B+树的单个节点的数据量更小,在相同I/O次数下,能查询更多的节点。
B+树是双链表连接,适合MySQL中基于范围的顺序查找,但是B树不行。
2、B+ Tree VS 二叉树
B+Tree的搜索复杂度是O(logdN),d表示节点的最大子节点个数,一般大于100,这样可以保证在千万级别的数据量下,B+Tree高度依然保持在34层左右,即一次数据查询操作一般只需要34次I/O操作即可查询到目标。
二叉树节点的子节点最多两个,所以搜索复杂度是O(logN),因此搜索一条数据在二叉树里面的I/O操作次数远高于B+Tree。
3、B+Tree vs Hash
Hash在进行等值查询的时候效率是O(1),但是Hash不适合做范围查询。
主键索引,唯一索引,普通索引,前缀索引,联合索引
主键索引
一张表只有一个主键索引
不能为空,NOT NULL
唯一索引
一张表可以有多个唯一索引,但是索 ...
MySQL-Transaction
事务篇:事务的四大特性:1、原子性:一个事务要么全部完成要么全部不完成,不会结束在中间的某个环节而且事务再执行过程中发生错误,会被回滚到事务开始前的状态。
2、一致性:事务操作前后,数据满足完整性约束,数据库保持一致性状态。
比如:用户A和用户B在银行分别有800和600,总共1400元,用户A给用户B转账200元,分为两步,从A账户扣除200变成600,B账户增加200变成800,而不会出现A账户扣除,B账户没有增加的情况。
3、隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据的时候不会相互干扰,每个事务都有一个数据空间,对其他并发事务是隔离的。
比如:消费者之间的消费不会互相影响。
4、持久性:数据处理结束之后,对数据的修改永久化存储,即便系统故障也不会丢失
并行事务引起的问题
脏读
如果一个事务读到了另外一个事务未提交的修改过的数据,就是脏读。
比如:事务A和事务B同时在处理,事务A对余额进行修改但是还没有提交,事务B此时读取数据,读到了事务A还没有提交的修改后的 ...
Docker使用
帮助启动类命令
镜像命令
docker images
罗列出docker的所有的镜像相关信息
docker search 某个xxx镜像的名字
在hub仓库查询是否有相关的镜像 –limit 默认罗列前25个
docker pull 某个xxx镜像名[:tag]
tag:表示版本号
docker system df 查看镜像/容器/数据卷所占空间
docker rmi 某个xxx镜像的id或者名字 -f强制删除
docker rmi hello-world 或 docker rmi 9c7a54a9a43c删除多个:
docker rmi -f 镜像名1:tag 镜像名2:tag....
docker rmi -f $(docker images -qa)
什么叫虚悬镜像?
仓库名、标签都是的,俗称虚悬镜像,通常会把他删掉
微布开发-微信三方接口文本校验校验开发思路
根据文档要求总结分为以下的情况:
文本内容正常 (suggest: “pass”, label: 100):
情况处理:如果文本内容被判定为正常,可以允许发布该文本内容。
文本内容命中关键词,但不违规 (suggest: “pass”, label: 20006):
情况处理:如果文本内容命中自定义关键词但不违规,可以允许发布该文本内容,同时可能根据需要记录命中的关键词和概率信息。
文本内容建议审核 (suggest: “review”):
情况处理:如果文本内容被建议进行审核,您可以将该内容设置为待审核状态,让人工审核来决定是否发布该内容。
文本内容命中违规标签 (suggest: “risky”):
情况处理:如果文本内容被判定为违规,应禁止发布该内容,并通知用户违规原因。
文本内容属于广告 (label: 10001):
情况处理:如果文本内容被判定为广告,应禁止发布该内容,并通知用户不允许发布广告内容。
文本内容属于色情、辱骂、违法犯罪等 (label: 20002, 20003, 20006等):
情况处理:如果文本内容被判定为色情、辱骂、违法犯罪等,应禁 ...
备份hexo-U盘篇
新机环境搭建 1、安装Node.js
2、安装Git
3、新建存放Blog的文件夹
拷贝旧机器中得文件/文件夹123456_config.ymlpackage.jsonscaffolds/source/themes/其中/代表拷贝的是文件夹
安装模块右键打开Git bash,依次输入下列命令之后,安装相关依赖
12345678910111213141.安装hexo npm install -g hexo2.本地测试的时候需要用hexo server npm i hexo-server3.将文章部署到github上的模块 npm install hexo-deployer-git --save4.安装RSS插件 npm install hexo-generator-feed --save5.添加Sitemap,加速网页收录速度 npm install hexo-generator-sitemap --save
本地查看效果12hexo cleanhexo s -g == hexo g + hexo s
在浏览器打开http://loc ...
网络基础篇
TCP/IP网络模型有哪几层?应用层: 用户直接接触到的就是应用层,应用层专注于用户提供应用功能,例如:HTTP、FTP、DNS、Telnet、SMTP等。
应用层工作在操作系统中得用户态,传输层及以下则工作在内核态。
传输层 应用层的数据包会传给传输层,传输层是为应用层提供网络支持。传输层的两个协议:TCP和UDP。
TCP(传输控制协议),TCP相较于UDP的特性,比如:流量控制,超时重传,拥塞控制等,为了保证数据包能可靠的传输给对方。
UDP只负责发送数据包,不保证数据包是否能抵达对方,但是实时性相对较好,传输效率也较高。如果要实现UDP的可靠传输,可以把TCP的特性在应用层实现。
应用传输数据过大,传输层的数据包大小超过MSS(TCP最大报文段长度),需要将数据包分块,如果中途有一个分块丢失或损坏,只需重新发送此分块即可,而不需要发送整个数据包。在TCP协议中,每个分块称为一个TCP段(TCP Segment)。
传输层负责把数据 ...
面经-巴比特一面
Netty的pipeline基于什么设计模式?Netty的拆包和粘包为什么不用自增id而是采用雪花算法?介绍一下HashMap和concurrentHashMap对比一下String a = new (“abc”)和String a =”abc”什么叫死锁?Bean的生命周期Bean的循环依赖怎么解决?
面经-快狗打车实习一面
Redis的基本数据结构以及应用场景Redis的缓存雪崩、击穿以及穿透Redis的高可用,如哨兵机制、主从复制Redis的内存淘汰策略Redis的持久化MySQL的引擎区别主要是MyISAM和InnoDBMySQL为什么要用B+树?(可以跟B树、HASH树进行比较)MySQL的索引失效?微布校园存储说说列表是用的什么Redis数据结构?微布校园怎么保证Redis和数据库一致性问题?