ARST打卡第172周[172//521]

Algorithm

lc1455_检查单词是否是句子中的词的前缀

最好先写单测或者构思单测,模板思维,归纳总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
isPrefixOfWord 字符串对比:检查单词是否为句中其他单词的前缀.
返回第一个句中单词的下标(1开始).无则返回-1.


wa一发:
panic: runtime error: index out of range [3] with length 3
最后执行的输入:
"hello from the other side"
"they"

反思: 没有思考简单问题的特殊用例,还是应该先思考所用的用例之后再开发,也就是先写好单测!!!
*/
func isPrefixOfWord(sentence string, searchWord string) int {
ans := -1
words := strings.Split(sentence, " ")
for index, word := range words {
isPrefix := true
for i := range searchWord {
if len(word) < len(searchWord) {
isPrefix = false
break
}
if searchWord[i] != word[i] {
isPrefix = false
break
}
}
if isPrefix {
ans = index + 1
return ans
}
}
return ans
}

/*
答案用的双指针,可以的.
*/
func isPrefixOfWord_ans(sentence, searchWord string) int {
for i, index, n := 0, 1, len(sentence); i < n; i++ {
start := i
for i < n && sentence[i] != ' ' {
i++
}
end := i
if strings.HasPrefix(sentence[start:end], searchWord) {
return index
}
index++
}
return -1
}

Review

【TED演讲】公司失败的原因—以及如何避免它们

公司失败的原因有两种:

  • 太专注于探索,想要做完美的作品,于是满头研究,还没做出作品的时候,这个作品的整个方向已经过时了
  • 太专注于开发,新事物出现了,还是执着于做着以前成功的老产品,于是过时被淘汰

上面其实有两个陷阱

  • 第一个是太想做好事情,但是没有快速推出产品,让用户参与到产品的迭代,导致错过时机
  • 第二个则是太满足于以前的成功了,于是忘了探索新的事物

从而可以知道,规避的方式

  • 平衡好探索和开发
  • 通过探索新的技术的投入,来为未来买保险
  • 通过快速迭代开发出产品,然后让用户参与迭代,从而不断优化产品

总体来说就是做用户想要的最极致性价比的东西,和用户一起迭代,并且不断思考有没有新的技术可以颠覆

Tips

硬盘SMART检测参数详解

这一般是一个大概的,具体的磁盘还需要根据具体的磁盘厂商确定

Share

golang原子地写只读文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package main

import (
"fmt"
"os"
)

func main() {
// 用重命名写文件,防止写文件的时候系统崩溃。(设置只读文件)

testFile := "user.log"
tmpfile := testFile + ".tmp"
// f, err := os.OpenFile(tmpfile, os.O_CREATE|os.O_WRONLY|os.O_SYNC, os.ModePerm)
f, err := os.OpenFile(tmpfile, os.O_CREATE|os.O_WRONLY|os.O_SYNC, os.ModePerm)
if err != nil {
fmt.Println(err)
}
if err = f.Truncate(0); err != nil {
fmt.Println(err)
}
if _, err = f.Write([]byte("hhhhhh")); err != nil {
fmt.Println(err)
}
_ = f.Close()

// 错误: os.Chmod(tmpfile, 444) , 稍微看了一下底层代码,是因为解码位不对应
// -rw-rwxr-- 1 root root 6 Aug 15 16:24 user.log
os.Chmod(tmpfile, 0444)
// -r--r--r-- 1 root root 6 Aug 15 16:25 user.log

if err := os.Rename(tmpfile, testFile); err != nil {
fmt.Println(err)
}
}