嵐jlu level
获赞
227
粉丝
256
关注
6
看过 TA
1240
吉林大学
2026
后端
IP属地:吉林
🐔🧱后端Java方向本科26届小东西
私信
关注
昨天 19:57
已编辑
吉林大学 后端
总结:项目+算法+围绕简历问八股,感觉是贴主面得最差劲的一次,比之前的腾讯和阿里都要差(背的八股记得不太熟练),结果面完不一会就约二面了有点出乎意料#美团# #美团求职进展汇总# #Java# #后端# 首先自我介绍还是老套路把面试官往项目上引1.问在项目中参与的角色,以及为什么做这个项目答:个人项目,参照开源项目做的,为了深入学习Spring开发流程(略)2.你在项目中redis和数据库的一致性保障怎么保障答:采取“先更新数据库,再删除Redis缓存“的策略,引入消息队列,让消费者来删除缓存,如果失败可以重新消费,这种重试机制进一步保证了一致性。(补充:还可以通过订阅MySQL的binlog,用里面的数据库更新信息来操作更新缓存)3.采用Kafka作为消息队列如何就能对系统进行解耦呢?答:Kafka采用异步通信形式,将生产者和消费者解耦,生产者将消息发送到Kafka,消费者从Kafka中读取消息,生产者和消费者不再直接依赖于对方的实现,彼此之间不需要知道对方的存在,只通过消息队列来传递信息。这种模式使得两个系统之间的耦合度大大降低4.那了解Spring微服务框架吗?答:不了解,我的论坛系统项目是基于Spring Boot开发的,没有使用Spring Cloud5.那Spring Boot和原生Spring之间有什么差别答:原生Spring配置起来更为复杂,需要写很多的xml,而Spring Boot配置更为简单,开发起来可以更注重于业务逻辑而不是繁琐的配置6.问项目二,你为什么会想去自己手写一个Spring框架答:深入自己对Spring框架的理解,进一步的了解他的底层7.那Spring的IOC你是怎么理解的答:(我把IOC和依赖注入一起讲了,后面面试官提醒我只需要讲IOC),就是把需要自己通过代码进行管理的对象创建和依赖关系管理交给Spring容器,这减少了应用程序中的耦合度,提高了代码的可维护性和扩展性。8.面试官发现我简历上手写Spring框架采用了TDD开发模式,说她们自己在工作中都很少会用到这种开发模式,感到很惊讶,询问我为什么使用TDD开发模式?(我跟着卡哥做的手写Spring,跟着用的TDD)答:背诵了项目面试题里的TDD开发模式流程与好处9.其实我只是想问你是因为什么导致你去采用这个TDD开发模式答:(答了好处居然都不好使,我瞎编说是浏览文章时学习到了这个开发模式,所以就想应用一下试试看)10.那你应用完这个开发模式后学到了什么?答:因为是先写测试用例再写逻辑代码,使得代码错误率降低,开发出来的代码质量更高,学到了以后写代码前都认真准备相应测试用例,避免出现更多bug11.jvm内存结构答:(之前背过但有点忘了,甚至因为试图去想起来的时间太久,面试官还调侃我刚刚不会是去问ai了吧)粗略说了堆区和栈区12.看你项目中用了ThreadLocal,说说用在哪答:说在论坛项目中,获取当前登录角色,使用ThreadLoacl使得每个线程都能获得一份互相独立当前用户副本13.那ThreadLocal的实现原理呢?答:(之前用的时候粗看过,但是后面忘了)老实交代不熟悉14.那你在项目中使用了哪些设计模式答:创建Bean使用工厂模式,实现JDK动态代理和CGLIB代理使用了代理模式,许多代码块使用了模版方法模式,实现MVC时请求的传入处理过程采用了责任链模式15.责任链模式优点答:解耦,将每个阶段独立开来,可以对此进行单独配置扩展16.那你使用责任链模式的时候,要是我中途一个阶段出现了问题,我前面的数据怎么进行回滚答:(完了盲区)老实交代我做的MVC处理请求这里没有涉及事物的回滚,这方面我不熟悉17.那我在一个代码块里大量使用了if-else,采用什么设计模式优化好答:策略模式,将不同的逻辑封装成不同策略类中18.数据库的隔离级别了解吗?答:Read Uncommitted,Read Committed,Repeatable Read,Serializable19.Repeatable Read具体是啥,怎么实现的答:可重复读,就是多次读取数据是一致的,通过加共享锁和排他锁20.那什么是排他锁?答:施加了排他锁的数据,在给他施加排他锁的事务释放锁前,其他事务都无法读或写该数据21.那你举例一个发生死锁的场景,并说解决方法答:没答对(面后补充:假设这个数据库隔离等级为可重复读,比如我在一个订单表里,每次插入操作前想保证操作幂等性,先查查表里有没有这个id的订单,就执行select。。。for update,这时有两个不同的事务一个查了id为1007的,一个查了id为1008的,这时候两个事务在查找for update时都获取了间隙锁,因为间隙锁是可以兼容的,所以两个表都获得了,但是后面两个表要执行插入操作前要插入意向锁,但是意向锁不兼容间隙锁,两个事务都在等待对方释放锁,就造成了死锁。除了在设计层面避免出现死锁的场景,在发生死锁后可以通过设置事务等待锁的超时时间,超时则回滚避免死锁,或者添加死锁检测机制,检测到系统死锁就对事务进行回滚)22.MySQL的索引了解吗?一级索引二级索引说一说?答:了解,(八股背少了,一时没想起一级索引二级索引是啥)说了个主键索引和非主键索引23.索引的底层实现是什么?答:B+树,数据存储在叶子节点,节点直接像链表一样用指针相连,对查询范围数据很有效24.(很明显对我MySQL不太满意)你们学校学MySQL了吗?Java呢?答:学了MySQL,但Java是选修课25.(面试官默认我是研究生,其实我是本科生)那你在学校实验室里和导师做哪方面研究呢?答:说自己是本科生,没有导师做研究26.那你在学校有和老师做什么研究吗?答:有个大创项目,是无人机路径规划,但是是机器学习方面的,不是我的侧重点27.那你实习能实习几个月,一周来几天?答:我说我不是研究生学校束缚不了我,可以四月干到九月,一周出勤五天及以上28.你自己的优势?答:对新技术的学习比较热爱,学习能力和规划能力比较强,比如我的项目,Java以及Spring相关的学习都不是学校教学的,是我通过自己指定计划自学的,再运用到实际开发中来。29.那你是怎么自学的?答:csdn找文章,b站找视频,制定好学习路线,通过跟着视频、文章,或者阅读Spring的官方手册文档,循序渐进的进行学习30.算法题又是快速排序,之前腾讯面试也是快速排序,给了十五分钟5分钟不到速通了,原本十五分钟后差不多就到时间了,后悔写太快了,导致后面问我有没答出来的31.Redis缓存穿透、缓存击穿、缓存雪崩,及其解决方案答:Redis三剑客,八股照着背32.Redis主从复制答:有主服务器和从服务器,Redis会将数据从主服务器复制到从服务器上,哨兵机制保证主服务器宕机就切换到从服务器,这样不至于主服务器宕机后Redis就无法使用33.看了简历上写了GC,就问GC的的垃圾回收器有哪些答:(后悔了面之前简历没有背牢)答非所问的回答了垃圾回收算法,因为回收器我记不得了只记得算法34.你使用Kafka有遇到重复消费吗?重复消费会怎样?答:重复消费会导致通知推送多次,比如QQ发一条消息应该只推送一条通知,重复消费的话推送多条通知35.(面试官之前问出来我MySQL掌握不牢,最后两分钟继续发问MySQL)那sql如何优化?sql执行后底层是怎么样的?答:瞎说了几个感觉的sql优化方式,然后执行后底层回答不知道(面后补充:sql优化首先从索引入手,可以尝试使用覆盖索引,这样可以避免查询时使用二级索引引发的回表问题,插入数据时多行插入,以及为数据库引入缓存等;以一条select语句为例,首先MySQL由Server层和存储引擎层组成,首先在Server层先经过连接器,通过用户输入的用户和密码尝试建立客户端与服务器的连接,连接完成后进行第二步,第二步查找缓存,Server以键值对的形式存储sql查询结果,key为sql语句,value为查询返回值,如果查找到对应的key则直接返回value,否则进行下一步,但是这个查找缓存的功能在经常更新里的数据库很鸡肋,在MySQL8.0之后就被删掉了,然后呢就Server层的解析器,解析SQL语句,首先进行词法分析,提出select,form这样的关键词,然后对sql进行语法分析,判断语法正确与否,正确就构建SQL语法树,不对直接返回报错,正确之后呢就进入SQL执行过程,首先预处理阶段,看看是否有这个表或是否有对应字段,然后进入优化器阶段,确定SQL的搜索方案(就是根据索引搜索成本选索引),然后执行器和引擎交互执行SQL。然后在引擎方面,如果select传进来是主键,就直接在主键索引建立的B+树,由根节点进行二分查找找到主键key的指针,再递归指针指向的节点,找到对应数据返回,如果传入的是二级索引,则要在二级索引树上找到主键索引再去重复上述过程,最终将找到的结果返回给客户端。)反问流程:感觉自己面得稀碎,都不好意思反问,直接道谢下播了没想到刚面完一个多小时,美团就来电话约2面了
嵐jlu:贴主会更新每一个面试的面经,可以点进贴主主页查看其他面经(都会写的详细),可以关注我获得最新面经通知。
0 点赞 评论 收藏
分享
03-20 12:57
已编辑
吉林大学 后端
总结:项目+mid算法+计网八股,只没答上一个sql语句#阿里云# #26暑期实习# #java# #计算机# #阿里# #阿里求职进展汇总# 贴主会更新每一个面试的面经,可以点进贴主主页查看其他面经(都会写的详细),可以关注我获得最新面经通知。贴主的第二面(之前腾讯是第一面,这次更有经验了)首先自我介绍,把面试官引到我擅长的项目上1.询问项目的亮点答:登录注册模块采用邮件注册,密码存储采用MD5加密与加盐,登录使用Kaptcha验证码验证,拦截器进行登录状态检查;使用Redis做本地缓存,使用Redis集合数据类型来处理赞、踩,相互关注;使用Spring的声明式事务管理保证数据的一致性;使用Kafka作为消息队列对系统进行解耦,在用户操作后通过消息队列异步处理推送,避免同步操作性能瓶颈2.数据库存储的密码是明文还是加密答:加密的,用户输入的明文密码拼上盐值加密后存入数据库3.了解非对称加密和对称加密吗?答:了解,对称加密用同一个密匙,非对称有一对密匙,一个公匙,一个私钥4.哈希加密了解吗?答:了解,我使用的MD5加密算法就是哈希加密算法5.哈希加密对于对称加密和非对称加密的优点答:计算速度快,能快速对数据进行加密处理,而且是单向加密不能解密,就算我的后端数据库被攻破,也无法从数据库存储的密码中还原密码6.在项目中使用Spring和不使用相比Spring有什么好处?答:细说了IOC和依赖注入优点,AOP优点,事务管理优点,MVC优点7.项目中用到了什么设计模式答:第二个项目手写Spring,创建Bean用了工厂模式,保证容器中一个Bean只有一个实例用了单例模式,实现JDK动态代理和CGLIB代理使用了代理模式,处理请求采用责任链模式等8.讲一下责任链模式优缺点答:优点是解耦,每个阶段可以单独进行配置与扩展;缺点是不好调试,定位哪一个处理者出问题得一个个排查,还有责任链太长会降低性能9.你知道状态模式吗?答:行为设计模式之一,允许对象在内部状态改变时改变他的行为,但是我在项目中没有实际应用这个模式,所以没说展开10.享元模式知道吗?答:结构性设计模式,目的是减少对象创建数量,从而降低内存占用,比如说在我的论坛项目里,像用户名,头像这些需要频繁储存的数据就可应用享元模式,把常用的用户基本信息作为享元对象存入Redis作本地缓存11.你平时会看什么书吗?答:平时基本在学校看教材,假期会阅读一些小说、杂志12.你写代码最看重的一点是什么?答:想了一会说可维护性,然后论证了可维护性的重要性13.你觉得什么时候应该用事务,什么时候不应该用事务?答:事务就是一组操作,我要保证这一组操作的原子性时就应该使用事务,要么全部完成,要么全部不做,避免出现数据不一致情况14.看到我简介上的算法获奖经历,问我15分钟选一个难度的题目手撕,我怕15分钟写不出hard就选了中等手撕算法-LeetCode原题反转链表2   7分钟速通要求Java写,但是平常写算法都用的cpp,一开始写链表虚拟头结点用cpp写法导致报错,但改掉后成功ac15.来一道场景题,有一个合同,合同会和很多个应用关联,问我创建几个表合适答:创建三个表,一个是本身的合同表,一个是应用表,还有一个关联表,合同-应用关联表,关联表绑定两个外键16.如果创建表式要求几张表同时成功或者同时失败,如何写Java代码保证事务一致性答:使用Spring的声明式事务管理,使用@Transactional注解,就可以做到事务的原子性(同时成功或同时失败)17.要求写出上面的场景题,查出合同表中的top 5个金额最高的,连带查询出相关应用信息答:这里写了一会,对JOIN的运用不熟练,没能成功写出SQL语句,算是这个面试唯一没答上来的18.(面试官1说另一个面试官要来考察一下我的基础)我在浏览器输入https://www.taobao.com后,背后会发生什么样的网络请求?答:(窃喜,这是背的八股的第一大条)首先是DNS解析请求,...(过程省略);然后是TCP连接请求...(过程省略);然后就是HTTP请求,浏览器根据输入的url构造HTTP请求报文,...(过程省略);(说到这才发现是HTTPS)紧急补充,使用HTTPS协议,在TCP连接建立之后还会有一个SSL握手请求,会进行身份验证、密匙交换等操作,进一步保证信息安全性;最后页面加载完成还会有一些资源请求,比如CSS文件,JS文件;19.说说HTTP请求数据逐层传输最后到二进制传输经历的过程答:应用层HTTP协议把要传输的数据比如请求方法、请求头组成一个HTTP报文;然后HTTP报文到达传输层,传输层使用TCP或者UDP协议,TCP协议会给HTTP报文加上TCP头部,包含源端口号、目的端口号这些信息,根据三次握手建立可靠连接后,将封装好的TCP报文发出去;数据段到达网络层,网络层主要用IP协议,IP协议再给TCP数据段加上IP头部,包含源IP地址和目的IP地址;封装好的数据报来到链路层,链路层把IP数据报封装成帧加上帧头和帧尾,帧头包含源MAC地址和目的MAC地址,帧尾包含效验信息,然后就以2进制在链路层传播了20.网络传输到网络层,是如何找到下一跳发往哪,根据什么协议和算法?答:依靠路由协议,说了RIP和OSPF,RIP基于距离向量算法,...(省略原理),15跳不可达,收敛慢;OSPF协议基于链路状态算法,每个路由器会先了解周围链路状态,像数据结构里的图一样生成拓扑结构,然后把这些信息发送给网络中其他路由器,然后根据迪杰斯特拉算法计算出最短路径更新路由表,收敛快且适用于更大网络规模21.你在学校里成绩如何答:先说了基础核心课比如计网、数据结构、操作系统都学的很好,批斗了一下学校教的过时课程(20年前的破jdbc和web),说这些课我认为上的必要不大,所以没有学的很认真,这些课成绩差些,所以总体成绩不算很好,但是工作用的工程能力和算法能力锻炼的很好22.你的教育背景不错,今天也看出你的基础也很扎实,为什么你不选择去做算法工程师而是选择做开发呢?答:首先回答算法工程师要研究生起步,我对自己的规划就是本科不读研参加就业,而且在开发上我累计了一定的基础,做出了一定的成绩,也比较享受开发的成就感,而算法方面学了机器学习,感觉更偏向数学领域,就不是很感兴趣,最后还是决定选择做开发。反问环节:1.问了工作地点答:北京2.问了实习薪资答:说他也不知道结束,总用时1h
嵐jlu:可以关注贴主,我还会更新接下来的每一个面试的面经,都会记录这么详细,帮到你了就给帖子点个赞吧
查看23道真题和解析 阿里求职进展汇总
0 点赞 评论 收藏
分享
03-20 12:57
已编辑
吉林大学 后端
#腾讯# #腾讯求职进展汇总# #腾讯2025实习生招聘# #计算机# #Java# 贴主会更新每一个面试的面经,可以点进贴主主页查看其他面经(都会写的详细),可以关注我获得最新面经通知。总结基本纯八股,基本没有问项目,算法两道贴主的第一次面试(3.11图里是3.10是因为延后了一天),全程十分的紧张。首先面试官让自我介绍,应该是想从我的的介绍里引出问题,可是过于紧张只介绍了自己目前的大学大三的一名软件工程学生,没有谈到任何项目和获奖经历,面试官听完我讲完愣了一下,才开始转入面试1.现在主推语言(先说大二Cpp,大三做项目转Java)2.介绍一下java中的集合(先紧张卡壳了一下,然后讲了Collection和Map两方面,讲到Map的时候面试官继续发问)3.说到HashMap,他是线程安全的吗?(回答不是,然后说有CurrentHashMap有线程安全)4.CurrentHashMap怎么保证线程安全(回答使用了分段锁,介绍了分段锁机制)5.那除了你刚刚说的CurrentHashMap还有什么方法保证HashMap线程安全(又答了个synchronizedMap,也是通过锁的机制保证线程安全)6.那还有使得HashMap线程安全的其他方法吗(没答上来)7.那CurrentHashMap相比于synchronizedMap,通过不同的加锁方式,哪一个性能更好(这我不知道也没答上来)8.HashMap怎么解决冲突(细说了拉链法解决哈希冲突,提到了哈希表变大之后会变成红黑树存储)9.红黑树应用于哈希表性能好在哪里?(我从时间复杂度上解释O(logn)优于O(n))10.还有其他的解决哈希冲突的方式吗?(想起来有线性探测法,但是说不出详细的)11.查看简历后询问mysql包含哪些索引(组件索引,普通索引,唯一索引,全文索引,然后说了下索引工作方式)12.mysql常见存储引擎(InnoDB,介绍了innoDB的机制)13.InnoDB的底层数据结构(B+树,说了B+树的结构)14.为什么不用B树呢?(先说B+树相对于B树的优点,其中提到使用B+树磁盘读写性能更高)15.怎么使得读写性能更高?(从B+树存储和查找原理入手,B+树叶子结点存储数据,非叶子结点存储索引,从而使得每个节点存储更多索引信息,降低树的高度,B+树进行查找路径更短,所以磁盘读写操作更少)16.详细讲讲为什么范围查找性能更好?(从B+树节点有序相连入手,叶子结点通过指针相连形成有序链表,使得查询一旦找到要查的的范围起始点,就可以沿着链表顺序快速访问,而且B+树结构非常适合二分查找,相对的时间复杂度会更低)17.说B+树的时候提到了Redis也应用了有类似于B+树优势的数据结构,面试官直接抓住发问Redis使用情况(讲了项目里对Redis的使用)18.Redis常用的数据结构(String项目里用来存储用户信息,set项目里使用来管理帖子赞踩以及并集管理共同关注,还有list和sorted set)19.那Redis里的Hash你有用过吗?(又是Hash,这部分我背的不熟,老实交代用的不熟练)20.Sorted Set的底层数据机构是什么?(先想起来有一个跳表,面试关追问还有吗,想了很久说压缩链表,并说只知道名字,不知道具体实现,因为我前面说到的都细致解释了)21.问Redis持久化机制(回答两种,RDB持久化和AOF持久化)22.马上询问RDB底层的运行原理和具体执行(说了自动配置和手动配置,提到BGSAVE)23.追问BGSAVE具体执行(老实交代只记得这个命令,对底层执行还不清楚)24.开始问计网,TCP和UDP(细说了TCP的三次握手和四次挥手和UDP传输快但是不可靠)25.TCP的头部结构说一下(开始按顺序说TCP的头部存储的不同参数)26.那头部里的校验和占多少位?(16位)27.http中403错误码什么含义?(禁止访问,服务器拒绝客户端发送的请求,权限或者资源问题)手撕算法,面试官调试腾讯会议上面的ide,调试了五分钟没搞好,让我自己直接在自己的ide上写十五分钟内完成快速排序和二叉树中序遍历用c++写,二叉树写的时候被要求不能用递归要用迭代法算法都不难,但是因为没有腾讯会议上的输入样例提示,面试官也没说具体的输入样例核心逻辑很快就写好了,但是样例的输入尤其是二叉树那里一时没处理好(向输入前序然后输出后序来着)到时候面试官上来说因为没有在腾讯会议上写,就不要求运行写输入样例了,要求我细说两个算法的逻辑即可28.快速排序——经典的分治算法,寻找一个基准数,将小于他的排左边,大于他的排在右边,然后递归处理左右两边29.快排稳定吗?(不稳定)30.细说快排不稳定的原因(依赖于交换操作,可能导致数值相等的元素排序后相对位置发生变化)31.说几个稳定的排序算法(冒泡排序、插入排序、归并排序)32.二叉树中序遍历——利用栈模拟递归过程,首先将根节点以及其左子节点一次入栈知道左节点为空,然后弹出栈顶节点,再将右子节点作为新的根节点,重复这个过程到时间了,让我反问,不知道说什么,就问面试官,这是我的第一次面试,您认为我的表现如何,面试官官方回答:”我只是如实的记录你的面试表现然后把档案给上面的leader进行横向评估,这不由我说了算而由leader说了算。“也不知道这样反问稳不稳妥,说出去的时候其实就有点后悔了,然后向面试官道谢,面试结束。
wuwuwuoow:说说我自己对这些八股的理解,有问题可以一起讨论: 1.CurrentHashMap,面试官应该是想让你回答 JDK1.7 和 JDK1.8 的实现区别,为什么 1.8 的更好?1.7 是分段锁,但是锁的粒度还是比较大。所以 1.8 做了改进,如果目标位置上的节点为 null,就先 CAS 把节点直接放进去,避免加锁。如果目标位置存在节点,就使用 synchronized 对“头节点”加锁,接下来读写链表或红黑树就可以保证线程安全了,因为只有一个线程能访问该链表或红黑树。总结就是 CAS + synchronized 更小的锁粒度 + 避免创建 Segment 节约内存 2.哈希冲突的解决方案。开放寻址法,在数组中找到下一个位置放入元素,常见的有线性探测、二次探测、双重哈希。在 ThreadLocal 中,就采用了线性探测法;拉链法,典型的就是 hashmap;扩容,hashmap 和 ThreadLocal 都有通过扩容的方式解决哈希冲突,会设置一个负载因子,比如 0.75,达到该值就扩容。一般就是「扩容+拉链法」解决,拉链法可以解决哈希冲突问题,但哈希冲突多了性能就差了,通过适当地扩容可以降低因哈希冲突过多导致的性能问题,但不限制地扩容又浪费内存。所以要在内存和性能之间做权衡
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务