05 2022 档案
摘要:1. Java基础(1)——ThreadLocal 1.1. ThreadLocal ThreadLocal是一个泛型类,当我们在一个类中声明一个字段:private ThreadLocal<Foo> threadLocalFoo = new ThreadLocal<>();时,这时候,即使不同的线
阅读全文
摘要:1. 任务调度器 这道题一上手会犯直接找模拟方法,然后根据模拟方法来得出结果。也不是说直接找模拟方法不对,只是说一开始没有更深入的思考的话,模拟方法很可能是错的,导致浪费时间,像这种题,要注意其中的极限思想,比如这道题,假如其他变量不动,把等待间隔不断调大会发生什么?然后出现变化的分界点是什么?按照
阅读全文
摘要:1. Netty源码研究笔记(4)——EventLoop系列 EventLoop,即事件驱动,它是Netty的I/O模型的抽象,负责处理I/O事件、任务。 不同的EventLoop代表着不同的I/O模型,最重要、最主要的是NioEventLoop,表示多路复用的I/O模型,对应jdk的NIO。 Ni
阅读全文
摘要:1. Netty源码研究笔记(3)——Channel系列 依旧是通过先纵向再横向的研究方法,在开篇中,我们发现不管是Sever还是Client,最终的启动是通过调用channel的对应方法来完成的,而这个动作实际在channel绑定的eventLoop中执行。 接下来,我们继续EchoSever、E
阅读全文
摘要:1. Netty源码研究笔记(2)——Bootstrap系列 顾名思义,Bootstrap是netty提供给使用者的脚手架,类似于Spring的ApplicationContext,通过Bootstrap我们使用一些自定义选项,将相关的组件打包起来,从而快速的启动服务器、客户端。 Bootstrap
阅读全文
摘要:1. Netty源码研究笔记(1)——开篇 1.1. Netty介绍 Netty是一个老牌的高性能网络框架。在众多开源框架中都有它的身影,比如:grpc、dubbo、seata等。 里面有着非常多值得学的东西: I/O模型 内存管理 各种网络协议的实现:http、redis、websocket等等
阅读全文
摘要:1. 判断t1树是否包含t2树的所有拓扑结构 1.1. 问题 给定彼此独立的两棵树头节点分别为 t1 和 t2,判断 t1 树是否包含 t2 树全部的拓扑结构。 1.2. 思路 题目这里没有要求时间复杂度。所以就可以用最简单的方法,以t1树上的所有节点都作为根节点和t2比对一次,直到成功一次。 比对
阅读全文
摘要:1. 判断二叉树是否为平衡二叉树 平衡二叉树 1.1. 问题 平衡二叉树的性质:要么是一棵空树,要么任何一个节点的左右子树的高度差的绝对值不超过1,。 给定一个二叉树的头结点head,判断这棵二叉树是否为平衡二叉树。如果二叉树的节点数为N,要求时间复杂度为O(N)。 1.2. 思路 这道题比较简单,
阅读全文
摘要:1. 判断一棵二叉树是否为搜索二叉树和完全二叉树 验证二叉搜索树 二叉树的完全性检验 1.1. 问题 给定二叉树的一个头节点 head,已知其中没有重复值的节点,实现两个函数分别判断这棵二叉树是否为搜索二叉树和完全二叉树。 1.2. 思路 判断是否是搜索二叉树可用中序遍历一遍,倘若是递增序列,则为搜
阅读全文
摘要:1. 根据有序数组生成平衡搜索二叉树 1.1. 问题 给定一个有序数组,生成一个平衡搜索二叉树。 注:平衡二叉树的定义是,对于该二叉树的每个子树,该子树的左子树高度和右子树高度差在1之内。 1.2. 代码 这道题很简单,二分递归即可。 public TreeNode<Integer> buildBS
阅读全文
摘要:1. 统计完全二叉树的节点数 1.1. 问题 如题。 注:完全二叉树表示二叉树内没有空隙;满二叉树是一种特殊的完全二叉树,其所有的叶子节点均在同一层上。 1.2. 思路 方法一:遍历 最简单的做法:遍历一次。时间复杂度为O(n)。 方法二:高度探查 用高度探查方式的时间复杂度为O(h^2)。 当我们
阅读全文
摘要:1. 二叉树的序列化、反序列化 1.1. 问题 将一个二叉树序列化为字符串。 从序列化后的字符串重建一棵二叉树。 1.2. 思路 用#表示空节点,用!表示一个节点的结尾。 这道题可以用二叉树的前序遍历、后序遍历、层序遍历来做。 中序遍历不好做,因为给定一个序列后,没办法一下子将根节点找出来。 对于前
阅读全文
摘要:1. Morris遍历 1.1. 思路 Morris遍历通过利用左子树前序遍历下的最后一个节点的right指针,来做到以时间复杂度为O(n)空间复杂度为O(1)的开销遍历一个二叉树。 1.2. 代码 public static <T> void morrisPre(TreeNode<T> root,
阅读全文
摘要:1. 二叉树遍历 1.1. 问题 分别用递归、非递归的方式实现二叉树的前序、中序、后序遍历。 1.2. 思路 递归的方式就不用说了,很简单。 对于非递归的方式,我们需要用一个栈来模拟,递归函数的方法嵌套。 非递归的前序遍历还挺容易写出来的,在中序遍历这里我卡壳了。 最后看书,发现是用一个cur游标来
阅读全文
摘要:1. 动态规划心得总结 1.1. 常规情况的基本步骤 给出递推函数定义 找出递推函数的递推关系 根据递推关系可以写出递归版本的代码 根据递推关系可以写出打表法的动态规划版本的代码 1.2. 给出递推函数的定义 & 找出递推关系 基本步骤中的第一步、第二步是紧密关联的。递推函数定义的不同会导致递推关系
阅读全文