26届双非大佬挑战大厂后端实习面经解析

1.一分钟介绍一下自己
2.看简历是26届 多久开始学的java 项目做的时间点 学习方式
3.介绍一下两个项目 亮点以及架构
4.第二个项目用到了哪些技术栈 遇到了哪些问题
5.聊了聊关于mp的使用
答:MQ(Message Queue)主要用于在分布式系统之间进行通信,是一种存储消息的容器。它的基本模型包括生产者、消费者和消息队列,生产者发送消息到队列,消费者从队列中获取并处理消息。

在实际应用中,MQ有许多重要的应用场景。比如,它可以用于异步处理,就像用户注册后需要发送注册邮件和短信,通过MQ可以异步地完成这些任务,提高处理效率。同时,MQ还可以用于服务解耦,降低系统之间的耦合度,提高系统的稳定性和可维护性。在流量削峰方面,MQ也发挥着重要作用,它可以把流量的高峰和低谷做一个平衡,避免系统过载。

此外,MQ的工作原理也非常巧妙。它保证了消息的可靠性,即使消息在传输过程中丢失,MQ也会进行重传。同时,MQ还支持消息的顺序性,确保消费者按照生产者发送消息的顺序来处理消息。

6.登录的具体流程 讲讲md5怎么加密的?

答:MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,它可以将任意长度的“字节串”映射为一个128位的大数,并且以32位十六进制数字表示的字符串形式给出。这个加密过程是不可逆的,意味着一旦原始数据被MD5加密,就不能直接从这个加密后的哈希值恢复出原始数据。

下面是MD5加密的大致步骤:

填充:MD5首先会对输入数据进行填充,使得其长度对512取模后余数是448。填充的方式是在原始数据的后面先添加一个1,然后是若干个0,直到满足上述条件。

附加长度值:在填充后的数据后面附加一个64位表示原始数据长度的二进制值。这样,处理后的数据长度就是512的倍数。

初始化缓冲区:MD5算法使用四个32位的寄存器(A, B, C, D)来保存中间结果和最终结果。这四个寄存器被初始化为特定的值。

处理数据块:将填充和附加长度值后的数据分成若干个512位的数据块,然后对每个数据块进行如下处理:

将数据块分为16个32位的子块。
进行四轮处理,每轮包含16个步骤,每个步骤都会根据一定的算法和当前寄存器的值以及子块的值来更新寄存器的值。

输出:处理完所有的数据块后,寄存器A、B、C和D中的值就是最终的哈希值。这四个值连接在一起,形成一个128位的二进制数,然后通常被转换为32个十六进制数字表示的字符串形式。

MD5算法的安全性在过去曾经被广泛讨论。虽然它对于防止数据被篡改或确保数据的完整性非常有用,但由于存在所谓的“碰撞”问题(即不同的输入数据可能产生相同的MD5哈希值),MD5不再被视为安全的密码散列函数,特别是在需要高安全性的场合,如密码存储。在这些情况下,通常推荐使用更安全的算法,如SHA-256或bcrypt。

7.jwt是什么?

答:JWT,全称JSON Web Token,是一种开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。这些信息可以被验证和信任,因为它们是数字签名的。JWT可以使用HMAC算法或者是RSA的公私密钥对进行签名。

JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部通常包含两部分信息:令牌的类型(即JWT)和所使用的签名算法(如HMAC SHA256或RSA)。载荷部分包含有关用户和其他数据的信息。签名部分是对头部和载荷进行签名,以确保数据没有被篡改。

JWT通常用于以下场景:

身份验证:一旦用户登录,每个后续请求都将包含JWT,允许用户访问该令牌授权的路由、服务和资源。单点登录是JWT的典型用例,因为它的开销很小,并且在跨多个域/子域时很容易使用。
信息交换:JWT是在各方之间安全传输信息的好方式。因为JWT可以被签名(例如,使用公钥/私钥对),所以你可以确定发件人是谁以及消息是否被篡改。

8.缓存三兄弟?

答:缓存三兄弟指的是在使用缓存系统时可能遇到的三种常见问题,它们分别是:缓存穿透、缓存击穿和缓存雪崩。这名字有点搞笑。

9.项目里的互斥锁?

10.超卖问题如何解决?

答:分布式锁:在分布式系统中,使用分布式锁可以实现跨机器共享互斥控制机制,保证操作的原子性和数据的一致性。这样可以防止多个请求同时访问和修改库存,从而避免超卖现象。
乐观锁机制:乐观锁机制通过版本号来判断提交的更新操作是否有冲突。当多个请求尝试修改同一数据时,只有版本号与原始数据相匹配的请求才能成功更新数据,从而避免超卖。

库存预扣:在订单生成时,可以先预扣库存,并在订单支付成功后再真正扣除库存。这样可以防止用户在生成订单后长时间不支付而导致的库存占用问题。

库存缓存:将库存信息映射到缓存中,可以快速响应库存查询和扣减操作。通过缓存,可以减少对数据库的访问压力,提高系统的响应速度。
唯一索引约束:在网络不好的情况下,用户可能多次点击提交导致多订单问题。通过在秒杀表中对用户ID、商品ID和本次活动的code设置唯一索引约束,可以避免多插入问题,从而防止超卖。

布隆过滤器:布隆过滤器可以实现重复提交的限制,防止用户多次点击导致的超卖问题。
事务隔离级别:可以将数据库的事务隔离级别设置为串行,但这可能会让原来没有冲突的事务也得串行执行,影响系统性能。因此,这种方法需要谨慎使用。

11.秒杀场景你的具体实现 聊聊代码
12.websocket 讲一下 具体的操作 (有点忘了 说了个大概以及记得的注解)
答:WebSocket是一种在Web应用程序中实现实时双向通信的协议,它基于TCP连接,提供了持久化的、全双工的通信通道,使得服务器和客户端之间可以实时地推送和接收数据,无需客户端每次发起请求。WebSocket协议由通信协议和编程API组成,它的数据格式比较轻量,性能开销小,通信高效,可以发送文本和二进制数据。

WebSocket的具体操作主要涉及浏览器通过JavaScript向服务器发出建立WebSocket连接的请求,一旦连接建立,客户端和服务器端就可以通过TCP连接直接交换数据。以下是一些关键的操作步骤:

创建WebSocket对象:在客户端(通常是浏览器),使用JavaScript创建一个WebSocket对象,指定要连接的WebSocket服务器的URL。
建立连接:WebSocket对象尝试与服务器建立连接。在连接过程中,可以进行必要的握手和认证操作。
发送数据:一旦连接建立成功,客户端可以通过WebSocket对象的send()方法向服务器发送数据。这些数据可以是文本、二进制数据或其他格式的数据。
接收数据:服务器可以通过WebSocket连接向客户端推送数据。在客户端,可以通过WebSocket对象的事件监听机制(如onmessage事件)来接收服务器发送的数据。
关闭连接:当不再需要WebSocket连接时,客户端或服务器可以主动关闭连接。这可以通过调用WebSocket对象的close()方法来实现。

在WebSocket的使用过程中,还需要注意一些细节,如处理连接失败、重连机制、消息编码和解码等。此外,由于WebSocket是基于TCP连接的,因此在分布式场景下需要特别注意session的管理和同步问题。

WebSocket的应用场景非常广泛,包括实时聊天室、在线游戏、实时数据展示(如股票行情、天气预报等)、社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等需要高实时的场景。在这些场景中,WebSocket能够提供实时、高效的双向通信能力,为应用程序带来更好的用户体验和功能实现。

13.项目里布隆过滤器怎么自定义的
14.分布式锁具体的实现 项目里优化的思路
15.乐观锁悲观锁
16.AOP怎么用的 用在哪的
17.hashmap底层讲一下
18.为什么引入红黑树 红黑树的性质 优点
19.mysql的锁了解吗
20.mysql索引数据结构
21.为什么用b+树 有什么特性 区别在哪
22.创建索引需要考虑些什么 索引优化有没有相关经验
23.用过linux吗 linux常用的命令有哪些
文件里过滤用什么(一时没想起来)
24.聊聊国奖项目 讲讲极小化极大算法怎么实现的
25.反问
大厂校招实习最新面经解析 文章被收录于专栏

专注于最新各大厂最新面筋解析

全部评论
佬投的是暑期实习还是日常啊
点赞 回复
分享
发布于 03-27 22:44 北京

相关推荐

3 32 评论
分享
牛客网
牛客企业服务