# 10.28面经
26日常实习,百度meg下aigc生产系统研发工程师Golang方向。
## 自我介绍
语速太快了介绍完面试官把我的简历都没看完...
## 实习经历询问
复述了一下实习干了什么(中科院的一个小项目,其实非常水,但是就纯吹牛),询问了一些K8s,Docker,没有太深入询问。
## 项目询问
是跟着一本书做的项目,比较垃圾,描述项目整体有什么功能,描述完之后询问项目中的某个具体功能如何实现(用户验证),面试官见我的项目比较一般(确实是两个玩具项目),所以没有太大的兴趣。
## 八股拷打
### Golang拷打
一开始看我简历上有熟悉Java及其框架(确实学过但是忘得差不多)+了解Rust语言,遂询问为什么Java转Go(被迫...),讲讲Rust语言(讲了我依稀记得的Rust的生命周期lifetime,想讲ownership的时候忘了具体概念了,就说不太清楚了)
1. slice底层原理
* 只知道长度,容量,具体扩容机制忘了。
2. Map的底层原理
* 讲了讲原生Map为什么线程不安全,如何解决这个线程安全问题
### 数据库
1. Mysql事务是什么?事务级别?如何使用事务?
* 吟唱八股
* 后续询问了一个为什么可重复读是Mysql默认的事务级别,与什么有关系?(我答与Innodb,MyIsam应该没关系,至于为什么我又重复了一遍什么是可重复读,没再深究)
如果我没记错,没有问redis?
## 代码题
### Go语言题
```go
func main() {
original := []int{1, 2, 3}
copied := original[:2]
copied = append(copied, 4)
original = append(original, 5)
copied = append(copied, 6)
original = append(original, 7)
fmt. Printin("original===",original)
fmt.Printin("copied==="copied)
}
```
询问上述代码的输出结果,其实就是slice的底层原理,正如上面所说我对这里不是很熟悉,开始一眼看过去以为是相等,但是想了想不对,印象中扩容没有那么简单,最后属于是蒙对了。
* 具体来说,当 append 导致切片的长度超过其容量时,Go 会自动为切片分配一个新的、更大的底层数组,并将原数组的内容复制到新数组中
* 扩容机制为2倍扩容,一方扩容后,指向的就是新数组,另一方还是指向底层的旧数组,所以最后结果不同了。
### 手撕题
**题目要求**
小明 有n天假期,每天他可以进行三种活动中的一种,每种活动给他带来的愉悦值各不相同。如果当天进行过某一种活动,第二天即不能进行这种活动,求n天后小明能获得的最大愉悦值
3
10 40 70
20 50 80
30 60 90
210
一道常见的动态规划,由于第一次面试时手撕代码,紧张地看了两分钟题目都没看懂...最后手撕出结果,出错,讲述思路的过程中改对了。
## 反问阶段
1. 寻求建议,指出项目有点简陋(这个我承认);
2. 询问部门职责
3. 询问会有几面(2-3)
## 总结
面试官人非常好,不紧不慢,态度温和,整个过程大概50分钟左右,问的题目算是简单的了,如果能进二面肯定就是狠狠地拷打了,继续努力吧,感谢百度给了这次大厂处女面的机会。
面试确实能给自己查缺补漏不少东西并提供未来努力的方向。