zoukankan      html  css  js  c++  java
  • ARTS-2

    ARTS的初衷

    • Algorithm:主要是为了编程训练和学习。每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 - 酷 壳 - CoolShell
    • Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。所以,需要你阅读并点评至少一篇英文技术文章,我个人最喜欢去的地方是http://Medium.com(需要梯子)以及各个公司的技术blog,如Netflix的。
    • Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。
    • Share:主要是为了建立你的影响力,能够输出价值观。分享一篇有观点和思考的技术文章。

    作者:陈皓
    链接:https://www.zhihu.com/question/301150832/answer/529809529
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    Algorithm

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

    设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

    注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

    示例 1:

    输入: [7,1,5,3,6,4]
    输出: 7
    解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
    随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
    示例 2:

    输入: [1,2,3,4,5]
    输出: 4
    解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
    注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
    因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
    示例 3:

    输入: [7,6,4,3,1]
    输出: 0
    解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
    来源: https://leetcode-cn.com/explore/featured/card/top-interview-questions-easy/1/array/22/

    # 审题很重要,第一次看这题的时候,一直在想怎样模拟出最佳交易策略;然而我们只是计算最大收益,这个是上帝视角的,只要做一下前后对比即可。
    class Solution:
        def maxProfit(self, prices: List[int]) -> int:
            profit = 0
            length = len(prices)
            for i in range(0, length - 1):
                j = i + 1
                fake_profit = prices[j] - prices[i]
                if fake_profit > 0:
                    profit += fake_profit
            return profit
    

    Tip

    官方维护的软件仓库总有不够用的时候,有时会遇到需要自己打软件包的情况,掌握这项技能还是很必要的。

    1. deb打包

    参考资料:deb打包教程

    # 打包anaconda的简单示例,操作都在Package目录下进行
    mkdir anaconda # 新建anaconda包的fake-root目录,软件包需要用到的所有文件都放在该目录下
    mkdir anaconda/DEBIAN # 新建包信息目录
    cat anaconda/DEBIAN/control # 配置信息示例
    
    Package: anaconda3-diy
    Version: 4.3.1-20191113
    Section: unknown
    Priority: optional
    Depends:
    Suggests:
    Architecture: amd64
    Installed-Size: 9071876
    Maintainer: chang.yaocheng
    Provides:
    Description: Anaconda diy
    
    ls anaconda3 # anaconda3的目录内容
    DEBIAN home usr
    
    dpkg-deb -b anaconda3 anaconda3-amd64.deb # 开始打包
    

    Review & Share

    目前还做不到分享一篇有观点和思考的技术文章,那就先做好积累吧。

    物理机迁移kvm方案调研

    最近公司搞成本优化,需要迁移一批物理机到kvm虚拟机。苦于迁移成本太高,对于环境复杂的机器,一人力一天只能迁移个1到2台。于是,我便寄希望于将物理机直接虚拟化的方案,希望能够降低迁移成本。
    现有的迁移方案基本分类两类:

    1. Hot migration,不停机迁移,这类方案要求物理机上的数据相对固定(Recommended for static data);
    2. Cold migration,关机迁移,这类方案基本上是从livecd这类系统启动,对整个硬盘做镜像。
      维基百科上列举了一些成熟的方案和工具,它们适用的场景各有不同,多数是cold migration。

    hot migration的可行性

    现有业务场景下,想要的是hot migration,所以重点看hot方案的可行性。
    网上搜索了半天, 找到几个可行的方案,很多方案实际上还是cold migration,只不过停机时间很短。

    1. kvm官方虚拟机跨物理机迁移文档,记录作为参考。
    2. 先使用rsync同步大部分数据,停止服务继续同步变化后的文件,最后修正虚拟机的引导和fstab:Manual P2V of Debian Sarge
    3. P2V Migration with Post-Copy Hot Cloning for Service Downtime Reduction,这篇论文提出了利用内核模块同步文件块改动的方式来在线clone物理机的磁盘,实现成本比较高,且还是需要手动调整配置,修复引导。
    4. 停服务不关机,使用dd拷贝整个磁盘:Converting a running physical machine into a KVM virtual machine
    5. 使用tar打包,根据机器上的具体服务器要的,exclude非必要的文件夹:链接
      以上方法都存在,不可自动化和成功率难保证的问题(需要手动配置引导、热拷贝的数据难保证完全一致),所以无法在实际生产环境中使用。

    cold migration

    cold migration有很多成熟的方案和工具,可参考维基百科,该类方法理论上可以做到半自动化,但是操作成本高,需要重启服务器,同样不适用于我碰到的问题。

    1. virt-p2v
      http://libguestfs.org/virt-p2v.1.html

    结论

    初步结论,系统级别的hot migration实现成本高,无成熟解决方案(包括商业和开源)。现有成熟方案都是 cold migration。
    由于没有停机迁移的条件,想要降低迁移成本的话,从新机器环境配置上下功夫更靠谱。

    1. tar大法可以尝试下,迁移一部分看成本能否接受
      https://www.kancloud.cn/ivandu/linux/405447
    2. 调研使用saltstack或者shell脚本快速同步配置的方法
  • 相关阅读:
    【模板】Sparse-Table
    UVa 11235 Frequent values
    【模板】树状数组
    UVa 1428 Ping pong
    数学技巧
    UVa 11300 Spreading the Wealth
    UVa 11729 Commando War
    UVa 11292 Dragon of Loowater
    POJ 3627 Bookshelf
    POJ 1056 IMMEDIATE DECODABILITY
  • 原文地址:https://www.cnblogs.com/carlsplace/p/11878940.html
Copyright © 2011-2022 走看看