同花顺 | 二面 | Java 40min

提前十分钟进去,发现面试官已经在了,只好提前开始了。面试官就简单说了自己的名字以及部门啥的

  1. 自我介绍
  2. 问问项目的情况
  3. 项目为什么不是用servlet写的?(老师的老项目,我也没办法)
  4. 这个老旧的项目遇到过什么问题吗?(代码冗余,我自己改了好多)
  5. 可以看看源码吗?(我找了好一会才找到,毕竟这个项目是一年前做的了)
  6. 先写道题吧!!写个观察者模式的简单demo
  7. 你的项目有用到事务吗?(没有)
  8. springboot的事务管理用过吗(没有)
  9. 你认为一个事务应该怎么设计?(不太懂,简单瞎说了点)
  10. MySQL的事务是怎么保证它的一致性的?(说了redo log和undo log)
  11. 如果一个事务里面的几个SQL都是异步执行的,那么这些SQL还是属于原来的事务吗
  12. 有个订单表,有两个字段,一个是用户id,一个是生成时间。有个业务是用户需要查询自己的订单,并以分页展示,那这个表的索引该怎么建立?
  13. 项目的索引是怎么设计的?
  14. redis和数据库怎么保证一致性?
  15. 一致性中,如果是之后对Redis做数据删除,这个一致性会有什么问题吗?(不知道)
  16. Redis和数据库的一致性实现的思路是可以是什么?

反问:

  1. 入职的部门是志愿的部门还是公司分配

总体感觉有亿点点难

#同花顺##秋招#
全部评论
项目关于数据库的吗?怎么全是数据库的问题
点赞
送花
回复 分享
发布于 2022-10-01 10:27 黑龙江
哥们面的是iFind吗
点赞
送花
回复 分享
发布于 2022-10-02 18:23 浙江
现代汽车中国前瞻数字研发中心
校招火热招聘中
官网直投
难度挺大
点赞
送花
回复 分享
发布于 2022-10-04 10:32 山东
兄弟OC了么
点赞
送花
回复 分享
发布于 2022-10-14 21:31 福建
针对该业务需求,可以考虑在订单表上建立一个联合索引(composite index),包含用户id和生成时间两个字段。具体建立方式如下: CREATE INDEX idx_user_id_time ON order_table(user_id, generate_time); 在该联合索引中,用户id作为第一列,生成时间作为第二列。这样的好处是,当用户查询自己的订单时,可以根据用户id快速定位到对应的订单,并且可以按照生成时间排序实现分页展示。 需要注意的是,建立索引会对数据库的写入性能有一定的影响,因此需要在性能和查询效率之间做出权衡。另外,索引的选择也需要考虑具体的业务场景,不同的查询条件可能需要不同的索引来优化查询性能。
点赞
送花
回复 分享
发布于 2023-03-17 13:52 日本
使用 binlog 实现一致性 binlog 是 MySQL 中的一个日志文件,记录了 MySQL 数据库的所有操作。可以通过监听 binlog 中的操作,将操作同步到 Redis 中,实现 Redis 和数据库之间的数据一致性。 这种方式的优点是能够实现较高的数据一致性,即 Redis 中的数据与数据库中的数据几乎是实时同步的。同时,这种方式可以将 Redis 和数据库的写操作分离,减少对数据库的压力,提高系统的并发性能。 不过,使用 binlog 实现一致性需要对数据库进行额外的配置和开发,实现起来相对复杂,同时需要考虑数据同步的延迟和性能等问题。 使用 Redis 分布式锁实现一致性 在并发场景下,为了保证多个客户端操作 Redis 和数据库的数据的一致性,可以使用 Redis 分布式锁来控制数据的访问。例如,当一个客户端需要修改某个数据时,先获取 Redis 分布式锁,然后进行修改,修改完成后再释放锁。 这种方式的优点是相对简单易用,可以较好地控制并发访问,防止出现数据覆盖等问题。同时,使用 Redis 分布式锁也可以将数据库的压力分散到多个 Redis 节点上,提高系统的并发性能。 不过,使用 Redis 分布式锁也存在一些缺点,例如锁的粒度可能过大或过小,容易导致性能问题;同时,使用分布式锁也需要考虑锁的超时、死锁等问题,实现起来相对复杂。
点赞
送花
回复 分享
发布于 2023-03-17 13:53 日本
MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种数据库并发控制技术,用于实现高并发的事务处理。MVCC 的主要思想是在同一时间允许多个事务并发访问数据库,每个事务读取的数据都是一致的,但每个事务所看到的数据版本可能不同。 在 MVCC 中,每个事务在执行时,会根据其开始时间(或者说事务 ID)来确定所读取的数据版本。具体来说,当事务开始时,系统会为该事务分配一个唯一的事务 ID,然后该事务就可以在自己的版本视图中读取数据。当其他事务对数据库进行修改时,系统会将修改后的数据版本存储到数据库中,并为其分配一个时间戳(或者说版本号),这样正在执行的事务就不会受到该修改的影响。同时,正在执行的事务对其他事务所做的修改也不会影响到它们。当事务提交时,其读取的数据版本将被视为最终版本,如果数据的最新版本与该版本不同,则事务会失败。 MVCC 的优点是可以在高并发的情况下保证数据的一致性和并发性能。同时,由于每个事务都是读取数据的一个版本,所以 MVCC 也能很好地支持快照读取,即允许事务读取一个特定时间点的数据快照,而不受其他事务的干扰。 需要注意的是,MVCC 只适用于数据库的读操作,对于写操作,仍然需要使用传统的锁机制来控制并发访问。此外,MVCC 也需要消耗一定的系统资源,例如时间戳和版本号的管理等,因此需要根据具体的业务需求和系统性能要求来选择使用。
点赞
送花
回复 分享
发布于 2023-03-17 13:55 日本
无论采用哪种方式,这些异步执行的 SQL 都是在事务中执行的,只有在事务提交或回滚时,这些 SQL 的结果才会对数据库产生影响。 如果异步执行的 SQL 涉及到共享资源,例如数据库连接、线程池等,需要保证它们的线程安全性。以下是几种常见的保证安全性的方式: 使用线程安全的共享资源:例如线程安全的数据库连接池、线程安全的缓存等,可以避免并发访问时出现数据竞争和并发问题。 对共享资源进行同步控制:例如使用 synchronized、ReentrantLock 等同步机制对共享资源进行互斥访问,避免多个线程同时访问共享资源,导致数据不一致或者并发问题。 使用独立的资源副本:例如为每个线程或者事务提供独立的数据库连接或者线程池资源,可以避免并发访问时出现数据竞争和并发问题。 采用无锁算法:例如采用 CAS(Compare-And-Swap)等无锁算法对共享资源进行并发访问,可以避免锁的竞争,提高并发性能。 需要注意的是,无论采用哪种方式,都需要考虑线程安全性和并发性能的平衡,根据具体的业务需求和系统性能要求来选择最合适的方式。同时,还需要进行充分的测试和评估,确保异步执行 SQL 的安全性和正确性。
点赞
送花
回复 分享
发布于 2023-03-17 13:57 日本

相关推荐

9 33 评论
分享
牛客网
牛客企业服务