4.5,前段时间去面了阿里腾讯的暑期实习,腾讯总共三轮技术+一轮HR面目前已结束等结果中,阿里已经两轮技术面,听面试官说之后还有一轮交叉面和HR面,正在准备中......
相比较来说,投腾讯的那个部门处理效率高一些,3.22投的简历,27号打电话过来约一面时间,当时约了3.30号下午,从3.30号开始一天一面,4.2面完四轮,效率属实可以。看面试官问的问题,腾讯的问的多一些难度也大一些,但是了解到腾讯上海那边后台主要是C++架构,个人还是比较喜欢阿里的技术栈。阿里那边是三月中的时候启动的内推,3.29进行一面,4.3二面,问的技术方面的点比较少,但是问了很多项目相关的经历。以下是大概的内容,未能100%还原,主要做个参考:
一面
Q:项目经历相关
A:因为项目之类的都写在简历上,我只是照着念一遍
Q:某项目的整体架构设计
A:挑了比较复杂的说
Q:socket连接建立流程
A:没准备好,大概讲了bind套接字,监听客户端请求,建立连接。详细可百度
Q:socket如何判断断开
A: onclose、heartbeat
Q:TCP,UDP区别
A: 计网基础
Q:TIME_WAIT状态的意义
A:这个是TCP断开连接时客户端发送最后ACK的时候处在的状态,时长2个RTT,主要是确保ACK被服务端收到。如果ACK没有被服务端收到,服务端会重发FIN,那么客户端在TIME_WAIT状态时会收到重发的FIN(至多2个RTT的多时间内),这就是服务端没有收到ACK的情况,如果客户端2个RTT都没有收到重发的FIN,那么就是ACK被服务端收到了,连接关闭。
Q:TCP如何保证消息传输可靠
A:没答全,建议百度
Q:TCP超时重传
A: 用计时器检测有没有收到ACK当然是最简单的,然后还有快重传,由3个重复ACK触发。
Q:Mysql索引种类
A: mysql基础,Hash索引、B+树索引
Q:Hash索引和B+数索引的区别
A: 数据结构的差异,hash索引不适合范围查询,B+树查询的话复杂度和树高有关系,hash是O1
Q:Java .class文件结构
A: 能问这个我是真没想到,还好之前看过的还没完全忘掉。推荐《深入理解JVM虚拟机》,class文件头两个字节是0xCAFEBABE固定的,然后是支持的最低虚拟机版本,然后是常量池,字符串之类的。。。然后是访问标志位,比如是否public是否static,然后是属性和方法的定义,不过当时这部分没看了,用不上。
Q:Redis几种数据结构
A: key-value,list,set,map,zset
Q:Redis适用场景
A: 比较开放
Q:缓存穿透是什么
A: 非法value的查询,导致缓存失效,全走db导致高流量
Q:Redis TTL原理
A: 不懂,底层没看过,随便猜了基本的过期判定逻辑
Q:Redis淘汰策略
A: 一般是LRU最久未使用,效率比较好,也比较符合业务,用linklist的话复杂度是o1,也有最不经常使用、随机去除等策略
Q:Linux查看进程命令、查看端口占用命令
A: ps、netstat
Q:Linux实时统计日志每秒产生的条数,shell
A: 我想用两次tail取补集,面试官说不合理,然后不会
Q:死锁产生原因
A: OS基础
Q:进程线程区别
A: OS基础
Q:协程线程区别
A: 因为我说我有Go语言的基础,协程主要是用户态下实现的并发模型,比线程轻量。
Q:协程的底层原理
A: 不知道,也是没想到,Go语言实战里是有说的,但是没深入研究
Q:Go和Java比较
A: Java是最好的语言
二面
Q:Redis Object的底层实现
A: 不懂
Q:redis主从同步策略
A: 不懂,和持久化有点类似,另外可以使用监听线程
Q:做题:二维递增数组中找一个值
A: 二分变种
Q:做题: 判断链表是否成环
A: 访问标志
Q:搭建微服务的一些要点
A: 扯
这轮应该算是交叉面,感觉挺水的
三面
Q:OAuth流程
A:说来话长,详情百度
Q:JVM垃圾搜集算法
A: 标记-清楚,标记整理,复制
Q:InnoDB和MyISAM的区别
A: 主要是有无外键、有无事务、只支持表锁之类的,前者适合频繁写、后者适合频繁读
Q:TCP三次握手
A: 计网基础
Q:SYN序列号生成?
A: 不懂
Q:滑动窗口
A:做流量控制用的,详情百度
Q:最深的项目经历
A: 扯
Q:另外对着项目问了好久
HR面
主要就是当聊天环节,那边HR问了个问题说 目前拿到了几家暑期实习Offer,我:目前只拿到了腾.....不不不不,目前只投了腾讯......害怕
总结
计网问了好多,这块也不是特别熟,另外都是后台的通用知识。另外感觉项目经历以及在字节这边的实习经历的加分不少,所以面试整体上来看难度不算特别大。
阿里
一面
Q:自我介绍
A: bbb
Q:在字节这边主要做啥工作
A: bbb
Q:介绍下项目经历
A: bbb
Q:对php、go、java作为后端开发语言的看法
A: bbb
Q:HashMap底层
A: Java岗基础
Q:HashMap新节点怎么插入的
A: hashCode()->hash(hashcode和hashcode右移16位亦或)->index(和size - 1与操作)->插入,JDK1.7以前是头插,1.8之后是尾插,头插在rehash的时候会有循环引用的问题。
Q:ConcurrentHashMap和HashMap的区别
A: 这么问的话感觉应该只是想要我答出来线程安全性的问题,但实际上ConcurrentHashMap是细粒度的分段锁,相比HashTable的sychronized锁来说并发度更高一点,CHashMap只锁bucket,hashtable锁整个map
Q:事务ACID
A: 数据库基础
Q:隔离级别
A: 先说了数据库中的并发问题:丢失更新、脏读、不可重复度、幻读。针对这些问题设计不同粒度的锁,实现四种隔离级别。
Q:TCP/IP协议栈,每层主要有哪些协议
A: 计网基础
Q:HTTP基于?
A: TCP/IP
Q:TCP、UDP区别
A: 计网基础
Q:进程线程区别
A: OS基础
Q:多线程应用场景
A: 我主要说了多任务工作,异步处理的场景
Q:线程间的通信方式
A: 我从Java语言层面说,讲了信号量(JUC包下的Semaphore类),Object类中的notify wait方法,共享变量之类的。
二面
二面的是部门leader级别,都没问技术的点,问了项目经历,在字节的主要工作,还问了飞书和钉钉的区别0.0,飞书在线文档和语雀的区别= =。主要还是问了很多在校项目相关的,项目的收益,用户侧体验的提升,项目取得的成果之类的。然后告知之后还有hr面和交叉面。
4.6凌晨,就等着吧
-----------------------------------------------
4.22二更,成功拿下阿里腾讯实习offer,总感觉过了好久好久,实际看下时间也就半个月,春招终于结束了。
腾讯面完HR面之后的第13天,上海腾讯打电话过来说后台开发满员了,问对移动端开发有没有兴趣,我当时拒绝了,说还是希望参与后台相关的,然后当天下午看简历状态,瞬间变灰,本来以为GG了。4.15号腾讯深圳总部TEG事业群打电话过来约面试,应该是在池子中被捞起来了,于是4.16晚腾讯第五面,这次面试总体来说比较满意,少了很多linux和网络相关的很细节的东西,上来直接做题,数组中找出前二大的数(不重复)、n个数中找出和为sum的所有可能,第一题简单过,第二题用DFS也还行,之后面试官再问判断如何判断链表是否有环,答:1.set 2.访问标记 3.快慢指针。数据结构问了红黑树相关的,平衡规则没记,另外问的东西基本上在上面的问题中都出现过,就不说了。4.17下午腾讯第六面,对面应该是主管,还是问了学习经验,项目经验,其余协程,并发之类的也就是像上面问的那样,另外还问了Golang的垃圾回收相关,这个真的没准备,我直接说只对JVM垃圾回收有了解,go中不清楚异同点,然后他让我讲jvm的GC,于是我依次讲了 JVM内存区域以及每块都是放什么、如何判断object是否应该被回收(引用计数、GCRoot)、垃圾回收策略、分代回收以及原因,并没有讲太深,这个环节说了5-10分钟吧,说完面试也差不多结束了。4.18中午HR面,还是平常的问题。总共7面,腾讯告一段落,收到offer call以及正式邮件是4.20日下午,腾讯的效率真的可以,流程中基本都是日更。但是很想吐槽的是5面的时候回答问题经常被面试官打断。
阿里的话,10号左右的交叉面,问的还是对计算机的经历,我从高中开始说起,说到现在,面试官会在某一个点打断细问,整体上说完也就差不多了,十四号的时候HR面完过了两三天一面面试官call过来确认能否实习,我说可以。然后4.22收到了正式offer,阿里给我感觉效率比较慢,基本是周更,但是面试的内容以及技术环境对阿里更有好感一些。
ps: 听腾讯HR小姐姐说今年他们实习生是招的偏多的,而且特殊原因不去实习对秋招也没有太大影响