辰
2023-12-25
#面试# 分享一个我今天找的一个实习的面试 面试官:你先做个自我介绍吧 我:我叫xx,现在就读于xx大学大三,专业是xxx,学校有教授部分编程相关的知识,然后主要是自学的。 问:如果我有好几个系统,比如订单系统,支付系统,为了保证数据的一致性,你有了解过或者思考过吗 答:我了解阿里开发的一个分布式事务Seata框架,他允许弱状态并保证了最终一致性 事后补充:在这我想说CAP原则和BASE理论的,但我一时间忘了BASE理论这几个字就没说 继续问:Seata框架也并不全是最终一致的,它分为几个模式,这一块你知道吗 答:它分为四个模式:XA模式、AT模式、TCC模式,还有一个使用场景不多,没记住 问:你项目中的限流的策略是什么 答:我项目中的限流是使用Redisson来实现的,使用的是令牌桶算法 问:redis实现分布式锁有了解过吗 答:这个不了解,但根据Seata的实现原理可以通过保存一个xid来实现类似的效果 问:mq的常用场景 答:主要是来实现一个异步化 面试官补充:除了实现异步化以外,mq还能实现解耦、多系统间通信还有对突刺流量削峰填谷的作用 问:redis的常用场景 答:限流,缓存,因为redis将数据保存在内存中,读写效率很高,因此还可以用于秒杀场景,但秒杀这一块的具体实现我就不太清楚了 问:在使用Mybatis接收参数时候使用的是#{}还是${} 答:主要是用#{},这样在执行的时候它会先预编译成一条用?占位的sql,然后将参数传进去,效率较高。一些特殊情况需要使用${},但这样是直接拼接的sql,有sql注入的风险 问:如果我有一个需求需要查100条数据,但我每次只能查到20条,有什么效率高的方法 答:在这里可以使用多线程来解决,根据阿里的编码规范,使用多线程必须经过线程池,所以可以创建一个线程池来完成这个需求,因为是查询数据库操作,因此这是一个IO密集型线程池,因为这个需求最少得执行五次,所以可以设置线程池的初始线程数为5 继续问:如何接受线程的返回值呢 内心PS:我不会啊,我没遇到过需要返回值的情况 面试官给我的回答我也忘了 问:nginx有使用过吗 答:有,我的前端部署在nginx,用它解决的跨域 接着问:是在请求头里添加了什么吗 答:不是,是将前端指定路径的请求转发到了后端 然后这里面试官就跟我好好说了说 问:在设计数据库的时候有什么考虑 答:我这个项目的数据库结构比较简单,在建表时尽量避免使用外键,添加了外键可能导致后端代码中的处理比较麻烦,建好表之后在常用字段上添加索引 问:如果我要查多个字段,建立索引有什么考虑 答:索引的使用有一个最左匹配原则,就是它只有先走了左边的索引才会走右边的索引,所以必填的索引放左边,其他的放右边 继续问:是使用聚集索引吗 答:是的 问:比如我有一个扣费接口,因为某种错误可能会执行多次,请问在设计接口的时候应该有哪些考虑 答:应该考虑幂等性问题,执行一次或多次的最终结果应该保持一致 问:分布式系统生成唯一id有哪些方法 答:我了解到的有一个雪花算法 面试官:好的,那我们今天就先问到这里。
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP