各大互联网Java面试题汇总,最后我成功拿到百度的offer

从事Java开发也有5年经验了,7月初来到帝都,开启面试经历,前后20天左右,主面互联网公司,一二线大公司或者是融资中的创业公司都面试过,拿了一些offer,其中包括奇虎360,最后综合决定还是去百度了。

首先不同面试官面试风格一定不同,我这里就是总结这些天面试Java开发过程中的大多数问题,综合分类有Java基础,框架,多线程,网络通信,数据库以及设计模式,算法,等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答,或者网上有很多答案,可以自行搜索。

关于专业技能

写完项目接着写写一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西----但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。

1、基本语法

一、Java基础

1.String类为什么是final的。

2.HashMap的源码,实现原理,底层结构。

3.反射中,Class.forName和classloader的区别

4.session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。

5.Java中的队列都有哪些,有什么区别。

6.Java的内存模型以及GC算法

7.Java7、Java8的新特性(baidu问的,好BT)

8.Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高

9.Java内存泄露的问题调查定位:jmap,jstack的使用等等

二、多线程

这也是必问的一块了。因为三年工作经验,所以基本上不会再问你怎么实现多线程了,会问得深入一些比如说Thread和Runnable的区别和联系、多次start一个线程会怎么样、线程有哪些状态。当然这只是最基本的,出乎意料地,几次面试几乎都被同时问到了一个问题,问法不尽相同,总结起来是这么一个意思:

假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

聪明的网友们对这个问题是否有答案呢?不难,java.util.concurrent下就有现成的类可以使用。

另外,线程池也是比较常问的一块,常用的线程池有几种?这几种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?实际一些的,会给你一些具体的场景,让你回答这种场景该使用什么样的线程池比较合适。

最后,虽然这次面试问得不多,但是多线程同步、锁这块也是重点。

synchronized和ReentrantLock的区别、synchronized锁普通方法和锁静态方法、死锁的原理及排查方法等等,关于多线程,我在之前有些过文章总结过多线程的40个问题,可以参看40个Java多线程问题总结。

三、IO

再次补充IO的内容,之前忘了写了。

IO分为File IO和Socket IO,File IO基本上是不会问的,问也问不出什么来,平时会用就好了,另外记得File IO都是阻塞IO。

Socket IO是比较重要的一块,要搞懂的是阻塞/非阻塞的区别、同步/异步的区别,借此理解阻塞IO、非阻塞IO、多路复用IO、异步IO这四种IO模型,Socket IO如何和这四种模型相关联。这是基本一些的,深入一些的话,就会问NIO的原理、NIO属于哪种IO模型、NIO的三大组成等等,这有些难,当时我也是研究了很久才搞懂NIO。提一句,NIO并不是严格意义上的非阻塞IO而应该属于多路复用IO,面试回答的时候要注意这个细节,讲到NIO会阻塞在Selector的select方法上会增加面试官对你的好感。

如果用过Netty,可能会问一些Netty的东西,毕竟这个框架基本属于当前最好的NIO框架了(Mina其实也不错,不过总体来说还是比不上Netty的),大多数互联网公司也都在用Netty。

四、JDK源码

要想拿高工资,JDK源码不可不读。上面的内容可能还和具体场景联系起来,JDK源码就是实打实地看你平时是不是爱钻研了。过程中被问了不少JDK源码的问题,其中最刁钻的一个问了,String的hashCode()方法是怎么实现的,幸好平时String源代码看得多,答了个大概。JDK源码其实没什么好总结的,纯粹看个人,总结一下比较重要的源码:

(1)List、Map、Set实现类的源代码

(2)ReentrantLock、AQS的源代码

(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的

(4)线程池的实现原理

(5)Object类中的方法以及每个方法的作用

这些其实要求蛮高的,去年一整年基本把JDK中重要类的源代码研究了个遍,真的花费时间、花费精力,当然回头看,是值得的----不仅仅是为了应付面试。

五、框架

1.struts1和struts2的区别

2.struts2和springMVC的区别

3.spring框架中需要引用哪些jar包,以及这些jar包的用途

4.srpingMVC的原理

5.springMVC注解的意思

6.spring中beanFactory和ApplicationContext的联系和区别

7.spring注入的几种方式

8.spring如何实现事物管理的

9.springIOC和AOP的原理

10.hibernate中的1级和2级缓存的使用方式以及区别原理

11.spring中循环注入的方式

六、数据库

数据库十有八九也都会问到。一些基本的像union和union all的区别、left join、几种索引及其区别就不谈了,比较重要的就是数据库性能的优化,如果对于数据库的性能优化一窍不通,那么有时间,还是建议你在面试前花一两天专门把SQL基础和SQL优化的内容准备一下。

不过数据库倒是不用担心,一家公司往往有很多部门,如果你对数据库不熟悉而基本技术又非常好,九成都是会要你的,估计会先把你放到对数据库使用不是要求非常高的部门锻炼一下。

七、数据结构和算法分析

数据结构和算法分析,对于一名程序员来说,会比不会好而且在工作中绝对能派上用场。数组、链表是基础,栈和队列深入一些但也不难,树挺重要的,比较重要的树AVL树、红黑树,可以不了解它们的具体实现,但是要知道什么是二叉查找树、什么是平衡树,AVL树和红黑树的区别。记得某次面试,某个面试官和我聊到了数据库的索引,他问我:

你知道索引使用的是哪种数据结构实现吗?

答到用的Hash表吧,答错。他又问,你知道为什么要使用树吗?答到因为Hash表可能会出现比较多的冲突,在千万甚至是上亿级别的数据面前,会大大增加查找的时间复杂度。而树比较稳定,基本保证最多二三十次就能找到想要的数据,对方说不完全对,最后我们还是交流了一下这个问题,我也明白了为什么要使用树,这里不说,网友朋友们觉得索引为什么要使用树来实现呢?

八、Java虚拟机

出乎意料,Java虚拟机应该是很重要的一块内容,结果在这几家公司中被问到的概率几乎为0。要知道,去年可是花了大量的时间去研究Java虚拟机的,光周志明老师的《深入理解Java虚拟机:JVM高级特性与最佳实践》,就读了不下五遍。

言归正传,虽然Java虚拟机没问到,但我觉得还是有必要研究的,就简单地列一个提纲吧,谈谈Java虚拟机中比较重要的内容:

(1)Java虚拟机的内存布局

(2)GC算法及几种垃圾收集器

(3)类加载机制,也就是双亲委派模型

(4)Java内存模型

(5)happens-before规则

(6)volatile关键字使用规则

也许面试无用,但在走向大牛的路上,不可不会,这个是面试了几家公司最后经过整合写出了这些面试题,面试就决定了你的薪资,一定要好好对待,这些问题可能不会问到,但是程序员技多不压身,最后收到了百度的offer,薪资还不错,把这些面试题分享出来希望能帮助那些打算跳槽的人,另外找朋友录制了一些视频,里面有针对Java面试的,也有一些是目前互联网行业的一些技术,包括Java高并发、分布式、微服务、JVM、IO,等技术,进群免费分享给大家!Java后端技术交流群:720893309

原文地址:http://blog.51cto.com/13545290/2129091

时间: 2024-11-07 23:19:51

各大互联网Java面试题汇总,最后我成功拿到百度的offer的相关文章

20个高级Java面试题汇总

北京尚学堂提供 这是一个高级Java面试系列题中的第一部分.这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题. 1.        什么是可变参数? 2.        断言的用途? 3.        什么时候使用断言? 4.        什么是垃圾回收? 5.        用一个例子解释垃圾回收? 6.        什么时候运行垃圾回收? 7.        垃圾回收的最佳做法? 8.        什么是初始化数据块? 9.        什么

各大公司Java面试题超详细总结

ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突.ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对应线程的变量副本.ThreadLocal在Spring中发挥着巨大的作用,在管理Request作用域中的Bean.事务管理.

Java面试题汇总

最近面试了比较多的Java研发岗,感觉自己对Java的学习还不够深刻,于是利用周末恶补了一下,也为下星期的三个面试做下准备. RPC的暂时搁置一下. 下面是自己感觉比较常考的题目. Spring 原理 java跨平台原理 hashCode和equals HashTable和HashMap.arrayList和vector.ArrayList& LinkedList的区别 Java基本类型有哪些(第一轮面试时面试官非常喜欢问的一个问题,因为第一轮面试的面试官往往不太懂技术) 作用域public,p

[转]20个高级Java面试题汇总

http://saebbs.com/forum.php?mod=viewthread&tid=37567&page=1&extra= 这是一个高级Java面试系列题中的第一部分.这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题. 程序员面试指南:https://www.youtube.com/watch?v=0xcgzUdTO5M Java面试问题集合指南:https://www.youtube.com/watch?v=GnR4hCvEIJQ

阿里历年经典Java面试题汇总

Volatile的特征: A.禁止指令重排(有例外) B.可见性 Volatile的内存语义: 当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存. 当读一个volatile变量时,JMM会把线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量. Volatile的重排序 1.当第二个操作为volatile写操做时,不管第一个操作是什么(普通读写或者volatile读写),都不能进行重排序.这个规则确保volatile写之前的所有操作都不会被重排序到

java面试题汇总,不断更新中。。。

JVM,并发,锁相关: 1.请你谈谈对volatile的理解,volatile是否存在伪共享问题. 2.cas你知道吗? 3.原子类AtomicInteger的ABA问题谈谈?原子更新引用知道吗? 4.公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁. 5.CountDownLatch.CyclicBarrier.Semaphore使用过吗? 6.阻塞队列知道吗? 7.死锁编码及定位分析? 8.java中的逃逸分析了解吗? 9.synchronized的原理,你了解锁膨胀

java面试题汇总五

------------恢复内容开始------------ 第四部分 Java SE基础 4.1设计模式和常用的设计模式 4.1.1  设计模式就是经过前人无数次的实践总结出的,设计过程中可以反复使用的,可以解决特定问题的设计方案. 提供一个方法获取该实例对象(创建时需要进行方法同步) 工厂模式:Spring IOC就是使用的工厂模式   对象的创建交给一个工厂去创建. 代理模式:Spring AOP就是使用的动态代理.  4.1.2  单例模式 这种模式涉及到一个单一的类,该类负责创建自己的

java 面试题汇总(未完结)

大数据面试题汇总(不断更新中)

结合自身面试经历,包括BAT.SF.中信等等公司所做的面试题汇总.主要包括以下几大类: 一.spark相关 1.Spark的Shuffle原理及调优? 2.hadoop和spark使用场景? 3.spark如何保证宕机迅速恢复? 4.hadoop和spark的相同点和不同点? 5.RDD持久化原理? 6.checkpoint检查点机制? 7.checkpoint和持久化机制的区别? 8.Spark Streaming和Storm有何区别?  9.RDD机制?  10.Spark streamin