19年4月下旬,有天在技术群里聊天,看到有个发腾讯内推的,PCG微视部门,Java岗+本科2年经验起,
楼主17年毕业,看着挺合适的,还是想试试看,毕竟腾讯的Java岗也不多,我又有一颗想去互联网大厂的心。
于是乎就给了简历。
大概3天后的晚上,收到面试电话,当时正在部门聚餐,然后找了个接口出去接电话了。
面试完大概就还记得这些问题,总的来说基础多一些,感觉答了80分,但是最终还是挂了,记录一下失败的经历,再好好复习下基础,有些东西毕业后不用就慢慢忘了。
- 自我介绍
- 遇见的技术挑战的点?
这个问题我回答的特别不好,因为面试前也没在脑中复盘下最近的经历,其实平时还是会遇到一些技术
难点,以及痛苦的解决过程,当时脑袋抽,没描述好。
- spark原理了解吗?
直接实话实说,还没学习到这一步。
(目前做数据平台开发,主要用sqoop/Hive/spark,但只局限使用,spark底层还在学习中)
- 说下项目中的分布式事务,如何解决的。
说了下之前项目的分布式事务以及解决方案。
- 了解业内其他分布式事务框架吗?
TCC、LCN
- 说下3pc是什么,和2pc相比有什么不一样。
之前总结过:三阶段提交协议(3PC) - 问点Java基础,我说好
- 多线程了解吗,说一下相关的类?
太多了,Thread、Runnable、ThreadPool、CyclicBarrier、CountDownLatch、Semaphore、
ThreadLocal、JUC并发包下面的类。
- Executors工具类有哪几种构造线程池的方法?
我说有4种,就记得其中2种,说了说。然后问我分别每个参数是多少。
因为平时用FixedThreadPool固定大小的多些。
- ThreadPoolExecutor几个参数
核心线程数、最大线程数、线程空闲存活时间、时间单位、队列、创建线程的工厂、拒绝策略。
- 说下osi7层模型,tcp/ip分别哪层,每层的数据格式是怎样的。
还好在学校学的东西没全还给老师,还记得一些网络基础。
下面表格是我记得的,不全面,详细的可以百度下。
从下到上 | 分层 | 主要协议 | 数据格式 |
---|---|---|---|
顶层 | 应用层 | HTTP、FTP、SSH | 一个文件、应用 |
表示 | |||
会话层 | |||
运输层 | TCP、UDP | 数据段 | |
网络层 | IP | 包 | |
数据链路层 | 数据帧 | ||
底层 | 物理层 | IEEE802.3 | bit |
- tcp和udp区别。tcp的拥塞控制。tcp怎么保证可靠性。
TCP是面向连接的、可靠的协议。比UDP慢,因为要三次握手来建立连接,且需要保证可靠;
TCP可靠性我没回答上来,其实下来去了解了下,发现就是通过报文中的seq序列号、数据和、ack确认、
滑动窗口等去做数据校验,失败会重传等。
TCP协议是网络的基础,确认需要全面的学习一下。
- nio了解吗
非阻塞、基于通道和缓冲区、引入Selectors选择器,选择器可以监听多个通道事件。
- 分布式一致性协议了解吗?
我说zab协议,因为之前对zookeeper比较有兴趣,买了本书《从Paxos到zookeeper》,看了2遍。
但好像每次看完都有新的收获。本来这个地方可以讲很久的,比如消息广播、崩溃恢复2种模式;
如何保证数据一致性,leader的选举等等;
刚说了一点,被面试关打断了,这个问题就过去了。。。
- paxos算法了解吗?
《从Paxos到zookeeper》一书有介绍,paxos是通用的分布式理论,它很牛,有多牛呢?
paxos的作者获得了13年的图灵奖。
- 出了个算法题,有序整数数组,给定一个数,从数组中找出2个数相加等于它。要求O(n)时间复杂度。
比较简单,晚点贴代码。
- 讲讲hashmap,提到了红黑树,又问红黑树是什么。
Java集合,HashMap、ConcurrentHashMap必问了,HashMap在JDK8中有些优化,当某个桶链表长度>=8
且桶的数目>=64时,则把该链表转换成红黑树,提高查询效率。
红黑树是平衡二叉排序树,查询效率稳定O(lgn)就知道这么多,问我旋转那些,我确实不会。
- b树了解吗,说说定义。和红黑树有什么联系,哪个效率高?
B树是多叉平衡排序树,这个地方记得当时和面试官重复说了几次,好像始终没说到面试官想听得点。
- redis用过吗?平时用哪些数据结构,zset用过吗?
结合项目说
- Java中的锁?
我说synchronized和lock,问有啥区别,我说前者是基于对象监视器,后者是应用层面,基于aqs和cas。
然后又问我应用场景。
- 轻量级一点的锁了解吗?
我说乐观锁算吗,就讲了讲乐观锁和项目应用。后来问自旋锁作用,然后又问我Java中的cas。
Unsafe类中有些Native方法,比如compareAndSwapLong,能保证原子性更新变量的值,
这是高性能、无锁的数据结构。
- volatile关键字(这里很尴尬,电话有点听不清,我反问了面试官几次,汗!)。
然后就提到内存可见性,balabla说了下。
- Java内存模型了解吗?
我说是Java内存模型还是jvm内存模型,面试官说Java的。就讲了讲主内存和工作内存。
- happen before原则,就记得2条,其实好几条。
总结:
- 问题偏基础,涉及面比较广,确实有些问题刚毕业可能还记得清楚,毕业后一直不用都忘了,
虽然最后面试没过,但还是感谢面试官,大晚上面了我一个小时,很辛苦。 - 认识到自己的不足,网络这块的基础还是不够牢固,接下来还是要多看书。
- 学习真的是不能停,框架和技术会用只是其中的入门,还是要研究其原理。