ARTS - Week 13

ARTS - Week 13

ARTS 是耗叔发起的一项活动,每周完成以下内容:

Algorithm - 至少做一个 LeetCode 上的算法题
Review - 阅读并点评至少一篇英文技术文章
Tip - 学习至少一个技术技巧
Share - 至少分享一篇有观点和思考的技术文章

Algorithm

LeetCode Problems 25 - Implement Stack using Queues

Implement Stack using Queues

Difficulty: Easy

Solution

使用两个栈实现队列的结构

# Python

class MyQueue(object):

    def __init__(self):
        self.stack1 = []
        self.stack2 = []

    def push(self, x):
        self.stack1.append(x)

    def pop(self):
        if self.stack2:
            return self.stack2.pop()
        elif self.stack1:
            while self.stack1:
                self.stack2.append(self.stack1.pop())
            return self.stack2.pop()

    def peek(self):
        if self.stack2:
            return self.stack2[-1]
        elif self.stack1:
            while self.stack1:
                self.stack2.append(self.stack1.pop())
            return self.stack2[-1]

    def empty(self):
        return not self.stack1 and not self.stack2

运行结果

Python:
Runtime: 16 ms.
Your runtime beats 100.00 % of python3 submissions.
Memory Usage: 10.6 MB
Your memory usage beats 94.55 % of python submissions.

LeetCode Problems 225 - Implement Stack using Queues

Implement Stack using Queues
Difficulty: Easy

Solution

使用两个队列实现栈的结构

# Python

class MyStack(object):

    def __init__(self):
        self.queue1 = []
        self.queue2 = []

    def push(self, x):
        self.queue1.append(x)
        self.top = x

    def pop(self):
        while len(self.queue1) > 1:
            self.queue2.append(self.queue1.pop(0))

        element = self.queue1.pop()
        self.queue1 = self.queue2
        self.queue2 = []

        return element

    def top(self):
        return self.top

    def empty(self):
        return not self.queue1

Review

So you want to be a wizard - by Julia Evans

本文是作者一次演讲实录,主要探讨了如何才能成为更好的工程师。

  1. understand your systems
    • Linux、TCP/IP、AWS、HTTP
    • 为什么这么重要:
      • 只有理解了这些底层原理,才能和其他工程师无缝交流
      • 可以解决更艰难的问题
      • 可以创新设计更好的系统
    • 如何学习底层原理:
      • 先学习基本概念
      • 做实验,例如写一个小的系统,故意耗尽系统内存(顺便发现了作者的博客里,有实作小的系统组件,需要持续关注学习)。这些实验不需要特别完美,也不需要能运行,但肯定能学到很多东西
      • 通过书本来学习(Networking for System Administrators & Linux Kernel Development.)
      • 阅读对自己来说很难以理解的内容或演讲
      • 在日常工作中发现自己以前并没有精通的内容
      • 善于怀疑自己,更新自己的知识图谱
      • 要有耐心,现在不知道所有的内容是很正常的。"learn to program in 10 years"
  2. ask great questions
    • 先陈述自己知道什么
      • 有助于组织自己的想法
      • 能自我发现理解错误的地方
      • 能避免自己的问题太基础或者太艰深
    • 询问只是比自己更多一点经验的同事会更好
      • 减少最有经验同事的负担
      • 使被询问者也能获得新的认知
    • 事先做一些研究能让我们得出更复杂和有趣的问题
    • 公开提问
  3. read the code
    • 对于你所熟悉的小项目,阅读源码会更有效
    • 对于大型项目,阅读和自己问题相关的部分
  4. debug like a wizard
    • 电脑中发生任何 bug 都是有逻辑原因的
    • 解决 bug 有助于我们更好的理解系统原理
    • 善用优秀的 debug 工具
  5. wirte down a design
    • 使我们认识到为什么这个项目很重要
    • 它是怎么影响其他项目组的
    • 我们怎么能知道它有效果
  6. understand the big picture
    • 有助于做出技术选型

Tip

学习到了 Linux 系统中的以下指令和性能工具

  1. watch -d uptime-d会高亮显示变化的区域;uptime 用于显示平均负载
  2. mpstat -P ALL 5 多核cpu性能分析工具,-P ALL 表示监控所有 CPU,5表示每5秒刷新一次数据
  3. pidstat -u 5 1进程性能分析工具,-u 显示 cpu 利用率。每5秒输出一组数据,观察哪个进程 %cpu 很高

# ARTS 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×