你好,面试官 | 阿里二面,被问麻了。。

这篇具有很好参考价值的文章主要介绍了你好,面试官 | 阿里二面,被问麻了。。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本期是【你好,面试官】系列文章的第21期,持续更新中…。

《你好,面试官》系列目前已经连载 20 篇了,据说看了这个系列的朋友都拿到了大厂offer~

  • 欢迎星标+订阅,持续更新中。。。致力打造校招核心面试攻略~
  • Java 校招面试网站:www.java2top.cn

考点速查

本期考点涉及,JVMMySQL高级Redis持久化

本期题改编自 ——2023届春招 阿里 实习 二面

面试现场

叮叮叮…

面试官:“你好,我是XX面试官,请问是小龙吗?”

小龙:“您好,面试官,我是小龙”

面试官:“好的,现在有空吗,我们开始面试吧”

小龙:“嗯嗯,准备好啦”

other questions(自我介绍、项目略)

面试官:“我看你简历写熟悉 JVM,system.gc()一定会触发gc吗?和full gc有什么关系?”

独白:“wc,平时还真没关注过这个问题”

小龙:“system.gc() 可以显示触发 fullgc,以回收老年代和新生代,释放无用对象占用的内存,底层通过 Runtime . getRuntime() .gc() 调用。”

小龙:“但是这个显示调用附带免责声明,只是提醒 JVM 的垃圾收集器执行 Full Gc ,具体执行与否什么时候执行,还得看收集器。”

面试官:“好的,了解 Redis 持久化吗?”

小龙:“enen,是这样的,Redis 为了保证宕机能恢复数据,提供了持久化手段,可以采用RDB、AOF持久化,Redis4.x后更支持RDB、AOF混合持久化。”

面试官:“那说说 AOF 持久机制是怎样的?”

小龙:“简单来说,AOF 文件是将写操作命令按照约定的格式保存下来,若宕机顺序执行命令即可恢复数据;并且它采用 “写后日志”的模式,即 Redis 先执行命令写内存,后写日志;”

面试官:“为何采用写后日志呢?”

小龙:“嗯,首先 Redis 执行命令先写内存,这样可以对命令做预检,防止错误命令记录到日志;同时,记录AOF日志时,无须对语法做检查,因此写后日志还可以避免额外开销。”

小龙:“并且,由于是命令执行完后再写日志,也不会阻塞主进程写操作。”

面试官:“刚才你说 AOF 是一直追加命令,那随着时间推移,这个AOF文件不会越来越大吗,Redis是怎样处理的呢?”

小龙:“Redis 为了避免 AOF 文件越写越大,提供了 AOF 重写机制。”

独白:“关于小龙面试经典分析全记录在【面试笔记】中,有详细总结。”

面试官:“这个重写机制是怎样的呢?”

小龙:“简单来说就是,首先知道 AOF 里面存的写操作命令,但是很多条执行命令可能起到的效果最后只需要几条命令即可实现。”

小龙:“重写即把冗余的命令用新的命令替换,再将新命令记录到新的 AOF 文件中,最后再替换老的 AOF 文件。”

面试官:“那如果是大量写入,线程将会被长时间阻塞,Redis 是单线程的,这样就不能处理客户端的请求命令,怎么办?”

小龙:“主进程是通过 fork 一个 bgrewriteaof 子进程进行 aof 日志重写。由于后台新开进程重写,主进程可以继续处理命令请求,可以避免阻塞主进程。”

小龙:“但是fork子进程这个操作也是主进程实现,其中由于要复制父进程的页表等数据结构,若页表过大,便可能阻塞主线程。”

面试官:“那假如你在写原来的数据时,父进程又处理了新的命令,会造成子父进程数据不一致吗?”

独白:“这就有装逼得啦~”

小龙:“子进程进行日志重写时,若有新数据写入,主进程执行完命令后会将命令写入到 「AOF 缓冲区」和 「AOF 重写缓冲区」”

小龙:“然后,子进程重写完成后,会异步向主进程发送一条信号;”

小龙:“主进程接收到信息,便将 AOF 重写缓冲区中的所有内容追加到新的 AOF 的文件中,最后修改文件名,原子切换老文件,完成重写便保证了数据的一致性。”

面试官:“那如何开启AOF的?”

小龙:“可以手动触发,也可以文件配置。”

面试官:“具体说说呢?”

小龙:“可以通过配置 redis.conf 文件来开启 AOF 持久化 appendonly yes,同时需要联合配置同步策略,触发时机。但是 AOF 的重写需要 fork,这是一个重量级操作,可能会对 Redis 造成阻塞。”

小龙:“因此为了不影响 Redis 主进程响应,我们需要尽可能降低 fork 的频率,降低阻塞,可以通过 bgrewriteaof 手动来触发 AOF 重写。”

面试官:“Ok,我看你简历写了 MySQL,说说什么是 MySQL 两段提交吧?”

小龙:“其实所谓的两阶段就是把一个事物分成两个阶段(prepare、commit)来提交,而实际上开启两阶段提交只是为了保证 redolog 和 binlog 日志数据的安全一致性。”

小龙:“若你压根不需要使用 binlog 进行日志备份,主从复制相关的,其实完全可以不用两阶段提交,因为仅保证 redolog 成功写盘就可以保证 crash 的恢复啦。”

面试官:“能讲一下具体怎样提交的吗?”

小龙:“可以完整的分析一下,假如现在需要更新一条数据,前面肯定都知道会权限判断,词发语法分析,优化器生成最佳执行计划,准备执行,执行前还会记录 undolog 便于回滚,然后开始调用存储引擎执行 SQL。”

小龙:“此时若选用 InnoDB 引擎,会看 buffer pool 里有无相关数据,没有会将数据先加载到 buffer pool 进行更新;”

独白:“当然还涉及到唯一索引,普通索引等细节,这里不详细展开,具体可以看【面试笔记】”

小龙:“最后内存数据更新后,会将这个更新操作会记录到 redo log,redo log 处于 prepare 状态,告知执行器执行完,可提交事务。”

小龙:“执行器生产这个操作的 binlog,并将 binlog 写入磁盘,执行器调用引擎事务提交接口,引擎把刚写入的 redo log 改为 commit 状态,最后更新完成;”

小龙:“此刻整个过程完成,最后事务提交时便是分两个阶段提交。”

面试官:“Ok,用过 explain 吗,explain 语句会执行 SQl 吗?”

小龙:“explain 只走到优化器,要扫描多少行也只是个估计值,并没有实际执行。它只是一个执行计划,生成来自优化器关于 SQL 的执行信息,但是如果查询在 FROM 中子句包括子查询,MySQL 会执行子查询”

独白:“不愧是我,真男人是也!【面试笔记】在手,大厂 offer 不愁。”

知识总结

本期我们通过面试模拟还原阿里二面。订阅+星标持续追更。

面试重点

Redis 持久化机制MySQL undoLog 日志文章来源地址https://www.toymoban.com/news/detail-445906.html

到了这里,关于你好,面试官 | 阿里二面,被问麻了。。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了

    在现代分布式系统中,消息顺序消费扮演着至关重要的角色。特别是在涉及事务处理、日志追踪、状态机更新等场景时,消息的处理顺序直接影响着系统的正确性和一致性。例如,金融交易系统中,账户间的转账操作必须严格按照发出请求的顺序进行处理,否则可能导致资金

    2024年03月20日
    浏览(27)
  • 美团一面:说说synchronized的实现原理?问麻了。。。。

    在现代软件开发领域,多线程并发编程已经成为提高系统性能、提升用户体验的重要手段。然而,多线程环境下的数据同步与资源共享问题也随之而来,处理不当可能导致数据不一致、死锁等各种并发问题。为此,Java语言提供了一种内置的同步机制—— synchronized ,它

    2024年04月08日
    浏览(24)
  • 阿里巴巴测试岗面试记:二面被按地上血虐,所幸Offer已到手...

    在互联网做了几年之后,去大厂“镀镀金”是大部分人的首选。大厂不仅待遇高、福利好,更重要的是,它是对你专业能力的背书,大厂工作背景多少会给你的简历增加几分竞争力。 但说实话,想进大厂还真没那么容易。最近面试阿里巴巴,结果二面被吊打,不甘心的我整理

    2023年04月20日
    浏览(32)
  • 腾讯二面:有 40 亿个 QQ 号,限制 1G 内存,问如何去重?被问懵了!

    40亿个QQ号,限制1G内存,如何去重? 40亿个unsigned int,如果直接用内存存储的话,需要: 4*4000000000 /1024/1024/1024 = 14.9G ,考虑到其中有一些重复的话,那1G的空间也基本上是不够用的。 想要实现这个功能,可以借助位图。 使用位图的话,一个数字只需要占用1个bit,那么40亿个

    2024年02月07日
    浏览(25)
  • 程序员面试完之后,人麻了...

    去面试吧   面不被录用的试 面hr为了完成任务的试 面一轮二轮没有下文试 面需要通勤2小时的试 面随时加班的试 ...... 今年的“金三银四”被网友们称为“铜三铁四”, 招聘软件上的岗位都能背下来了,简历却依然石沉大海。 好不容易等来个回复,还不如不回复 或者是遇到

    2023年04月23日
    浏览(29)
  • 阿里二面:如何定位&避免死锁?连着两个面试问到了!

    在面试过程中,死锁是必问的知识点,当然死锁也是我们日常开发中也会遇到的一个问题,同时一些业务场景例如库存扣减,银行转账等都需要去考虑如何避免死锁,一旦线上发生了死锁,那可能年终不保。。。。。下面我们就来聊一聊死锁如何定位,以及如何避免。 死锁(

    2024年03月13日
    浏览(38)
  • 阿里二面:Java中锁的分类有哪些?你能说全吗?

    在多线程并发编程场景中,锁作为一种至关重要的同步工具,承担着协调多个线程对共享资源访问秩序的任务。其核心作用在于确保在特定时间段内,仅有一个线程能够对资源进行访问或修改操作,从而有效地保护数据的完整性和一致性。锁作为一种底层的安全构件,有力地

    2024年03月25日
    浏览(27)
  • 面试被问到:测试计划和测试方案有什么区别?

    面试的时候,很多小伙伴都被面试官问过这个问题 “测试计划和测试方案有什么区别”? 到底有什么区别呢?我们先好好了解下这两个文档。 1、测试计划是什么? 测试计划是组织管理层面的文件,从组织管理的角度对一次测试活动进行规划。对测试全过程的测试范围、组

    2023年04月14日
    浏览(69)
  • 5年测试被裁,去面试差点被问哭了······

    我的个人背景非常简单,也可以说丝毫没有亮点。 学历普通,计算机专业二本毕业,毕业后出来就一直在一家小公司,岁月如梭细,算了下至今从事软件测试已经5年了,也点点点了五年,每天都是重复的工作,毫无新意,甚至一度的怀疑人生,后来就失业了,一度颓废了,

    2024年02月04日
    浏览(27)
  • 面试中常被问到sql优化几种方案

    目录 一、索引优化 二、合理的查询设计 三、分页优化: 四、内存管理和缓存: 五、合理使用批量操作: 六、使用连接池: 七、分区表: 八、避免使用SELECT : 九、数据库升级和优化器统计信息: 十、避免不必要的约束和触发器: 十一、使用EXPLAIN分析查询计划: 十二、

    2024年02月10日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包