携程Java面试-凉经-2022.9.01
- 自我介绍
- 看到项目,技术栈有哪些?
- Spring,SpringCloud,MyBatis-plus,MongoDB,Nacos
- 谈及项目,那么问项目,听到Nacos
- 为什么要用Nacos,是由很多微服务吗?
- 在此,我简要介绍了一下项目中的一些通用微服务模块
- 为什么用redis?用mysql存储redis的内容可以满足业务需求吗?
- 哎呀呀,主要是用来加速响应的。不用redis当然可以,但是由于根据相同样本编号得到的数据结果,若样本数量是不变的话,其对应结果也是不变的。但考虑到频繁访问,就采用redis进行缓存了。(在此,面试官频繁发问,可能是我没理解面试官的问题,也可能是我没回答到点上)
- 数据缓存。缓存数据的判断结果(涉及到具体业务)。是一个string。
- 笨比在此,粗粗了解redis数据类型,不深入。redis有大基本数据类型,包括string,hash,list,set和zset(有序集合)
- 我简历上写:主要解决单表的数据查询问题;
- 问:那么业务上是在这方面有什么困难吗?
- 我是笨蛋,回答没有困难。我需要需改简历,改为解决多表的连接查询问题。参考:https://cloud.tencent.com/developer/article/1937160#:~:text=MybatisP,%E5%86%B3%E8%BF%9E%E6%8E%A5%E6%9F%A5%E8%AF%A2%E9%97%AE%E9%A2%98%E3%80%82
- 抱歉,我只能记起sql注入是一个什么问题,but解决问题我只回忆起用preparedStatment使用占位符?进行代替的。mybatis-plus是如何解决我增加粗粗看了一下。没回忆起来。主要是#{ }和${ }。参考:https://zhuanlan.zhihu.com/p/234759240#:~:text=mybatis%E6%B2%A1,sql%E6%B3%A8%E5%85%A5%E6%94%BB%E5%87%BB%E3%80%82
- 那么这二者是怎么结合实现缓存的?
- 啊哈,springCache是一个大框架,指定缓存实现为redis,然后配置redisConfig类即可。
- 简历写:Spring Gateway统一管理用户认证,JWT工具生成token;
- 问:JWT本身就有用户认证功能,已有JWT为何还要Gateway?你是怎么结合这二者?
- Gateway我用来用户认证,JWT将生成的token存入redis,进行认证判断。
- 我仔细回忆了一下。大概有三部分,公共部分、私有部分、签名部分。私有部分可以放自己的内容。比如用户名和用户id。参考:https://www.jianshu.com/p/576dbf44b2ae
- 你有了解MongoDB的ObjectID吗?
- 抱歉,无能为力。只用了一下,对其了解甚少。不过感谢面试官给我介绍了一下mongoDB。我真的只是了解使用。
- 微信扫码登录的流程?
- 这是我的锅。我仅简要回答了一下accesstoken。应该把流程给回答出来,but我忘啦。痛定思痛,再次回顾整个项目。
- 题目是剑指offer 26题,树的子序列问题。参考:****************************************************
其实问题比较简单,有A树和B树,判断B树是否是A的子序列树。
主要思路是遍历A树的每个节点,判断当前节点的值和B树的头节点值,以及当前节点左右子树的值与B树的左右子树的值是否一致。递归判断。
我理解成是否子树问题,直接序列化,判断是否字串问题。错咯,面试官很温柔的提醒我,序列化会有问题哟,but我已经懵了,听不进去啦。哭唧唧。
ii. 归并排序的时间复杂度和空间复杂度,以及实现思路实现思路:划分两部分,递归划分,两两合并。参考:https://zhuanlan.zhihu.com/p/124356219
but,我错了。我以步长进行划分,对步长内的数组进行排序后再两两合并。
时间复杂度我是回答O(nlogn), but,空间复杂度我回答O(1)(麻中麻,怎么可能是O(1)嘛!就算是我的错误思路,也需要O(n/m)=O(n)嘛,可恶,我是笨蛋)。
结论:面试官很温柔,从本次的面试过程来看,我还有许多不足之处;在项目中,对项目整体的把握不足,对项目细节如为何用该技术,以及该技术的基本原理,业务的运行流程等还有不足之处。在算法中,未仔细读题。基础的算法掌握不足,基础排序要好好把握,剑指offer要好好刷。
希望大家都有一个美好的未来。每一次面试都是一次提升自己的机会。