arts-2019-05-05

Algorithm 算法题

每周至少做一个leetcode 的算法题

https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
236. 二叉树的最近公共祖先

思路:

  1. 将二叉树转化为数组。
  2. 在数组中找到两个元素下标。
  3. 循环比较下标,(大的下标 - 1) / 2。

结果超时。。。

总结:遍历整棵树 O(n) + 找两个下标 O(n) + 循环比较 2O(logn)

改用直接迭代的方式,看当前节点的左节点和右节点哪个是,如果都是则返回 root,如果都不是则返回空。

Review 外国文章

阅读并点评至少一篇英文技术文章

https://geemus.gitbooks.io/http-api-design/content/en/index.html
HTTP API Design Guide

学习 HTTP API 设计

Technique 技巧总结

学习至少一个技术技巧

Firefox Multi-Account Containers
https://addons.mozilla.org/en-GB/firefox/addon/multi-account-containers/

允许设置当前 tab 所属容器。
使用场景,依赖 cookie 登录的网站同时登录多个账号。

Share 思考分享

至少分享一篇有观点和思考的技术文章

  • python之import机制详解,https://www.jb51.net/article/51815.htm
  • 第八章 模块和包,https://wiki.woodpecker.org.cn/moin/PythonEssentialRef8

在写测试用例 mock.patch 包时遇到了问题,当时临时解决了。
今天看了 python 包引用从原理角度更加明晰了一些:

  • sys.modules 结构为 dict:
    • key,包名称。
    • value,module 对象。包对象有__path__属性,指向其物理位置。
  • 包类型有两种:
    • 目录型,目录下要有 __init__.py 文件。引入时,执行__init__.py文件。
    • 源代码文件,可以定义对象(变量,类,函数等,导入时都变成了对象),引入包。引入时,执行该文件。
  • 代码引入时,执行顺序如下:
    • 看 sys.modules 是否已经包含该包名称,已包含直接返回包对象。
    • 如果不存在,创建一个包对象,执行包文件引入,并填充__dict__
2019-05-05 21:53 11
Comments
Write a Comment