前言:

北京-三年经验-Java,在金三银四这两个月期间(在五月初还去面试了几家,主要是三四月份期面试剧居多),我跳槽面试,前前后后我面试十五家公司,最终,成功拿到了offer。现在已经正常上班,所以,现在才有时间静下心来把前面两个多月的面试经历做一个总结,来聊聊当时我面试15家大厂的感受以及总结。(文章有点长,请读者耐心观看,谢谢~~~~)

面试经历

1、阿里面试

第一轮:电话初面

第二轮:技术面谈【技术职位尽量避免多谈管理上的工作】

第三轮:高管复试

第四轮:HR最后确认

一面:首先确认对阿里的意向度(如果异地更会考虑对工作地点(杭州)的意向度!阿里很看重这个);其次面试官一般会针对您所做过的项目来做具体技术的交流,会比较关注个人对项目细节是不是掌握到位,主要考察java的技术基础和原理,比如Spring框架以及数据库和JVM三个方面,也会交流到分布式、线程池的实现等等,重点考察是不是有比较钻研技术和技术上的亮点【不一定每个面都很厉害但一定要有亮点】;

二面:技术面,根据项目深入的了解技术实力,了解您的知识面,了解您的问题解决能力以及技术灵活运用能力,也通过这一过程考察团队合作能力、学习主动性和创新性,可以挑选2-3个做过的有典型性的项目做一个仔细 技术回顾和自己独到的理解【这会成为您的加分项】;

三面:他们最后的高管复试会涉及到相关的技术问题,大部分是对你的整体价值观做宏观的把控(比如上进心,责任心,心态,工作激情等)

HR确认:基本就是从大方向了解一下您的心态、抗压能力,工作中的角色、未来大致的规划以及对阿里的意向度

【技术基础以及的问题多看看书准备下就行了,不懂的直接说不懂没关系的;在项目细节上多把关一下,根据项目有针对性的谈自己的技术亮点,能表达清楚,可以引导面试官来问你比较擅长的技术问题,个人就可以尽情发挥】

阿里比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考;

阿里面试问的问题会比较底层

Java内存结构,spring的aop的实现方法,java数据库问题定位和性能调优;

关于Java异常的续承层次结构,讲述异常的续承关系;

java中重载和重写有什么区别,分别用什么关键字;

关于分布式消息队列,分布式缓存;

关于hashmap源码实现, jdk

关于设计模式,uml,jvm 内存回收机制问题

java线程如何启动?java中加锁的方式有哪些,怎么个写法?

对乐观锁和悲观锁的理解;

ORACLE中的SQL如何进行优化,都有哪些方式?事务有哪些特性,在ORACLE中隔离有哪些级别?

介绍一下自己最近做的一个典型的项目;

在项目中遇到了哪些问题,自己是如何解决的 ;

目前系统支撑的用户量是多少,假如用户量提升10倍,系统会出现什么样的问题,如何重新设计系统【这里主要是想了解您的问题预见能力以及问题解决能力,考查思路】

使用memcached是一个什么样的原理

如何存放数据到memcached集群中,介绍一下这个过程。跟进的问题,讲一下一致性哈希算法的实现原理。

JVM中堆是如何管理的,JVM的内存回收机制,介绍一下

分布式事务实现方式

热点账户问题(项目中有就会问)

第一轮技术面试(电面)涉及Java基础点(可参考):

session

java锁

gc原理

hashmap

listlink arraylist 区别

aop 原理

多线程

kafka 原理和容错

spark hadoop 原理

redis 同步机制

classLoader 机制

Http 协议

cookie的限制

HashMap key的要求 , hashcode一致两个对象是否相等

JVM的原理

涉及面较广,包括谈到项目上遇到的问题,以此深入探讨。

XX:

介绍自己的工作职责、技术or管理怎么分配的

介绍项目,涉及的技术把整个流程说下。然后他感兴趣就会深入问

然后就是聊一些jvm、nosql之类的

假如服务器反应很慢,你应该怎么排查问题

怎么跟踪一个方法的用时,并且最小限度干涉业务程序

旁听面试-java:

人选介绍目前目前技术管理侧重;

对阿里推荐对应岗位的理解度;

系统设计是怎么样的;

做的一些架构,数据源来自于哪里并深入问;

模块边界,缓存机制;

选用技术选型时,A和B的区别;

多线程如何用,有什么好处,和进程的区别;

多线程的过程;

多线程同步的方法,X项目中如何去实现;

分布式架构在你目前项目中的体现;

跨主机通信用过什么,接口等;

大数据存储;

结尾:你自己觉得你擅长什么,以后想走的路线,技术还是管理;

Java面试题分享:

JMS的两种模式是那些;

富客户端怎么更新;

自己设计类似ESB这样的企业数据总线应该有哪些功能;

系统架构设计;

集群中怎么控制session;

怎么样知道java存中是哪一些模块消耗内存比较多;

应用服务器的参数调整。

2、新东方

技术面试,两轮,地点:中关村地铁站E口,鼎好大厦6层,

面试官:龙彦俊,李经理 面试时间:2018_04_19_10:30(提前到了45分钟)

1、自我介绍

2、项目介绍

3、LiveChat项目,第一个

4、海南海航项目,第二个,最熟悉

5、技术:

数据库 mysql

mysql如何做主从/主主复制的,java程序如何操作的?

mysql主从复制,多库的时候,如果一个插入,一个删除,但是失败了,事务是如何操作保证数据的唯一性?

mysql性能优化方案

--1.给查询频繁的诗句建立索引

--使用好的sql语句,不使用like

问:为什么不使用like

答:因为会破坏索引

问:什么情况下like不会破坏索引

答:不知道

问:如何发现一个sql语句写的好坏

答:单元测试,确定执行时间,或者线上打印sql的执行时间

问(总结):有些sql的话,不能通过测试环境测出性能的,必须上生产,因为生产有大数据

通过生产环境的反馈可以知道sql性能

问:数据库的话用的mybatis,mybatis的sql有几种方式

答:编程式(java代码)和集成式XML()

问:HTTP状态码

答:200(OK) 404(找不到页面) 403(权限问题) 500(代码错误) 其他有转发,重定向和其他

问:dubbo的运行机制

答:生产者,消费者,注册中心,zookeeper权限和端口权限

问:你的项目如何使用dubbo的

答:使用dubbo调用海航常客小组的接口,配置注册中心和接口(xml),@AuthorWired 注解方式创建类对象,然后方法调用

问:生成环境的dubbo如何运行突然好好的,突然有问题,你是如何发现的?

答(其实dubbo自带了一个管理页面,直接可以看)我们项目中是运维配置检测接口,发现5分钟断连接,会发送短信邮寄提醒(答的有问题)

问:面试官说你的dubbo只停留在使用阶段

答:是的,这部分的原理还没有去研究

问:你用过那些缓存

答:memcache,redis,还有session,cookie

面试官2:

问:介绍一下你用的最熟的技术

数据结构和算法基本入门,java的话,了解设计模式和jvm还有框架使用

问:框架你有用那些

Spring+SpringMVC+Mybatis

问:Spring的AOp你是怎么使用的

答:日志管理,事务管理

问:mybatis的$和#的区别

答:sql注入相关,$是把参数直接替代,如果参数不经过验证,则可能发生sql注入,#的参数加了''号,不会发生sql注入

问:mybatis你用过@param(User user,int id,String name)吗

答:没用过,如果多个参数用的map或者封装对象,单个的直接用String

问:java如果是传两个参数,int 和 string 类型的,mybatis是如何接受的

答:(卡壳中)

问:既然阅读过mybatis,这个应该知道,或者说下mybatis如何解析的

答:(猜测中)安装顺序接受,param1 和param2 用# 后面加参数类型接受(后实际发现应该用typeHandle)

问:dubbo使用(又问了一遍)

问:HTTP状态吗(又问了一遍)

问:request如何接受浏览器地址接口的

答:request有请求行,请求头,请求体。接口地址在请求行中,后台java代码request读取请求行东西就行(具体名字真的忘记了)

问:那request还有那些方法

答:request.getParameter ,request.getParameters ,request.getQueryString 等等

问:jsp的九大内置对象

答:页面page,请求request,会话session,应用application,还有resonse,config 剩下的out,exception,pageContext

。。。

问:你对自己未来发展有计划吗

答:架构

问:你感觉自己的水平,最低能拿多少,可接受 (人生第二次面试,死在这里了,不圆滑,对自己实力了解不清楚)

答:我投的这个岗位,最低2万,最高2.5,但我自认为还没达到2.5的水平,2万可接受,贵公司当然给越多越好

问:那我和另外的技术协商一下,再给你回复(面试结束)

答:那接下来还有其他安排吗

问:没了

答:好,那我这边撤了

3、掌趣游戏公司

1、问了c语言指针是什么

2、多线程

ThreadLocal

redis (五种基本数据,两种持久化方式)

3、sql

学生,课程表等等

4、分布式事务

谈薪资 20K(要高了,回去等消息)

4、便丽猫(拿到offer了)

dubbo,zookeeper

大学经历

最大的缺点和优点

平时干什么

5、58集团(总部,大山子)

dubbo如何用,zookeeper如何用

mysql 的索引原理

mysql索引你用过哪些,聚集索引非聚集索引

mysql 的leftjoin 和 inner join区别

单链表删除(手写)

单例(手写)

其他项目~

谈薪资

6、亚信中国(百子湾)

主要问了mybatis,还有mybatis分页插件,如何不通过插件手写分页,分页原理

技术认可了,问了薪资,开不到16k

7、盛学成长(三元桥)

hr面。招的开发组长,3-5年,然后技术不再,hr问了一些问题,不记得什么了,等消息

8、蓝卡(国际)健康集团

睡着了,没去

9、京东(移动 端开发组)-服务端 (投错部门了,死掉了,面试官中途接电话20多分钟,没说抱歉,最后面试说二面,然后没找到同事就GG了)

1、订单支付系统介绍

2、dns域名解析

3、BIO和 NIO

4、滑动窗口协议

5、多路复用

6、nginx,均衡负载,F5

7、LVS、CDN

10、去哪儿(面试官特别好,问啥不会都告诉我答案)(线程和高并发我都不太会)GG

dubbo,zookeeper

mysql事务springMVC事务

单例,多例,springMVC

mysql 索引(聚集非聚集)

如何保持单线程,多事务唯一性(ThreadLocal)

validate 和synchronize区别

多线程状态

redis

11、北京尚德(新团队做的客服服务项目)

有三个团队,java,python,前端

薪资15~19薪水

问的项目简单,还有大学学习了什么,一面技术

二面hr,男的hr,然后定级的是T2

然后hr聊薪资,给不到16K

12、社区半径(众海投资旗下,阿里前副总裁鲁众)(三面技术,两hr)

问了数据库的设计

如何把智联的建立进行存储(答出来了非常满意)

权限管理如何设计

mysql索引

springAOP ,mybatis

13、融云(特别厉害的公司,迟到1.5小时,提前和hr沟通了,北苑路北神州泰岳大厦14层)

公司氛围特别好,面试官1刚成立团队,急需招人

问的java基础,JVM的GC,还有spring AOP

然后聊了一下如何学习java和如何看待新技术,新框架,如何看待大数据

我们的观点都是,数据结构和设计模式是基础,其他都是演变,一个主内,一个主外

面试官的上司

问我喜欢阅读,最近读什么书,最喜欢国外什么作家,国内什么作家,我答大仲马和莫言,因为最近刚看过这些

还有得到APP听书,我特别喜欢

14、爱康集团(岗位5-10年的,hr主动找的我)

我问hr 10 年是不是找错对象了,她说中高级和架构师一起招

迟到20分钟,找好久,路过国贸的北京电视台和 得到APP的小红楼

架构师问了mybatis缓存机制,问了spring事务,问了mybatis事务原理

说我回答问题像背书,说的太细致了。我说了面试了15家了,这是16家也是最后一家

hr是从阿里跳槽过来的,吃着冰棍很随意的和我聊,说这个公司有150人的开发,一个首席架构师还有10多个架构师,

首席架构师特别厉害,没有一个技术不服,接下来面试我的架构师,态度很好,很温和,说我和他们组人特别像,都是圆脸,尴尬,哈哈

问题:

1、平时做什么,怎么学习的;

2、干活的话,说这边对员工的要求是,让80分的员工干120分的活,让其更快成长

3、介绍福利,问的技术少,主要看的是态度

15、阿里集团大麦网(买票业务)(电话面试,50分钟)

问了我项目,我正好做得奖励机票兑换,海航的项目

问了,mybatis left join 和 inner join

问了dubbo原理

问了支付宝接口对接的细节,非常详细

问了财务对接的细节

问了springMVC 的AOP用什么实现的

其他:用友(太远了),小公司若干。。。 ofo,猫眼文化,国美在线,boss直聘,每日优先,美团

总结:

经过这两个多月的面试之路,说实话,一开始是有点累的,但往后面,你会发现,你前面的努力都是值得的。在我面试的这十几家大大小小的公司中,我发现,那些大厂的面试反而比较容易,那些小一点的面试比较苛刻的。反正就是挑你鱼里的刺。我是一个三年经验的幼嫩的小伙子,在面试这十几家的公司了,我也收到了好几份offer,最后因为种种原因,我放弃了那几家给我开的offer,最后还是去了工作竞争比较大的阿里。那么我为什么面试这么多家的大厂而且拿到那么多的offer?其实,做好以下几点,你们也是可以的。

第一点:包装一份属于自己的独特的简历

第二点:对面试的公司做好相应的准备

第三点:在面试过程中要学会主动问问题

第四点:在技术问题上要如实的回答问题(会就会,不会就不会)

第五点:要有过硬的技术知识

第六点:再有过硬的技术知识下,前提是要有一套系统性的学习体系。

说到系统性的学习体系,我这里=向大家推荐一个系统性的学习体系,希望能帮得到大家。领取面试题+

Java基础

  • JAVA 中的几种数据类型是什么,各自占用多少字节。
  • String 类能被继承吗,为什么。
  • 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
  • String 属于基础的数据类型吗?
  • Java 中操作字符串都有哪些类?它们之间有什么区别?
  • Java 中 IO 流分为几种?
  • BIO、NIO、AIO 有什么区别?
  • 用过哪些 Map 类,都有什么区别,HashMap 时线程安全的吗,并发下使用的 Map 是什么,他们的内部原理分别是什么,比如存储方法,hashcode,扩容,默认容量等。
  • 如何将字符串反转?
  • 抽象类必须要有抽象方法吗?
  • 普通类和抽象类有哪些区别?
  • 抽象类能使用 final 修饰吗?
  • ArrayList 和 LinkedList 有什么区别?
  • ConcurrentHashMap的数据结构(必考)
  • volatile作用(必考)
  • Atomic类如何保证原子性(CAS操作)(必考)
  • 为什么要使用线程池(必考)

 

Redis

  • Redis的应用场景
  • Redis支持的数据类型(必考)
  • zset跳表的数据结构(必考)
  • Redis的数据过期策略(必考)
  • Redis的LRU过期策略的具体实现
  • 如何解决Redis缓存雪崩,缓存穿透问题
  • Redis的持久化机制(必考)
  • Redis为什么是单线程的?
  • 什么是缓存穿透?怎么解决?
  • Redis持久化有几种方式?
  • Redis为什么这么快?(必考)
  • Redis怎么实现分布式锁?
  • Redis如何做内存优化?
  • Redis淘汰策略有哪些?
  • Redis常见的性能问题有哪些?该如何解决?
  • Redis的使用要注意什么?

ZooKeeper

  • CAP定理
  • ZAB协议
  • leader选举算法和流程
  • zookeeper 是什么?
  • zookeeper 有几种部署模式?
  • zookeeper 怎么保证主从节点的状态同步?

Mysql

  • 事务的基本要素
  • 事务隔离级别(必考)
  • 如何解决事务的并发问题(脏读,幻读)(必考)
  • MVCC多版本并发控制(必考)
  • binlog,redolog,undolog都是什么,起什么作用
  • InnoDB的行锁/表锁
  • myisam和innodb的区别,什么时候选择myisam
  • 为什么选择B+树作为索引结构(必考)
  • 索引B+树的叶子节点都可以存哪些东西(必考)
  • 查询在什么时候不走(预期中的)索引(必考)
  • sql如何优化
  • explain是如何解析sql的
  • order by原理

JVM

  • 运行时数据区域(内存模型)(必考)
  • 垃圾回收机制(必考)
  • 垃圾回收算法(必考)
  • Minor GC和Full GC触发条件
  • GC中Stop the world(STW)
  • 各垃圾回收器的特点及区别
  • 双亲委派模型
  • JDBC和双亲委派模型关系
  • JVM 中一次完整的 GC 流程是什么样子的,对象如何晋升到老年代,说说你知道的几种主要的 JVM 参数

Spring

  • Spring的IOC/AOP的实现(必考)
  • 动态代理的实现方式(必考)
  • Spring如何解决循环依赖(三级缓存)(必考)
  • Spring的后置处理器
  • Spring的@Transactional如何实现的(必考)
  • Spring的事务传播级别
  • BeanFactory和ApplicationContext的联系和区别

其他

  • 高并发系统的限流如何实现
  • 高并发秒杀系统的设计
  • 负载均衡如何设计

操作系统篇

  • 进程和线程的区别
  • 进程同步的几种方式
  • 线程间同步的方式
  • 什么是缓冲区溢出。有什么危害,其原因是什么
  • 进程中有哪几种状态
  • 分页和分段有什么区别

多线程篇

  • 多线程的几种实现方式,什么是线程安全
  • volatile 的原理,作用,能代替锁吗?
  • sleep 和 wait 的区别
  • sleep的意义
  • Lock 和 Synchronized 的区别
  • synchronized 的原理是什么,一般用在什么地方(比如加载静态方法和非静态方法的区别)

补充

另外还会考一些计算机网络之类的。像消息队列,RPC框架这种考的比较少。计算机网络就是分层啊,tcp/udp啊,三次握手之类的。操作系统就是进程与线程啊,进程的数据结构以及如何通信之类的。

数据结构的排序算法也比较常考,考的话一定会让你手写个快排。剩下的算法题就靠LeetCode的积累了。其实非算法岗考的算法题都蛮简单的,很多题完全就是考察你智力是否正常,稍微难点的涉及到一些算法思想的按照LeetCode题目类型的分类,每种题做一两道基本就能完全应付面试了