首页 > 数据库 > 数据库开发技术 > 快手一面,这拷打我经不住
火炼才能出真金,这就是在火炼吧
快手的“可灵AI”这段时间玩的人越来越多了,体验也非常好。
高质量视频生成方面可灵AI能够生成长达2分钟的高清视频,能够将静态图像转化为动态视频,根据视频内容预测并生成后续场景,电影级画质,打造AIGC微短剧标杆《山海奇镜之劈波斩浪》...等等。
就是这么一家有趣的短视频社交平台公司,也让很多校招的同学都期待加入快手。
这里分享一位快手校招Java后端的同学的Java面经。

拷打了半个小时的项目和八股,问的都比较底层。
但整个过程感觉很舒适,面试官一直在引导,让这位同学有点自责的是自己真的菜,真的扛不住项目的拷打。
这里我也稍微整理一下本次面经的技术点,供大家参考。

事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。
回滚可以用回滚日志(Undo Log)来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。
数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。假如 A 账户给 B 账户转 10 块钱,不管成功与否,A 和 B 的总金额是不变的。
一个事务所做的修改在最终提交以前,对其它事务是不可见的。
一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。
是通过数据库锁的机制实现的。
由undo log来保证,undo log是逻辑日志,记录了事务的insert、update、delete操作,回滚的时候做相反的delete、update、insert操作来恢复数据。
由redo log来保证:redolog被称作重做日志,是物理日志。事务提交的时候,必须先将事务的所有日志写入redo log持久化,最后事务的提交操作才算完成。
如果按锁粒度划分,有以下3种:
表锁:开销小,加锁快;锁定力度大,发生锁冲突概率高,并发度最低;不会出现死锁。
行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。
页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般。
MySQL 中的锁升级是指从较低级别的锁(如行锁)升级到较高级别的锁(如表锁),通常是为了避免锁之间的冲突和提升并发性能。
不过MySQL 的 InnoDB 存储引擎默认情况下并不会直接进行锁升级操作,而是采用了其他机制来处理锁的竞争问题。
在此之前,我们先认识下在 MySQL InnoDB 中,锁的类型主要包括:
InnoDB 使用的锁定策略包括:
现在我们可以知道的了在 InnoDB 中,通常不会出现显式的锁升级,但如果事务需要获取大量行锁,而这些行锁的总数接近表的大小时;或者无法通过索引触发记录锁或者间隙锁时,整个表可能会被隐式地锁定,从而达到类似的锁升级效果。
JVM 分代回收是Java虚拟机(JVM)垃圾收集器管理内存的一种策略。
这个策略的基本思想是根据对象存活的时间不同,在不同的区域分配内存空间,以便更高效地进行垃圾回收。它解决了标记整理不适用于老年代的问题,将内存分为各个年代。一般情况下将堆区划分为老年代(Tenured Generation)和新生代(Young Generation),在堆区之外还有一个代就是永久代(Permanet Generation)。
在不同年代使用不同的算法,从而使用最合适的算法,新生代存活率低,可以使用复制算法。而老年代对象存活率搞,没有额外空间对它进行分配担保,所以只能使用标记清除或者标记整理算法。的4种垃圾回收算法、垃圾回收机制与总结[通俗易懂]

内存区域
回收过程
以上,点亮【赞与在看】让我们心中充满力量、披荆斩棘、不惧未来!
【推荐阅读】
关于作者:一位热爱技术,并在职场与自媒体间探索的实践者,希望通过分享个人经验和见解,帮助更多人实现自我成长和价值。
如果您对我的公众号内容感兴趣,欢迎关注我。
也可以在下方添加我微信和一支烟花AI社区技术群,一起交流技术、职场心得。
原文作者:皇子谈技术;如有侵权,请联系管理员删除。