zoukankan      html  css  js  c++  java
  • ARTS-WEEK-015

    Algorithm:

    94: Binary Tree Inorder Traversal

    530: Minimum Absolute Difference in BST

    使用递归实现二叉树的前中后序遍历非常容易,进阶要求使用循环则麻烦一些,手动操作栈需要注意逻辑组织,官方题解更为简洁但是更难理解,需要多加练习;此外还有 Morris Traversal 方法,可以做到 O(1)空间,重点是几条规则,1左右子节点分支,2左节点分支中,找到中序遍历中的前序节点p(排除当前节点),将其指向当前节点,继续分支,3如果p.right不是空说明是第二次遍历到,进行清除和输出,否则继续操作下一个节点,作为一种多条规则的算法需要多加练习和记忆。

    Review:

    MEASURING TIME: FROM JAVA TO KERNEL AND BACK

    LockSupport.parkNanos() Under the Hood and the Curious Case of Parking

    这两篇文章都是一个名为 Jaromir Hamala 的人写的,同样的风格:因为一些疑问,深入分析JDK源码、glibc直到内核源码。在这个过程中展示了各层调用逻辑、系统调用、内核实现,最终发掘到内核层面问题,即第一篇的 Xen 虚拟时钟问题和第二篇的高精度时钟参数问题。在这个过程中还提供了一系列 perf 工具示例,很值得参考和学习。

    Tip:

    Java并发编程的艺术 - 第5章 Java中的锁

    Java中的锁(包括各类Lock、Condition、CountDownLatch等相关组件)是如何实现的?Java 提倡的面相对象与封装抽象,好的类库设计让使用和实现分离,即使经常使用的 Api,也很容易对其如何实现却所知甚少。

    Java 并发类库中提供了一个叫队列同步器 AbstractQueuedSynchronizer 的组件,帮助实现锁和其他同步组件,一方面 AQS 使用一个int变量表示同步状态、一个FIFO队列完成线程排队、condition队列实现不同条件的线程排队。另一方面 AQS 使用模板方法模式,并提供了 getState、setState、compareAndSetState 等操作方法,使用者继承 AQS 后重写 tryAquire 和 tryRelease 非阻塞逻辑,AQS 完成排队和唤起操作,可以大大简化正确实现锁的难度。

    在实现不同类型的锁时,面临不同需求,比如独占式获取、共享式获取、独占和共享混合(读写锁用高低位使用一个state)、重入锁(定义state增加和减少)、公平锁(非公平支持快速尝试提高性能,公平锁则必须进入队列排队)、超时获取(增加parkNanos)等等。

    相比于不理解前的神秘感,AQS 源码底层技术无外乎 volatile 的内存屏障和可见性保证、CAS 结合 SPIN 自旋实现原子操作、park 和 interrupt 实现的等待和唤醒。

    Share:

    Why You Can't FOCUS - And How To Fix That

    重点:

    1. 集中注意力到一件事,不要同时处理多件事
    2. 主动避免分心和打断,即时临时中断也需要上下文切换
    3. 照顾好身体,睡眠、锻炼、营养、缺水都直接影响注意力
    4. 锻炼集中注意力技能,从少到多持续练习
    5. 习惯的力量,比如每天早起集中一小时等,不要等待有动力、一切都安排好再尝试专注,用习惯自动化,而番茄时间也是一种习惯化工具
    6. 休息和减少刺激,比如用散步、冥想等代替视频和资讯的刺激,后者会持续消耗精神能量
  • 相关阅读:
    有关云计算的思考
    转载:args build and execute command lines from standard input
    云计算时代来临
    How to check the service availble
    反射小结
    JOptionPane用法java
    eclipse快捷键调试总结
    javascript 控制 html元素 显示/隐藏
    "ORA00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法
    麻辣豆腐与编码
  • 原文地址:https://www.cnblogs.com/pyx0/p/13876649.html
Copyright © 2011-2022 走看看