ARTS打卡第八周

Algorithm: Leetcode 92. 反转链表 II

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

解法一:头插法,即找到开始反转的前一个节点,以它作为临时头节点,后面的节点往它后面插。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        
        // 将p指向第 m-1 个节点
        ListNode p = dummyHead;
        for(int i=0; i<m-1; i++) {
            p = p.next;
        }
        
        // q 指向第 m 个节点,q不动,后面的节点都往它前面插
        ListNode q = p == null ? null : p.next;
        // r 指向 q 的后一个节点,也就是需要插到前面的节点
        ListNode r = q == null ? null : q.next;
        
        // 有 n-m 个节点需要移动
        int j = n - m;
        while(j > 0) {
            q.next = r.next;
            r.next = p.next;
            p.next = r;
            r = q.next;
            j--;
        }
        return dummyHead.next;
    }
}

解法二:反转法,即将从第m个节点开始到第n个节点结束的这一段反转之后再和前后的链表拼接起来。

总结:
只遍历一遍反转链表有两种方式,一种是头插法,即把后面的插到前面来;另一种是反向法,即把链表箭头的指向挨个地反过来。这两种方式都需要三个指针协同工作。
另外反向法也可以使用递归来解决。

Review: Virtual Reality Trends 2019

https://towardsdatascience.com/virtual-reality-trends-2019-64003e2667ef

2019年VR技术趋势

  1. VR和AI增强:VR离不开AI
  2. 消费娱乐:VR游戏,VR电视娱乐等。
  3. 教育和培训:传统教育和培训的成本很高,利用VR进行教育和培训,可以大幅缩减成本
  4. 旅游:利用VR体验旅游。当你晕船时,戴上VR头盔,你就置身于酒店的房间里了。

Tip:如何批量删除docker中tag为的镜像

我们在使用docker的过程中,经常会发现 docker images 列出的镜像中有很多这样的镜像

REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
<none>                                               <none>              d1f6013eddfa        6 days ago          525MB

这些镜像往往是由于构建过程出现错误异常终止而残留下来的,如何能够批量删除这种镜像呢?可以使用如下命令:

 docker rmi $(docker images -f 'dangling=true' -q)

其中,docker rmi 命令支持传递多个image作为参数批量删除;而docker images 命令支持使用 ‘dangling=true’ 这个filter来过滤出所有 tag 是 none的镜像(-f 等同于 --filter,是添加过滤器的意思),docker images 的 -q 选项表示只输出镜像ID。

docker images命令目前支持的filter有:

The currently supported filters are:

dangling (boolean - true or false)
label (label=<key> or label=<key>=<value>)
before (<image-name>[:<tag>], <image id> or <image@digest>) - filter images created before given id or references
since (<image-name>[:<tag>], <image id> or <image@digest>) - filter images created since given id or references
reference (pattern of an image reference) - filter images whose reference matches the specified pattern

关于 docker images filter 的用法,可以参考官方文档:https://docs.docker.com/v17.12/engine/reference/commandline/images/#filtering

Share:影响了我二十年的三个原则

https://time.geekbang.org/column/article/104903
作者在文章中列出了三个原则,个人觉得这三个原则在职场中意义重大,所以分享出来。
一,闭环原则
说白了就是要及时反馈,在项目敏捷管理中也提倡要及时反馈。反馈,不仅能让他人了解你的进度、遇到的困难,还能给你施加压力,提高效率。本人刚入职时,其他一同入职的小伙伴每周都写周报,汇报自己的学习情况,我的组长对我比较宽容,没让我写,我刚开始还觉得很幸运,后来我渐渐发现,别人的周报里都很充实,学了很多东西,反观自己,好像没什么进展。直到有同事离职,担子落到自己头上,才逼迫自己快速学习。
在做项目的时候也是,虽然我们规定两周一迭代,但一个迭代的任务不能按时完成那是常态。直到后来有一个需求需要写日报,那段日子感觉自己的效率提高不少,因为每天最痛苦的就是写日报时没东西可以,所以时刻提醒自己不要耽误时间,正事要紧。

闭环原则也适用于个人的学习过程。有输入也有输出才能形成闭环。我们不仅要学习知识,还要有输出,笔记、读后感、代码等都是可以输出的东西,很少有人能够做到知识学一遍就会,只有不断地输入输出,知识才会逐渐在脑海里沉淀,这是一个反复理解和记忆的过程。
所以从现在起,我重拾自己的博客和笔记,把学习当作一件非常正式的事情来做,而不是看看就算了。

二,谁难受谁推进原则
在工作中难免会遇到推诿扯皮的现象,这时应该谁来推进工作的进展呢?作者提出了“谁难受谁推进原则“,这为我们指明了一个方向。只有事关生死,我们才会重视,所以如果一个项目如果对于我们来说非常重要,那么我们就应当主动去推进这件事情。

三,Think bigger
在上一家公司,我的组长其实给了我很多非常有价值的东西,只是我还没有完全消化掉。其中有一点就是要有全局视野。在大公司里,都说每个人就是一个螺丝钉,那正是因为缺了全局视野。拿到一个需求,我们不应该立马去想代码怎么写,那样我们逃脱不了搬砖的命运。我们应当从更高的角度来看待这个需求,多问几个为什么:为什么会有这个需求?这个需求和其他哪些需求是有关联的?需求产生的背景是什么样的?涉及到哪些业务知识?这个需求最终实现的功能放到产品中是怎么用的?什么样的客户会来使用?等等。只有多思考,透彻地理解了一个需求,才能在做代码设计和实现的时候更加从容,作出更好的设计,写出更好的代码。这一点对于我来说,还有很长的路要走。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值