你不知道面试JavaP7岗的那些事:通过阿里巴巴,蚂蚁金服的面试,顺利拿下offer

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是关系型数据库,功能强大,但是效率上有瓶颈

3.什么是索引为啥nosql没索引?

nosql有索引滴索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

聚簇索引:有主键时,根据主键创建聚簇索引;没有主键时,会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引;如果以上两个都不满足那innodb自己创建一个虚拟的聚集索引

非聚簇索引:非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引

4.B+树和B树区别?

B树的非叶子节点存储实际记录的指针,而B+树的叶子节点存储实际记录的指

B+树的叶子节点通过指针连起来了, 适合扫描区间和顺序查找。

5.Java容器有哪些?哪些是同步容器,哪些是并发容器?

6.ArrayList和LinkedList的插入和访问的时间复杂度?

7.java反射原理, 注解原理?

8.新生代分为几个区?使用什么算法进行垃圾回收?为什么使用这个算法?

9.HashMap在什么情况下会扩容,或者有哪些操作会导致扩容?

10.HashMap push方法的执行过程?

11.HashMap检测到hash冲突后,将元素插入在链表的末尾还是开头?

12.1.8还采用了红黑树,讲讲红黑树的特性,为什么人家一定要用红黑树而不是AVL、B树之类的?

13.https和http区别,有没有用过其他安全传输手段?

14.线程池的工作原理,几个重要参数,然后给了具体几个参数分析线程池会怎么做,最后问阻塞队列的作用是什么?

15.linux怎么查看系统负载情况?

16.请详细描述springmvc处理请求全流程?18. spring 一个bean装配的过程?

17.讲一讲AtomicInteger,为什么要用CAS而不是synchronized?

蚂蚁花呗二面

1.查询中哪些情况不会使用索引?

2.数据库索引,底层是怎样实现的,为什么要用B树索引?

3.Mysql主从同步的实现原理?4. MySQL是怎么用B+树?

5.谈谈数据库乐观锁与悲观锁?

6.有使用过哪些NoSQL数据库?MongoDB和Redis适用哪些场景?

7.描述分布式事务之TCC服务设计?

8.Redis和memcache有什么区别?Redis为什么比memcache有优势?

9.考虑redis的时候,有没有考虑容量?大概数据量会有多少?

蚂蚁花呗三面

1.介绍项目

2.各种聊项目,从项目的架构设计到部署流程。

3.solr和mongodb的区别,存数据为什么不用solr?

4.还是要聊项目

5.谈谈分布式锁、以及分布式全局唯一ID的实现比较?

6.集群监控的时候,重点需要关注哪些技术指标?这些指标如何优化?

7.从千万的数据到亿级的数据,会面临哪些技术挑战?你的技术解决思路?

8.最近两年遇到的最大的挫折,从挫折中学到了什么?

9.最近有没有学习过新技术?

10.有啥想问我的?

基本就是这些问题,倒是不难,就是问的很抽象很宏观,差不都是自己一直在说,然后面试官听到你说的关键点就提出来具体问问。

如果你想突破自己的天花板,那一定要别人付出更多,这个过程是很辛苦的。如果你做好了充足的准备,那就自信的表达你的观点,不要因为不自信让面试官觉得你掌握的不扎实。如果你不会或拿不准,如实告知即可,遇到不会的很正常,不要不懂装懂。如果你认准了一条路,坚持走下去,你一定会获得很多收获。

答案解析:多线程面试专题以及答案.pdf
在这里插入图片描述
设计模式面试题专题及答案PDF
在这里插入图片描述
面试必备悲观锁与乐观锁PDF
在这里插入图片描述
Redis面试题专题及答案上PDF
在这里插入图片描述
SpringBoot面试题专题及答案PDF
在这里插入图片描述
Spring Mvc面试题专题及答案PDF
在这里插入图片描述
由于篇幅限制,小编就把大纲整理了一下,小编已经把面试资料整理全啦,感谢大家的喜欢和支持。
在这里插入图片描述

发布了59 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Ppikaqiu/article/details/104393443