ARTS(03)

什么是 ARTS?

  1. 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习
  2. 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平
  3. 技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点
  4. 分享(Share):分析一篇有观点和思考的技术文章,建立影响力,输出价值观

** 时间周期:**

2022 年 1 月 17 日至 1 月 16 日

一:算法:

0021. 合并两个有序链表
题目描述:

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

前置知识

  • 递归
  • 链表
    递归思路
    递归合并节点,当前节点谁小,就让这个较小的节点的next和另一个链表继续递归合并,直到两个链表有一个的next不存在了,那就是无法分割问题了,只能返回
    复杂度:
  • 时间复杂度O(m+n), m、n为两个链表的长度,每次递归排除掉一个节点,总递归次数是m+n
  • 空间复杂度O(m+n),递归栈空间

关键点

  • 掌握链表数据结构:
    • 06 | 链表(上):如何实现LRU缓存淘汰算法?-极客时间
    • 07 | 链表(下):如何轻松写出正确的链表代码?-极客时间
    • 链表专题:https://leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/thinkings/linked-list
    • 力扣
  • 考虑边界情况

代码

JavaScript 实现及其拓展资料

const mergeTwoLists = function (l1, l2) {
  if (l1 === null) {
    return l2
  } else if (l2 === null) {
    return l1
  } else if (l1.val < l2.val) {
    l1.next = mergeTwoLists(l1.next, l2)
    return l1
  } else {
    l2.next = mergeTwoLists(l1, l2.next)
    return l2
  }
}

Java 实现及其拓展资料

  • java 链表:NodeList (Java Platform SE 8 )
class Solution {
  public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    if (l1 == null) {
      return l2;
    } else if (l2 == null) {
      return l1;
    } else if (l1.val < l2.val) {
      l1.next = mergeTwoLists(l1.next, l2);
      return l1;
    } else {
      l2.next = mergeTwoLists(l1, l2.next);
      return l2;
    }
  }
}

二:阅读,英文技术文章

  1. Software Engineer roadmap via books | by Jake Russell | Dec, 2021 | Medium
  2. 37 Years of Microsoft Windows Control Panels Design History - 14 Images - Version Museum

三:技巧

json格式化:JSON在线解析及格式化验证 - JSON.cn
这是一个 json 在线解析的网站,是我最常使用的一个网站。
功能包括了:json 在线解析,json 格式化,json 格式验证,json 转 xml,xml 转 json,json 压缩,json 转义,js 混淆加密,JSON 转实体,json 在线,JSON 校验。

四:分享

加班与效率 | 酷 壳 - CoolShell

  1. 这篇文章在说什么?
    1. 关于加班:认为加班好似公司的核心竞争力,或是超越对手的手段,是一种相当愚蠢的想法。这说明管理者们已经想不到自己公司的核心价值了。
    2. 关于效率:效率是单位时间内和人数产生的价值。而不是单位时间单位人数下干更多的活,效率不会死比谁干的多,而是比谁干的活有更大的价值。所以,提高效率,并不是加人,也不是干更多的活,而是,你这么多人干出来了多少有价值的东西。
  2. 作者具体说了什么,怎么说的?
    1. 关于加班,
      1. 举了微博上的一个案例
      2. 产品的发展不是短跑,而是长跑,甚至更像登山,登山比的不是快,比的是策略,比的是意志,目的是登顶。
        3.《 Rrwork》摘录及感想提提到过两点:
        1. 条件受限是好事,因为条件受限可以让你小材大用,让你没有办法再用蛮力来完成工作,让你必须去思考使用知识密集型的解决方案来更聪明的解决问题
        2. 工作狂往往不得要领。他们花大把大把时间去解决问题,他们以为能靠蛮力来弥补思维上的惰性,其结果就是折腾出一堆粗糙无用的解决方案。
    2. 关于效率
      1. 效率的物理公式是:有用功/总功。即效率就是:单位时间和人数产生的价值。
      2. 那么要做到三点来满足效率公式
        1. 增加有用功
          1. 你得多问问你的需求方,为什么要加这个需求?干这个事到底有多大的价值?能让多少人受益?
          2. 你得要多思考一些,业务上和用户的最大的痛点是什么?
          3. 现在提的10个需求,只能做3个,会是哪3个?为什么是这3个?有用功的来源不是拼命做需求,而是砍需求
        2. 降低总功
          1. 多问问自己,有多少时间是在干一些支持性而不是产出性的工作?
          2. 多问问自己,有没有冷酷无情的减少重复劳动的劳动密集型的工作?
          3. 多问问自己,自己的管理者和员工的能力和素质有没有在降低你的团队执行的成本?
        3. 形成合力
    3. 如何平衡加班和效率,可以用一种T-shirt估计的方式
      1. 产品经理会对每一条需求评估业务上的影响力,比如:XXXL影响一千万人以上的市场,XXL影响百万用户,后边XL、L、M、S依次类推
      2. 开发团队也一样,要评估投入的人员时间成本,XXXL表示要干一年,XXL干半年,XL要干三个月,L干两个月,M干一个月,S两种等等。
      3. 于是就评选出了优先级
        1. 当业务影响力是XL,时间人员成本是S,这是最高优先级
        2. 当业务影响力是M,时间人员成本是M,这是低优先级
        3. 当业务影响力是S,时间人员成本是XL,直接砍掉这个需求。因为是亏的
        4. 当业务影响力是XXL,时间人员成本是XXL,需要简化需求,把需求简化为XL,时间人员成本变成以下。
  3. 说的有道理吗?是全部有道理,还是部分有道理?
    1. 关于加班,就我个人而言,是部分有道理。至少在2022年,不少公司的技术需求只是做业务,并没有深挖技术的需求,但是短期突击后确实需要还技术债,不然每次都是突击,每次都是垃圾代码,是真的在屎山上继续写屎,是真的难受
    2. 关于效率,算是醍醐灌顶了。以前我也只是单纯的将效率看为单位时间内尽可能多的看书、工作,只想着提升数量,没有仔细想过有些事情做了是不是真的有价值
    3. 关于T-shirt的用法,我感觉真的不错,不单单是工作,生活中的某些事情也可以参考这个匹配方法
  4. 这篇文章跟我有什么关系?
    1. 加班部分是切身实例,本身作为程序员,就会被这个干。也是要提醒自己,短期突击是可以的,但是一定要记得还债。
    2. 效率部分颠覆了我的认知,我要改下对某些活动的看法了,比如健身,15分钟的有效功是远远大于刷15分钟手机的;比如护肤,花费10分钟进行护肤,其收益也是很高的。
    3. T-shirt的评判标准也可以应用到我的一些活动,比如打游戏,就属于业务影响力S,但是时间成本XXXL的,这些活动要少做;多做一些业务影响力XL,时间成本S的事,比如一个番茄时钟一个番茄时钟的学习、健身。

你可能感兴趣的:(ARTS(03))