2023-10 字节跳动面试整个过程 golang营销服务开发岗位

  • 面试整个过程大约1个小时
  • 回答的中规中矩吧 很多问题回答的不具体 难受死我了
  • 非常简单的算法题
  • 下面列出来了面试步骤
  • 这里面有一点就是面试官本来想问问我数据结构这一块的问题 但是我说不太熟悉 他就没问了
 1. 简单介绍个人信息 略
 2. 介绍简历上的项目 略
 3. 什么是分布式事务  主要用来干什么
 4. 什么是数据库事务  为什么要用到事务
 5. redis数据类型有哪些
 6. redis持久化简单介绍有哪几种方式 有什么区别
 7. redis热数据简单讲一下
 8. 讲一下你在项目数据迁移过程中 怎么保证数据不会丢失 或者说 新数据跟老数据不会出现丢失或重复
	在说一下服务端重启完成后使用新的数据库链接会出现什么情况
   (场景就是线上一直有项目在输出数据,你同时又在迁移数据到新的数据库,
    迁移完成后,业务服务端会重启 因为使用新迁移的数据库链接)
 
 9.  什么是聚簇索引
 10. mysql存贮数据用到的是什么数据结构 有什么特点
 12. 从浏览器访问www.baidu.com 这从本地到网络访问具体步骤介绍一下 
 13. 讲一下tcp/ip三次握手
 14. 算法题(有时间限制的 到了一小时面试时间就不能写了)
     按顺序打印1-100数字,要求有生产者跟消费者 下面是我写的 
     面试之前在网上刚好看了一下消息队列实现过程 直接稍微改动了一下代码
     写的可能不是最好的方案 如果有更好的写法欢迎私信我 给我康康
     
	本来这种简单的算法 面试官是考查我对channel 的熟悉程度 
	结果我没用到channel 
	还有就是我应该用协程生产和消费的 这里都没用到 
	算法虽然是实现了 
	但这不是面试官想要的结果 
	因为面试时间有限 
	在不写就没机会了

type Goqueque struct {
	stack []int
	back  []int
	lock  sync.Mutex
}

func newGoqueque() Goqueque {

	res := Goqueque{
		stack: make([]int, 0),
		back:  make([]int, 0),
	}
	return res
}

func (g *Goqueque) send(x int) { //生产
	g.lock.Lock()
	defer g.lock.Unlock()
	g.stack = append(g.stack, x)
}

func (g *Goqueque) pop() { //消费
	g.lock.Lock()
	defer g.lock.Unlock()

	for len(g.stack) != 0 {
		val := g.stack[len(g.stack)-1]
		g.stack = g.stack[:len(g.stack)-1]
		g.back = append(g.back, val)
	}

	res := g.back[len(g.back)-1]
	g.back = g.back[:len(g.back)-1]
	fmt.Println(res)
}

func (g *Goqueque) empty() bool {
	if len(g.stack) == 0 && len(g.back) == 0 {
		return true
	}
	return false
}

func exec() {
	g := newGoqueque()
	for i := 1; i <= 100; i++ {
		g.send(i)
	}

	for !g.empty() {
		g.pop() //打印
	}
}
     

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值