关于golang:ARTS-第11周-LeetCode-200-Number-of-Islands-Page-Cache-面试中的PUA

2次阅读

共计 2503 个字符,预计需要花费 7 分钟才能阅读完成。

ARTS

ARTS 是陈浩(网名左耳朵耗子)在极客工夫专栏里发动的一个流动,目标是通过分享的形式来保持学习。

每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。

本周内容

本周的 ARTS 你将看到:

  1. LeetCode 200 Number of Islands 看起来是求连通域,实际上却在扫雷?
  2. Page Cache 到底是什么?
  3. 你是否在面试中遭逢过 PUA ?

Algorithm

本周要讲的是 LeetCode 200 Number of Islands. 这是一道求「连通域」的题目,即求被 0 突围的 1 的区域有多少个。

一个须要留神的点就是,遍历整个矩阵是无奈防止的,而一个「岛屿」可能蕴含多个 1,因而如何防止一个岛屿被反复的计算呢?一种简略的方法就是找到一个岛屿之后就将它的全副节点标记成 0. 这样就能够防止岛屿被反复计算。

那么如何把一个曾经找到的岛屿全副标记为 0 呢?最简答的形式就是 DFS, 发现某个点是 1 之后,对这个点的「上下左右」进行 DFS,晓得找不到 1 为止。

func numIslands(grid [][]byte) int {
    var ans int
    if len(grid) == 0 {return ans}
    nc, nr := len(grid), len(grid[0])
    var dfs func(c, r int)
    // 通过深度优先遍历,将同一个岛全副置 0
    dfs = func(c, r int) {grid[r] = '0'
        if c > 0 && grid[c-1][r] == '1' {dfs(c-1, r)
        }
        if c < nc-1 && grid[r] == '1' {dfs(c+1, r)
        }
        if r > 0 && grid[r-1] == '1' {dfs(c, r-1)
        }
        if r < nr-1 && grid[r+1] == '1' {dfs(c, r+1)
        }
        return
    }

    // 开始扫雷!for c := 0; c < nc; c++ {
        for r := 0; r < nr; r++ {if grid[r] == '1' {
                ans++
                dfs(c, r)
            }
        }
    }
    return ans
}

Review 文章举荐

本周看了一些 Page Cache 相干的内容,当然「科普」类型的居多,比方上面这篇 Page Cache, the Affair Between Memory and Files.

当应用 free 命令查看零碎内存应用状况时,个别会失去 6 列数据:
total used free shared buffers cached.

这里咱们临时只关怀最初两列,也就是 buffers 和 cached. buffers 代表间接读写块设施 (block device) 所应用的缓存页,cached 代表一般文件数据所占用的缓存页。

其实当咱们议论缓存时,实际上须要思考三局部。他们是: global_page_state(NR_FILE_PAGES) total_swapcache_pages i.bufferram.

global_page_state(NR_FILE_PAGES) 顾名思义代表缓存页的总数。

total_swapcache_pages 指的是:没有关联任何文件的内存页,比方正在运行的代码通过 malloc() 申请的内存页,如果上述的内存页须要被换页时,那么这些内存页中的数据将被写入到 Swap Cache. Swap Cache 会关联一个或多个输出设备,比方裸盘或者文件。

i.bufferram 就是 free 命令倒数第二列 buffers.

而 free 的最初一列 cached 能够通过计算公式 global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram 失去。

Tip 编程技巧

啥是技巧?

Share 灵光一闪

PUA 本意是指专门通过某些「伎俩」搭讪女性的男性,因为这些「伎俩」中常常应用一些「打压」或者叫「贬斥」形式来「驯化」对方,因而 PUA 在这两年逐步成为人人喊打的一个群体。并且 PUA 这个词自身,也缓缓变得更加普适,甚至变成了网络流行语,泛指成心贬斥他人的行为。甚至有时候会当做动词来用,比方「我在面试中被 PUA 了」。

最近这段时间尝试加入了几个面试。我必须抵赖,我在常识积攒上还存在欠缺,无论是广度还是深度上。这可能导致我因为能力有余无奈通过一些面试,然而我也能判断出一些面试官的「好坏」,即面试官是否对面试做了「适当」的筹备。

很显著地,在有那么一两次面试中,面试官显然是没有做「适当」筹备的。疾速判断出这类面试官的形式就是,看他是否能对你的答案进行点评,并且是否能依据你的答案进行更深度的开掘,找到你常识储备的边界。如果一个面试官对他所问的问题没有深刻的理解,或者没有主管的意识,那么他就只能通过你的答案「内容之外」的货色来做判断。比方你是否用了一些不确定的语气词,或者你自身表白的语气等等,或者说这种面试官切实考「感觉」来做判断。

如果你也在面试中遇到了,只是否定你的能力,然而不对他的否定根据具体解释的状况。强烈建议间接反诘面试官:是否能够指出具体哪个问题的答案没有达到你的要求以及为什么?当然,如果这个面试官真的是靠感觉来判断的话,他这个时候很可能会想方法回绝侧面答复这个问题。这个时候你能够抉择硬刚到底,肯定要面试官说进去,到底哪个问题的答案有问题。也能够抉择放弃挣扎,因为无论刚还是怂,最终的后果都是节约一个小时。

本周浏览列表

  • 极客工夫 MySQL 实战 45 讲
    09 | 一般索引和惟一索引,应该怎么抉择?
  • Page Cache, the Affair Between Memory and Files
  • Go Context 曹春晖
    cancelCtx 类型都会持有一个本人的 channel 专门用来做敞开告诉,并且也会持有所有 children 的 cancel 办法,用来敞开所有 children 的 done channel. 这最终会造成一种树形构造。
    这样做的益处就是,防止所有的 ctx 都是用同一个 Done() 函数,因为应用同一个 Done() 意味着大家竞争同一把锁。
  • FREE 命令显示的 BUFFERS 与 CACHED 的区别
    介绍 free 命令的最初两列 bufferscached 别离代表什么。
正文完
 0