网易八股面试

八股文

golang:

1,不同包的多个init函数的运行时机(答得不好 没看过这里)

2,init和main函数的执行顺序 (init函数在main函数开始前执行)

3,如何删除切片中的某一个元素 (就说了一个通过append(a[:2],a[3:]…))

4,sync.Map{}怎么使用 (使用Store存)

5,怎么控制去并发操作map(加锁)

6,go的读写锁怎么工作 (一大段支支吾吾后说了读写互斥)

7,如何保存程序崩溃时的数据 (不会,说了日志,在项目中聊到recover我就没想到这)

8,多个并发操作对map进行读写,程序会发生什么(给了两个选项,a:会继续执行 b:程序会崩溃,选了a,结果现在一查发现是b)

9,超时处理 (在网上查到用context.WithTimeout更好,我说的time.After) 去监听 channel的一个超时事件

  1. context deadline 超时控制
  2. 通过 time.After

10,对一个已经关闭的channel读写会发生什么 (如果不空的话,先读数据,空的话读对应类型的零值, 写的话会出现panic)

11,开五个协程 全部执行一个函数,怎么保证协程执行完全部打印(使用sync.WaitGroup ) 1. 简单点用 WaitGroup 阻塞 5个协程 2. 基于channel, 开大小为5的channel, 然后 每个携程执行完成之后,发送一个事件

 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
import (
    "sync"
)
var wg sync.WaitGroup 

func main2() {
    // wg.Add(5)
    ch := make(chan struct{},5)
    for i:=1;i<=5;i++ {
        go func(j int) {
            fmt.Println("",j)
            ch <- struct{}{}
        }(i)
    }
    for v := range ch {
        
    }
    wg.Wait()
}
func main1() {
    // wg.Add(5)
    for i:=1;i<=5;i++ {
        wg.Add(1)
        go func(j int) {
            fmt.Println("--",j)
            wg.Done()
        }(i)
    }
    wg.Wait()
}

linux:

1,怎么去查询某一行的数据 (grep)

2,怎么汇总url,统计每个url (不会)

1
2
3
4
5
6
7
8
9
#!/bin/bash  
  
log_file="access.log"  # 日志文件路径  
result_file="top_urls.txt"  # 结果文件路径  
  
# 提取URL并计数  
awk -F " " '{print $7}' "$log_file" | sort | uniq -c | sort -nr | head -10 > "$result_file"  
  
echo "脚本执行完成,结果已保存至当前目录的 $result_file"
1
grep -o 'http[s]?://[^[:space:]]*' access.log | uniq -c | wc -l

3,怎么查找进程 (ps)

4,怎么查找有go语言的进程 (pgrep go)

mysql:

1,对abc建立联合索引,他们的顺序重要么(重要,应把使用频率高的放在前面)

作者:牛客128067218号 链接: https://www.nowcoder.com/discuss/499307188142223360?sourceSSR=search 来源:牛客网