百度国际化— 社招Go(过) — 一面技术-深圳 - 7.8
一面-1小时 2024-7-8
- 自我介绍
- 共享屏幕
- 算法
- 两数之和
- 用暴力枚举写一了一下,问如何优化。
- 两数之和
func twoSum(nums []int, target int) []int {
for i, x := range nums {
for j := i + 1; j < len(nums); j++ {
if x+nums[j] == target {
return []int{i, j}
}
}
}
return nil
}
2. 用哈希表写了一下。
func twoSum(nums []int, target int) []int {
hashTable := map[int]int{}
for i, x := range nums {
if p, ok := hashTable[target-x]; ok {
return []int{p, i}
}
hashTable[x] = i
}
return nil
}
1. hashTable里面存的是什么?
2. 假如给 10 个 url,通过并发实现哪些 url 能通,最后一次性输出通的url和不通的url。go 实现 1. 先写的输出的通的,然后让输出不通的,都要一次性输出。 2. 让优化代码风格,注意变量命名 3. checkUrl函数优化,resp.Body.Close() 4. 以下是我的代码
package main
import (
"fmt"
"net/http"
"sync"
)
// checkUrl
func checkUrl(url string, wg *sync.WaitGroup, reachableChan, unreachableChan chan<- string) {
defer wg.Done()
resp, err := http.Get(url)
if err != nil || resp.StatusCode != http.StatusOK {
unreachableChan <- url
return
}
resp.Body.Close()
reachableChan <- url
}
// checkUrl2 优化后的
func checkUrl2(url string, wg *sync.WaitGroup, reachableChan, unreachableChan chan<- string) {
defer wg.Done()
resp, err := http.Get(url)
if err != nil {
fmt.Printf("Error fetching URL %s: %v\n", url, err)
unreachableChan <- url
return
}
defer resp.Body.Close() // Ensure the response body is closed after all operations
if resp.StatusCode != http.StatusOK {
fmt.Printf("URL %s returned status code %d\n", url, resp.StatusCode)
unreachableChan <- url
return
}
reachableChan <- url
}
func main() {
// 给 10 个 url 例子
urls := []string{
"https://www.baidu.com",
"https://www.google.com",
"https://www.bing.com",
"https://www.yahoo.com",
"https://www.yandex.com",
"https://www.duckduckgo.com",
"https://www.ask.com",
"https://www.aol.com",
"https://www.ask.com",
"https://www.aol.com",
}
var wg sync.WaitGroup
reachableChan := make(chan string, len(urls))
unreachableChan := make(chan string, len(urls))
for _, url := range urls {
wg.Add(1)
go checkUrl(url, &wg, reachableChan, unreachableChan)
}
wg.Wait()
close(reachableChan)
close(unreachableChan)
//fmt.Println("resultChan:", resultChan)
for url := range reachableChan {
fmt.Println("通的url:", url)
}
for url := range unreachableChan {
fmt.Println("不通的url:", url)
}
}
-
项目
- 介绍一下我个人主页网站的架构。https://home.huchao.vip/。这就相当于一个应用,为什么能运行,肯定有一些机制,讲解一下背后的架构。
- 从https://home.huchao.vip/ 我的个人主页,点博客后,跳转到 https://blog.huchao.vip/ 我的个人博客页面。这中间发生了什么。
-
讲解一下公司ark方舟中台系统的架构设计
-
如果你接到工作,你对整个服务都不清楚,你是怎么开发的?
-
你做的是哪个服务?schedule-console,
-
详讲调度系统schedule-console
-
调度体现在哪?接收一些指令,然后去做一些工作
-
项目中,什么叫,利用Golang的并发特性和简洁语法实现高效的服务通信和数据处理逻辑。能细讲一下吗?
-
优化服务性能通过引入分布式缓存、负载均衡等技术﹐提升系统响应速度和可扩展性﹐预计服务性能提升30%以上
-
mysql了解吗?你是怎么学的?有没有看过什么书?
总结:
- 回答问题不用紧张,项目需要再熟悉,写的东西不管多还是少,只要写上了一定要了解,要有深度,不能只做开发,往上层要再想一想。
- 又是0八股,项目是大头,项目的架构设计也是重点,不会啊。。。