16年刚毕业,交给我的第一个任务是学习codis的负载均衡策略,并将其应用到公司自研的分布式缓存上。codis是go写的,我第一反应是我能看懂吗。但还是硬着头皮去看了源码,我印象非常深刻,codis的负载均衡是用三个嵌套的for循环写的,go语言并没有成为障碍,反而给我很多自信。但这仅仅是个开始。更难的是如何管理集群,扩容、缩容、迁移时集群状态的管理。
最初我没掌握方法,一股脑的写,发现实现了A功能,但B功能有问题了,深刻体会到了改了一个bug,引入新bug的痛苦。我把很多功能和判断写在一起,导致这一问题。探索的过程花了很久,最终我慢慢领悟了一些方法,先将流程肢解开,画流程图,像八爪鱼一样,将每个图中每个块(步骤)用一个函数实现,将所有函数按照流程拼在一起,后面当我发现bug,只在拼接的方法上做了调整,并没有修改太多代码。
经过三个月的开发和测试,完全跑通。这个项目在当年获得了壹钱包年度优秀项目提名,看着其他项目都是百人规模,而这个项目的核心成员只有3、4个人时,自豪感油然而生。这里我也非常感谢我的领导。
我的建议是勇于承担任务,逼着自己做些有挑战的工作。
自我介绍Java都学了些什么?
答:集合、IO、多线程、框架等等说说多线程吧答:说了一下多线程的实现,同步,优化说一下线程池,线程池里面的线程的状态有哪些?数据结构学了些什么?Hashmap和hashtable的区别?Hashmap的数据结构,Hash的具体实现(这块答得不好)设计模式有了解吗?
答:谈了一下单例模式、工厂模式、代理模式,顺便说了一下Spring的AOP是基于代理模式的,可以实现日志记录等功能。数据库事务你了解吗?脏读是什么,幻读是什么?
1,mysql的三大引擎是啥?
mysql常用的引擎有InnoDB,MyISAM,Memory,
默认是InnoDBInnoDB:磁盘表,支持事务,支持行级锁,
B+Tree索引ps:优点: 具有良好的ACID特性。适用于高并发,更新操作比较多的表。需要使用事务的表。对自动灾难恢复有要求的表。缺点:读写效率相对MYISAM比较差。占用的磁盘空间比较大。
mysql的4大特性+4种隔离级别:MyISAM:磁盘表,不支持事务,支持表级锁,
B+Tree索引ps: 优点:占用空间小,处理速度快(相对InnoDB来说)缺点:不支持事务的完整性和并发性MEMORY(Heap):内存表,不支持事务,表级锁,Hash索引,不支持Blob,Text大类型ps: 优点:速度要求快的,临时数据缺点:丢失以后,对项目整体没有或者负面影响不大的时候。
2,redis的hash算法用的是啥?redis应该是使用一致性hash算法---MurmurHash3 算法,具有低碰撞率优点,google改进的版本cityhash也是redis中用到的哈希算法。现有的主流的大数据系统都是用的 MurmurHash本身或者改进3,nosql为啥比sql快?Nosql是非关系型数据库,因为不需要满足关系数据库数据一致性等复杂特性所以速度快;sql是关系型数据库,功能强大,但是效率上有瓶颈
4,什么是索引为啥nosql没索引?
nosql有索引滴索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。
聚簇索引:有主键时,根据主键创建聚簇索引;没有主键时,会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引;如果以上两个都不满足那innodb自己创建一个虚拟的聚集索引
非聚簇索引:非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引
5,B+树和B树区别?
B树的非叶子节点存储实际记录的指针,而B+树的叶子节点存储实际记录的指
B+树的叶子节点通过指针连起来了, 适合扫描区间和顺序查找。
蚂蚁花呗二面
蚂蚁花呗三面
基本就是这些问题,倒是不难,就是问的很抽象很宏观,差不都是自己一直在说,然后面试官听到你说的关键点就提出来具体问问。
如果你想突破自己的天花板,那一定要别人付出更多,这个过程是很辛苦的。如果你做好了充足的准备,那就自信的表达你的观点,不要因为不自信让面试官觉得你掌握的不扎实。如果你不会或拿不准,如实告知即可,遇到不会的很正常,不要不懂装懂。如果你认准了一条路,坚持走下去,你一定会获得很多收获。
答案解析:多线程面试专题以及答案.pdf
设计模式面试题专题及答案PDF
面试必备悲观锁与乐观锁PDF
Redis面试题专题及答案上PDF
Redis面试题专题及答案下PDF
面
SpringBoot面试题专题及答案PDF
SpringBoot面试题专题及答案PDF
Spring Mvc面试题专题及答案PDF
需要的小伙伴们可以直接转发+关注后,私信【Java面试】即可!