背景:双非一本,无实习经历
3.12 笔试
笔试AC第一题,第二题偷分。笔试完后十分钟内约一面。
3.13 一面 35分钟 (面试官很温柔,就像同龄人一样和你做技术上的探讨)
自我介绍(学校里学习的知识、框架、参与过的项目及其亮点)
balabala讲了一些学校的课程比如计网、数据库、数据结构以及自己获得的一些奖项
Q:希望能够着重讲一下项目经历以及扮演的角色
A:具体讲了一下自己做的一个微服务项目,有xxx功能,从GateWay到Sentinel以及Redis和MQ等技术,讲了讲如何在网关层面通过Token鉴权(同时穿插自己对技术选型的考量)
Q:OK,那我们一个一个技术点聊,首先讲讲token的技术原理吧?
A:在项目中用到的Token是通过JJWT生成的,然后讲了讲PayLoad以及相关内容,最后讲Token防篡改等好处
Q:如果Token被第三方截获了怎么办?
A:使用HTTPS,以下省略八股文若干
Q:假设一个场景:用户的Token被从某js插件直接截获并拿到别的机器上访问你的接口,怎么办?
A:(对于这个问题有点懵,因为你浏览器里存的内容都能被拿了那似乎也没有什么特别好的方法处理了,但是后来想了想可以把用户ip或者mac地址放进去,但我感觉还是治标不治本,希望有大佬能帮我解答一下)思考了一下然后说把token的有效时间缩短(给自己埋了坑)
Q:那如果用户在写文章,写了半个小时,你缩减了token的有效时间,用户的体验会变差很多,这种情况怎么办?
A:讲了讲token过期如何延期(把自己更加带进坑里了)
Q:那你又要缩短token有效时间,又要延期这不是很矛盾吗?况且你延期的话导致接口的风险也会逐渐增加呢?
A:我真不知道了呜呜呜!(其实感觉这里该讲讲如何判断用户活跃的,用户活跃再进行延期,不过第一次面大厂真的被问懵了)
Q:没关系这只是作为开放性探讨的问题而已(被安慰一下还是挺好的)
Q:你说你用GateWay对微服务进行转发,那如果某个接口的访问特别慢,你如何避免的你网关被这个特别慢的微服务拖垮呢?
A:(一开始没太听懂,面试官又详细描述了一下场景) 如果接口访问特别慢,我们在选型的时候使用了Sentinel,Sentinel可以对慢接口进行降级,然后讲了讲Sentinel是怎么用的
Q:降级也是一种策略,那如果这个问题产生的原因是你的微服务自身的问题,不用Sentinel如何去解决?
(插一句,这里后面复盘的时候才反应过来面试官应该是想问如何排查慢服务,比如从SQL、网络等方面进行解答,但是token那个问题真是把我问懵了,后续的问题人都是处于一种麻木的状态)
A:调用接口的时候可以设置超时时间,讲了讲FailBack之类的。
Q:如果我们想要查明这个慢,究竟是因为网络比较慢,还是因为复杂业务比较慢,该如何排查?然后给了一个详细的不能再详细的场景(已经明示了2333)
A:首先排查是否为网络原因,其次是排查服务中是否有复杂流程,最后检查是否因为第三方框架的不完善等等导致缓慢
Q:那我们现在如果已经确定了是网络比较慢,怀疑是发生了丢包,如何去确认?
A:ping命令(tcpdump 我看过但忘记了!!!
Q:建议回去了解一下tcpdump
Q:你认为消息队列是什么呢?
A:讲了讲自己的理解(觉得他和操作系统里面的消息队列差不多),然后说了说生产者消费者模型
Q:如果一个消息投递了多次都没成功怎么办?
A:会把消息持久化(忘了答死信队列,裂开)
Q:如何持久化?
A:确实没怎么了解过
Q:这些偏向底层的东西没看过确实不太好回答,没关系的,我们下面来聊一些基础的问题(内心OS:终于到我最喜欢的Java八股文了吗,嘿嘿嘿)
Q:操作系统学过吧,举个简单栗子,我们今天写了个Java应用,打开了一个文件句柄,在文件句柄中写入了一行字符串,flush这个文件句柄最后close掉,从操作系统层面讲讲这期间发生了哪些事情?
A:胡扯了一些然后说不太了解(为什么别人问操作系统都是线程进程死锁之类的,我的这么“简单”呜呜呜
Q:那你讲讲进程间通信的方式吧?
A:八股文若干
Q:OK,那我们接下来问问数据库方面的,一条普通的查询语句执行的流程是什么?
A:我真的是被问懵了,这里应该答连接器,解析器优化器之类的,结果我说到怎么在B+树上查找去了,甚至还扯了MVCC,我感觉面试官听着都尴尬
Q:这个基础部分你掌握的不够扎实啊,如果一条SQL语句执行的比较慢怎么办?(我心想我已经凉了,ε=(´ο`*)))唉
A:explain 以及相应的分析
Q:HTTP了解过吧,HTTP2.0和HTTP1.1的区别?
A:老八股了,不过答得不算特别好,人还是晕的
后续又让我介绍了一下我的比赛和项目,约了第二天加面笔试(但是最后又取消了,直接二面)。
没有反问环节让我难过了好久,以为自己稳稳的挂了,面完了问了下内推的前辈说过了,很惊喜!
总结:基础不够扎实,操作系统和中间件原理掌握还不够,阿里的场景题感觉特别多啊,不知道是为什么看别人很多Java八股,我这一点都没问,惊了
3.14 二面 1小时 (面试官中气很足,一听就是大佬)
老样子先自我介绍吧,这次吸取了教训,主动地把项目的背景,技术选型的考虑,自己的角色等等详细阐述了一下。
Q:你说项目中用了前后端分离以及RESTful,什么是RESTful?
A:八股文若干
Q:请求方式有哪些呀?
A:Options,Delete, Post, Get, Put, Trace等
Q:使用RESTful和直接加参数有什么区别吗?
A:我个人感觉是没什么区别2333
Q:为什么架构中要使用GateWay?
A:GateWay用来给各个微服务进行反代,然后详细说了一下怎么做的,为什么这么做
Q:如果让你来实现一个GateWay,你觉得要做哪些考量?
A:动态配置路由,负载均衡,支持自定义拦截等等详细讲了很多
Q:你说你在网关层面做了鉴权,详细讲讲?
A:在GateWay上写了一些规则,拦截用户的请求,解析token,然后又讲了讲token原理,如何加密(3DES)
Q:你有了解过各大厂商提供的网关服务吗?比如阿里百度腾讯提供的?
A:没了解过
Q:你在网关上还做了限流?
A:Sentinel相关的内容,就把限流,降级,熔断的规则都讲了讲,然后把场景也讲了讲
Q:如果让你来实现一个限流框架,怎么做?(这方面还好我之前比较喜欢,去了解了比较多相关知识)
A:令牌桶,漏桶,semaphor等,然后利用Guava的RateLimiter详细的讲了一下令牌桶,又通过一个例子讲了一下Semaphor
Q:那漏桶呢?
A:补充了一下漏桶模型
Q:你觉得漏桶和令牌桶的区别在哪?
A:讲了一下自己对两者的理解
Q:Redis我看你也有用到,为什么Redis这么快?
A:八股
Q:IO多路复用详细讲一下
A:balabalabala
Q:netty有了解吗?
A:了解的不多
Q:redis的常用类型,zset的底层数据结构?
A:跳表,为什么用跳表
Q:缓存击穿,缓存雪崩,缓存穿透有了解过吗?
A:八股,顺便讲了讲缓存淘汰策略,布隆过滤器等
Q:布隆过滤器原理?
A:记不太清了,大概记得和hashmap差不多,答了一下
Q:单Key过热怎么办?
A:Redis集群,然后一致性hash,把访问打到不同机器上
开始问另一个项目
Q:统计用户访问ip怎么做的?
A:MySQL,用AOP在用户访问的时候记录
Q:实现了统计pv,如何实现uv?
A:做好去重,记录用户访问信息的时候把时间戳带上
Q:如何去重?在MySQL里面做吗?
A:是的
Q:有了解过hadoop相关吗?
A:了解过,但是没在项目中使用过
Q:建议可以去了解一下,因为大数据相关技术在我们这里用的挺多的
Q:如果有大量数据的话还能直接在MySQL里面做去重吗?
A:大量数据就用Redis,使用bitMap可以一战
(对于这里又提了几个场景,最后确实答不出了,感觉只有分布式计算才能破了)
Q:讲讲你的几个奖项吧?
A:把奖项,项目讲了讲balabala
后续就聊聊如何学习的,成绩怎么样,自认为技术在系里能排多少,还需要多了解一下大数据相关的内容,多看看技术论坛等等。
总结:对于项目中用到的框架和技术会深挖,如果不会建议不要给自己埋坑!同时一定要对自己的项目有足够的了解和思考,不然被问到会很尴尬!
3.15 hr面 30分钟(电话突击)
hr面没什么好说的了,就问问学校情况,项目情况,遇到过哪些问题,如何处理的就没了
hr面之后把netty系统的学习了一下,感觉自己真的好菜
完整总结:打铁还需自身硬,所谓的八股其实只是一种辅助,更重要的还是要自己多思考多总结,基础很重要!
4.2收到意向书,春招结束了
中间一度等的十分焦虑,每天茶饭不思,抱着手机就等短信了,后面感觉自己可能凉凉了,就去投了别的厂,收到意向书超开心,祝各位也能获得心仪的offer!
同时也非常非常感谢我的内推人在整个流程中一直为我解答各种问题,帮我推进流程!
全部评论
(28) 回帖