去阿里面试java程序员,都有些什么样的面试题?
总结一下之前通过的优秀人才的铺垫总结的,希望能帮到大家,以后月收入3万,so easy
一、知其然,知其所以然
在java面试过程中,面试官一定会挑某个点深入考察。所以,如果你已经过了新手期,学习技术一定要多为什么。知道技术背后的原理,养成这样的思维习惯,而不是浅尝辄止。
二、条理化项目的难点和亮点
在面试前,捋清楚自己做过项目发挥的亮点,如何克服那些难点,这是每次面试必问的。
最后,我们来看下通过阿里面试的面经:
三、面试流程及不同面试官的核心问题
- 一面(电话) –> 二面(现场+一道线下编程+交叉面试) –> 高层+HR
- HR面试时的核心问题:
1、上一家公司,你为什么会离职?
2、你怎么看待自己以后的职涯?(包括工作和家庭的分配,怎么平衡家庭和工作的关系、加班、选择一家公司时的考量、location等)
3、对薪资期望(不要直接说数,绝不能表现出没到多少钱或者什么层级我就不去,这是味道问题,不是能力问题)
- 技术面试时的核心问题:
1、技术栈,是否匹配。(是否足够匹配所需的技术广度,这些技术是否有足够的实战经验)
2、技术深度,是否足够。(考察应聘者的理解程度,最好是懂底层实现、数据结构,据说会让你修改底层源码的)
3、学习能力,是否足够强。(学历代表过去,能力代表现在,学习能力代表未来)
四、对于30k月薪的人要会的技术栈
20k的月薪在BAT实在太普遍了,一般是高级工程师和资深工程师的职位。
在阿里是p6~p7左右,在百度是t5左右,腾讯是t2-3左右,京东是t3-1,美团是p6左右,其他的我不了解。
这种级别是他们主要码农层级,加班多,能解决大部分问题,但对系统的整体架构能力和深入分析瓶颈的能力还需要培养。30k水平的面试一般都问底层原理,数据结构,算法,设计模式,整体架构能力和深入分析瓶颈的能力。
1、基础
比如对集合类,并发包,IO/NIO,JVM,内存模型,泛型,异常,反射,等有深入了解,最好是看过源码了解底层的设计。比如一般面试都会问ConcurrentHashMap,CopyOnWrite,线程池,CAS,AQS,虚拟机优化等知识点,因为这些对互联网的企业是绝对重要的。而且一般人这关都过不了,还发闹骚说这些没什么用,为什么要面试。
- 举一例子,在使用线程池时,因为使用了无界队列,在远程服务异常情况下导致内层飙升,怎么去解决?你要是连线程池都不清楚,你怎么去玩?
- 再举一例,由于对ThreadLocal理解出错,使用它做线程安全的控制,导致没能实现真的线程安全,你怪我哦?所以作为一个拿两万的JAVA程序员这点基础是必须的。
2、全面的互联网技术相关知识
从底层说起,你起码得深入了解mysql,redis,mongodb,nginx,tomcat,rpc,jms等方面的知识。你要问需要了解到什么程度,我可以给你说个大慨。
首先对于MySQL,你要知道常见的参数设置,存储引擎怎么去选择,还需要了解常见的索引引擎,知道怎么去选择。知道怎么去设计表,怎么优化sql,怎么根据执行计划去调优。
高级的你需要去做分库分表的设计和优化,一般互联网企业的数据库都是读写分离,还会垂直与水平拆分,所以这个也有经验的成分在里面。然后redis,mongodb都是需要了解原理,需要会调整参数的。
而nginx和tomcat几乎都是JAVA互联网方面必配,其实很阿里的技术栈选择有点关系。
至于rpc相关的就多的去,必须各种网络协议,序列化技术,SOA等等,你要有一个深入的理解。现在应用比较广的rpc框架,在国内就是dubbo了,可以自行搜索。
至于jms相关的起码得了解原理吧,一般情况下不是专门开发中间件系统和支撑系统的不需要了解太多细节,国内企业常用的主要是activeMQ和kafka。你能对我说的都研究的比较深入,阿里p6我觉得是没问题的,当然这个还需要看你的架构能力方面的面试表现了。
3、编程能力,编程思想,算法能力,架构能力的考量
首先2W程序员对算法的要求,我觉得还是比较低,再高级也最多红黑树吧,但是排序和查询的基本算法得会。
编程思想是必须的,问你个AOP和IOC你起码的清清楚楚,设计模式不说每种都用过,但是也能深入理解个十四五种。编程能力这个我觉得不好去评价,但是拿一个2000W用户根据姓名年龄排序这种题目也能信手拈来。
最后就是架构能力,这种不是说要你设计个多牛逼多高并发的系统,起码让你做一个秒杀系统,防重请求的设计能快速搞定而没有坑吧。
五、具体面试
1、自我介绍
自我介绍是给面试官的第一印象,面试官了解应聘者的基本信息,同时观察其表达能力、概括能力,语言是否流畅、有条理、层次分明。
这里要说明一下:
至少要准备 三份不同 的自我介绍,有人会问为什么呢?其实很简单,因为面试你的人,有三类不同的人群,都有着不同的关注点,你需要根据不同的关注点来展示自己。
好了,先上干货了
2、技术
jvm
类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序:
先静态、先父后子。
先静态:父静态 > 子静态 。
优先级:父类 > 子类 ,静态代码块 > 非静态代码块 > 构造函数 。
一个类的实例化过程:
1,父类中的static代码块,当前类的static
2,顺序执行父类的普通代码块
3,父类的构造函数
4,子类普通代码块
5,子类(当前类)的构造函数,按顺序执行
6,子类方法的执行
java
java是什么?
java 设计模式
Java设计模式——职责链模式(Chain of Responsibility)
Java设计模式——工厂方法模式(factory method)
Java设计模式——抽象工厂模式(Abstract factory)
java集合
Java集合, ArrayBlockingQueue源码解析(常用于并发编程)
Java集合, LinkedBlockingQueue源码解析(常用于并发编程)
Java集合,ConcurrentLinkedQueue源码解析(常用于并发编程)
Java集合,LinkedList底层实现和原理(也是基于queue的实现)
Java集合,ConcurrentHashMap底层实现和原理(常用于并发编程)
Java集合,HashSet底层实现(由HashMap实现)和原理
Java集合,TreeSet底层实现(由TreeMap实现)和原理
Java集合,HashMap底层实现和原理(1.7数组+链表与1.8+的数组+链表+红黑树)
java并发编程/多线程
Java 并发编程,线程池(ThreadPoolExecutor)源码解析
Java并发编程,无锁CAS与Unsafe类及其并发包Atomic
Java并发编程,AQS的(独占锁)重入锁(ReetrantLock)及其Condition实现原理
Java并发编程,多线程读写锁ReentrantReadWriteLock原理详解
java io/nio
io
java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)
java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
java io系列04之 管道(PipedOutputStream和PipedInputStream)的简介,源码分析和示例
java io系列05之 ObjectInputStream 和 ObjectOutputStream
java io系列06之 序列化总结(Serializable 和 Externalizable)
java io系列07之 FileInputStream和FileOutputStream
java io系列10之 FilterInputStream
java io系列11之 FilterOutputStream
java io系列12之 BufferedInputStream(缓冲输入流)的认知、源码和示例
java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例
java io系列14之 DataInputStream(数据输入流)的认知、源码和示例
java io系列15之 DataOutputStream(数据输出流)的认知、源码和示例
java io系列16之 PrintStream(打印输出流)详解
java io系列17之 System.out.println(“hello world”)原理
java io系列18之 CharArrayReader(字符数组输入流)
java io系列19之 CharArrayWriter(字符数组输出流)
java io系列20之 PipedReader和PipedWriter
java io系列21之 InputStreamReader和OutputStreamWriter
java io系列22之 FileReader和FileWriter
java io系列23之 BufferedReader(字符缓冲输入流)
java io系列24之 BufferedWriter(字符缓冲输出流)
java io系列25之 PrintWriter (字符打印输出流)
nio
Java NIO系列教程(4):Scatter/Gather
Java NIO系列教程(9):ServerSocketChannel
Java NIO系列教程(10):Java NIO DatagramChannel
java 文件操作
json,xml读写。
java web技术
thrift:
Thrift总结(一)介绍
Thrift总结(二)创建RPC服务
Thrift总结(三)Thrift框架
前端模块javascript、css,熟悉一个前端框架。
java 框架
Hadoop底层怎么实现(天猫)
谈一谈对spring的理解,spring ICO/AOP实现原理。
API接口与SDI接口的区别(API是提供给别人的接口)。
工作流引擎:Activiti工作流引擎使用详解、浅析JBPM工作流引擎
java 算法
一个整形数组,给定一个数,在数组中找出两个数的和等于这个数,并打印出来,我写的时间复杂度高,要求O(n)。(天猫)
n个整数,找出连续的m个数加起来和是最大。(天猫)
java 应用场景分析及解决方案
秒杀系统的设计(天猫)
高并发量大的话怎么处理热点数据等(蚂蚁金服)
流量控制相关问题(蚂蚁金服)
缓存击穿有哪些方案解决(天猫)
同时给10万个人发工资,怎么样设计并发方案,能确保在1分钟内全部发完(信息平台)
并列的并发消费问题(航旅)
分布式
分布式锁。
在系统层面,分布式从哪些纬度考虑(天猫)
缓存
消息队列
mq
kafka
中间件
用过哪些中间件。
数据库
数据库索引原理(蚂蚁金服网商)
linux
Linux的常用命令(天猫)
如何获取一个本地服务器上可用的端口:
netstat -a -n
候选人被问过的一些问题:
1、项目中遇到的最大挑战是什么?怎么解决的?
2、你为什么选择阿里?
3、最有成就感的事情是?
4、自己觉得自己工作上的短板/优点是什么?
5、说说自己性格上的优缺点(描述一下自己的性格)
6、怎么看待加班(你能接受996、997、007吗)?如果候选人的调性符合(足够官方),可以这么回答:我觉得我们要实现梦想,一定是要付出比较多努力的,所以我已经做好了准备,也愿意和小伙伴们一起战斗我是可以加班的,我现在加班强度就是比较大的。因为我喜欢这个事情,我想把这个事情做好。
7、可以接受降薪吗?(像蚂蚁这种你懂的)如果候选人的调性符合(足够官方),可以这么回答:我也理解蚂蚁金服现在的薪资架构,我相信公司会根据我的能力给出一个合理的薪水方案,我相信只要把事情做好,该有的一定会有的对于蚂蚁这样的部门,“ 我们在创造历史、我们在做一个从来没有人做过的事情,所以肯定是有难度的,肯定是要付出大量努力的 ”,面试官会特别喜欢这样的话。
附
Java系列:
HashMap , HashTable , ConcurrentHashMap 源码比较
程序员职场与生活:
展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
架构系列:
数据库及存储系列:
算法: