1h35m再战淘天

面了一个半小时,面完就躺了,所以这个时候来写面经,凭记忆写吧,问的有点多实在记不全了。不过面试官是目前以来碰到的最好的面试官,其实蛮简单的我不知道他却说自己问的有点难了(感谢给台阶)。同时也感觉这位面试官相对以前遇上的感觉更重实际场景一些,很多问题根本我在常规的八股文里根本没遇上。没回答的题目主播默认是自己回答的还不错,这篇主要用来给自己复盘失误点,牛友们感兴趣可以自己去了解或者问我也行(但我比较菜,自己也可能讲不清楚)。

自我介绍

一些日常项目拷打,和前几天差不多,这里就不多说了(其实是记不得到底问了些啥了)
唯一记得的就是主节点挂了,从节点还没来得及同步数据该怎么办(这题提前看过大佬的面经和小伙伴的提问所以记得很清楚),给了两种方案:
一种是做半同步,保证主节点写入数据的同时至少有一个以上的从节点已经同步了数据。
第二是直接主从切换,做活动降级并流转其他接口页面,等重新校准redis数据之后再将活动重新上线,还说实际上redis挂掉的几率很小,第一种方式会一定程度的造成性能下降(相对于异步复制数据),所以最终可能会选择第二种方式。(这里感谢xfg的解决方案

开始超长时间的八股:

计网部分(这部分和os一直是薄弱项):
1.端口作用及底层原理。作用大概知道,但是原理完全忘了(主播八股都是靠guide背的,guide没重点提及的部分我就都忘了
2.知道作用在哪层吗。也是理所当然的不知道了。。
3.了解网络分层模型吗。
4.tcp在哪层。传输层,说了之后面试官就引导我说那端口作用在哪层的你也知道了吧
5.tcp报头有了解吗。只记得有几个标志位
6.http和https区别
7.https为什么安全
8.中间人可以截取https信息的ip地址吗。没刻意了解过这方面,面试官说没事,可以分析一下,我想了想不是很确定但还是说了应该可以。
9.有哪些常用状态码。
10.从输入url到展示页面有哪些步骤。
11.cookie了解吗。

os部分:
1.进程线程在java中的体现?感觉问的有点广,当时再确认了一遍,面试官让说说概念和区别也行。
2.假如在main方法中创建了子线程,当main方法调用完毕后子线程还在运行,java程序会停止吗。想了想蒙了个不会。
3.linux用过哪些常用命令。随便说了几个

java基础+spring:
1.说一下你对多态的理解。还好昨天刚被问到,一口气背了一大堆。
2.说一下你对aop的理解和实现逻辑。
3.JDK和CGLIB实现区别。果然只要我上一题不说区别面试官就会主动问嘿嘿
4.说一下类加载过程。
5.为什么要用双亲委派模型加载类。这里也没去思考过,当时临时想了重复利用类加载器减少资源消耗?(真的是现场编的,大脑一片空白)面试官说不是这个原因,不过也放过了我
6.如果程序在运行中,此时新加入一个类,且保证这个类能被程序扫描到,能在运行中加载吗。说实话又没想过这个问题,当时让我自己思考一下,主播也是想了想大部分类也是在需要用到的时候再去加载,所以回答了应该可以。
7.说一下jvm内存区域。
8.java内存模型了解吗(JMM)。这个直说记不得了,确实一直没被问过这个点,之前背的全忘了
9.synchronized底层原理。说了是利用monitor实现的,但详细忘了,还好面试官也没追问
10.synchronized可作用于哪些地方呢。
11.这里提了一嘴项目,说假如不采用任何锁(包括cas和其他乐观锁),有什么保证线程安全的方案。这里想了半天说了一些,但都被自己反驳了(大脑里面自己跟自己打架),最后也是没回答上,说了靠业务避免或者用事务,但是面试官说没回答道到点,但没关系
12.问了常见垃圾回收算法
13.CMS了解吗,用的什么回收算法,在哪些版本CMS是默认垃圾回收器,之后呢。哪些版本默认确实有点忘了
14.了解过哪些设计模式,讲一讲。说了一些,然后最后为了保险起见,详细举例用了单例

mysql+redis:
1.了解哪些nosql。直说比较了解redis
2.mongodb呢,我看你简历写了mongodb(属于是给自己挖坑了,后面更新简历把这里删了但平台没去更新):直说项目没有需要使用的场景,所以只是了解,没太多实际经验,面试官也没接着问
3.redis数据类型
4.zset数据结构。为什么用跳表,和其他相比?
5.缓存问题三件套。
6.布隆过滤器原理。可以解决什么问题。
7.分布式了解多少。说了了解的不多,事务和锁算比较了解。然后详细问了分布式锁的实现。
8.mysql索引底层,做对比。老熟人了
9.聚簇索引和非聚簇索引。这里给自己挖坑了,说非聚簇索引存的是数据指针,需要回个表。
10.覆盖索引呢,需要回表吗。这里纯属当时脑抽,开始自己小脑大脑打架,印象里覆盖索引不用回表,但是又想到存的不是指针吗,应该回表呀,最后只能向面试官阐述了我的思考,然后又得到了没关系还是看的不深、
11.事务隔离级别,性能。
12.为什么要设置四种隔离级别。应该就是想问并发事务问题,讲了讲这方面

这里已经一小时多了,我以为快结束了,结果开始手撕。
题目是用生产-消费者模型进行0-100数字依次打印,要求A线程是生产者,随机时间20ms-100ms生产消息。B消费2的倍数,C负责消费3的倍数和公倍数,D负责消费其他。面试官让可以说思路和用伪代码。我就先说了思路,但当时自己也还没完全想清楚实现方法:
1.用volatile+锁
2.用semaphore

第一种虽然我知道大概怎么做,但一直没实现过,而之前有用semaphore做过轮流打印数字,想着直接在这个基础上修改就行,最终选了这个。

结果也是为了背模板,一口气先把消费者写完了,一到实现具体printnum方法的时候就有些不熟了,当时为了简便,也没管单独抽象方法出来做复用了,直接用的lambda表达式加三个for循环,然后也没做命中处理,直接就每个数字三个线程都跑一次,谁能打印就打印,打印不了也给我跑!(好暴力)。然后面试官看时间也差不多了,也没让我继续写,让我说了说思路。然后这个时候才发现我甚至是直接用for循环产生数据的,完全忘了生产者了,不过还好当场讲清楚了优化方法,生产者生产之后根据逻辑把信号量交给对应消费者,消费者消费完毕后再把信号量交给生产者,这样也就不用做命中处理了。面试官看了看代码,听完思路觉得差不多了也是准备结束了

反问日常问业务(其实想不出来问啥)

面完立马5分钟跑到教学楼做实验去了,回来躺了一晚上不想学

(后续,25号约了二面)
全部评论
友友面的淘天哪个部门
2 回复 分享
发布于 03-21 01:57 湖北
二面吗
2 回复 分享
发布于 03-21 07:23 江苏
淘天一共几面啊佬
2 回复 分享
发布于 03-21 08:22 四川
xd和我面的同一个部门啊。是不是面试官长得比较斯文,带个眼镜,然后眨眼睛好像有时候比较用力。说不会就会说没关系
2 回复 分享
发布于 03-21 22:27 湖南
这么难啊,刚想投,感觉还得沉淀
1 回复 分享
发布于 03-24 15:14 重庆
二面咋样了
1 回复 分享
发布于 03-25 20:25 安徽
佬投的春招还是实习?
1 回复 分享
发布于 03-27 11:47 湖北
main方法那个要看线程是不是守护线程
点赞 回复 分享
发布于 03-21 08:17 江苏
拷打确实太大了,感谢佬的面经让我感受到了阿里的难度
点赞 回复 分享
发布于 03-21 08:19 江苏
好难啊 疯狂拷打
点赞 回复 分享
发布于 03-22 14:31 江苏
这个生产消费怎么考虑呀
点赞 回复 分享
发布于 03-22 19:39 上海
接好运
点赞 回复 分享
发布于 03-23 22:31 江苏
我勒个八股盛宴
点赞 回复 分享
发布于 03-24 23:11 上海

相关推荐

03-18 21:57
门头沟学院 Java
1.自我介绍​​2.最有挑战的项目是哪一个?3.两个项目分别遇到的挑战与怎么解决的?4.你第二个项目到什么阶段?可运行还是?5.第一个项目的挑战点?​6.活跃度计算​,redis,可能导致用户多次点击导致活跃度不准确,使用map存储7.​多级缓存,怎么解决热点数据问题?8.qps是专门进行压测的吗?项目目前上线了吗?9.深入问一下,假如没有caffine框架,你有什么思路去实现本地缓存?​10.concurrenthashmap去存的话好像没解决实际的问题?讲一下concurrenthashmap的原理?为什么多线程场景下是线程安全的呢?​11.你要解决的是热点的问题,key是一样的,那你是怎么解决的呢?没看框架的源码吗?​12.假如你有100个请求同时过来访问,怎么解决?如果一开始map里边没有,假如你没有redis的话,那不就是直接访问数据库了?13.怎么实现自旋等待?​14.JAVA当中有线程的并发工具?你有了解吗?​15.completablefuture解决并行场景的优化,什么时候必须使用completablefuture​,如果自己设计的话有什么思路?还有没有其他的思路去解决并行访问的优化?如果不从并发工具的角度有什么思路?不去从后端的角度去思考怎么解决?​​​16.为什么不是写mysql的时候就把redis写了,而是写mysql再删缓存?17.乐观锁和悲观锁的​业务场景举例?18.​数据库场景下,什么场景是乐观锁?什么场景是悲观锁​19.多线程时,计算机单核单cpu还需要使用多线程吗?​20.linux命令了解?性能相关的命令,top和ps,分别讲一下?机器指标load​含义21.第二个项目的事务隔离级别有啥了解?mysql的默认事务隔离级别?有什么问题?怎么解决?​22.除了间隙锁呢以外呢?可重复读场景下还有什么解决方案?23.innodb,索引用的数据结构,为什么使用b+树?23.上课学习场景之外,你还看过哪些计算机相关都书籍吗?计算机系统你有啥深入了解的要点​?24.了解​C++底层编译,那C++和JAVA有啥具体的区别?在编译方面有啥区别?​反问:部门业务
年薪百万的芹菜很认真:校友,怎么学校改成门头沟了
查看25道真题和解析
点赞 评论 收藏
分享
03-18 02:30
已编辑
东北大学 Java
(非科班)(无手撕)1.自我介绍2.Mysql的事物隔离级别有哪几个(背了四种隔离级别以及是否会发生脏读不可重复读幻读)3.Mysql是怎么解决幻读的(背了MVCC)4.两个事物修改同一条记录,这个时候再去读这个记录会怎么样?读到的结果是一样的还是不一样的?(答了不一样😭)(一紧张脑子宕机了,开始胡说八道😭)(之后复盘我觉得应该问清楚第一个事物A是否已经提交,如果没有提交,这个时候B是修改不了这个记录的,会被阻塞住,这个时候事物A查,查到的是自己修改的记录,等到事物A提交后,事物B才能继续进行修改,如果事物B查,事物B查到的也是自己修改的记录,事物B提交后,因为事物B是后修改的后提交,再有一个事物去读,最终读到的是事物B的结果,但是如果这个时候事物B没有提交,事物C只会读到事物A修改的数据)5.面试官开始提示锁,是怎么加锁的(自己🐷b了,背了一遍Mysql有什么锁)6.间隙锁是用来解决什么问题的(答了幻读)7.为什么可以解决幻读?(对这块不熟,又开始胡说八道😭,说了查询成绩大于100的学生(这里我应该强调是当前读),刚开始的时候只有一条,然后这个时候,如果有其他的事物插入大于100的成绩的学生,就会造成第一个事物幻读(感觉这里我说的很混乱,太笼统了))8.你的意思是防止它插入?那修改呢(答会)9.聚簇索引和非聚簇索引的差别(八股吟唱)10.为什么用B+树不用B树(八股吟唱)11.Redis一般用来作什么的(答了缓存和分布式锁,解释了为什么)12.分布式锁一定是安全的吗?(这里有点懵,不知道想问什么,反问了一下)13.会不会有没锁住的情况?(答了redis主从同步的时候,主节点还没来得及同步到从节点就宕机了的话,就会出现两个线程都争抢到锁的情况,感觉不太对?(可能面试官是想问setnx的问题?唯一标识+超时时间+Lua脚本的问题?))————————————————项目拷打14.异步解析百万Excel获取行数是怎么做的?(这里面试官没太懂,和他解释了很久)15.线程池的参数设置问题(这块突然忘了项目里是怎么设置的,乱说了一个当时用的newSingleThreadExecutor,我真的🐷b啊😭现在想想再怎么也不应该用这个)16.延迟队列在这里是什么作用?17.延迟队列是怎么实现的你知道吗(老实说不会,可以试着猜测一下,只记得底层是zset,然后记录了时间戳,然后redis会隔一段时间去查出到达延迟时间的消息)18.继续追问:如果是这样的话,应该是隔多久去查一次?19.实现海量短链接访问监控信息存储。这个监控信息里存的是什么?(这是第二个项目以为不会怎么问我就没怎么看😭只答出来uip pv uv 浏览器 访问设备 访问地区)20.这些uip pv uv 是个数字吗还是什么?21.你怎么保证uip pv uv 不会有并发问题?(答了通过sql底层的锁来保证)22.继续追问,这你是怎么设计的?(忘记了 就硬说SQL语句的那个乐观锁思想,然后还是不肯放过我😭就一直问这个是怎么实现的,SQL语句怎么写的,好久没写SQL了脑子又开始宕机了,最后只好说自己忘记了)(之后想了想应该说类似于这样的语句 UPDATE uip SET uip = uip + 1 WHERE id = 123; )23.Mysql的rtt一般在20ms—30ms,用户访问可能很快,mq堆积到一定量你怎么处理?(答了分库)24.你的服务器有多少台?分了多少库?(老实说自己学习的项目,就只有一个服务器😭)25.面试官原话:分库之后肯定要开并发,不然你这个没啥用啊。嗯,对吧?那我想问一下,就这种场景下你的并发度怎么设置什么?(不太了解想问什么,是什么意思,他解释后面说是线程之类的,就是需要开多少个线程去更新uip,uv,这里当时还有有点不知道他问什么,就答了因为是io密集型,cpu核数*2)26.那你一个短链接的up uip 是一个字段,那这样的话如果用户大量的访问同一个短链接,不还是跟没有分库的效果一样吗?(这里答了把up uip这样的字段拆开 变成单条记录,形成一个类似key value结构 进行分库分表,就是说把同一个短链接的uip记录拆到不同的库中)(面试官沉默)(然后后面我自己又提了一嘴可以用缓存来存)27.防止用户重复点击创建按钮,进而导致多个重复请求同时创建相同优惠券模板是怎么做的?(自己说了一大堆)28.有个问题,就是比方说我点击这个页面就把这个页面卡了,没反应,嗯,对吧?唉,点击了一下,然后一个小时之后再点,这种情况这么办(脑子又宕机了😭居然和面试官说这种情况应该不会出现.....)(后面想了想答了避免消息重复消费那一套,就是redis中放消息消费中和消息消费完成的状态,这里噼里啪啦说了一大堆然后把自己绕晕了😭)29.面试官说不需要这么复杂还要存状态,只需要存一个key用redis挡一道就够了。然后继续问,这个key是永久的吗?需要设置过期时间吗?(自己又开始胡说八道了😭)(追问,怎么保证100%不出现问题,后面憋出来个唯一索引,继续追问,怎么设置的唯一索引,这里又宕机了,复盘后这里是说的不对的)30.还有没有其他更好的做法(想了好久没想出来,答了还没想到😭)31.怎么保证MQ是可靠的?(答了ack机制和是保存在硬盘的)32.放在硬盘就一定不会丢吗?(答了概率会比较低,面试官说磁盘损坏其实是很频繁的,如果一旦丢了,数据就都丢了)(后面想了想,就说搭建集群)33.集群的每个节点的数据是一样的吗(脑子又宕机了😭和redis集群那一块搞混了,想了好久唯唯诺诺地说了一句是不一致的,然后说自己对这一块不太了解)34.不同的二叉树的区别,为什么要有红黑树(八股吟唱)35.遇到了死锁,你的解决手段是什么,要怎么写代码才能避免死锁?(硬背八股,说资源预分配,破坏循环等待的条件)(面试官说代码加锁,加不到锁就直接返回失败就好了😭)(当时真是🐷啊,这都没想到)36.还有什么情况下可以破坏掉死锁,防止出现死锁?(硬背操作系统的八股,但是面试官继续追问😭脑子又宕机了)(最后复盘应该想想可以从减小锁的粒度、使用超时锁、一次性获取所有锁 这几个方面考虑)36.反问:我是第一次面试,有什么不足的地方?(面试官说一些基础知识了解来龙去脉,这个在他看来是比较加分的,然后对于项目的一些点,能够讲的清楚就很好了,但是感觉很多东西在他看来我是没有完全理解,所以说就会讲的不清楚)面试官人很好非常非常有礼貌,也不会打断我说话,面试体验感也很好,只是我太菜了😭
牛客196955701号:一眼牛券和短链接
点赞 评论 收藏
分享
评论
45
187
分享

创作者周榜

更多
牛客网
牛客企业服务