Algorithm
func findNumberOfLIS(nums []int) (ans int) {
maxLen := 0
n := len(nums)
dp := make([]int, n)
cnt := make([]int, n)
for i, x := range nums {
dp[i] = 1
cnt[i] = 1
for j, y := range nums[:i] {
if x > y {
if dp[j]+1 > dp[i] {
dp[i] = dp[j] + 1
cnt[i] = cnt[j] // 重置计数
} else if dp[j]+1 == dp[i] {
cnt[i] += cnt[j]
}
}
}
if dp[i] > maxLen {
maxLen = dp[i]
ans = cnt[i] // 重置计数
} else if dp[i] == maxLen {
ans += cnt[i]
}
}
return
}
Review
gRPC Go Microservice
文章介绍了一个简单的go gRPC的hello world项目搭建过程。
TIP
工作过程使用了go标准库的rwMutex,能够减少读操作的锁颗粒度。
- 读锁和读锁之间不互斥。
- 读写和写锁之间互斥。
- 写锁和写锁之间互斥。
Share
作为面试官如果在面试过程遇到求职者的项目经历或者技术背景是自己不熟悉的方面,要怎么通过问答看出求职者的能力水平呢?
我个人的做法是做一个倾听者,让求职者详细介绍自己的项目经历,这个过程可以提出如下问题:
- 向我这个小白阐述一下这个项目/技术。这个问题能够考察求职者对项目/技术的理解深度,如果你能用大白话向一个小白解释清楚你的专业领域,那么就说明你一定程度看透了这个领域的本质。
- 这个项目的整体技术&业务架构,为什么这样子设计? 这个问题考察求职者的整体设计能力和技术选型能力。
- 项目中你遇到的最难的问题或者你觉得最有技术难度的部分,详细描述一下问题、难点在哪里、以及你最终怎么解决这个的。这部分能够考察求职者的技术深度,遇到问题之后的定位&解决能力。