2020 Golang字节面试经验分享

file 2020年4月份字节跳动后端面试经验mysql

第一面

  • 远程使用牛客网进行面试
  • 面试官首先介绍说会有几轮面试
算法题 1.1

将整数转换二进制 而后将负数面试

算法题 1.2 买卖股票的最大利润

给定一个数组表明股票天天的价格,请问买卖屡次的状况下,最大化利润是多少? 日期不重叠的状况下,能够买卖屡次? 输入: {100, 80, 120, 130, 70, 60, 100, 125} 能够买卖屡次: 115(80买进,130卖出;60 买进,125卖出) 提示:不用输出买卖的序列,只须要获得最大利润算法

  • 时间复杂度是多少
  • 空间复杂度是多少
判断题
2.1 这段代码有什么问题,若是解决
total := 0
for i := 1; i <= 10; i++ {
	sum += i
	go func() {
		total += i
	}()
}
fmt.Printf("total:%d sum %d", total, sum)

这段代码在协程里面执行,会形成数据不统一 能够使用加锁避免sql

  • 怎么样加锁?代码实现一下

代码以下:数据库

var lo sync.Mutex
func main() {
	total := 0
	for i := 1; i <= 10; i++ {
		nums += i
		lo.Lock()
		go func() {
			total += i
			lo.Unlock()
		}()
	}
	fmt.Printf("total:%d", total)
}
  • 还有其余问题吗
3 其余考核
3.1HTTP状态码

400 500状态码后端

HTTP报文格式

不清楚··· 解:数组

3.2HTTP请求方式

GET获取 POST建立 PUT修改 DELETE删除安全

  • get post有什么区别

我的主要说了get相对没有post安全,全部的参数都放在URL上面,post会把参数包装成一个请求体数据结构

  • 抓包post和get有什么区别

url中会附带GET请求的一些参数,抓包都能看见,都是明文传输,而POST的在url中则看不到 更好的答案:https://www.zhihu.com/question/28586791并发

4 数据库
4.1 mysql事务

事务主要用于处理操做量大,复杂度高的数据。好比说,在人员管理系统中,你删除一我的员,你既须要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操做语句就构成一个事务 定时任务

  • 隔离级别有哪几种

~

4.2 MySQL数据库索引是如何实现的?

使用的B+树实现的 由于B+树和跳表有点类似,能够直接查找下一级

  • 为何不用其余的数据结构?

由于若是数据量特别大的时候,大数据量查找会影响性能,B+树刚好解决了这个问题

4.3这段数据库应该怎么加索引速度最快
select * from table_name where c> 10 and a = 10 and b = 10;

首先咱们应该优化只查询的值,能够把*改成须要查询的key 由于c是动态的,能够根据a和b加联合索引,达到速度最优

5 项目相关
项目中的爬虫你用到了什么框架
  • 框架有什么用
  • 高并发怎么作的,有微服务吗
  • 若是要作分布式的,怎么实现

用kafka实现,抓取数据统一使用kafka进行消费

  • 存入哪些信息

存入列表

  • 大家没有作查找功能吗

没有,若是有这个需求能够存储到ES,使用es进行查找

6 你还有什么要问的

大概何时有结果

  • 五个工做日内答复 公众号
相关文章
相关标签/搜索