面试题答案
一键面试优化方法
- 使用映射表(map)替代:对于大量分支的
switch
语句,可以使用映射表来提高查找效率。switch
语句在执行时,会按照顺序依次比较每个分支条件,而映射表使用哈希表实现,查找时间复杂度为O(1),相比之下效率更高。 - 减少不必要的条件判断:在
switch
语句中,尽量减少复杂的条件判断,将一些通用的条件判断提前处理,避免在每个分支中重复计算。
优化前代码示例
假设处理不同命令类型的场景:
package main
import (
"fmt"
)
func executeCommand(command string) {
switch command {
case "command1":
fmt.Println("执行command1")
case "command2":
fmt.Println("执行command2")
case "command3":
fmt.Println("执行command3")
// 更多命令类型...
default:
fmt.Println("未知命令")
}
}
优化后代码示例
package main
import (
"fmt"
)
func initCommandMap() map[string]func() {
commandMap := make(map[string]func())
commandMap["command1"] = func() {
fmt.Println("执行command1")
}
commandMap["command2"] = func() {
fmt.Println("执行command2")
}
commandMap["command3"] = func() {
fmt.Println("执行command3")
}
// 更多命令类型...
return commandMap
}
var commandMap = initCommandMap()
func executeCommand(command string) {
if executor, ok := commandMap[command]; ok {
executor()
} else {
fmt.Println("未知命令")
}
}
优化原理
- 映射表(map):在优化后的代码中,使用映射表
commandMap
存储命令类型和对应的执行函数。通过映射表查找特定命令对应的执行逻辑,其时间复杂度为O(1),相比优化前switch
语句的顺序查找(时间复杂度在最坏情况下为O(n),n为分支数量),性能得到显著提升。 - 减少不必要判断:通过提前初始化映射表,避免了在每次执行
executeCommand
函数时重复构建映射关系,减少了不必要的计算开销。