精华内容
下载资源
问答
  • Java的类加载器有三个,对应Java的三种类:1系统类,2扩展类,3自己定义的类 Java加载类的时候,会先请示其parent(即上一层加载器),在其搜索路径载入,如果过找不到再从自己当前的搜索路径载入,顺序其实就是自顶...

    1.public、private、protected和friendly的区别

    都是访问类型修饰符关键字,在于访问范围不一样。

    访问范围如下:

    本类      同package   子类    非同package

    public             o            o                 o              o

    protected       o            o                 o               x

    friendly          o            o                  x               x

    private           o            x                  x               x

    2.collection与collections的区别

    collection是一个java.util.*下的一个集合接口,继承接口主要有List、Set。

    collections是java.util.*下的一个类,collections提供许多针对集合类的静态方法,例如collections.sort(list),还有reverse()等。

    3.String s=new String(‘xyz’);创建了几个object对象

    若在此之前未创建过“xyz”字符串,则在这创建了两个object对象,一个是new创建的string对象,另一个是“syz”字符串对象。

    4.short s1;s1=s1+1;是否有错?

    有错,在这里s1有声明,但却没有进行初始化,在进行s1 = s1+1;的操作时,会报是s1未初始化的错误。

    5.Overriding和Overloading区别

    overriding是重写,发生在子类当中,在重写时需注意的是,重写的方法必须方法名、参数个数、参数类型、返回需要一致,访问权限不能比被重写的方法更严格,重写的方法不能比被重写的方法抛出更多的异常;

    overloading是重载,发生在同一个类中,重载只需要满足,方法名一样,参数个数或参数类型或参数顺序不一样即可。

    6.Set里面的元素不能重复,用什么方法区分重复与否。

    用equals()来判断是否有重复元素。

    为什么不用“==”呢?若对于基本类型,“==”可以比较两个变量的值是否相等,也就是比较内存中所存储的数值。

    而set中存储的是对象,对象涉及到两块内存,一个是对象本身占用一块内存(堆内存),变量也占用一块内存。

    string a = new string("abc");

    string b = new string("abc");

    a和b所指向的对象不一样,所以a和b内存中所存储的数值是不一样的,用“==”将返回false,而我们要比较的是两个对象的内容是否一样,若用equals将返回true,因为a和b都是abc。

    7、给出一个常见的runtime exception。

    NullPointerException 空指针异常;

    ClassCastException 强制转换类型异常;

    IndexOutOfBounsExcption 下标越界异常;

    NumberFormatException 数字格式异常;

    8、error和exception区别。

    error是系统中的错误,程序员是无法改变处理的,是在编译是发生的错误,只能通过修改程序才能改正。一般与虚拟机相关,如虚拟机错误、系统崩溃、内存空间不足等问题。对于这类错误导致的应用程序中断,仅靠程序本身是无法恢复的。

    exception表示的是程序可以处理的异常,可以捕获且可能恢复,遇到这类异常应该对异常进行捕获处理,使程序恢复运行。

    exception又可以分为checkedException和uncheckedException。

    checkedException是我们常用try--catch捕获的异常,程序在编译时系统会强制我们对异常进行try--catch或者throws。

    uncheckedException又称为runtimeException,是程序在运行时出现的异常,我们无法捕获,常见的有空指针异常,下标越界等

    9、List和Set是否继承自Collection接口。

    是的。List和Set接口都是继承于collection。

    10、abstract class和interface 的区别。

    abstract是抽象类,在抽象类中可以定义构造方法,普通成员变量、静态方法、非抽象方法,抽象方法访问类型可以是public、protected。

    interface是接口,可以说是abstract中的特例。接口不可以有构造方法,成员变量必须是静态的,不可以定义非抽象方法、静态方法,方法的访问类型只能是public abstract。

    抽象类和接口都可以定义静态成员变量,但是抽象类中静态成员变量的访问类型可以是任意的,而接口只能是public。在Java中,一个类只能继承一个抽象类,但是可以实现多个接口。

    11.是否可以继承String类。

    在Java中,string类的修饰符是final,这意味着string类是不可继承和修改的。

    12、try{}里有一个return语句,紧跟在try后的finally里的code会不会被执行,什么时候执行,return前执行还是return后执行。

    try里面有return语句,无论try里面是否有捕获异常。finally中的代码都会执行,并且是在return前执行,如果finally也有return语句的话,程序会在finally直接return,而不会在try里面return。

    13、最有效率的方法算2*8等于几

    用位运算的方法计算最有效率。

    应写成:

    Java代码

    int i = 2;

    int j = i << 3;

    汇编指令:

    mov     dword ptr [ebp-4],2              把2放入内存中 SS:[ebp-4]

    mov     eax,dword ptr [ebp-4]          把 SS:[ebp-4] 整数传送到eax寄存器中

    shl      eax,3                                    对eax中的数据左移3位

    mov     dword ptr [ebp-8],eax          再把移位后的结果存到内存 SS:[ebp-8]中

    14、两个对象值相同,x.equal(y)==true,但是却可有不同的hashcode,这句话对不对。

    不对,两个对象如果equal的值为true,那么他们的hashcode一定是相同的。但是hashcode相同,他们的equal未必一定为true。

    例如在hashmap中,key值是不重复的,在往hashmap中put对象的时候,会有一个判断是否有相同的key,首先比较的是hashcode,如果hashcode相同则需要进一步使用equal进行判断,如果hashcode不相同,则这两个对象则是不相同的,这也可以提高效率。

    15、值传递和引用传递

    值传递:对象被值传递,相当于传递了对象的副本,若修改了对象副本的值将不会影响源对象的值。

    引用传递:对象被引用传递,并不是传递了实际的对象,而是对象的引用,所有对引用对象的修改都会影响到源对象。

    16、switch是否作用在byte、long、string上。

    switch的内容为整数和枚举常量,而byte、short、char、int和integer都可以默认转换为整型,而string和long不可以,所以byte可以作用在switch上,long和string是不可以的。

    17、ArrayList和Vector区别,HashMap和Hashtable区别(了解这几个类的底层jdk中的编码方式)。

    ArrayList和Vector都是以数组的形式存储。ArrayList可以存null值,Vector是不可以的,vector是线程安全的,ArrayList是线程不安全的,但是可以用collections.sychronizedList()实现线程同步,ArrayList在容器充满时会自动扩容50%,而vector则扩容100%,ArrayList则更节省空间;

    hashMap:key和value可以为null值,非线程安全,继承abstractMap接口,重新计算hash值

    hashTable:key和value不能为null值,线程安全,继承dictionary接口,hash值直接使用key.hashCode()

    现在推荐使用concurrentHashMap替代hashTable,因为concurrentHashMap使用的是局部锁技术,吧map分为多个segment,而hashtable锁的机制是对整个对象的加锁,concurrenthashmap的性能优于hashTable。

    18、GC是什么,为什么要有GC,简单介绍GC。

    GC是垃圾回收,内存处理是开发人员容易出现问题的地方,错误或忘记内存回收都可能会使得系统不稳定或者崩溃。而Java就提供了一个垃圾回收功能,可以监测对象是否超过作用域或者说是不可达的状态,从而达到自动回收内存的目的。

    垃圾回收可以有效的防止内存泄漏,垃圾回收器是一个单独的低优先级的线程,在不可预知的情况对已经死亡或者很久没有使用的对象进行回收,程序是不能实时的调用垃圾回收器对某个对象进行回收。

    垃圾回收的实现有很多方法,其中有一种是用分代回收算法实现的。分代回收是将堆空间划分为三个区:年轻代、年老代和永久代。年轻代和年老代存储的是动态产生的对象,而永久代存储的是类的信息,包括解析到的方法、变量等,永久带几乎是不参与垃圾回收的。

    年轻代又分为三个区,一个eden区,两个相同的survivor区,这样分主要是为了让生命周期短的对象尽量留在年轻代。新创建的对象都会先存放到eden区,直到eden申请不到空间时,进行minorGC,将存活的对象拷贝到survivor区,年老代一般存储的是生命周期比较长的对象。

    垃圾回收过程如下:

    1.在eden区完成内存分配

    2.eden区满了再创建对象时,会因为申请不到空间而出发minorGC,对eden+1survivor进行垃圾回收

    3.minorGC时,将eden区不能回收的对象拷贝到空的survivor区,另一个survivor中不能回收的对象也会放到这个空的survivor区,最后会清空eden区并保证一个survivor是空的

    4.执行到第3步的时候,若survivor满的,则这些对象会被拷贝到年老代(old)区,或者是survivor并没有满,但有些对象足够old,则这些对象会被放到年老代区

    5.当年老代满了以后,会进行fullGC

    19、float f=3.4是否正确。

    不正确。在Java中,没有小数点的默认是int型,有小数点的默认是double型,若要定义一个float型的数应该强制转换类型,或者在数字后面加个“f”。

    20、介绍Java中的Collection framework。

    collection framework是Java的集合框架,是Java提供的工具包,包括了常用的数据结构:集合、数组、链表、队列、栈和映射等。

    Java的集合主要划分为四个部分:list列表、set集合、map映射和工具类(collections、arrays等)。

    collection主要的实现接口有list和set。

    list是一个队列,根据下标索引,从0开始,实现类主要有linklist、ArrayList、vector、stack。list是有序的队列,可以存放重复值。

    set是一个集合,set的值是唯一的,也就是说set当中不能存放重复值,list去重的问题可以把list转换成set,set的实现类主要有treeset和hashset,其中treeset是有序的。

    map是一个接口,以键值对的形式存储,map中的每一个元素包含一个key和一个key对应的值value。abstractMap实现了map中大部分的api,而hashmap、treemap都是继承于abstractMap

    21、Collection框架中实现比较方法

    Collection框架中实现比较要实现Comparable 接口和 Comparator 接口。

    22、String和Stringbuffer的区别

    string和stringbuffer都是对字符串操作的类,而string类被final修饰,意味着string类不可被继承,对象一旦被创建则不可再修改,而我们实际中修改的string对象其实都是新创建的,而不是真的修改。stringbuffer时一个长度可变的,可以通过append函数对字符串进程追加,并且是线程安全的,目前还有一个stringbuilder替代stringbuffer,同样是线程安全且性能优于stringbuffer。

    23、final、finally、finalize区别

    final是Java中的一个修饰符关键字,被final修饰的类不可被继承,被修饰的变量不可被修改,被修饰的方法不能被重写。

    finally是try--catch异常处理块中的一部分,无论try中是否捕获了异常,finally部分都会被执行,除非down机,一般用于资源关闭。

    finalize是object中的一个方法,这个方法会在gc垃圾回收时才会调用到。

    24、面向对象的特征

    封装:将类私有化,将代码和处理数据绑定在一起,不受外部干扰

    继承:子类继承父类,保留父类的属性也可以开扩新的东西。

    多态:重写和重载可以提现面向对象的多态

    25、String是最基本的数据类型吗。

    string不是最基本的数据类型,它是一个被final修饰的类。在Java中有8种基本数据类型:

    字符型:byte、char

    基本整型:short、int、long

    浮点型:float、double、

    布尔型:boolean

    26.说出ArrayList、Vector、Linkedlist的存储性能和特性

    三者都是继承于list接口,Linklist是以链表的形式存储在内存中,适合用于经常要进行指定插入、删除操作的场景。

    ArrayList和vector都是以数组的形式存储在内存中,适合用在查找,不适合指定位置插入和删除;ArrayList可以存储Null值,但是线程不安全,可以使用collections.synchronized()实现线程同步,当元素填满容器时会自动扩容50%的空间;vector不可存储null值,线程安全,当元素填满容器时会自动扩容100%的空间,相比较之下,ArrayList更节省空间

    27、heap和stack区别

    stack的存取速度会快于heap,可以共享存储数据,但是数据的大小和生存期必须在运行期确定;

    heap是运行时可动态分配的数据区,存储数据不共享,数据的大小和生存期可以在运行时确定;

    new关键字运行时创建的对象存储在heap里面;

    28.描述一下JVM加载Class文件的原理和机制

    Java所有的类都需要加载到jvm中才能运行,在写程序的时候,我们几乎不用关心类的加载,因为这些都是隐式装载的。除非用了特殊的方法,例如反射,这需要显式的加载需要的类。

    Java的类加载是动态的,他不会一次就把所有的类加载完再运行,而是将保证程序运行的基础类完全加载到jvm,其他的类需要的时候再加载。

    Java的类加载器有三个,对应Java的三种类:1系统类,2扩展类,3自己定义的类

    Java加载类的时候,会先请示其parent(即上一层加载器),在其搜索路径载入,如果过找不到再从自己当前的搜索路径载入,顺序其实就是自顶向下,因为加载类必须要保证基础类的加载。

    加载步骤如下:

    1.装载:查找和导入class文件

    2.连接:

    检查:检查class文件数据的正确性

    准备:为静态变量分配内存空间

    解析:将符号引用转换成直接引用

    3.初始化:初始化静态变量,静态代码块

    29.排序的几种方法,了解。

    排序的算法实现有很多种,常见的排序算法有冒泡排序,交换排序,堆排序,快速排序等。

    30.Java语言如何进行异常处理,throws,throw,try catch finally代表什么意义,try块中可以抛出异常吗

    throws是用来声明一个方法中的异常,不做任何处理的往上传,哪个方法调用它就由哪个方法来处理。用在方法声明后面,后面接异常类,可以跟多个异常类名,用逗号隔开。

    throw是一个用来抛出异常的方法,用在方法体里面,只能抛出一个异常,并由方法体内的语句处理。

    try catch finally是一个用来处理异常的异常处理器,当编译器强制我们对异常处理的时候,可以使用try-catch来进行处理,将可能会出现异常的代码放到try语句块中,catch中则是捕获到异常后执行的语句,finally则是无论是否有捕获到异常都会执行的语句块,一般用于资源关闭。

    31.一个’.java’源文件是否可以包括多个类,有什么限制。

    Java源文件中可以有多个类,但是只能有一个public类,并且类名要和文件名一致

    32.Java中有几种类型流,jdk为每种类型的流提供了一些抽象类以供继承,请分别说出它们是哪些类。

    Java中有两种类型的流,分为为字节流和字符流,每种流都由输入和输出,共有四种抽象类以供继承,分别为InputStream,OutputStream,Reader,Writer。

    字节流可以用来处理任何对象,包括二进制对象,而字符流只能用来处理字符

    字符流处理的单元为两个字节的Unicode字符,而字节流处理的单元为一个字节。

    33.Java中会存在内存泄漏吗,请简单描述。

    展开全文
  • 本人是17年6月份毕业的,3月份出来实习,算起来也是工作一年了吧,金三银四,博主也考虑换一份工作,于是最近面试了几家,总结一下面试中的问题,大家一起交流学习。第一次面试①说下java类的加载②说一下zookeeper...

    本人是17年6月份毕业的,3月份出来实习,算起来也是工作一年了吧,金三银四,博主也考虑换一份工作,于是最近面试了几家,总结一下面试中的问题,大家一起交流学习。

    第一次面试

    ①说下java类的加载

    ②说一下zookeeper的原理

    ③说一下你对dubbo的理解

    ④说一下nio和io的区别

    ⑤说一下并发锁

    第二次面试

    ①网络的七层协议从底层往上说一下

    ②什么是sql注入

    ③你平时怎么预防的sql注入(答使用PreparedStatement,预编译之后,使用占位符,而不是直接把参数写入sql中)

    ④为什么使用占位符就可以防止sql注入

    ⑤springmvc是线程安全的吗

    ⑥synchronized关键字修饰静态方法和非静态方法有什么区别

    ⑦你是平时是怎么维护索引的

    ⑧你对dubbo的理解

    ⑨zookeeper是怎么实现分布式锁的,他的原理是什么

    ⑩dubbo的序列化用的是哪些,说一下你对他的理解

    第三次面试

    ①说一下索引用到的结构

    ②说一下B+树

    ③说一下使用springmvc需要配置那些文件,都配置了什么,是什么作用

    ④如果让你使用redis维护session你会怎么做

    ⑤说一下你对java.util下面比较熟悉的类,他的实现方法、结构和复杂度(答HashMap 问:他的内部实现,复杂度是多少,答Arraylist和linkList,问:内部实现是什么,复杂度是什么)

    ⑥面试官给画了一个目录,里面有文件和文件夹,让我手写代码进行遍历,输出所有文件的文件名

    ⑦写一个sql,问having和where的区别,join和不用join的多表查询有什么不同

    未完待续。。。。。。。。。。。。。。

    小小总结一下

    不面试你都不知道你有多菜,面试了三家可以说问的侧重面都不一样,第一家问的是jvm的相关问题,类的加载机制,zookeeper的原理等,说实话,第一次面试吓到我了,我以为工作一年是不会问这些东西的,可事实却是,面试就是问的这些,答不出来的话就是“回去等通知吧”。第二家面试就开始侧重网络通信和安全了,什么网络协议,报文格式,sql注入,第三家居然开始问起来算法和数据结构。

    其实想一下,网络协议和数据结构确实是基础,大学都是学过的,可是万丈高楼平地起,基础的东西太多了,每次面试面试官的侧重点又不同,我们唯一能做的就是复习基础,拔高水平,做一个德智体美劳全面发展的四有青年。面完试很有挫败感,对接下来的学习也有了很大的帮助,就算这次不能找到一个好工作,但是我也有了一个大致的学习方向,有准备面试的看一下,大家也算是学习共勉吧。

    展开全文
  • 访问范围如下: 本类 同package 子类 非同package public o o o o protected o o o x friendly o o x x private o x x x 2.collection与collections的区别 collection是一个java.util.*下的一个集合接口,继承接口...

    1.public、private、protected和friendly的区别

    都是访问类型修饰符关键字,在于访问范围不一样。

    访问范围如下:

    本类      同package   子类    非同package

    public             o            o                 o              o

    protected       o            o                 o               x

    friendly          o            o                  x               x

    private           o            x                  x               x

    2.collection与collections的区别

    collection是一个java.util.*下的一个集合接口,继承接口主要有List、Set。

    collections是java.util.*下的一个类,collections提供许多针对集合类的静态方法,例如collections.sort(list),还有reverse()等。

    3.String s=new String(‘xyz’);创建了几个object对象

    若在此之前未创建过“xyz”字符串,则在这创建了两个object对象,一个是new创建的string对象,另一个是“syz”字符串对象。

    4.short s1;s1=s1+1;是否有错?

    有错,在这里s1有声明,但却没有进行初始化,在进行s1 = s1+1;的操作时,会报是s1未初始化的错误。

    5.Overriding和Overloading区别

    overriding是重写,发生在子类当中,在重写时需注意的是,重写的方法必须方法名、参数个数、参数类型、返回需要一致,访问权限不能比被重写的方法更严格,重写的方法不能比被重写的方法抛出更多的异常;

    overloading是重载,发生在同一个类中,重载只需要满足,方法名一样,参数个数或参数类型或参数顺序不一样即可。

    6.Set里面的元素不能重复,用什么方法区分重复与否。

    用equals()来判断是否有重复元素。

    为什么不用“”呢?若对于基本类型,“”可以比较两个变量的值是否相等,也就是比较内存中所存储的数值。

    而set中存储的是对象,对象涉及到两块内存,一个是对象本身占用一块内存(堆内存),变量也占用一块内存。

    string a = new string(“abc”);

    string b = new string(“abc”);

    a和b所指向的对象不一样,所以a和b内存中所存储的数值是不一样的,用“==”将返回false,而我们要比较的是两个对象的内容是否一样,若用equals将返回true,因为a和b都是abc。

    7、给出一个常见的runtime exception。

    NullPointerException 空指针异常;

    ClassCastException 强制转换类型异常;

    IndexOutOfBounsExcption 下标越界异常;

    NumberFormatException 数字格式异常;

    8、error和exception区别。

    error是系统中的错误,程序员是无法改变处理的,是在编译是发生的错误,只能通过修改程序才能改正。一般与虚拟机相关,如虚拟机错误、系统崩溃、内存空间不足等问题。对于这类错误导致的应用程序中断,仅靠程序本身是无法恢复的。

    exception表示的是程序可以处理的异常,可以捕获且可能恢复,遇到这类异常应该对异常进行捕获处理,使程序恢复运行。

    exception又可以分为checkedException和uncheckedException。

    checkedException是我们常用try–catch捕获的异常,程序在编译时系统会强制我们对异常进行try–catch或者throws。

    uncheckedException又称为runtimeException,是程序在运行时出现的异常,我们无法捕获,常见的有空指针异常,下标越界等

    9、List和Set是否继承自Collection接口。

    是的。List和Set接口都是继承于collection。

    10、abstract class和interface 的区别。

    abstract是抽象类,在抽象类中可以定义构造方法,普通成员变量、静态方法、非抽象方法,抽象方法访问类型可以是public、protected。

    interface是接口,可以说是abstract中的特例。接口不可以有构造方法,成员变量必须是静态的,不可以定义非抽象方法、静态方法,方法的访问类型只能是public abstract。

    抽象类和接口都可以定义静态成员变量,但是抽象类中静态成员变量的访问类型可以是任意的,而接口只能是public。在Java中,一个类只能继承一个抽象类,但是可以实现多个接口。

    11.是否可以继承String类。

    在Java中,string类的修饰符是final,这意味着string类是不可继承和修改的。

    12、try{}里有一个return语句,紧跟在try后的finally里的code会不会被执行,什么时候执行,return前执行还是return后执行。

    try里面有return语句,无论try里面是否有捕获异常。finally中的代码都会执行,并且是在return前执行,如果finally也有return语句的话,程序会在finally直接return,而不会在try里面return。

    13、最有效率的方法算2*8等于几

    用位运算的方法计算最有效率。

    应写成:

    Java代码

    int i = 2;
    int j = i << 3;

    汇编指令:

    mov     dword ptr [ebp-4],2              把2放入内存中 SS:[ebp-4]
    mov     eax,dword ptr [ebp-4]          把 SS:[ebp-4] 整数传送到eax寄存器中
    shl      eax,3                                    对eax中的数据左移3位
    mov     dword ptr [ebp-8],eax          再把移位后的结果存到内存 SS:[ebp-8]中

    14、两个对象值相同,x.equal(y)==true,但是却可有不同的hashcode,这句话对不对。

    不对,两个对象如果equal的值为true,那么他们的hashcode一定是相同的。但是hashcode相同,他们的equal未必一定为true。

    例如在hashmap中,key值是不重复的,在往hashmap中put对象的时候,会有一个判断是否有相同的key,首先比较的是hashcode,如果hashcode相同则需要进一步使用equal进行判断,如果hashcode不相同,则这两个对象则是不相同的,这也可以提高效率。

    15、值传递和引用传递

    值传递:对象被值传递,相当于传递了对象的副本,若修改了对象副本的值将不会影响源对象的值。

    引用传递:对象被引用传递,并不是传递了实际的对象,而是对象的引用,所有对引用对象的修改都会影响到源对象。

    16、switch是否作用在byte、long、string上。

    switch的内容为整数和枚举常量,而byte、short、char、int和integer都可以默认转换为整型,而string和long不可以,所以byte可以作用在switch上,long和string是不可以的。

    17、ArrayList和Vector区别,HashMap和Hashtable区别(了解这几个类的底层jdk中的编码方式)。

    ArrayList和Vector都是以数组的形式存储。ArrayList可以存null值,Vector是不可以的,vector是线程安全的,ArrayList是线程不安全的,但是可以用collections.sychronizedList()实现线程同步,ArrayList在容器充满时会自动扩容50%,而vector则扩容100%,ArrayList则更节省空间;

    hashMap:key和value可以为null值,非线程安全,继承abstractMap接口,重新计算hash值

    hashTable:key和value不能为null值,线程安全,继承dictionary接口,hash值直接使用key.hashCode()

    现在推荐使用concurrentHashMap替代hashTable,因为concurrentHashMap使用的是局部锁技术,吧map分为多个segment,而hashtable锁的机制是对整个对象的加锁,concurrenthashmap的性能优于hashTable。

    18、GC是什么,为什么要有GC,简单介绍GC。

    GC是垃圾回收,内存处理是开发人员容易出现问题的地方,错误或忘记内存回收都可能会使得系统不稳定或者崩溃。而Java就提供了一个垃圾回收功能,可以监测对象是否超过作用域或者说是不可达的状态,从而达到自动回收内存的目的。

    垃圾回收可以有效的防止内存泄漏,垃圾回收器是一个单独的低优先级的线程,在不可预知的情况对已经死亡或者很久没有使用的对象进行回收,程序是不能实时的调用垃圾回收器对某个对象进行回收。

    垃圾回收的实现有很多方法,其中有一种是用分代回收算法实现的。分代回收是将堆空间划分为三个区:年轻代、年老代和永久代。年轻代和年老代存储的是动态产生的对象,而永久代存储的是类的信息,包括解析到的方法、变量等,永久带几乎是不参与垃圾回收的。

    年轻代又分为三个区,一个eden区,两个相同的survivor区,这样分主要是为了让生命周期短的对象尽量留在年轻代。新创建的对象都会先存放到eden区,直到eden申请不到空间时,进行minorGC,将存活的对象拷贝到survivor区,年老代一般存储的是生命周期比较长的对象。

    垃圾回收过程如下:

    1.在eden区完成内存分配

    2.eden区满了再创建对象时,会因为申请不到空间而出发minorGC,对eden+1survivor进行垃圾回收

    3.minorGC时,将eden区不能回收的对象拷贝到空的survivor区,另一个survivor中不能回收的对象也会放到这个空的survivor区,最后会清空eden区并保证一个survivor是空的

    4.执行到第3步的时候,若survivor满的,则这些对象会被拷贝到年老代(old)区,或者是survivor并没有满,但有些对象足够old,则这些对象会被放到年老代区

    5.当年老代满了以后,会进行fullGC

    19、float f=3.4是否正确。

    不正确。在Java中,没有小数点的默认是int型,有小数点的默认是double型,若要定义一个float型的数应该强制转换类型,或者在数字后面加个“f”。

    20、介绍Java中的Collection framework。

    collection framework是Java的集合框架,是Java提供的工具包,包括了常用的数据结构:集合、数组、链表、队列、栈和映射等。

    Java的集合主要划分为四个部分:list列表、set集合、map映射和工具类(collections、arrays等)。

    collection主要的实现接口有list和set。

    list是一个队列,根据下标索引,从0开始,实现类主要有linklist、ArrayList、vector、stack。list是有序的队列,可以存放重复值。

    set是一个集合,set的值是唯一的,也就是说set当中不能存放重复值,list去重的问题可以把list转换成set,set的实现类主要有treeset和hashset,其中treeset是有序的。

    map是一个接口,以键值对的形式存储,map中的每一个元素包含一个key和一个key对应的值value。abstractMap实现了map中大部分的api,而hashmap、treemap都是继承于abstractMap

    21、Collection框架中实现比较方法

    Collection框架中实现比较要实现Comparable 接口和 Comparator 接口。

    22、String和Stringbuffer的区别

    string和stringbuffer都是对字符串操作的类,而string类被final修饰,意味着string类不可被继承,对象一旦被创建则不可再修改,而我们实际中修改的string对象其实都是新创建的,而不是真的修改。stringbuffer时一个长度可变的,可以通过append函数对字符串进程追加,并且是线程安全的,目前还有一个stringbuilder替代stringbuffer,同样是线程安全且性能优于stringbuffer。

    23、final、finally、finalize区别

    final是Java中的一个修饰符关键字,被final修饰的类不可被继承,被修饰的变量不可被修改,被修饰的方法不能被重写。

    finally是try–catch异常处理块中的一部分,无论try中是否捕获了异常,finally部分都会被执行,除非down机,一般用于资源关闭。

    finalize是object中的一个方法,这个方法会在gc垃圾回收时才会调用到。

    24、面向对象的特征

    封装:将类私有化,将代码和处理数据绑定在一起,不受外部干扰

    继承:子类继承父类,保留父类的属性也可以开扩新的东西。

    多态:重写和重载可以提现面向对象的多态

    25、String是最基本的数据类型吗。

    string不是最基本的数据类型,它是一个被final修饰的类。在Java中有8种基本数据类型:

    字符型:byte、char

    基本整型:short、int、long

    浮点型:float、double、

    布尔型:boolean

    26.说出ArrayList、Vector、Linkedlist的存储性能和特性

    三者都是继承于list接口,Linklist是以链表的形式存储在内存中,适合用于经常要进行指定插入、删除操作的场景。

    ArrayList和vector都是以数组的形式存储在内存中,适合用在查找,不适合指定位置插入和删除;ArrayList可以存储Null值,但是线程不安全,可以使用collections.synchronized()实现线程同步,当元素填满容器时会自动扩容50%的空间;vector不可存储null值,线程安全,当元素填满容器时会自动扩容100%的空间,相比较之下,ArrayList更节省空间

    27、heap和stack区别

    stack的存取速度会快于heap,可以共享存储数据,但是数据的大小和生存期必须在运行期确定;

    heap是运行时可动态分配的数据区,存储数据不共享,数据的大小和生存期可以在运行时确定;

    new关键字运行时创建的对象存储在heap里面;

    28.描述一下JVM加载Class文件的原理和机制

    Java所有的类都需要加载到jvm中才能运行,在写程序的时候,我们几乎不用关心类的加载,因为这些都是隐式装载的。除非用了特殊的方法,例如反射,这需要显式的加载需要的类。

    Java的类加载是动态的,他不会一次就把所有的类加载完再运行,而是将保证程序运行的基础类完全加载到jvm,其他的类需要的时候再加载。

    Java的类加载器有三个,对应Java的三种类:1系统类,2扩展类,3自己定义的类

    Java加载类的时候,会先请示其parent(即上一层加载器),在其搜索路径载入,如果过找不到再从自己当前的搜索路径载入,顺序其实就是自顶向下,因为加载类必须要保证基础类的加载。

    加载步骤如下:

    1.装载:查找和导入class文件

    2.连接:

    检查:检查class文件数据的正确性

    准备:为静态变量分配内存空间

    解析:将符号引用转换成直接引用

    3.初始化:初始化静态变量,静态代码块

    29.排序的几种方法,了解。

    排序的算法实现有很多种,常见的排序算法有冒泡排序,交换排序,堆排序,快速排序等。

    30.Java语言如何进行异常处理,throws,throw,try catch finally代表什么意义,try块中可以抛出异常吗

    throws是用来声明一个方法中的异常,不做任何处理的往上传,哪个方法调用它就由哪个方法来处理。用在方法声明后面,后面接异常类,可以跟多个异常类名,用逗号隔开。

    throw是一个用来抛出异常的方法,用在方法体里面,只能抛出一个异常,并由方法体内的语句处理。

    try catch finally是一个用来处理异常的异常处理器,当编译器强制我们对异常处理的时候,可以使用try-catch来进行处理,将可能会出现异常的代码放到try语句块中,catch中则是捕获到异常后执行的语句,finally则是无论是否有捕获到异常都会执行的语句块,一般用于资源关闭。

    31.一个’.java’源文件是否可以包括多个类,有什么限制。

    Java源文件中可以有多个类,但是只能有一个public类,并且类名要和文件名一致

    32.Java中有几种类型流,jdk为每种类型的流提供了一些抽象类以供继承,请分别说出它们是哪些类。

    Java中有两种类型的流,分为为字节流和字符流,每种流都由输入和输出,共有四种抽象类以供继承,分别为InputStream,OutputStream,Reader,Writer。

    字节流可以用来处理任何对象,包括二进制对象,而字符流只能用来处理字符

    字符流处理的单元为两个字节的Unicode字符,而字节流处理的单元为一个字节。

    33.Java中会存在内存泄漏吗,请简单描述
    ————————————————
    版权声明:本文为CSDN博主「豆腐花666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/shenlizhen/article/details/84106043

    展开全文
  • 一年经验与应届生的区别,基础少了,项目多了 目录 自我介绍 项目 Java基础 进阶 自我介绍 不管是几年都会自我介绍吧。。 项目 说说项目吧,项目的整体架构你了解多少(我觉得这个比较重要,如果你连你...

    一年经验与应届生的区别,基础少了,项目多了

    目录

     自我介绍

     项目

     Java基础

     进阶


     自我介绍

    不管是几年都会自我介绍吧。。

     项目

    • 说说项目吧,项目的整体架构你了解多少(我觉得这个比较重要,如果你连你负责的项目整体的架构都不清楚,每天盲目的就负责自己的模块,让你做什么你就做什么,从来不对整个项目关心,说明工作态度不太。。。)
    • 说说你负责的模块
    • 说说你遇到的问题以及如何解决的(多少得说几个,不出问题的项目你觉得???)
    • 说说你负责得模块你认为比较好的地方
    • 在你介绍自己项目的途中,会根据项目中所用到的中间件问你(RabbitMQ、Redis、es等等)项目中用到什么问什么

    Java基础

    Java基础也会问,但不会那么的基础。

    • 反射:什么是反射,例如一个接口有两个实现类,如何根据业务需要,利用反射执行不同的实现类的方法(举例子 根据用户的积分多少,调用不同的实现类)
    • Spring相关的一些源码知识
    • 常用集合:底层是如何实现的,HashMap(问的比较多),HashMap Put的过程,发生碰撞会作什么,使用ArrayList如何保证线程安全。。。等等,***搜Java高级基础一大片。。
    • 你们用Jdk几?jdk8有那些特性,Stream用过吗,能列举几个你常用的方法吗(Stream没用过,只能说明你写的代码太。。不美观了吧,太费事了吧)。Lambda表达式?可以列举几个用到Lambda表达式的方法吗
    • 多线程,线程池(线程池有哪些设置参数),常用队列,拒绝策略,为什么选择他们。不同拒绝策略应用场景
    • Redis:五种存储类型,分别的应用场景,为什么,缓存雪崩,缓存穿透,你们是怎么解决的(解决办法),如何保证缓存与数据库的数据一致性,过期策略,内存淘汰机都有哪些,有哪些区别,那两种持久化方式有什么区别
    • 消息队列:RabbitMQ如何保证消息的幂等性,事务性,消费方消费消息的过程中出异常怎么办(ACK机制),线上你们的RabbitMQ宕机过吗,如何恢复消息的。
    • MySql:表连接的区别,遇到过慢查询吗,如何解决的,索引的底层是什么,B+树与B树的区别可以简单说一下吗?如何避免索引失效,说一说你分析一条SQL的流程或者说你写完一条SQL后会怎么做(Explain)

     进阶

    • 数据库某张表数据量太大了,你会怎么做,首先先分表,如何根据不同的用户插入到不同的表呢(Hash取余,类似于HashMap put时的操作)
    • 线程池遇到过死锁吗,你是如何解决的;synchronized 和Lock区别能简单说说吗?你们都用什么?为什么?
    • 数据库的表你有没有设计过,如果要是你根据一个新的业务场景设计表,你会怎样设计(围绕3NF)
    • 部署过项目吗,比如说我要把一个项目在一台服务器上开启多个,即多个端口吗,我如何指定他们(Java-Jar设置参数,别傻到说修改yml重新打包生成)
    • Linux常用的命令。查看端口号的命令是什么**(常问)
    • 了解过分布式吗,什么是分布式,为什么要使用分布式,常用的组件有哪些?

    关于上方的问题,可以看我写的其他博客,链接如下

    分治映射

    redis过期策略淘汰机制,持久化,雪崩击穿

    RabbitMQ

    SQL优化

    HashMap

    一个接口两个实现类利用反射调用不同的实现类

    线程池阻塞队列拒绝策略

    Stream

     

    差不多了吧,半个小时四十分钟的面试时间,一年两年的面试,觉得我写的不足的,欢迎大家留言。

    展开全文
  • 一年经验Java常见的面试题及答案

    万次阅读 多人点赞 2018-11-21 14:16:06
    1.public、private、protected和friendly的区别 都是访问类型修饰符关键字,在于访问范围不一样。 访问范围如下: 本类 同package 子类 非同package public o o o o pr...
  • JAVA一年经验面试

    2011-09-23 14:23:37
    JAVA面试题 0.1如何处理并发? 单例 ---共享对象 还有就是 在执行算法和存储结构的方法前加锁 一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 区别:首字母大写就可以...
  • 一年经验java面试题及答案 1.public、private、protected和friendly的区别 都是访问类型修饰符关键字,在于访问范围不一样。 访问范围如下: 本类 同package 子类 非同package public o o o ...
  • 刚看了会手机,我妈就来了个微信问我最近工作找的怎么样了,和我妈聊了会后就打开了笔记本顺手点了根烟(ps:吸烟有害健康)来总结下最近一个月的面试,希望可以帮助到一年经验左右离职的小伙伴们。 好了,进入正题了...
  •  18年毕业,毕业不到一年的我就遇上了科技行业大裁员事件。就在19年1月18号周四还在看滴滴裁员,美团裁员的消息时,周五我也被告知公司项目收益亏本,所以合伙人共同商量后决定解散项目。  当时我听到这个消息...
  • 时光转瞬即逝,一年时间已经过去,自己准备跳槽了,然后在网上搜了一些面试题,方便自己,也方便大家 主要是在面试的这个过程中,把自己的优势充分的展现给面试官,让面试官对你有一个充分的认识,这也是一个推销...
  • java面试题一年工作经验)的心得

    万次阅读 多人点赞 2018-07-16 13:56:07
    Java面试题全集(上) 很多基础的东西,建议先看。 各大公司Java后端开发面试题总结 面试心得与总结—-BAT、网易、蘑菇街 关于Java面试,你应该准备这些知识点 深入学习 在看面试题的过程,你会遇到一些自己没接触过...
  • 有不少公司是有面试的,如果你没有准备过,很容易在各种小地方犯错,建议去一些面试题网站多做些题目,我自己是用的牛客网。 学习记录 把自己每天的学习时间和学习内容记录下来,可以让自己更有动力的学习,学习是一...
  • 2018北京java面试心得体会(一年经验

    万次阅读 多人点赞 2018-06-13 19:03:04
    (1)java基础复习,这个是必须的,一笔试肯定完蛋,因为笔试的内容大多都是非常基础琐碎的知识点,我采取的方案就是百度【java基础面试题】,一搜一大推,然后慢慢看呗; (2)计算机网络相关知识复习,说白了TCP...
  • 区别是相当滴大,10年以上面试官来答,高手过招,从来不按照网上常见面试题的套路来,因为一旦超过4年,中高级的答案就不是背概念了。一方面是技术功底,另一方面是沟通能力。1、重构与模式不入流的重构后还会违反...
  • 面试 都是根据你的简历来提问,不熟悉的东西慎写。 聊项目,你在这个项目中担任了什么角色,做了什么事情。继续深挖项目,这个uuid是怎么实现的。 会前端吗,怎么在页面之间传递数据。 谈一下微服务网关的实现原理。...
  • Java程序员面试技巧总结(一年左右经验

    千次阅读 多人点赞 2019-07-31 11:15:21
    Java面试题全集(上) 很多基础的东西,建议先看。 各大公司Java后端开发面试题总结 面试心得与总结—-BAT、网易、蘑菇街 关于Java面试,你应该准备这些知识点 深入学习 在看面试题的过程,你会遇到一些自己没接触过...
  • 面试题正常人第一步肯定都会看面试题,我也不例外,在看的过程中,我发现有些文章写的不错,对我帮助不小值得推荐,如下:Java面试题全集(上) 很多基础的东西,建议先看。各大公司Java后端开发面试题总结面试心得...
  • java面试题

    2018-05-02 17:10:26
    java开发一年经验的常见面试题,对新手有极大的帮助。
  • 昨天在我的 Java 面试粉丝群里,有一个只有一年开发经验的小伙伴只用了三天时间,就找到了一个年薪 20 万的工作,真是替他感到开心。 他的经历告诉我们:除了...本文是 Java 最常见的 200+ 面试题 的第三个补充模块...
  • JAVA工作经验1年面试题

    千次阅读 2019-06-16 22:17:52
    投了70-80家大概面了5家,在这里向大家总结一下这几家公司的面试题。 1.抽象类和接口的关系和区别,以及你在时间开发过程中是怎么使用到的? 2.你知道反射机制和动态代理吗? 3.一个线程连续两次调用start方法会...
  • Java高级程序员面试题

    2018-03-06 22:06:56
    有些事情总是不如人意,由于个人的发展原因离开了大连某个城堡公司来到了一家互联网公司,当时完全为了学习新技术,没有太重视薪水,在这家公司不到一年的时间让我学到了好多种以前都没有听说过的技术,使自己成长了...
  • 我是二本院校非科班的,从简历被拒,到拿下头条面试,我花了一年的时间。 一、印象中的头条 二、面试背景 三、准备面试 四、头条一面电话面(Java+项目) 五、头条二面视频面(大数据+项目) 六、头条三面视频面...
  • 因为公司实在太偏了,春节回来后(已经坚持了一年),向公司提了离职,准备换一家公司。 到目前已经面了不少公司了,现在准备总结一下大概面试的题目。(只记录技术面,人事面不记录) XX医生 技术1面 1.介绍项目。 ...
  • 从 17 年的大三暑假就在这家...工作也非常轻松,想要进一步提升,就有了离职的想法,严格来说,2017.6~2018.5 其实毕业还不到一年,姑且算 1 年经验吧。 先找了几个高端一些的岗位,挑些了自己懂的技术关键词(J...
  • JAVA笔试题和面试题

    2018-04-04 16:37:10
    这是为一年多的工作经验java开发人员准备。希望大家一起努力充实自己,查漏补缺。我在2017年的三月至四月份间面试了N家公司。根据他们的笔试和面试问题,我总结下来的,希望对大家有用。* 说出mybatis对jdbc的封装...
  • 本人5年开发经验、19年年底...下面提的问题可以看下你自己是否能回答出来,是否做好准备了,当然面试题准备是一方面,你本身的技能掌握是一方面,本身技能不过硬也会被刷下来. 面试流程 先说下面试流程,一般大公司都有
  • 本人5年开发经验、19年年底...下面提的问题可以看下你自己是否能回答出来,是否做好准备了,当然面试题准备是一方面,你本身的技能掌握是一方面,本身技能不过硬也会被刷下来. 面试流程 先说下面试流程,一般大公司都有

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

java一年经验面试题

java 订阅