为什么80%的码农都做不了架构师?>>>
去阿里面试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
JVM的结构是怎样的?
JVM内存分布,JVM内存分配策略。
JVM GC原理/GC算法,垃圾收集器,GC调优。
JVM常见启动参数。
JAVA类的生命周期。
JVM类加载、类加载器、双亲委派机制与常见问题
类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序:
先静态、先父后子。
先静态:父静态 > 子静态 。
优先级:父类 > 子类 ,静态代码块 > 非静态代码块 > 构造函数 。
一个类的实例化过程:
1,父类中的static代码块,当前类的static
2,顺序执行父类的普通代码块
3,父类的构造函数
4,子类普通代码块
5,子类(当前类)的构造函数,按顺序执行
6,子类方法的执行
java
java是什么?
string中加号连接符是怎么执行的?
java 设计模式
Java设计模式——适配器模式(Adapter)
Java设计模式——外观模式(门面模式)(Facade)
Java设计模式——合成模式(Composite)
Java设计模式——桥接模式(Bridge)
Java设计模式——单例模式(Singleton)
Java设计模式——观察者模式(Observer)
Java设计模式——调停者模式(Mediator)
Java设计模式——代理模式(Proxy)
Java设计模式——享元模式(Flyweight)
Java设计模式——职责链模式(Chain of Responsibility)
Java设计模式——构造者模式(Builder)
Java设计模式——工厂方法模式(factory method)
Java设计模式——抽象工厂模式(Abstract factory)
Java 设计模式——原型模式(Prototype)
Java设计模式——备忘录模式(Memento)
Java设计模式——装饰器模式(Decorator)
Java设计模式——状态模式(State)
java集合
Java集合,总体框架及主要接口,抽象类分析
Java集合,Java中的队列都有哪些,有什么区别
Java集合,阻塞队列的基本结构
Java集合, ArrayBlockingQueue源码解析(常用于并发编程)
Java集合, LinkedBlockingQueue源码解析(常用于并发编程)
Java集合,ConcurrentLinkedQueue源码解析(常用于并发编程)
Java集合,ArrayList底层实现和原理
Java集合,LinkedList底层实现和原理(也是基于queue的实现)
Java集合,Vector底层实现和原理
Java集合,ConcurrentHashMap底层实现和原理(常用于并发编程)
Java集合,HashSet底层实现(由HashMap实现)和原理
Java集合,TreeSet底层实现(由TreeMap实现)和原理
Java集合,HashMap底层实现和原理(1.7数组+链表与1.8+的数组+链表+红黑树)
Java集合,TreeMap底层实现和原理
Java集合,LinkedHashMap底层实现和原理
hash算法:一致性hash算法原理及java实现
java并发编程/多线程
java并发编程,内存模型
java并发编程,volatile内存实现和原理
Java并发编程,并发基础
Java 并发编程,线程池(ThreadPoolExecutor)源码解析
Java并发编程,Executor 框架介绍
Java并发编程,ThreadLocal源码解析
Java并发编程,多线程死锁与资源限制详解
Java并发编程,synchronized所有用法
Java并发编程,synchronized原理解析
Java并发编程,无锁CAS与Unsafe类及其并发包Atomic
Java并发编程,AQS的(独占锁)重入锁(ReetrantLock)及其Condition实现原理
Java并发编程,lock 框架介绍
Java并发编程,多线程读写锁ReentrantReadWriteLock原理详解
java io/nio
io
java io系列01之 "目录"
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系列08之 File总结
java io系列09之 FileDescriptor总结
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 (字符打印输出流)
java io系列26之 RandomAccessFile
nio
Java NIO系列教程(1):Java NIO 概述
Java NIO系列教程(2):Channel
Java NIO系列教程(3):Buffer
Java NIO系列教程(4):Scatter/Gather
Java NIO系列教程(5):通道之间的数据传输
Java NIO系列教程(6):Selector
Java NIO系列教程(7):FileChannel
Java NIO系列教程(8):SocketChannel
Java NIO系列教程(9):ServerSocketChannel
Java NIO系列教程(10):Java NIO DatagramChannel
Java NIO系列教程(11):Pipe
Java NIO系列教程(12):Java NIO与IO
java 文件操作
json,xml读写。
java web技术
cookie和session区别是什么?
http请求。
HTTP1.0、HTTP1.1和HTTP2.0的区别
thrift:
Thrift总结(一)介绍
Thrift总结(二)创建RPC服务
Thrift总结(三)Thrift框架
前端模块javascript、css,熟悉一个前端框架。
java 框架
Dubbo的原理,序列化相关问题。
dubbo协议下的单一长连接与多线程并发如何协同工作
Hadoop底层怎么实现(天猫)
谈一谈对spring的理解,spring ICO/AOP实现原理。
API接口与SDI接口的区别(API是提供给别人的接口)。
工作流引擎:Activiti工作流引擎使用详解、浅析JBPM工作流引擎
java 算法
一个整形数组,给定一个数,在数组中找出两个数的和等于这个数,并打印出来,我写的时间复杂度高,要求O(n)。(天猫)
n个整数,找出连续的m个数加起来和是最大。(天猫)
java 应用场景分析及解决方案
海量数据分析。
微信红包怎么实现。
秒杀系统的设计(天猫)
高并发系统的设计及秒杀实践
高并发量大的话怎么处理热点数据等(蚂蚁金服)
流量控制相关问题(蚂蚁金服)
缓存击穿有哪些方案解决(天猫)
同时给10万个人发工资,怎么样设计并发方案,能确保在1分钟内全部发完(信息平台)
1000个线程同时运行,怎么防止不卡(航旅)
并列的并发消费问题(航旅)
大数据处理系统关键层次架构
分布式
分布式事务一致性。
分布式锁。
在系统层面,分布式从哪些纬度考虑(天猫)
缓存
redis缓存
memcached缓存
消息队列
mq
ActiveMQ的工作原理 ,
ActiveMQ消息机制
activemq的三种基本通信方式总结
kafka
Kafka史上最详细原理总结
中间件
用过哪些中间件。
数据库
mysql的事务四个特性,以及事务的四个隔离级别
TPS和QPS的区别
数据库TPS是多少,是否进行测试过(天猫)
数据库索引原理(蚂蚁金服网商)
linux
Linux的常用命令(天猫)
Java开发人员,有些常用的Linux命令必须掌握
如何获取一个本地服务器上可用的端口:
netstat -a -n
候选人被问过的一些问题:
1、项目中遇到的最大挑战是什么?怎么解决的?
2、你为什么选择阿里?
3、最有成就感的事情是?
4、自己觉得自己工作上的短板/优点是什么?
5、说说自己性格上的优缺点(描述一下自己的性格)
6、怎么看待加班(你能接受996、997、007吗)?如果候选人的调性符合(足够官方),可以这么回答:我觉得我们要实现梦想,一定是要付出比较多努力的,所以我已经做好了准备,也愿意和小伙伴们一起战斗我是可以加班的,我现在加班强度就是比较大的。因为我喜欢这个事情,我想把这个事情做好。
7、可以接受降薪吗?(像蚂蚁这种你懂的)如果候选人的调性符合(足够官方),可以这么回答:我也理解蚂蚁金服现在的薪资架构,我相信公司会根据我的能力给出一个合理的薪水方案,我相信只要把事情做好,该有的一定会有的对于蚂蚁这样的部门,“ 我们在创造历史、我们在做一个从来没有人做过的事情,所以肯定是有难度的,肯定是要付出大量努力的 ”,面试官会特别喜欢这样的话。
附
Java系列:
JVM系列:jvm基本结构
JVM系列:java中JVM的原理
JVM系列:解决JVM最大内存设置问题
JVM系列:JVM参数设置、分析
HashMap , HashTable , ConcurrentHashMap 源码比较
从使用到原理学习Java线程池
谈谈HashMap线程不安全的体现
Java NIO浅析
解密ThreadLocal
JAVA虚拟机体系结构
Java常量池理解与总结
一道面试题比较synchronized和读写锁
synchronized的实现原理和应用
Java 远程通讯技术及原理分析
Java中ConcurrentHashMap学习
《深入理解Java虚拟机》笔记
Java的内存回收机制
Java 中 StringBuilder 在高性能用法总结
HashMap的工作原理
java中关于Map的九大问题
一个Java对象到底占多大内存?
Java实现定时任务的三种方法
Java中static变量作用和用法详解
java代码优化
Java编程中“为了性能”尽量要做到的一些地方
java运行时数据区域
Java集合框架介绍
程序员职场与生活:
程序员那些事之卸磨杀驴
读《程序员的呐喊》
阿里李纯:从架构师到CTO,成长没有一蹴而就
写给程序员的有效学习方法
使用开源项目的正确姿势,都是血和泪的总结!
中年程序员的困惑
IT人为什么难以拿到高薪?
我们都是IT民工--流浪人IDE开发札记--牛逼人物
十个让你成为优秀程序员的有效方法
留不下的家乡,再战北京吗
如何读懂并写出装逼的函数式代码
十年工龄的程序员为你揭示最危害程序员职业生涯的三大观念
程序员:为什么选择Java
数学和编程
编程的智慧(一) 编程的智慧(二)
给Java说句公道话
zTree 作者张其纲访谈实录
展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
做技术到底可以做到哪种地步-技术为什么越走越窄
IT人员的职业生涯规划
编程的三层境界——器、术、道
IT项目管理的一些心得
技术人的危机-非理性的繁荣
什么是工程师文化?
从Code Review 谈如何做技术
编程能力与编程年龄
开发团队的效率
一线互联网技术团队管理经验谈
无休止加班的成因
互联网项目架构经验分享
很认真的聊一聊程序员的自我修养
一个IT人士的个人经历,给迷失方向的朋友
架构系列:
新浪微博王传鹏:微博推荐架构的演进
Nginx 配置简述
nginx搭建tomcat分布式集群
某互联网公司广告平台技术架构
外卖排序系统特征生产框架
常见性能优化策略的总结
简怀兵:架构师的自我认知与进阶
如何做最懂业务的基础架构研发|开源访谈
【长文干货】浅析分布式系统
大话程序猿眼里的高并发架构
缓存穿透、并发和失效,来自一线架构师的解决方案
手机淘宝移动端接入网关基础架构演进之路
阿里巴巴前架构师 360 度无死角剖析微服务
40亿移动设备的用户画像和标签架构实践
秒杀系统架构优化思路
58同城推荐系统架构设计与实现
一分钟了解负载均衡的一切
互联网架构,如何进行容量设计?
互联网架构为什么要做服务化?
微服务架构多“微”才合适?
单点系统架构的可用性与性能优化
多形态MVC式Web架构的分类
美团外卖订单中心的演进
百度分布式交互查询平台——PINGO架构迭代
【技术分享】京东电商广告和推荐的机器学习系统实践
bilibili高并发实时弹幕系统的实战之路
Motan:支撑微博千亿调用的轻量级RPC框架
京东商品详情页应对“双11”大流量的技术实践
架构师于小波:魅族实时消息推送架构
当当高可用架构之道
每秒处理10万订单乐视集团支付架构
关于高可用的系统
分布式系统的事务处理
由12306.cn谈谈网站性能技术
美团 O2O 供应链系统架构设计解析
饿了么:业务井喷时,订单系统架构这样演进
App架构经验总结
百度开放云首席架构师徐串:架构师对架构的理解
亿级用户下的新浪微博平台架构
微博首席架构师杨卫华:新浪微博技术架构分析
应用服务器集群的Session管理
数据库及存储系列:
解读SQL 内存数据库的细节
Redis的内存碎片及采用不同内存分配器碎片率对比
Redis性能问题排查解决手册
大众点评订单系统分库分表实践
分库分表的几种常见形式
DB主从一致性架构优化4种方法
互联网公司为啥不使用mysql分区表?
58怎么玩数据库架构(upyun架构与运维大会速记)
大型网站应用中MySQL的架构演变史
redis学习记录
算法:
缓存算法–LRU
数学之美番外篇:平凡而又神奇的贝叶斯方法
美团推荐算法实践
一分钟读懂互联网广告竞价策略
对称加密与非对称加密