Java工程师面试1000题
收集常见的Java工程师面试题,包括Java基础、多线程、JVM、网络协议、框架、分布式、大数据等相关内容
Yu.Zhansheng
请大家多多指教!
展开
-
Java工程师面试1000题153-Java8新特性之并行流和串行流
153、Java8新特性之并行流和串行流并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。Java8中将并行做了优化,我们可以很容易的对数据进行并行操作。StreamAPI可以声明性的通过parallel()与sequential()在并行流与顺序流之间进行切换。再说并行流之前,我们先了解一个框架Fork/Join:Fork/Join框架就是在必要情况下,将一个大的...原创 2019-03-27 10:51:34 · 372 阅读 · 0 评论 -
Java工程师面试1000题152-Stream API编程练习
152、Stream API编程练习①给定一个数字列表,如何返回一个由每个数的平方构成的列表?给定【1,2,3,4,5】返回【1,4,9,16,25】 @Test public void test1(){ Integer[] nums = new Integer[]{1,2,3,4,5}; Arrays.stream(nums).map((x...原创 2019-03-26 21:11:50 · 477 阅读 · 0 评论 -
Java工程师面试1000题151- Java8新特性之Stream API
151、了解Stream API吗?说说它Java8中有两大最为重要的改变。第一个是Lambda表达式;另外一个是StreamAPI。Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似于使用SQL执行的数据库查询一样简单。也可以使用StreamAPI来执行并行操作。简...原创 2019-03-26 20:39:52 · 335 阅读 · 0 评论 -
Java工程师面试1000题150-方法引用和构造器引用
150、说一下什么是方法引用和构造器引用①方法引用:若Lambda体中的内容有方法已经实现了,我们可以使用方法引用,可以把方法引用理解为是Lambda表达式的另外一种表现形式。主要有三种语法格式:对象::实例方法名 类::静态方法名 类::实例方法名注意:Lambda体中调用方法的参数列表和返回值类型要与函数式接口中抽象方法的参数列表和返回值类型保持一致。 若Lambda参...原创 2019-03-25 09:44:45 · 182 阅读 · 0 评论 -
Java工程师面试1000题149-Java8新特性之Lambda表达式
149、说一下Java8新特性之一的Lambda表达式Lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包:java.util.function包以及java.util.str...原创 2019-03-21 20:10:03 · 3426 阅读 · 0 评论 -
Java工程师面试1000题148-Java8四大核心内置函数式接口
148、Java8四大核心内置函数式接口Consumer<T> :消费型接口 方法:void accept(T t); Supplier<T> :供给型接口 方法:T get(); Function<T,R> :函数型接口 方法:R apply(T t); Predicate<T> :断言型接口 方法:boolean...原创 2019-03-20 16:01:56 · 235 阅读 · 0 评论 -
Java工程师面试1000题147-SpringMVC运行流程
147、说一下SpringMVC运行流程用户发送请求到中央控制器DispatcherServlet; 中央控制器调用处理器映射器HandlerMapping; 处理器映射器返回HandlerExecutionChain(包含程序中用到的处理器拦截器HandlerIntercepter和处理器对象Handler)给中央控制器; 中央处理器DispatcherServlet再调用处理器适...原创 2019-03-20 09:36:29 · 220 阅读 · 0 评论 -
Java工程师面试1000题146-Spring支持的数据库事务传播属性和隔离级别
146、简介一下Spring支持的数据库事务传播属性和隔离级别介绍Spring所支持的事务和传播属性之前,我们先了解一下SpringBean的作用域,与此题无关,仅做一下简单记录。在Spring中,可以在<bean>元素的scope属性中设置bean的作用域,来决定这个bean是单实例的还是多实例的。默认情况下,Spring只为每个在IOC容器里声明的bean创建唯一的实例,整...原创 2019-03-19 16:00:10 · 351 阅读 · 0 评论 -
Java工程师面试1000题145-成员变量和局部变量
145、程序执行结果?答案:2 1 51 1 5解析:这道题的考点主要有四个:变量的变量的分类(成员变量、局部变量)、就近原则、非静态代码块的执行:每次创建实例都会执行、方法的调用:调用一次执行一次。先看一下变量的分类:Java中变量可以分为局部变量和成员变量。局部变量一般是在方法体{}中、形参、代码块{}中。成员变量是在类中方法外。成员变量中又可细分为两类,一类是被sta...原创 2019-03-18 17:37:13 · 417 阅读 · 0 评论 -
Java工程师面试1000题144-方法参数的传递机制
144、看下面程序的执行结果import java.util.Arrays;public class Exam4 { public static void main(String[] args) { int i = 1; String str = "hello"; Integer num = 200; int[] a...原创 2019-03-18 11:04:25 · 210 阅读 · 0 评论 -
Java工程师面试1000题143-单例设计模式详解
143、说出你所知道的所有单例设计模式写法首先我们需要知道什么是单例设计模式,所谓单例设计模式,即某个类在整个系统当中只能有一个实例对象可以被获取和使用的编码模式。他是软件开发中最常使用的设计模式之一。单例设计模式要点:该类只能有一个实例:需把该类的构造器私有化; 它必须自行创建这个实例:定义一个该类的静态变量来保存这个唯一的实例 它必须向自行向整个系统提供这个实例:对外提供获取该...原创 2019-03-17 16:06:19 · 253 阅读 · 2 评论 -
Java工程师面试1000题142-类的初始化和实例初始化
142、读程序分析执行结果public class Son extends Father { private int i = test(); private static int j = method(); static { System.out.print(" [6] "); } Son(){ System.out....原创 2019-03-16 21:53:35 · 263 阅读 · 5 评论 -
Java工程师面试1000题141-自增变量
141、下面代码的执行结果? public void test2(){ int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println("现在i的值是:" + i); System.out.println("现...原创 2019-03-16 11:05:53 · 234 阅读 · 0 评论 -
Java工程师面试1000题131-140
131、看程序说出执行结果public class MyTest2 { public static void main(String[] args) { System.out.println(MyParent2.str); }}class MyParent2{ public static final String str = "hello wor...原创 2019-03-15 22:16:30 · 224 阅读 · 0 评论 -
Java工程师面试1000题121-130
121、Java虚拟机结束生命周期的几种情形?程序正常执行结束 程序执行了System.exit()方法 程序在执行过程中遇到了异常或者错误而异常终止 由于操作系统出现错误从而导致Java虚拟机进程终止122、详细介绍一下Java类的加载、连接和初始化的过程。加载:查找并加载类的二进制数据,实际上就是把类的class文件中的二进制数据从磁盘读到内存里面,并且将其放置在运行时数据区内...原创 2019-03-14 15:34:25 · 236 阅读 · 0 评论 -
Java工程师面试1000题111-120
111、说说你对Java中反射的理解。Java中的反射是可以让我们在运行时获取类的方法、属性、父类、接口等类的内部信息的机制。也就是说,反射本质上是一个“反着来”的过程。我们通过new创建一个类的实例的时候,实际上是由Java虚拟机根据这个类的Class对象在运行时构建出来的,而反射是通过一个类的Class对象来获取它的定义信息,从而我们可以访问到它的属性、方法,知道这个类的父类、实现哪些接口...原创 2019-03-12 21:56:51 · 317 阅读 · 0 评论 -
Java工程师面试1000题101-110
101、为什么要使用线程池?线程池的作用就是限制系统中执行线程的数量。根据系统的环境情况,可以手动的或者自动的设置线程数量,少了浪费系统资源,多了造成系统拥挤效率不高。使用线程池控制线程数量,其他线程排队等候,一个任务执行完毕,再从队列中取出最靠前的任务开始执行。若队列中没有等待的线程,线程池的这一资源处于等待,当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了,,否则进入...原创 2019-03-11 20:50:44 · 653 阅读 · 0 评论 -
Java工程师面试1000题91-100
91、JVM的类加载机制是什么?有哪些实现方式?类加载机制:类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法去内,然后在堆区创建一个java.lang.Class对象,用来封装在方法区内的数据结构。类的加载最终是在堆区内的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载有三种...原创 2019-03-10 22:39:20 · 545 阅读 · 1 评论 -
Java工程师面试1000题81-90
81、说一说你知道的JVM的垃圾收集算法。标记-清除算法 复制算法 标记-整理算法 分代收集算法82、再说说标记-清除算法。标记-清除算法分为“标记”和清除两个阶段;首先需要标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它是最基础的收集算法,效率也很高,但是会带来两个明显的问题:效率问题和空间问题(标记清除后会产生大量不联系的碎片)。为便于理解,如下图所示:...原创 2019-03-10 12:01:24 · 285 阅读 · 1 评论 -
Java工程师面试1000题71-80
71、什么是线程安全和线程不安全?线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护隔离,使其他线程不能进行访问,直到该线程读取完,其他线程才可以使用,不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成得到的数据是脏数据,如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次...原创 2019-03-09 21:54:38 · 372 阅读 · 0 评论 -
Java工程师面试1000题61-70
61、Map中的key和value可以为null吗?HashMap对象的key和value均可以为null;HashTable对象的key和value均不可以为null。且两者的key值均不能重复,若添加key相同的键值对后,后面的value会自动覆盖前面的value,但是不会报错。62、什么是线程互斥和线程同步?在引入多线程后,由于线程执行的异步性,会给系统造成混乱,特别是在...原创 2019-03-08 21:24:50 · 464 阅读 · 0 评论 -
Java工程师面试1000题51-60
51、讲一讲ArrayList的内部实现。回答这样的问题,不要光回答个皮毛,可以详细介绍一下ArrayList内部是如何实现数组的增加和删除的,要知道,数组在创建的时候长度是固定的,那么我们往ArrayList中不断添加对象的时候,它是如何管理的呢?ArrayList内部是使用Object[]数组实现的,接下来,我们分别分析一下ArrayList的构造、add、remove、clear方法...原创 2019-03-07 22:38:32 · 3024 阅读 · 5 评论 -
Java工程师面试1000题41-50
41、什么是Java序列化?如何实现Java序列化?序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输与网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化就是把Java对象转为字节序列的过程;反序列化就是把字节序列恢复为Java对象的过程。对象序列化主要有两种用途:第一是把对象的字节序列保存...原创 2019-03-06 22:05:11 · 1922 阅读 · 0 评论 -
Java工程师面试1000题31-40
31、简述Java的异常处理机制。Java对异常进行了分类,不同类型的异常分别使用了不同的Java类表示,所有异常的父类为java.lang.Throwable,Throwable类下面派生了两个子类:Error和Exception,Error表示应用程序本身无法克服和恢复的一种严重问题;Exception表示程序还能够克服和恢复的问题,其中Exception又分为系统异常和普通异常,系统异常...原创 2019-03-05 21:29:01 · 724 阅读 · 0 评论 -
Java工程师面试1000题21-30
21、当一个对象被当做参数传递给一个方法后,此方法可以改变这个对象的属性,并且可返回变化后的结果,那么这里到底是值传递还是引用传递?值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中的时候,参数的值就是该对象的引用,对象的属性可以在被调用的过程中修改,但对对象引用的改变是不会影响到调用者的。22、重载(overload)和重写(override)的区...原创 2019-03-04 22:20:53 · 574 阅读 · 0 评论 -
Java工程师面试1000题11-20
11、复制对象和复制引用的区别?有如下程序:Person p = new Person(23,"zhang");Person p1 = p;System.out.println(p);System.out.println(p1); 程序执行后看打印结果:com.xidian.Person@2f4ee1accom.xidian.Person@2f4ee1ac可以看出,...原创 2019-03-04 20:00:07 · 887 阅读 · 0 评论 -
Java工程师面试1000题1-10
1、面向对象的特性和对这些特性的理解默认情况下面向对象有3大特性:封装、继承、多态,如果非要说出四大特性,那么就把抽象加上去。封装:通常认为,封装就是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写的的一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一...原创 2019-03-04 17:29:12 · 2044 阅读 · 5 评论