WXG一面凉经

一面

先两道算法题(三十分钟),再问项目,根据项目具体内容提问八股(二十分钟)。被狠狠拷打,水货原型毕露,不过面试官非常的好,对答不出来的也会加以引导。

以下回答如有错误,请各位大佬点点😭

算法题

面试官说哪个语言写都可以,但是我C++有点忘了,换的Java写的。

  • 子集 - 力扣78(LeetCode) ******

    直接dfs暴搜

  • 找到两个串的最长公共子串,若多个任意一个均可

    LCS典题。一开始二分想假了,然后直接dp秒了,这里先写的二维dp,跟面试官说可以滚动掉一维,然后演示了一下。

项目和八股

  1. 介绍项目内容,设计是怎么样的?这套系统如何考虑设计的,从技术实现上来描述一下,比如涉及到的服务、模块、功能、层次?

    没条例性地胡扯,想到什么说什么

    • 比如如何设计后台接收用户请求?

      先通过Nginx转发请求,然后进行身份鉴权,最后才到我们的Controller

    • 这里Nginx转发的作用?

      一是反向代理,隐藏真实的服务器地址,将请求转发到上游服务器;二是负载均衡,缓解服务器压力

    • 负载均衡的方式?

      轮询、响应时间、权重、随机、区域

  2. 项目是怎么实现的,用了什么框架?

    主要是主流框架SpringBoot、MyBatis,没用中间件

    • 你指的中间件是什么?

      RabbitMQ、Gateway

    • Gateway是做什么的?

      负载均衡、反向代理、请求拦截

  3. 服务直接连的数据库吗?

    使用了Redis缓存,先查缓存再查数据库

    • 缓存更新策略

      主动更新 + 延时删除,以保证数据一致性

    • 假如数据库更新成功,但是Redis因为延迟等原因更新失败,你想保证两者保证“事务性”,即同时成功同时失败,该如何处理?

      不知道

      延时双删:先删除缓存,然后更新数据库,延时一段时间,然后再次删除缓存。 ******

      消息队列:数据库更新成功后,将更新操作放入消息队列,由另一个服务消费消息并更新缓存。******

    • Redis缓存存在的问题?

      缓存穿透、缓存击穿、缓存雪崩,讲了其各自的原因和解决方法

    • 你说解决缓存击穿使用互斥锁,但那些未拿到互斥锁的线程等待时间过长,查询过程就变成串行了,怎么解决?

      不知道

      反问时,面试官回答的答案:

      一种解决方案是请求合并。对于请求相同key的线程,只让一个线程去查询数据库,其他线程等待这个线程的查询结果。这样可以避免多个线程同时查询数据库,减少数据库的压力。这种方案在Go语言中的GroupCache库中有实现。

      另一种解决方案是使用限流。对于请求频率过高的key,可以限制其请求频率,超过限制的请求直接返回异常,而不是等待。

    • 访问Redis使用TCP还是UDP?

      不知道

      来自ai的回答:

      Redis使用TCP协议进行通信。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它能确保数据在网络中的可靠传输。相比之下,UDP(User Datagram Protocol)是一种无连接的协议,它不保证数据的可靠传输。由于Redis需要确保数据的可靠传输,所以选择了TCP协议。

    • TCP与UDP的区别?

      忘了,寄,八股没背熟

    • WebSocket使用TCP还是UDP?

      不知道,然后瞎吹。因为WebSocket需要保证数据的安全稳定,比如TCP对丢失的数据包会有超时重传的等方式以保证数据稳定。

      来自ai的回答,同理Redis。

反问

  • 问了实际是如何解决缓存击穿、缓存雪崩

  • 我存在的问题和不足

    题目做的还不错,认为与你参加比赛的经历有关。

    但在项目实施上,没有深入思考和探索其中的问题,只是完成了一些基本功能。深入学习和理解使用的技术和框架,例如Spring Boot,理解其内部运行机制。

#实习基地##面经#
全部评论

相关推荐

头像
04-24 15:35
点赞 评论 收藏
转发
5 23 评论
分享
牛客网
牛客企业服务