用友一面 - 240623

用友一面 - 240623

  1. 1.

    自我介绍

  2. 2.

    仿 RabbitMQ 的项目具体是怎么实现的?

    答:这个我是仿照 RabbitMQ 类似一个造轮子一样的项目,我希望的是实现一个解耦合、削峰填谷、高性能这样的一个中间件,按照 RabbitMQ 中的 BrokerServer、VirtualHost、Exchange、Queue、Binding、Message 这些概念,按照这样的架构……(说到这里被打断了我接着讲的话)按照交换机的三种模式,直接、扇出、主题的交换模式,然后数据存储按照内存和磁盘存储划分,其中消息这些数据的持久化按照文件存储,因为快,然后结合 TCP + 自定义应用层来传输通信,虚拟主机和 BrokerServer实现对应的 API 接口,然后实现对应的生产者消费者客户端,支持他们与系统交互,调用对应的 API。

  3. 3.

    你这个消息队列是想给别人用的对吗?怎么让别人用呢?

    (我最开始没理解他的意思)我这个就是类似那个 RabbitMQ 一样,跟使用他的方式一样的。(后来他引导我了一下)我这个就是我自己有实现一个对应的生产者消费者客户端,使用起来就是创建对应的对象,连接服务器开放的对应的端口,客户端输入对应的 IP、端口号,然后就可以使用了。

  4. 4.

    为什么用 SQLite?

    (我开始没听清他说这个单词,因为说法我觉得有点天差地别哈哈哈)因为我觉得我是需要实现一个消息队列这样一个中间件,我觉得如果使用常用的 MySQL 的话会变得比较重量级一点,SQLite 就会比较轻量级一些,比较好维护;而且因为我实现这个消息队列,存储的数据是按照二进制文件存储的,据我了解 SQLite 处理这些文件数据的读写效率是比较高的;而且我这些数据访问之类的操作只需要使用到一些简单的增删查改,复杂的功能用不到;而且这里 SQLite 只需要引入对应的依赖,修改一下配置即可使用,也比较方便。

  5. 5.

    性能方面、轻量级方面我换成比如 MySQL+Redis 应该也是可以的吧?有做过这方面的对比吗?

    性能上如果用 MySQL+Redis 确实是高了很多,毕竟更符合高并发高吞吐量的要求,但是我觉得是目前阶段,我觉得我用 SQLite 肯定可以比那种方案更好维护一些,而且对应的性能也并不会差很多,轻量级方面如果用那种方案我觉得肯定就不会轻量级了。

  6. 6.

    那用 MQ 不是也可以吗?

    (我觉得很奇怪的一个问题)可是我做的就是一个 MQ 啊,用别的 MQ 不是很奇怪吗?

  7. 7.

    MyBatis 熟不熟练?有什么用?

    这个是一个数据访问层、持久层的一个框架嘛,可以直接通过注解和 XML 的方式编写 SQL 语句,比起通过 JDBC 这样的方式,配置起来以及编写起来过于麻烦,而且 MyBatis 框架也能够支持很多种数据库,也比较便于优化性能。

  8. 8.

    查询你们班上所有人的姓名、科目、成绩,倒序排序,如果总分数相同,就取语文分数更高的那个。这个实现需要用到分组排序,说是用 group by 实现不了,要用到那个 over 函数 这题纯白给了。

  9. 9.

    对数据结构有什么了解?(说是让我随便找个数据结构讲讲)

    我讲了 LinkedList,添加删除比较方便一点,平均时间复杂度是 O(n) 的,但它访问因为不支持随机访问,所以就是 O(n) 级别的,而因为存储的数据还有前驱后继节点,空间也花费更多一些;我也顺便讲讲 ArrayList,动态数组,访问 O(1),增删 O(n),动态扩容这样,但会造成空间浪费

  10. 10.

    让你用 Java 写一个双向链表怎么写?

    节点类,对应的数据还有前后节点的引用,构造方法

    链表类,对应的……

    (说我没说到点上)

  11. 11.

    说说常见的排序算法?如果让你对一些数据排序,你用什么?怎么实现?

    冒泡、选择、堆、快排、归并这一些。我会用快排,因为时间复杂度都是 O(nlogn) 是最优秀的。

    怎么实现这里说得很烂了:从数据中跳出一个基准值,根据基准,分成两部分(我没说怎么分,应该是前面小,后面大的),然后递归这样子。反正是说的很烂的。

    (说我说得不是很清楚)

  12. 12.

    后面给了三段代码让我看,问我有什么问题?有什么可优化点?

    因为录制出了问题,我找不到原题了,原题可以说是又臭又长,我个人是觉得那些代码的命名挺有问题的,可读性不是很高。 大概基本都是一些SQL方面的,以及一些冗余的语句(我基本就看出这部分的问题);有一个是 select * 的问题;有一个是那个他最终只是查了那个列表的整个列表的数据,然后再取了第一个,我说可以直接取第一个就不需要先查询获取全部再取。这些都是我发现的点,最后一题他跟我稍微讲了一下,说是for循环里不要每次都查询一下数据库这样子,确实恍然大悟,但我当前完全没看出来。

全程35分钟,因为还有别人,我觉得基本白给了。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
HsuRosy
下载 APP