查看原文
其他

用 API 项目拿下面试,爽!

The following article is from 编程导航 Author 编程导航

今天分享 编程导航知识星球  里一位小伙伴的面经,凭借星球项目拿下了面试。

编程导航里已经手把手带大家完成了 10+ 个项目,并且每个项目都有对应的项目面试题和整理了小伙伴的真实面经,大家跟着实操完项目后,可以照着面试题和面经准备起来。

星球原文链接:https://t.zsxq.com/1809N1Hiw

本文已获原作者授权

大家好,我是二本院校的学生,去年加入星球,而后开始跟着星球的学习路线和项目教程学习,后面单独给星球嘉宾提问关于求职面试的问题。

陆续拿到了一些面试机会,绝大部分都是中小公司,分享个人的面经。

项目目前的情况是:星球 API 开放平台 几乎必问,智能BI平台 问的少。

项目介绍

API 开放平台项目流程介绍

项目分为多个子模块:

1)Api-backend:完成用户管理、接口管理、接口在线调用相关功能。

2)Api-gateway:实现路由转发、访问控制、用户鉴权、流量染色、统一完成登录校验、API签名校验、接口统计以及请求和响应日志的处理。

3)Api-interface:提供请求的真实接口功能。

4)Api-common:统一抽取的公共实体、接口。

启动 Nacos、Backend、Gateway、Interface、SDKClient 和 Common 需要提前在本地 Install。

先在 Backend 项目中调用对应的 InterfaceInfo/Invoke 方法,校验参数、判断接口 Id 是否存在、是否关闭等。

然后获取到当前登录用户,并查出对应的 AccessKey 和 SecretKey,并以此作为参数创建 SDK 客户端对象,然后把刚才参数中的 UserRequestParams 通过 Gson 库将 JSON 字符串反序列化为 Java 对象,SDK 客户端封装一系列请求参数,使用 hutool 工具包,将请求发送给 Gateway 网关项目。

在网关项目全局过滤中,我们先获取请求头上的一系列信息,包括“请求参数、路径、方法、来源地址”等,并通过获取请求头中特定信息实现流量染色。该部分设置了黑白名单,只允许 IP 地址为当前服务器的请求通过,然后我们再做鉴权,通过传入的 AccessKey 去找出对应的用户,并且对请求的时间等作校验,再通过 AccessKey 查出来的用户,进一步得到对应的 SecretKey。

同时,我们还需要对得到的 Path 和 Method 所对应的接口进行查询,判断是否存在,如果不存在则抛出指定的异常。

最后,如果上述校验都没问题,那么我们认为这个请求是合法的,通过一个返回结果处理器 HandleResponse,将用户和接口对应表 User_interface_info 中的用户的剩余接口调用次数等字段进行更新操作,结束后完成业务流程。

在上面的过程中,我提到了“鉴权、校验、查询用户、查询 SecretKey”等操作,这些操作对应的代码是在 Backend 项目中,如果我们直接把对应的代码放到 Gateway 项目,势必会增加项目的复杂度以及冗余等。所以我想到了使用 Dubbo 这样一个 RPC 框架,通过**@EnableDubbo、@DubboReference、@DubboService等注解,配置相应的 Yml 属性,并以Nacos** 作为服务的注册中心,实现了远程业务代码的调用。还使用了 Sentinel 对主要接口进行熔断和限流。

中厂一面(被拷打)

1)自我介绍

2)讲讲 API项目

3)为什么不用 Feign 直接去封装 SDK 的接口?

4)我现在希望你换个方式实现 SDK:如果接口用 Feign,并且把签名、异常、日志都加进去,你会怎么去做 SDK?

5)提示:异常是在哪儿做的,处理过后对吧?日志是在调用前后做的对吧?你觉得这像什么?(像把饭喂到嘴边,哈哈哈)

6)回答:Spring AOP,然后讲述了一下 Spring AOP。但还是不知道怎么做,已经吓傻...

7)面试官:没事,这个问题不用纠结,你以后就会了。

8)Redis 实现分布式 Session 的原理是什么?

9)Cookie 和 Session 如何保证会话的一致性?

10)不太懂意思

11)面试官:就是说我去请求 接口,我怎么知道是这个人而不是别人?我怎么定义到别的方面去,保持后端可以 识别出来这个人是谁?

12)回答 Cookie 怎么存储的,Session 怎么存的,反正讲了自己对 Cookie 和 Session 的理解,不至于什么也不说。

13)你是看文档看的 Dubbo 文档学习的对吧?你注册中心是用的 Nacos 对吧?怎么做的?

14)Redis 用过吗?用了什么数据结构?(疯狂输出)

15)你现在是在学校吗?在哪个城市?

16)你为什么要来公司所在的城市?

二面(不难,总体不错)

1)自我介绍

2)项目是自学的吗还是?

3)为什么要做 API 开放平台?

4)项目模块和特性都是自己设计的吗?

5)你觉得整个 API 开发过程比较难的点是什么?

6)Sentinel 限流工具是你自己本地搭的吗?

7)你本地启动 Redis 或者 Sentinel 的过程是什么样的,配置怎么调的?

8)Hashmap 数据结构?为什么要把链表转红黑树?有什么优点?

9)Synchronize关键的实现原理?(唯一一个完全忘记了的)

10)Java 里面常用的线程池有哪些?

11)MySQL 在 InnoDB 引擎里面,常用的索引类型哪些?

12)索引所用的数据结构是什么?

13)你觉得可以用二叉树来实现索引吗?

14)聊岗位位置

15)聊职业规划

16)反问:咱们公司的转正规则

17)反问:咱们公司的技术栈、业务

18)最后:面试官说面下来感觉比较好,并给我提了一点学习建议

HR面

HR 视频面:自我介绍、聊在校经历、聊竞赛经历、聊入职时间、聊职业规划等。

我认为主要是考察性格和语言表达能力,HR 对我的感觉比较好,说下周发 Offer,但是要补个笔试,说之前面试官们给搞忘了。(然后下午接到消息说不用补了?啥情况呢,我的算法白刷了?hhhh)

以上,就是今天的分享,希望对大家有帮助。


欢迎学编程的朋友加入鱼皮的 编程导航知识星球,和 2.8 万名 编程学习者共享知识、交流进步。

星球拥有 30+ 原创学习路线和专栏、上千篇 优质编程学习求职干货。

还有鱼皮从 0 - 1 全程直播带做的 原创项目 ,手把手带你 掌握独立开发项目的方法 ,并且提供 现成的简历写法 ,成功帮助不少小伙伴找到了工作。

并且星球里已经汇总了求职过程中的高频问题,求职前完整阅读一遍,能少走很多弯路,找工作不迷茫!

欢迎感兴趣的同学加入体验,限时领取 36 元优惠券:

三天内不满意可全额退款,有没有用自己试了才知道


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存