今天分享一位同学邮储银行的后端开发的面经,邮储银行的总包据听说 26W,邮储试用期6个月,由总行随机分配去网点,实习期工资五、六千左右。
邮储银行的面试流程,先是笔试,笔试跟互联网还不太一样,互联网中大厂笔试都是算法题,邮储的笔试没有编程题,全是单选题,150分钟 。
-
EPI(45 题,言语理解,逻辑推理,数算,思维策略,资料分析) 。
-
英语(40 题,其中 20 道单选,5 篇阅读理解) 。
-
综合(60题,银行行业,信息科技,法律,时事政治)。
笔试通过之后,就会进行面试邀约了。主要经历了一二面,每一面大概问 15 分钟的问题,相比互联网中大厂的面试难度是降低了不少。
-
第一面的时候是群面的,三个候选人一起面,每个人先自我介绍,然后面试官对每个人一个一个问题
-
第二面的时候是多个面试官面一个人
面试过程中被问的一些问题:
-
技术问题:Java、MySQL、Redis、网络、算法
-
软问题:职业发展、银行的认识、遇到的困难的解决等等。
这次跟大家解析一波银行一二面的技术方面的问题,大家看看难度如何?
MySQL
聚簇索引和普通索引区别是什么?(一面)
在 MySQL 的 InnoDB 引擎中,每个索引都会对应一颗 B+ 树,而聚簇索引和非聚簇索引最大的区别在于叶子节点存储的数据不同,聚簇索引叶子节点存储的是行数据,因此通过聚簇索引可以直接找到真正的行数据;而非聚簇索引叶子节点存储的是主键id,所以使用非聚簇索引还需要回表查询。
因此聚簇索引和非聚簇索引的区别主要有以下几个:
-
聚簇索引叶子节点存储的是行数据;而非聚簇索引叶子节点存储的是聚簇索引(通常是主键 ID)。
-
聚簇索引查询效率更高,而非聚簇索引需要进行回表查询,因此性能不如聚簇索引。
-
聚簇索引一般为主键索引,而主键一个表中只能有一个,因此聚簇索引一个表中也只能有一个,而非聚簇索引则没有数量上的限制。
如果聚簇索引的数据更新,它的存储要不要变化?(一面)
-
如果更新的数据是非索引数据,也就是普通的用户记录,那么存储结构是不会发生变化
-
如果更新的数据是索引数据,那么存储结构是有变化的,因为要维护 b+树的有序性
数据库的表锁和行锁有什么作用?(一面)
表锁的作用:
-
整体控制:表锁可以用来控制整个表的并发访问,当一个事务获取了表锁时,其他事务无法对该表进行任何读写操作,从而确保数据的完整性和一致性。
-
粒度大:表锁的粒度比较大,在锁定表的情况下,可能会影响到整个表的其他操作,可能会引起锁竞争和性能问题。
-
适用于大批量操作:表锁适合于需要大批量操作表中数据的场景,例如表的重建、大量数据的加载等。
行锁的作用:
-
细粒度控制:行锁可以精确控制对表中某行数据的访问,使得其他事务可以同时访问表中的其他行数据,在并发量大的系统中能够提高并发性能。
-
减少锁冲突:行锁不会像表锁那样造成整个表的锁冲突,减少了锁竞争的可能性,提高了并发访问的效率。
-
适用于频繁单行操作:行锁适合于需要频繁对表中单独行进行操作的场景,例如订单系统中的订单修改、删除等操作。
表级锁:MySQL 里面表级别的锁有这几种:
-
表锁:通过lock tables 语句可以对表加表锁,表锁除了会限制别的线程的读写外,也会限制本线程接下来的读写操作。
-
元数据锁:当我们对数据库表进行操作时,会自动给这个表加上 MDL,对一张表进行 CRUD 操作时,加的是 MDL 读锁;对一张表做结构变更操作的时候,加的是 MDL 写锁;MDL 是为了保证当用户对表执行 CR