阿里技术岗位要求及体系图:
好多人对阿里巴巴技术岗的体系结构及级别的技术要求设置不太清楚,想去面试也不知道面试什么级别的岗位,下面说说阿里的技术体系又是一个怎么样的水平划分!
阿里P6(技术主管)
工作要求:
能独立解决问题,制定系统的技术实现方案,考核会涉及部分技术深度。
技能要求:
除P5的技能外,还需掌握以下技能,以下技能至少需要做到熟悉。架构设计,运维能力,操作系统。
技术四面面试题如下
一面(问了数据结构、jvm、锁等):
- 自我介绍和项目
- HashMap底层如何实现?
- Hash一致算法?
- 说说HashMap和ConcurrentHashMap的区别?treemap和HashMap的区别?
- java的内存分区?
- java对象的回收方式,回收算法?
- CMS和G1了解吗?
- CMS解决什么问题,说一下回收的过程?
- CMS回收停顿了几次?
- java栈什么时候会内存溢出,java堆呢,说一种场景?
- 集合类如何解决这个问题(软引用和弱引用),讲下这个两个引用的区别?
- java里的锁了解哪些?
- synchronized锁升级的过程(偏向锁到轻量锁再到重量级锁),分别如何实现的,解决的是哪些问题?
- Tomcat的基本架构是什么?
- 什么是类加载器?
- 说说双亲委派模型机制?
- GC的机制是什么?GC算法和回收策略?
- 未来的职业规划?
二面(线程、数据库、缓存、协议等):
- 讲一下项目
- 线程池由哪些组件组成?
- 有哪些线程池,分别怎么使用?拒绝策略有哪些?
- 什么时候多线程会发生死锁,写一个例子?
- Redis的数据结构是什么?线程模型说一下?
- 讲讲Redis的数据淘汰机制?
- 说说Redis的数据一致性问题?
- Redis的分布式怎么做?
- RPC讲一下?
- 三次握手和四次挥手?如果没有三次握手有问题吗?
- Http请求过程,DNS解析的过程?
- InnoDB支持的四种事务隔离级别名称是什么?有什么区别?说说MySQL隔离级别?
- 事务的特性及慢查询?
- BTree机制说一下?
- 说说MySQL常用的优化方法?
三面(分布式,消息队列等):
- 自我介绍
- cap了解吗,分别指什么?
- 强一致性和弱一致性有什么方法来实现的?
- 负载均衡怎么实现?为什么这么做?
- 缓存雪崩说下?
- MySQL主从复制怎么实现的?具体原理是什么?有什么优缺点?
- 讲讲分布式事务?
- 消息队列,用到什么场景(削峰,限流,异步)?
- zk的性能瓶颈怎么克服?
- 讲了下kafka,怎么保证数据不丢失?确保消息不会重复消费?
- 消息送达确认是怎么实现的?
四面(从项目讲起):
- 说了自己的项目
- 主要用到的架构,做了些什么?
- 比较复杂的业务逻辑讲一下?
- 遇到很难解决的问题和突破收货
- 以后的打算和未来的职业发展,谈谈自己的看法
并发编程:
- 什么是多线程并发和并行?
- 什么是线程安全问题?
- 什么是共享变量的内存可见性问题?
- 什么是Java中原子性操作?
- 什么是Java中的CAS操作,AtomicLong实现原理?
- 什么是Java指令重排序?
- Java中Synchronized关键字的内存语义是什么?
- Java中Volatile关键字的内存语义是什么?
- 什么是伪共享,为何会出现,以及如何避免?
- 什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁?
- 讲讲ThreadLocal 的实现原理?
- ThreadLocal 作为变量的线程隔离方式,其内部是如何做的?
- 说说InheritableThreadLocal 的实现原理?
- InheritableThreadLocal 是如何弥补 ThreadLocal 不支持继承的特性?
- CyclicBarrier内部的实现与 CountDownLatch 有何不同?
- 随机数生成器 Random 类如何使用 CAS 算法保证多线程下新种子的唯一性?
- ThreadLocalRandom 是如何利用 ThreadLocal 的原理来解决 Random 的局限性?
- Spring 框架中如何使用 ThreadLocal 实现 request scope 作用域 Bean?
- 并发包中锁的实现底层(对AQS的理解)?
- 讲讲独占锁 ReentrantLock 原理?
- 谈谈读写锁 ReentrantReadWriteLock 原理?
- StampedLock 锁原理的理解?
- 谈下对基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理的理解?
- ConcurrentLinkedQueue 内部是如何使用 CAS 非阻塞算法来保证多线程下入队出队操作的线程安全?
- 基于链表的阻塞队列 LinkedBlockingQueue 原理。
JVM
- Java 内存分配?
- Java 堆的结构是什么样子的?
- 什么是堆中的永久代(Perm Gen space)?
- 简述各个版本内存区域的变化?
- 说说各个区域的作用?
- Java 中会存在内存泄漏吗,简述一下?
- Java 类加载过程?
- 描述一下 JVM 加载 Class 文件的原理机制?
- 什么是类加载器?
- 类加载器有哪些?
- 什么是tomcat类加载机制?
- 类加载器双亲委派模型机制?
- 什么是GC? 为什么要有 GC?
- 简述一下Java 垃圾回收机制?
- 如何判断一个对象是否存活?
- 垃圾回收的优点和原理,并考虑 2 种回收机制?
- 垃圾回收器的基本原理是什么?
- 垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
- 深拷贝和浅拷贝?
- System.gc() 和 Runtime.gc() 会做些什么?
- 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
- 什么是分布式垃圾回收(DGC)?它是如何工作的?
Spring
- 为什么需要代理模式?
- 讲讲静态代理模式的优点及其瓶颈?
- 对Java 接口代理模式的实现原理的理解?
- 如何使用 Java 反射实现动态代理?
- Java 接口代理模式的指定增强?
- 谈谈对Cglib 类增强动态代理的实现?
- point cut,advice,Join point是什么?
- join point 和 point cut 的区别?
- 怎么理解面向切面编程的切面?
- 谈谈对SpringAOP Weaving(织入)的理解?
- 谈谈SpringAOP Introduction(引入)的理解?
- 讲解OOP与AOP的简单对比?
- 讲解JDK 动态代理和 CGLIB 代理原理以及区别?
- 讲解Spring 框架中基于 Schema 的 AOP 实现原理?
- 讲解Spring 框架中如何基于 AOP 实现的事务管理?
- 谈谈对控制反转的设计思想的理解?
- 怎么理解 Spring IOC 容器?
数据库
- MySQL 有哪些存储引擎啊?都有什么区别?
- Float、Decimal 存储金额的区别?
- Datetime、Timestamp 存储时间的区别?
- Char、Varchar、Varbinary 存储字符的区别?
- 什么是索引?
- 对比一下B+树索引和 Hash索引?
- MySQL索引类型有?
- 如何管理 MySQL索引?
- 对Explain参数及重要参数的理解?
- 索引利弊是什么及索引分类?
- 二叉树的转置是什么?
- 聚簇索引和非聚簇索引的区别?
- B+tree 如何进行优化?索引遵循哪些原则?存储引擎会进行哪些自动优化?到底何时索引会失效?
- 索引与锁有什么关系?
- 还有什么其他的索引类型,各自索引有哪些优缺点?
- 谈谈对Innodb事务的理解?
- 说说数据库事务特点及潜在问题?
- 什么是MySQL隔离级别?
- 有多少种事务失效的场景,如何解决?
缓存
- redis数据结构有哪些?
- Redis缓存穿透,缓存雪崩?
- 如何使用Redis来实现分布式锁?
- Redis的并发竞争问题如何解决?
- Redis持久化的几种方式,优缺点是什么,怎么实现的?
- Redis的缓存失效策略?
- Redis集群,高可用,原理?
- Redis缓存分片?
- Redis的数据淘汰策略?
- redis队列应用场景?
- 分布式使用场景(储存session)?
网络编程
- TCP建立连接和断开连接的过程?
- HTTP协议的交互流程,HTTP和HTTPS的差异,SSL的交互流程?
- TCP的滑动窗口协议有什么用?
- HTTP协议都有哪些方法?
- Socket交互的基本流程?
- 讲讲tcp协议(建连过程,慢启动,滑动窗口,七层模型)?
- webservice协议(wsdl/soap格式,与restt办议的区别)?
- 说说Netty线程模型,什么是零拷贝?
- TCP三次握手、四次挥手?
- DNS解析过程?
- TCP如何保证数据的可靠传输的?
分布式
- 什么是CAP定理?
- 说说CAP理论和BASE理论?
- 什么是最终一致性?最终一致性实现方式?
- 什么是一致性Hash?
- 讲讲分布式事务?
- 如何实现分布式锁?
- 如何实现分布式 Session?
- 如何保证消息的一致性?
- 负载均衡的理解?
- 正向代理和反向代理?
- CDN实现原理?
- 怎么提升系统的QPS和吞吐?
- Dubbo的底层实现原理和机制?
- 描述一个服务从发布到被消费的详细过程?
- 分布式系统怎么做服务治理?
- 消息中间件如何解决消息丢失问题?
- Dubbo的服务请求失败怎么处理?
- 对分布式事务的理解?
- 如何实现负载均衡,有哪些算法可以实现?
- Zookeeper的用途,选举的原理是什么?
- 讲讲数据的垂直拆分水平拆分?
面试经验总结
一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你 的简历来问的;
能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试 之前好好回顾一下自己所做的项目;
和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是 如何使用的;
建议提前了解一下自己想要面试的公司的价值观,判断一下自己究竟是否适合这个公司。
另外,我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
为应对一线大厂面试,我做了哪些准备?
(一)调整自己的心态,正确面对得失
面试中常见的问题,主要是心态,面试调整心态是第一位的,如何调整成最佳心态呢?很多求职者在面试过程中自己思路不清晰,语言不流畅,说话毫无逻辑,会不断否定自己,归根结底都是面试心态问题,所以调整自己的心态,正确面对得失是非常重要的,我的方法是给自己足够的心理暗示。
(二)提升技术,扩宽知识
对于程序员来说,要想成长为一名行业内的大牛大神级别的人物,那么唯一的办法就是通过学习,来不断提升自己的技术,扩宽知识,达到一定的高度和深度。那么如何提升自己的技术,扩宽自己的知识储备呢?
以下是我个人的一些做法,希望可以给各位提供一些帮助:
- 21天啃完283页的pdf文档
**Java部分:**Java基础,集合,并发,多线程,JVM,设计模式
**数据结构算法:**Java算法,数据结构
**开源框架部分:**Spring,MyBatis,MVC,netty,tomcat
**分布式部分:**架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等
**微服务部分:**SpringBoot,SpringCloud,Dubbo,Docker
- 实战系列:Spring全家桶+Redis等
- 其他相关的电子书:源码+调优
(三)刷题
如何刷题?这是很多现在面试者心中的困惑,我们都知道,面试前刷题是很有必要的,毕竟很多题目都有一定的共性,刷足够题目就能够做到举一反三,甚至在面试时,被问到原题,能够侃侃而谈,那么刷题如何进行呢?建议:最好找一些历年的面试原题,分专题来对自己进行训练。
以下是我私藏的面试题库:
结束语
对于大厂面试,我最后想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来。另外提醒一点,充分复习,是消除你紧张的心理状态的关键,但你复习充分了,自然面试过程中就要有底气得多。
以上内容中所有的学习资料、面试资料,均可以免费提供,希望大家金三银四面试顺利,拿下自己心仪的offer!
需要的朋友:直接点击文档窗口(https://jq.qq.com/?_wv=1027&k=gLUIIwrn)免费领取~
欢迎关注专栏:Java架构进阶团。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。