最后
分享一些系统的面试题,大家可以拿去刷一刷,准备面试涨薪。
这些面试题相对应的技术点:
- JVM
- MySQL
- Mybatis
- MongoDB
- Redis
- Spring
- Spring boot
- Spring cloud
- Kafka
- RabbitMQ
- Nginx
- …
大类就是:
- Java基础
- 数据结构与算法
- 并发编程
- 数据库
- 设计模式
- 微服务
- 消息中间件
开始
蚂蚁金服(三面)Zookeeper+微服务+消息中间件+高并发架构设计
==============================================================================================
一面
-
JVM数据存储模型,新生代、年老代的构造?
-
java GC算法,什么时候会触发minor gc,什么时候会触发full gc?
-
GC 可达性分析中哪些算是GC ROOT?
-
你熟悉的JVM调优参数,使用过哪些调优工具?
-
Java 有什么锁类型?
-
描述下线程池的处理流程?
-
类加载机制,一个类加载到虚拟机中一共有几个步骤,这些步骤的顺序哪些是固定的,哪些是不固定的,为什么不固定
-
hashmap是线程不安全的,concurrenthashmap是线程安全的,怎么实现的线程安全?
-
volatile关键字解决了什么问题,实现原理是什么
-
并发容器有哪些,并发容器和同步容器的区别
二面
-
在工作中,SQL语句的优化和注意的事项
-
哪些库或者框架用到NIO
-
Spring 都有哪几种注入方式,什么情况下用哪种,ioc实现原理
-
如何定位一个慢查询,一个服务有多条SQL你怎么快速定位
-
聚集索引和非聚集索引知道吗?什么情况用聚集索引什么情况用非聚集索引
-
Nosql引擎用的什么存储结构,关系型数据库和NoSQL各自的优劣点是什么,如何技术选型?
-
微服务架构下,如果有一个订单系统,一个库存系统,怎么保证事务?
-
分布式一致性协议raft,paxos 了解吗
-
Zookeeper中的ZAB协议,选主算法
三面
-
自我介绍
-
参与的并发项目,从设计到部署,按照流程讲一遍。
-
项目相关你用过redis,用在什么场景,怎么使用的?
-
mysql同步机制原理,有哪几种同步方法
-
数据库主从同步如何实现,事务如何实现
-
谈谈你对SOA和微服务的理解,以及分布式架构从应用层面涉及到的调整和挑战。
-
阿里系中间件metaQ及原理与现有的kafka有什么异同
-
在阿里有了解过什么中间件吗?实现原理?与其他开源消息队列有什么特点?
-
为什么选择换公司?
-
三年到五年的职业规划?
-
你有想问我的?
拼多多(三面)幻影读+分段锁+Spring Cloud+秒杀
=========================================================================================
一面
-
简短自我介绍
-
事务的ACID,其中把事务的隔离性详细解释一遍
-
脏读、幻影读、不可重复读
-
红黑树、二叉树的算法
-
平常用到哪些集合类?ArrayList和LinkedList区别?HashMap内部数据结构?ConcurrentHashMap分段锁?
-
jdk1.8中,对hashMap和concurrentHashMap做了哪些优化
-
如何解决hash冲突的,以及如果冲突了,怎么在hash表中找到目标值
-
synchronized 和 ReentranLock的区别?
-
ThreadLocal?应用场景?
-
Java GC机制?GC Roots有哪些?
-
MySQL行锁是否会有死锁的情况?
二面
-
乐观锁和悲观锁了解吗?JDK中涉及到乐观锁和悲观锁的内容?
-
Nginx负载均衡策略?
-
Nginx和其他负载均衡框架对比过吗?
-
Redis是单线程?
-
Redis高并发快的原因?
-
如何利用Redis处理热点数据
-
谈谈Redis哨兵、复制、集群
-
工作中技术优化过哪些?JVM、MySQL、代码等都谈谈
三面
-
Spring Cloud用到什么东西?如何实现负载均衡?服务挂了注册中心怎么判断?
-
网络编程nio和netty相关,netty的线程模型,零拷贝实现
-
分布式锁的实现你知道的有哪些?具体详细谈一种实现方式
-
高并发的应用场景,技术需要涉及到哪些?怎样来架构设计?
-
接着高并发的问题,谈到了秒杀等的技术应用:kafka、redis、mycat等
-
最后谈谈你参与过的项目,技术含量比较高的,相关的架构设计以及你负责哪些核心编码
=============================================================
一面(50分钟)
-
hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移?
-
Linux的共享内存如何实现,大概说了一下。
-
socket网络编程,说一下TCP的三次握手和四次挥手
-
同步IO和异步IO的区别?
-
Java GC机制?GC Roots有哪些?
-
红黑树讲一下,五个特性,插入删除操作,时间复杂度?
-
快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少
二面(40分钟)
-
自我介绍,主要讲讲做了什么和擅长什么
-
设计模式了解哪些?
-
AtomicInteger怎么实现原子修改的?
-
ConcurrentHashMap 在Java7和Java8中的区别?为什么Java8并发效率更好?什么情况下用HashMap,什么情况用ConcurrentHashMap?
-
redis数据结构?
-
redis数据淘汰机制?
三面(约1个小时)
-
mysql实现事务的原理(MVCC)
-
MySQL数据主从同步是如何实现的?
-
MySQL索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
-
如果Redis有1亿个key,使用keys命令是否会影响线上服务?
-
Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么?
总结
总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。
如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。
己能上手再买这些书看又是非常有收获的事了。
[外链图片转存中…(img-yErD98Zp-1715269028653)]