我主要用的还是go,虽然语言不是很重要,但投的基本上是跟go有关的公司,也有一些c++的公司,想往go发展的可以参考我的面经
春招
春招基本上是过完年回来开始,建议寒假开始复习然后回来就可以找实习了。我春招投的比较晚,后面投的公司不是很多,基本被刷简历,能面试的只有七牛云,然而第一次面试被各种吊打,春招后面去了深圳一家小公司实习了两个月
七牛云
七牛云的技术还是不错的,虽然实习不想去上海(建议实习不要看地点,实习很短不要介意地点)
一面
- go的调度
- go struct能不能比较
- go defer(for defer)
- select可以用于什么
- context包的用途
- client如何实现长连接
- 主协程如何等其余协程完再操作
- slice,len,cap,共享,扩容
- map如何顺序读取
- 实现set
- 实现消息队列(多生产者,多消费者)
- 大文件排序
- 基本排序,哪些是稳定的
- http get跟head
- http 401,403
- http keep-alive
- http能不能一次连接多次请求,不等后端返回
- tcp与udp区别,udp优点,适用场景
- time-wait的作用
- 数据库如何建索引
- 孤儿进程,僵尸进程
- 死锁条件,如何避免
- linux命令,查看端口占用,cpu负载,内存占用,如何发送信号给一个进程
- git文件版本,使用顺序,merge跟rebase
秋招
实习到八月底就回来参加秋招了,然而还是被吊打,我的秋招一直持续到十一月初,主要还是想找深圳的公司,最终签了字节跳动。
秋招结果如下
360
360是秋招第一个面试的公司,在实习期间请假面试的,一天基本就面完所有流程,但最终还是进入备胎池(巨深),虽然也不想去北京,但还是点名批评360的备胎池
一面
一面是个小胖小胖的面试官,说我的实习经历挺丰富的(几个校内项目跟一个小公司实习项目),基本上问项目跟场景,中间穿插一些基础知识
- 讲实习项目的简单业务流程,数据库有水平拆分什么的吗?没有,数据量还没到,然后没啥问的
- Slice与数组区别,Slice底层结构
- 项目里的微信支付这块,在支付完微信通知这里,收到两次微信相同的支付通知,怎么防止重复消费(类似接口的幂等性),说了借助Redis或者数据库的事务
- 项目里的消息推送怎么做的(业务有关)
- Go的反射包怎么找到对应的方法(这里忘记怎么问的,直接说不会,只用了DeepEqual,简单讲了DeepEqual)
- Redis基本数据结构
- Redis的List用过吗?底层怎么实现的?知道但是没用过,不知道怎么实现
- Mysql的索引有几种,时间复杂度
- InnoDb是表锁还是行锁,为什么(这里答不出来为什么,只说了行锁)
- Go的channel(有缓冲和无缓冲)
- 退出程序时怎么防止channel没有消费完,这里一开始有点没清楚面试官问的,然后说了监听中断信号,做退出前的处理,然后面试官说不是这个意思,然后说发送前先告知长度,长度要是不知道呢?close channel下游会受到0值,可以利用这点(这里也有点跟面试官说不明白)
- 用过什么消息中间件之类吗?没有
- 有什么问题吗?评价?后面还有面试,后面再问吧
二面
二面的面试官好像是部门技术总监,面完了加微信,可能需要Go的人,感觉很多不会然后给过了,面完面试官人超好,微信推荐我看书
- 生产者消费者模式,手写代码(Go直接使用channel实现很简单,还想着面试官会不会不让用channel实现,不用channel的可以使用数组加条件变量),channel缓冲长度怎么决定,怎么控制上游生产速度过快,这里没说出解决方案,只是简单说了channel长度可以与上下游的速度比例成线性关系,面试官说这是一种解决方案
- 手写循环队列
- 写的循环队列是不是线程安全,不是,怎么保证线程安全,加锁,效率有点低啊,然后面试官就提醒Go推崇原子操作和channel
- 写完代码面试官说后面问的问题回答就可以,不知道的话没关系
- Linux会不会,只会几个命令,面试官就说一共也就一百多个命令
- TimeWait和CloseWait原因
- 线段树了解吗?不了解,字典树?了解
- 看过啥源码,nsq(Go的消息中间件),简单问了我里面的waitgroup包证明我看过
- sync.Pool用过吗,为什么使用,对象池,避免频繁分配对象(GC有关),那里面的对象是固定的吗?不清楚,没看过这个的源码
- 有什么问题吗?评价?基础不错,Linux尚缺,Go的理解不够深入,高级数据结构不了解,优点是看源码
- 后面面试官讲了他们做的东西,主要是广告部分,说日均数据量至少百万以上,多达上亿,高并发使用Go支撑,有微服务,服务治理,说我需要学的东西挺多的
CVTE
CVTE 面的是 C++ 开发,一面就挂了,记的面经不是很多
一面
- 证明二叉树的叶子节点跟度数为2的节点的关系
- 唯一索引和主键索引
- 智能指针
- 字符串解析为数字(考虑浮点型)
京东
京东本来是现场面的,但运气好,几轮的面试官都允许改成电话面试,岗位是京东云部门的Golang开发工程师,很少有大公司明招golang,面试官说主要做docker和跟调度相关。收到offer后给三天的时间考虑,虽然非常想去京东,方向也非常感兴趣,最终还是希望跟女朋友留在深圳就放弃了京东的offer。
一面
其中穿插一小部分扩展,例如单点登录,tcp粘包
- 项目1
- 项目2
- 项目3
- 手写洗牌
二面
- 项目1处理粘包断包实现,面试官以为是negle算法有关,解释了下negle跟糊涂窗口综合征有关,然后面试官觉得其他项目是crud就没问了
- 看什么书?以前看redis设计与实现之类的,现在看linux相关
- goroutine调度用了什么系统调用,这个不会,面试官想从go问到操作系统,然后以为我操作系统基础不好,就问了操作系统问题
- 进程虚拟空间分布,全局变量放哪里?答上来了,操作系统就不问了
- 有没有网络编程,有,怎么看连接状态?netstat,有哪些?ESTABLISHED,LISTEN等等,有异常情况吗?TIME_WAIT很多,为什么?大量短链接
- 介绍部门
HR面
- 优缺点
小米
小米的面试官喜欢突击,晚上八点多收到小米电话,问什么时候有时间面试,我说都可以,然后说现在?我:???,还是改到其他时间了。二面也是突击,刚想跟小伙伴吃鸡,就打电话直接面试。
一面
- 解释goroutine,channel
- c++ 和 go对比
- java和go对比
- 几种基本排序算法说一下,问了堆的时间复杂度,稳定性,为什么不稳定
- topk问题,海量数据topk(回答成切分多次加载内存,然后用维持k长度的有序链表,然后被说时间复杂度不好,提示说还是用堆,然后哦哦哦对)
- 最长连续字串和,这里我说的解决方案没用dp(对dp不熟),面试官一直引导我dp,还是不会
- 什么是主键
- 联合索引和唯一索引
- 越多的索引越好吗?
- 建立索引要注意什么?
- 进程和线程区别?
- 死锁?
- tcp三次握手
- http,https
- 状态码401,301,302,201
- 项目我说只有一台机子,所以用的单机部署,面试官说单机也可以部署多个,有什么方法吗?我说docker,问docker有哪些网络,不熟,dockerfile关键字,只答几个。顺便扯了下nginx转发。
二面
- 数据库隔离级别,提交读会造成什么
- go调度
- goroutine泄漏有没有处理,设置timeout,select加定时器
- 项目
南方基地
南方基地是属于中国移动的,看没有很合适的岗位,就投了云计算与运维工程师
HR面
- 有什么offer
- 为什么选择这个岗位
- 成绩
二面
- 看成绩
- 怎么理解云计算
- pg和mysql区别
- mysql高可用的方案
4399
公司主要是java、erlang和php
一面
- 进程线程区别
- 排序算法以及时间复杂度
- 怎么学习go
- go的线程,给他讲了跟goroutine调度
- io模型,同步阻塞,同步非阻塞,异步
- cookie和session
HR面
- 实习项目
- 优缺点
- 同学的评价
- 兴趣爱好
- 有什么offer
三面
- MySQL DECIMAL(M,D) 中M和D是什么
- 唯一订单号生成的算法问题
欢聚时代
欢聚时代好像是错过广州宣讲会时间了,然后那个时候约我面试是约到湖北现场面试,刚好那个时间段欢聚时代好像在湖北开宣讲会,于是联系好久hr才改到广州现场面试,最后还是凉凉
一面
- 实习项目
- 接口kps测试
- redis排行榜数据结构(跳跃表),查询时间复杂度
- redis分布式,如何减少同步延迟
- mysql能实现redis的功能吗
- 平时怎么学习?
- 看什么书?
- 兴趣爱好
- 看过google四篇分布式论文吗,没看过
- cap理论,举例
- LRU算法,LFU
- 讲讲怎么理解网络编程
点触科技
厦门的一家游戏公司,虽然他们服务端基本上是golang
HR技术交叉面
- go使用踩过什么坑(for range,数据库连接defer close)
- go优缺点
- go命令,go get,go tool,go test,go vet
- go的值传递和引用
- 慢查询
- 为什么使用pg
- redis的数据类型
腾讯
腾讯基本上是最想去的公司之一,可惜一面挂了,有些不服。第二道算法给了一种做法,面试官想要另一种做法,在他的提醒下也做出来了,可能c++部分回答不好,而且面试官都是问了解什么什么吗,我都是回答了解,然后没有深入给他讲解
一面
- 所有左叶子节点的和
- m个n大小的有序数组求并集,一开始是2路归并,求时间复杂度,后来在面试官提醒直接m路归并,求时间复杂度
- static关键字,还有其他关键字吗
- hash表设计,线程安全?
- 线程自己独享什么
- 网络编程过程
- select、epoll
- 看什么书
创梦天地
创梦天地的面试难度不是很高,给的薪水也不高
一面
- 实习项目
- 项目的微信支付怎么用的
- redis用了什么功能(session,排行榜)
- 排行榜怎么实现
- 实习用了jenkins吗
- 除了简历的项目还有其他经历吗
- 有什么问题吗
二面
- redis
- 笔试题中的场景题
HR面
- 瞎扯,期望薪资什么的
趣丸
趣丸的面试难度堪比bat,但是薪水偏低了
一面
- 为什么选pg
- go的new和make区别
- go怎么从源码编译到二进制文件
- go的调度模型
- go的锁如何实现,用了什么cpu指令
- go的runtime如何实现
- 看过sql的连接池实现吗,没有
- 最近学什么新技术?c++简单网络库
二面
- c++的map和go的map的区别(红黑树和hashtable)
- ctx包了解吗?有什么用?
- go什么情况下会发生内存泄漏?(他说ctx没有cancel的时候,这个真不知道)
- 怎么实现协程完美退出?
- 智力题:1000瓶酒中有1瓶毒酒,10只老鼠,7天后毒性才发作,第8天要卖了,怎么求那瓶毒酒?
- 简单dp题,n*n矩阵从左上角到右下角有多少种走法(只限往下和往右走)
HR面
- 瞎扯
映客直播
映客是京东开奖那段时间投的补招,他们公司用的golang也挺多,可惜也是北京,薪水比京东好一点
一面
- 面经丢失
二面
- 实习项目
- 用channel实现定时器?(实际上是两个协程同步)
- channel的实现?不了解
- go为什么高并发好?讲了go的调度模型
- git回滚
- 看什么书,怎么学习
- redis的zset用什么实现,除了跳跃表
- 操作系统内存管理?进程通讯,为什么共享存储区效率最高
- http的状态码
- tcp和udp
- udp的头部
- http和tcp的关系
三面
- 怎么看一本书?
- 如果团队有一个人的任务做不完,你也很忙,你会怎么做?
Ucloud
Ucloud是做服务器的,跟七牛云很像,但Ucloud主要是C++,七牛云主要是golang。一面完说通过,约二面,后面说那周深圳的总监没空,调下周,后面没消息,估计凉凉了
一面
- 实现一个hashmap,解决hash冲突的方法,解决hash倾斜的方法
- c++的模板跟go的interface的区别
- 怎么理解go的interface
- 100亿个数选top5,小根堆
字节跳动
头条很早就笔试了,A了一道多,刚好赶上补招,给面试,拖了几周担心拖不了就面试了,面试中也有一些不会的,不过三面后加hr微信问过没过,hr说过了,第二天跟我联系,然后就担心没有部门捞(头条三面通过要有部门要才有offer),第二天就谈薪资收到offer了
一面
- go代码运行结果(闭包函数)
- git和svn区别,模型
- 唯一订单号问题,并发量高的话怎么解决
- hash表设计要注意什么问题
- 数组和为n的数组对
- 最大连续子数组和
- redis容灾,备份,扩容
- 跳跃表,为什么使用跳跃表而不使用红黑树
二面
- 输入url后涉及什么
- tcp怎么找到哪个套接字
- ipc方式,共享存储区原理
- 进程虚拟空间布局
- 进程状态转换
- 线程的栈在哪里分配
- 多个线程读,一个线程写一个int32会不会有问题,int64呢(这里面试官后来说了要看数据总线的位数,32位的话写int32没问题,int64就有问题)
- 判断二叉树是否为满二叉树
- lru实现
- 一个大整数(字符串形式表示的),移动字符求比它大的数中最小的
三面
- MVC优点
- 点赞系统设计
资源
博客
- legendtkl:这个大佬写的博客挺有深度,主要也是go,可以看看
- 基础知识CyC2018:一些面试的基础知识
书籍
- 高性能mysql
- redis设计与实现
- Linux/UNIX系统编程手册
- Linux高性能服务器编程
- UNIX网络编程
- UNIX环境高级编程
- 编程之法:面试和算法心得
- 剑指offer
- 图解http(简洁易懂)
- TCP/IP详解