后端Java日常实习生面试(2023年11月10日)

面试岗位为:Java 后端开发实习生

面试时长:30分钟

面试时间:2023年11月10日

  1. 首先介绍一下项目吧

这里介绍时有一个失误,没有主动把屏幕共享给打开,因为我在面试之前已经在 processon 上画好了项目的流程图,如果把屏幕共享打开的话,给面试官介绍着,会让面试官更容易理解,这个很重要!一定记着用流程图给面试官介绍!

我的两个项目分别是:手写 rpc(Guide哥) 和 API 网关项目(小傅哥),介绍项目时,就介绍一下项目的流程,还给面试官介绍了一下目前在校跟随实验室做项目,有自己校内的也有接的外部的项目

  1. rpc 是什么?为什么要使用 rpc 通信框架呢?

rpc 是远程过程调用,使用 rpc 是因为 rpc 比较快,使用 rpc 可以自己定义传输协议(tpc协议),避免传输无用的数据,可以有效减少报文体积并且 rpc 是基于二进制流进行传输的,http 是基于文本、json 串

(后边查完资料补充:rpc 通信框架都自带了负载均衡,并且服务上线下线可以做到自动通知,不影响上游调用者,而 http 需要配置 nginx 来实现负载均衡,并且如果新添加/修改 http 请求,需要修改 nginx 配置)

  1. 什么情况下使用 rpc 呢?

在多个微服务之间使用 rpc 进行调用

(查完资料补充:rpc 一般用于分布式系统中,常用于内部调用,当项目太大,需要解耦服务时,可以使用 rpc 解决服务之间的调用问题)

  1. 如果此时新增一个服务,需要怎么做可以让其他服务进行调用?

新增一个服务的话,就将服务给注册到 Zookeeper 中去,会根据服务的全限定类名作为一级节点,将该服务的 Netty 通信地址作为一个二级节点存储在全限定类名下,也就是在 com.zqy.test.HelloServiceImpl 下可以有多个节点提供服务,比如192.168.1.1:8000, 192.168.1.2,那么在其他服务需要调用时,就去 zookeeper 中查询这个节点,以及拿到该节点下的通信地址,并且进行负载均衡拿到最终需要进行通信的地址。

(这里本来是想说负载均衡使用了源地址哈希,让客户端多次调用可以访问到同一个 rpc 服务,可以建立有状态的会话)

  1. 鉴权如何做了?

使用 jwt+shiro 进行实现,当请求 API 网关时需要携带 jwt token,鉴权时会通过 shiro 进行认证操作,通过 subject.login() 之后在 Realm 对 jwt token 进行解码,如果报错了,说明认证失败,拒绝进行后边的操作即可

上边是项目相关的,接下来问了解过 Java 的源码吗?

我说了解过 HashMap 的源码,这一段时间其实一直准备 Redis、MySQL、Netty 相关的面试题,Java 基础的一些源码还没有准备,所以面试 Java 实习生、校招时,一定先把 Java 基础的内容准备好,其实在面试时,距离上次学习 HashMap 面试题已经过去快半年了,基本上忘记完了,在 HashMap 上被拷打了快二十分钟,正常面试就结束了,HashMap 问的有下边几个问题,明天会整理一篇 HashMap 面试题详细的文章出来:

  1. HashMap 底层结构
  2. 怎么计算 HashMap 添加元素时的下标呢?
  3. HashMap 怎么 put 元素?
  4. 什么时候会扩容呢?
  5. HashMap 线程安全吗?举一个不安全的例子?
  6. 如果想保证线程安全的话,该如何做呢?
  7. ConcurrentHashMap 怎么做的呢?
相关推荐
南宫生8 分钟前
力扣每日一题【算法学习day.133】
java·学习·算法·leetcode
獨枭10 分钟前
如何在 Mac 上安装并配置 JDK 环境变量
java·macos·jdk
进击的_鹏14 分钟前
【C++】list 链表的使用+模拟实现
开发语言·c++·链表
m0_7383556922 分钟前
java泛型
java·开发语言
web2u26 分钟前
Docker入门及基本概念
java·运维·服务器·spring·docker·容器
qq_2187533137 分钟前
常用Git命令
java·git
大模型铲屎官38 分钟前
哈希表入门到精通:从原理到 Python 实现全解析
开发语言·数据结构·python·算法·哈希算法·哈希表
L_09071 小时前
【C】队列与栈的相互转换
c语言·开发语言·数据结构
计算机小白一个1 小时前
蓝桥杯 Java B 组之背包问题(01背包、完全背包)
java·职场和发展·蓝桥杯
qq4054251971 小时前
基于python的旅客游记和轨迹分析可视化系统设计(新)
开发语言·python