Java面经
文章平均质量分 79
老周聊架构
微信公众号:老周聊架构
展开
-
final关键字用法总结
一、final关键字的基本用法在java中,final关键字可以用来修饰类、方法、变量(包括成员变量和局部变量)。下面我们从这三个方面了解一下final的用法。1、修饰类final修饰一个类时,表示该类不能继承。final类中的成员变量可以根据需要设为final,但是final类中的所有成员方法都会被隐式地指定为final方法。 **注意**:在使用final修饰类的时候,一定要谨慎选择,...原创 2019-01-23 22:08:51 · 6456 阅读 · 1 评论 -
Java异常error和exception的区别,CheckedException,RuntimeException的区别。
异常发生的原因有很多,通常包含以下几大类:用户输入了非法数据。要打开的文件不存在。网络通信时连接中断,或者JVM内存溢出。这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文...原创 2019-02-17 11:47:08 · 5965 阅读 · 4 评论 -
Java实现迭代器修改集合中的数据
直接上代码!!!package com.test;import java.util.ArrayList;import java.util.Iterator;public class ArrayListTest { public static void main(String[] args) { boolean flag = false; Ar...原创 2019-02-22 23:26:59 · 5358 阅读 · 0 评论 -
数组和链表数据结构描述,各自的时间复杂度。
两种数据结构都是线性表,在排序和查找等算法中都有广泛的应用一、各自的特点:数组:数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除...原创 2019-02-17 22:57:14 · 11726 阅读 · 10 评论 -
自定义一个java.lang.String类,这个类是否可以被类加载器加载?为什么。
1.、双亲委派模型类加载器可分为两类:一是启动类加载器(Bootstrap ClassLoader),是C++实现的,是JVM的一部分;另一种是其它的类加载器,是Java实现的,独立于JVM,全部都继承自抽象类java.lang.ClassLoader。jdk自带了三种类加载器,分别是启动类加载器(Bootstrap ClassLoader),扩展类加载器(Extension ClassLoa...原创 2019-02-18 23:03:21 · 12718 阅读 · 14 评论 -
Java深入理解深拷贝和浅拷贝区别
一、拷贝的引入(1)、引用拷贝创建一个指向对象的引用变量的拷贝。Teacher teacher = new Teacher("Taylor",26);Teacher otherteacher = teacher;System.out.println(teacher);System.out.println(otherteacher);输出结果:blog.Teacher@355da2...原创 2019-02-13 23:31:47 · 51851 阅读 · 81 评论 -
什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。
遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。在处理这...原创 2019-02-21 00:23:21 · 23252 阅读 · 2 评论 -
sleep和wait的区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针...原创 2019-02-26 23:25:05 · 269 阅读 · 0 评论 -
Java中的SSM框架面试题
一、Spring面试题1、Spring 在ssm中起什么作用?Spring:轻量级框架作用:Bean工厂,用来管理Bean的生命周期和框架集成。两大核心:1、IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory。2、AOP:面向切面编程2、Spring的事务?编...原创 2019-04-01 23:31:47 · 381 阅读 · 0 评论 -
Spring的几个经典常见面试题
一、什么是 Spring 框架?Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 官网:https://spring.io/。我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试...原创 2019-06-01 01:03:37 · 26202 阅读 · 5 评论 -
Java经典基础面试题,你会几道?(1)
1、==符号的使用 Integer a = 1000,b=1000; Integer c = 100,d=100; System.out.println(a==b); System.out.println(c==d);如果这道题你能得出正确答案,并能了解其中的原理的话。说明你基础还可以。如果你的答案 是 true 和true的话,你的基础就有所欠缺了。首先公布下答案, 运行代码,我们...原创 2019-07-01 23:28:00 · 468 阅读 · 2 评论 -
Java经典基础面试题,你会几道?(2)
下面这道题介绍下Arrays.asList(),在平时开发中还是比较常见的,我们可以使用它将一个数组转换为一个List集合。先上题:int[] myArray = {1, 2, 3};List myList = Arrays.asList(myArray);System.out.println(myList.size());System.out.println(myList.get(0)...原创 2019-07-03 00:12:40 · 449 阅读 · 0 评论 -
static 关键字用法总结
一、static 关键字的含义static是Java50个关键字之一。static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法。(注意:不能修饰普通类,除了内部类,这是为什么?)class A { static { System.out.println("A : 静态代码块"); } static int i ; // 静态变量...原创 2019-06-24 23:57:05 · 1994 阅读 · 0 评论 -
使用synchronized修饰静态方法和非静态方法有什么区别
1、Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。Java中每个对象都有一个锁,并且是唯一的。假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人。情况1:同一个对象在两个线程中分别访问...原创 2019-08-12 00:38:01 · 3438 阅读 · 2 评论 -
写一个字符串(如:www.jd.cn)反转函数的五种写法
话不多说,直接上代码。package com.algorithm.test;import org.apache.commons.lang.StringUtils;import java.util.Arrays;/** * @author riemann * @date 2019/09/05 23:05 */public class ConvertFunction { ...原创 2019-09-06 00:16:56 · 985 阅读 · 0 评论 -
请结合OO设计理念,谈谈访问修饰符public、private、protected、default在应用设计中的作用。
Java中访问修饰符public、private、protecte、default的意义讲解:访问修饰符,主要标示修饰块的作用域,方便隔离防护。public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类...原创 2019-02-17 01:09:07 · 3244 阅读 · 0 评论 -
成员变量、类变量、局部变量的区别
变量名首写字母使用小写,如果由多个单词组成,从第2个单词开始的其他单词的首写字母使用大写。如果局部变量的名字和成员变量的名字相同, 要想在该方法中使用成员变量,必须使用关键字this成员变量和局部变量的区别成员变量:成员变量定义在类中,在整个类中都可以被访问。成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。成员变量有默认初始化值。局部变量:...原创 2019-01-31 00:02:07 · 290 阅读 · 0 评论 -
String、StringBuffer与StringBuilder之间的区别
一、区别1、可变与不可变String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。就算调用 String 的concat 方法,那也是把字符串拼接起来并重新创建一个对象,把拼接后的 String 的值赋给新创建的对象。private final char value[];StringBuilder与StringBuffer都继承自...原创 2019-01-24 23:28:23 · 438 阅读 · 0 评论 -
Java强引用、软引用、弱引用、虚引用(幻引用)详解
一、概述众所周知,Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这就像在日常生活中,从商店购买了某样物品后,如果有用,就一...原创 2019-01-26 00:10:47 · 538 阅读 · 0 评论 -
史上最全BATJ面试题精选附答案
目录JAVA基础JVM知识开源框架知识操作系统多线程TCP与HTTP架构设计与分布式数据结构与算法数据库知识消息队列缓存搜索JAVA基础String,Stringbuffer,StringBuilder的区。ArrayList和LinkedList有什么区别。什么是HashMap?用过哪些Map类,都有什么区别JAVA8的ConcurrentHashMap...原创 2019-01-17 21:51:03 · 2143 阅读 · 6 评论 -
在jdk1.5中,引入了泛型,泛型的存在是用来解决什么问题。
首先我们要了解:什么是向下转型和向上转型。面向对象的转型只会发生在具有继承关系的父子类中(接口也是继承的一种)向上转型:其核心目的在于参数的统一上,根本不需要强制类型转换。向下转型:是为了操作子类定义的特殊功能,需要强制类型转换,可是现在存在的问题是:向下转型其实是一种非常不安全的操作,以为编译的时候,程序不会报错,而在运行的时候会报错,这就是传说中的—迷之报错。不过呢,在JDK1.5之...原创 2019-02-14 23:27:25 · 4756 阅读 · 0 评论 -
源码解读之(一)HashMap
一、HashMap 概述Map 是 Key-Value 对映射的抽象接口,该映射不包括重复的键,即一个键对应一个值。HashMap 是 Java Collection Framework 的重要成员,也是Map族(如下图所示)中我们最为常用的一种。简单地说,HashMap 是基于哈希表的 Map 接口的实现,以 Key-Value 的形式存在,即存储的对象是 Entry (同时包含了 Key 和...原创 2019-02-05 16:56:11 · 532 阅读 · 0 评论 -
Java反射机制的原理以及创建类实例的三种方式是什么?
一、什么是Java反射机制当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射。IT行业里这么说,没有反射也就没有框架,现有的框架都是以反射为基础。在实际项目开发中,用的最多的是框架,填的最多的是类,反射这一概念就是将框架和类揉在一起的调和剂。所以,反射才是接触项目开发的敲门砖!二、反射的应用及原理...原创 2019-02-05 22:44:33 · 10563 阅读 · 0 评论 -
Java反射中,Class.forName和ClassLoader的区别
一、区别java类装载过程分为3步:1、加载Jvm把class文件字节码加载到内存中,并将这些静态数据装换成运行时数据区中方法区的类型数据,在运行时数据区堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。*注:方法区不仅仅是存放方法,它存放的是类的类型信息。2、链接:执行下面的校验、准备和解析步骤,其中解析步骤是可选的a:校验:检查加载的clas...原创 2019-02-06 22:29:55 · 5303 阅读 · 2 评论 -
Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺序
class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法。子类也是这样,然后继承之后,关于程序打印输出的结果。涉及到Java类的各种成员的初始化顺序。经测试,得到如下结论:1.父类【静态代码块】和【静态成员】,按在代码中出现的顺序依次执行。2.子类【静态代码块】和【静态成员】,按在代码中出现的顺序依次执行。3....原创 2019-02-06 22:56:25 · 375 阅读 · 0 评论 -
深入理解Java的接口和抽象类
对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲:一、抽象类二、接口三、抽象类和接口的区别一、抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一...原创 2019-02-15 23:22:16 · 315 阅读 · 0 评论 -
Java hashCode() 和 equals()的若干问题解答
本章的内容主要解决下面几个问题:1 equals() 的作用是什么?2 equals() 与 == 的区别是什么?3 hashCode() 的作用是什么?4 hashCode() 和 equals() 之间有什么联系?一、equals() 的作用equals() 的作用是 用来判断两个对象是否相等。equals() 定义在JDK的Object.java中。通过判断两个对象的地址是否相...原创 2019-02-16 00:54:41 · 359 阅读 · 0 评论 -
java动态代理实现与原理详细分析
一、代理(1)、什么是代理?大道理上讲代理是一种软件设计模式,目的地希望能做到代码重用。具体上讲,代理这种设计模式是通过不直接访问被代理对象的方式,而访问被代理对象的方法。这个就好比 商户---->明星经纪人(代理)---->明星这种模式。我们可以不通过直接与明星对话的情况下,而通过明星经纪人(代理)与其产生间接对话。(2)、什么情况下使用代理?a.设计模式中有一个设计原则是开...原创 2019-02-08 23:22:43 · 9212 阅读 · 12 评论 -
描述Java动态代理的几种实现方式,分别说出相应的优缺点。
AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执行。不同的切入时机对应不同的Interceptor的种类,如BeforeAdviseInterceptor,AfterAdviseInterceptor以及ThrowsAdviseIntercepto...原创 2019-02-09 23:52:09 · 11918 阅读 · 2 评论 -
java运算符 与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。1、与运算符与运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。public class data13{...原创 2019-02-21 23:20:54 · 13607 阅读 · 7 评论 -
Spring aop 基于JDK动态代理和CGLIB代理的原理以及为什么JDK代理需要基于接口
Spring Aop是什么简单来说就是面向切面编程。Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的代理使用CGLIB来实现。JDK动态代理JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。代理的目的是调用目标方法时可以转而执行InvocationHandler的invoke方法,实际上sprin...原创 2019-02-10 20:45:56 · 1376 阅读 · 2 评论 -
进程和线程的关系及区别
一、定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个基本单位。线程是进程的一个实体,是系统进行调度的最小单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。二、关系一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间...原创 2019-01-31 00:01:26 · 474 阅读 · 0 评论 -
JDK 1.8中的 HashMap 有哪些优化
1、由 数组+链表 的结构改为 数组+链表+红黑树。旧版本的HashMap存在一个问题,即使负载因子和Hash算法设计的再合理,也免不了会出现拉链过长的情况,一旦出现拉链过长,则会严重影响HashMap的性能。于是,在JDK1.8版本中,对数据结构做了进一步的优化,引入了红黑树。而当链表长度太长(TREEIFY_THRESHOLD默认超过8)时,链表就转换为红黑树,利用红黑树快速增删改查的特点提高...原创 2019-09-29 18:21:40 · 988 阅读 · 0 评论