9.13xx科技 实习一面(25分钟)
自我介绍
可以简单介绍一下第一个项目的应用场景?
这主要是对于开一个软件开发的一个开发者来进行使用的。当然你用户的话,你也可以在线对一个对一些接口一些在线的一个调用。
主要对开发者来说的话,他可以对一些在这个平台上线的一些接口对进行一些。比如你有些功能需要一些接口,需要一些三方接口来实现。你可以在这个平台上来进行一些寻找。它会比如有一些你需要前端需要调用一个当日的每日的天气。在这个平台上你可以根据提供一个文档,在项目在自己的项目中进行一个接入。同时的话他也提供了一个SDK的一个工具包。本地的一个SDK你可以用开发者可以下载到本地,对这个项目进行一个整合到自己的项目中,大致是这样一个作用。
你这个项目相当于是整合了第三方的接口然后进行SDK的一个开发吗?
也可以三方来接入自己,也可以上线一些自己的原创的一些接口。相当于是一个平就是一个也可以理解为你那种对所有的接口进行一个聚合,包括三方的以及自己的一些接口。
本项目中你用到了Dubbo,请问在项目中起到了什么作用呢?
这个项目因为是分模块的,它在引入double它一个远程调用,对不同模块之间的一些接口进行一个远程的调用。可以个人开发者的话不用关心不同模块之间的一些远程的调用的传输协议,把它当成像本地方法一样实现不同模块间的调用。
项目中提到用redis实现了限流,请问是如何实现的呢?
我这个是去通过redis的Redisson 的 RateLimeter。它是底层是基于令牌桶算法来进行一个限流。它就是你一个请求,如果想要对这个接口进行访问,他会从这个令牌桶里面给你分配一个令牌。你只有拥有这个令牌的话,你才能进行访问。然后当令牌里面当当这个令牌桶里面令牌没有的话,你只能等待或者被这个请求被拒绝,来保证防止一些同一时间段有有很多很多请求对系统造成一些影响。
可以讲一下数据库的分库分表的应用场景以及分库分表的时候需要注意的地方?
一般你如果你这个项目一一些数据比较小的话,你完全用不到分布分表,就可以对一些性能进行优化。如果要用到分布分表的话,可能就是你你这个系统的用户或者一些数据比较大,需要对他进行一些分分库分表。分库的话就相当于是把它把它设置,把它对对它进行一个分布式的一个数据库的一个部署。分表的话就相当于是对同一个表进行一个一个轮询,相当于轮比如你填你前端对他进行请求,一个数据库请求的话,会根据一个轮询,你对它不同的数据插入到不同的表中,对同一个分表是针对同一个表进行不同的一个划分。然后再库分表的情况下,可需要注意的是你要对你这个系统根据系统的根据你这个设计系统的一个架构,实现不同的一些方案。(这里答得不是很好,面试官让我后面再仔细看一下)
如果针对一个订单表,每天会产生几千笔订单,一段时间内甚至系统会达到亿级别的,这种情况下如果c端和b端都想查看订单的数据,基于不同的权限如何来进行订单表的分库分表呢?
这种订单表的话,你就你针对用户端,用户端他只需要你你用户端的话只需要关心你自己的订单的信息。你这个时候你可以根据每个用户对他进行单独一个分表,就每一个用户拥有一个他自己的订单表。然后的话你用户有订单比较大,然后对一个管理员后台管理的话,他需要知道自己每个月的一个下单的数量。这个时候他他应该是。需要进行分表的。
你讲到的这种情况只适合c端来看自己的 订单号,但管理员想看后台本月的订单情况,没有办法实现,这种情况下思考一下应该如何设计库表呢?
确实是没有想到这么多。
mysql的集中隔离级别,分别有什么作用?
读已提交就可可重复读以及串行化这四种读未提读未提交的话读未提交的话相当于是你你未提交,你比如线程A和B你线程A还未对这个数进行提交的情况下,你B已经B已经可以看到该A提交。A未提交这个数据就会造就会造成贩毒以及藏毒一级不可重复读,不可重复读的问题。
读未提交,读未提交的话就可以解决脏读的问题。然后可重复读的话,你在这种情况下可以防止。可重复读的话,它可以防止脏毒以及不可重复。脏读,但是他也可以阻止一些阻止大部分的贩毒的情况。但是你要想对这种情况都阻止的话,就必须要用可串行化。但是可串行化的话,他他会他是对整个过程加速就比较耗费时间。所以说mysql的默认情况下就默认支持的是可重复读。
发布一批优惠券,如何来进行设计能够保证不会发生超卖的问题?
这种情况下,这种确实每个人只能用,先要考虑他是每个人是否能多次抢。如果每个人只能抢一次的话,就要对就每个用户你要对每一次进行抢锁的时候,你要先对这个线对用户线程加一个锁。最后当他他他先会判断这个锁,先判断这个券他有没有还有没有剩余。如果有剩余的话,先看这个用户有没有用户线程有没有获取到这个锁。如果获取到锁的情况下,他才能来抢到这个券。如果他没有这个现成的话,他只能只能等待或者就是被。
可以基于哪种锁来进行设计?
设计锁的话,我感觉这里可以设计个基于ReentrantLock,它可以有它有那个抢占式的锁。然后你每个用户你可以每不同的用户同时过来的话,你看哪一个他有他会抢到这个锁,就不用比那种公平锁的话,它需要每个用户先来先服务。在这种情况下不是很合适的
你觉得这种券可以放到redis里面吗?说一下原因
Redis我感觉有点不太合适,因为redis是基于缓存的。你。你缓存的话,它缓存跟如果把这些券的把这些券的数量存到数据,存到通过mysql同步,放到redis里面进行缓存。这个时候有可能会造成缓存不能及时的清理掉。(面试官补充到存到redis里面就算不设置过期时间,也只是一个key存在,并不会影响性能,所以其实是可以存入redis里面的)
我进行了一些分散的阐述:
对正常来说这种来说通常是因为有两种方式。一种是通过总数每次递减,每次得到一个减1,也可以是初始是零,然后每次加一加加法的话,你可以可以得到可以得到一个总数。然后减就是每一次加你可以知道它一个调用的次数,而不用再单独再设置一个剩余次数。
如果此时新增了5000张券,这种情况下基于哪种设计更合适呢?
这种就加的方式合适吗?因为你原来是5000个。你如果要减的话,减到已经减到零了,你要再加5。再你如果此时再发放5000了,你要还难道还从0到负-5000吗?这时候你要通过加的话,你如果是5000,你此时只要比较,如果这个加加到1万的时候停了就行了。我感觉如果这个时候加的话更好一点。
第二个项目有什么功能可以简单介绍一下吗?
就是你比如传统的那种BI系统的话,我们当时写的时候调研过他是你必须有你正常来说先需要把一些数据进行一个一个上传,然后通过数据分析师来对这个数据分析之后,通过你选一个什么样的图表类型,然后再进行人工的一个数据分析师进行人工的一个分析,然后再得到一个分析的数据。然后我们这个就是相当于当时AI正式火的时候,我们就通过一个用户不用关心你这个,只要是一个普通的,不用专门去研究数据分析的。你一个普通的用户如果想要分析数据的话,只需要把你这个用户的一个相当于比如excel的一个文件上传上去,然后选择你想要生成一个图标,以及你对这些数据想要获得一个某个方面的。比如某一天的增长,某一天的用户的一个注册的用户的一个信息的增长率的一些数据,然后就可以上传上去。然后通过AI在后台,它会自动一个对这个用户的一个表格的一个分析,然后返回给你用户。用户的话可以在可视化的一个分析,然后看到你这个数据的一个诉求。
可以讲一下你是如何来实现数据分析的这个功能,指定化的让AI进行分析呢?
就比如我后头台正常来说你要调试BI。然后我们这个就是比如你这个图表的一个数据,以及一个你的诉求,还有你这个图表的一个选择的图表类型。这三个数据会通过后台的一个分析,然后就相当于一个可以说原始一点就是类似jsp那样的一个一个挖孔。然后把这些数据通过pom预设的一个模板,传输给AI通过AI每次遇到调调校一下,通过多次的调校,然后让他分析,让他根据根据你那个模板来进行一个返回。我们通常会对他你我们这个模板一般来说的话用一个,比如你先给你一个身份信息。比如现在假定你是一个数据分析工程师,然后请根据我给你的这些数据,返回一个后返回一个基于一下前端的一下那个组件库的一个Jason说根据这个echars返回一个结果,然后前端的话根据返回的json来生成一个图表,就这样子。
目前是大四了吗?已经没有课了吗?
没有课啦
反问
我想问一下,咱如果我入职的话,你觉得我会在你公司更多的会学到哪一些的东西?就更多的成长的方面在哪个方向大概。
公司的后端的一个技术栈有哪些
请问一共几轮面试呢?
#你都收到了哪些公司的感谢信?#