手撕1:生成逆波兰表达式

  1. https://blog.csdn.net/signsmile/article/details/2877729
  2. https://www.cnblogs.com/feika/p/3607431.html

逆波兰表达式的生成与计算 普通表达式一般由数字、变量与+-/()运算符号组成。 例如:(a+b)3 - (a-b)/2 其逆波兰表达式是: a b + 3 * a b - 2 / - 本质上,普通表达式是中序表达式,逆波兰表达式是后序表达式。

  1. 由普通表达式生成逆波兰表达式
    1. 初始化1个逆波兰字符串变量outstr,以及1个符号栈;自左向右输入表达式串;
    2. 如果当前字符为数值或变量,则直接添加到逆波兰字符串后 outstr,小数点亦算入数字串;
    3. 如果该字符是运算符,则按如下操作:如果该字符是左括号“(”,则该字符直接压入运算符栈。如果该字符是右括号“)”,则把运算符栈顶元素弹出直至第一次遇到左括号。如果该字符是算术运算符且其优先关系高于运算符栈顶的运算符,则将该运算符入栈。否则,将栈顶的运算符从栈中弹出至结果字符串末尾,直至栈顶运算符的优先级低于当前运算符,并将该字符入栈;
    4. 遇到结束符号时,逐项从栈中pop运算符项;
  2. 计算逆波兰表达式的值
    1. 自左向右输入逆波兰表达式串;
    2. 如果当前为操作数,则直接压入栈;
    3. 如果当前为运算符号,则从栈顶两个进行计算,并将计算结果压入栈中;
    4. 最后从栈中pop出最终运算结果。

手撕2:力扣224. 基本计算器

如果你要继续做告警平台的工作,还有什么可以优化的?

平衡二叉树和红黑树的区别,优缺点?高度为n的平衡二叉树的节点最少是多少?怎么得出这个公式的?

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 最小平衡二叉树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。 其中F(2) = 2, F(1) = 1; 故而:F(5)= 3F(2) + 2F(1) + 4 = 12.

调用多个RPC时有什么选型吗?协程、线程池、epoll?RPC最耗时的环节是哪部分?(RPC耗时集中在网络等待、超时阻塞、内核协议栈)怎么用epoll或异步IO优化RPC的网络等待?(使用 epoll+协程/线程池 优化RPC的网络等待时间,IO多路复用+异步回调,不需要同步阻塞等待RPC返回浪费时间增加延迟)