前言
从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 Linus 大神。
出来混总是要还的,前些天就遇到了 Git 里一种十分糟心的场景,并为之前没有深入理解 Git 命令付出了一下午时间的代价。
先介绍一下这种场景,我们一个项目从 N 版本升到 A 版本时引入了另一项目的 jar 包,又陆续发布了 B、C 版本,但在 C 版本后忽然发现了 A 版本引入的 jar 包有极大的性能问题,B、C 版本都是基于 A 版本发布的,要修复 jar 包性能问题,等 jar 包再发版还得几天,可此时线上又有紧急的 Bug 要修,于是就陷入了进退两难的境地。
最后决定先将代码回退到 A 版本之前,再基于旧版本修复 Bug,也就开始了五个小时的受苦之路。
复习过程
- 项目准备;
- leetcode:刷完剑指之后每天会刷2-4道leetcode
- java基础: 主要刷面经、重点掌握垃圾回收机制
- 操作系统: 之前没学过,用几天时间看了一下最重要的进程线程、死锁、消费者生产者、哲学家问题、银行家算法
- 计算机网络:花几天时间复习了一下,重点复习tcp(三次握手四次挥手拥塞控制流量控制)、udp、https
- 数据库: 重点了解了索引的实现以及引擎的区别
- 数据结构和算法: 主要通过剑指offer和leetcode进行复习
- 其他:期间也做过大大小小好几次笔试,还有一些往届练习卷
腾讯
一面(3.13电话面)
- 自我介绍
- 介绍项目以及项目遇到的难点
- java的hashmap是否安全?hashmap、hashtable、concurrenthashmap的区别、底层和实现
- mysql索引的底层实现
- jvm垃圾回收机制
- tcp、udp区别和适用场景
- tcp三次握手、四次挥手,为什么挥手不能只有三次
- 线程和进程的区别
- 进程通信的方式有哪些
- 堆是线程共有还是私有,堆是进程共有还是私有,栈呢
- 了解过协程吗(我:携程???不了解呜呜呜)
- mysql查询优化
- 快速排序的时间复杂度、原理(口述算法)
- 最近在看什么书
- 除了腾讯还投了其他的公司吗
- 问我愿不愿意转go,并推荐我了解一下协程,最后让我耐心等待,面试的人太多,需要对面试的同学进行挑选,两周内会告知我结果
- 有什么想问的(对我的评价和学习建议)
二面(3.22现场面)
- 自我介绍
- 问我为什么发现自己不喜欢做客户端(简历中有一个安卓实习项目)而想做后台
- 介绍项目(一个电商小程序)
- 项目中的商品是否有考虑过xxx(忘记叫什么了,意思就是是否有考虑过同一种商品有不同的颜色、规格,在数据库中如何区分这些不同)
- 介绍项目的支付流程,并画一下流程(白板)
- 介绍一下订单状态码的含义,以及交易过程中订单状态码如何变化
- 如何防止商品的超卖现象
- 项目是否具有秒杀功能
- 并发的时候,如何保证性能
- 在分库之后,如何设计id
- 在分库后,一条插入请求,在上层不做处理,如何直接在数据库找到相应的库并插入库中的某个表
- 当服务器的cpu一直很高时,如何找出原因
- 是否用过调试工具
- 当项目一直无法访问的时候,如何定位错误
- 介绍一下aop和ioc
- 如何将一个ip地址由点分制(xxx.xxx.xxx.xxx)和int类型间进行相互转化
- 如何判断一个数是否为2的n次方
- 可实习时间
- 是否愿意转go
- 有什么想问的(对我的评价和学习建议)
hr面(3.26电话面)
- 自我介绍
- 介绍一下实习经历
- 实习中遇到的困难以及如何解决这些困难
- 未来计划,是否读研
面试总结
一面的问题都很中规中矩,唯一卡住的就是协程了,确实不会,只能和面试官说我不了解。
主要和大家分享一下二面的面试体验吧。因为二面自我感觉答得不是很好,有很多问题当时没记录下来,现在一时也想不起来。所以上面的面经并不完整。
当时面试完走出大厦以为自己挂掉了,结果刷新了一下状态发现变为hr面,真的超级意外。现在想想大概是因为我在遇到不会的问题时,没有直接说自己不会,尽量把答案往自己知道的方向回答。
- 第7题,项目没有秒杀功能我也没做过,但是了解过一些,只能和面试官说确实没有,然后让他听我讲一下我的实现思路,期间又让面试官挖出了很多问题考我TAT
- 第9题、第10题,面试官要求我在分库的场景下回答问题,我先回答了分表情况下如何实现,他肯定了我在分表下的做法,但是分库情况还需要另外考虑,我实在想不出来,才和他说自己没有办法实现,但这总比我直接说自己不会好。
- 第13题,如何定位错误的时候,先讲了一下无法访问的几种情况,以及大量tcp处于time_wait、close_wait这两种状态的原因和解决方法。
- 面试结束后,等电梯的时候突然想起面试中一个一直理解错误导致解不出的问题,发现自己想歪了之后赶紧编辑完答案又给面试官发了过去,这个答案后来得到了面试官的认可。
面试结束复盘查漏补缺
每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。
以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~
资料免费领取方式:点赞关注后,戳这里免费领取
重要的事说三遍,关注+关注+关注!
更多笔记分享
[外链图片转存中…(img-LdiygqaS-1619080676238)]
[外链图片转存中…(img-mllBMAYx-1619080676241)]
更多笔记分享