1. 首页
  2. IT资讯

63道java面试真题击破BAT招聘套路!跳槽季助你一臂之力

“u003Cdivu003Eu003Cpu003E“金三银四”跳槽季,网上出现了各种面试真题,一时会让人眼花缭乱,分不清最该看哪个,小编耗时一星期为大家做了一些java面试的真题。请准备好你的小本本u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002Ffa6e218e-12a6-44e8-9893-dbafc9c357ef” img_width=”1200″ img_height=”784″ alt=”63道java面试真题击破BAT招聘套路!跳槽季助你一臂之力” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E✍ u003Cstrongu003E面向对象和面向过程的区别u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 面向过程u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linuxu002FUnix等一般采用面向过程开发,性能是最重要的因素u003Cu002Fpu003Eu003Cpu003E缺点:没有面向对象易维护、易复用、易扩展。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 面向对象u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。u003Cu002Fpu003Eu003Cpu003E缺点:性能比面向过程低。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003Ejava的四个基本特性u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E抽象:就是把现实生活中的某一类东西提取出来,用程序代码表示,我们通常叫做类或者接口。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。u003Cu002Fpu003Eu003Cpu003E封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装。u003Cu002Fpu003Eu003Cpu003E继承:是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于抽取多类事物的共性。u003Cu002Fpu003Eu003Cpu003E多态:允许不同类的对象对同一消息做出响应。方法的重载、类的覆盖正体现了多态。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003E重载和重写的区别u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。u003Cu002Fpu003Eu003Cpu003E重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003E采用字节码的好处u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EJava语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。u003Cu002Fpu003Eu003Cpu003E所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003E构造器Constructor是否可被overrideu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E构造器不能被重写,不能用static修饰构造器,只能用public、private、protected这三个权限修饰符,且不能有返回语句。u003Cu002Fpu003Eu003Cpu003E✍u003Cstrongu003E 访问控制符public,protected,private,以及默认的区别u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eprivate只有在本类中才能访问;u003Cu002Fpu003Eu003Cpu003Epublic在任何地方都能访问;u003Cu002Fpu003Eu003Cpu003Eprotected在同包内的类及包外的子类能访问;u003Cu002Fpu003Eu003Cpu003E默认不写在同包内能访问。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003E是否可以继承String类u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EString类是final类故不可以继承,一切由final修饰过的都不能继承。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003EString和StringBuffer、StringBuilder的区别u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 可变性u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EString类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 线程安全性u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EString中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 性能u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E每次对String 类型进行改变的时候,都会生成一个新的String 对象,然后将指针指向新的String 对象。StringBuffer每次都会对StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003EhashCode和equals方法的关系u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eequals相等,hashcode必相等;hashcode相等,equals可能不相等。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003EJava语言采用的编码方案u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EJava语言采用Unicode编码标准,Unicode(标准码),它为每个字符制订了一个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003E抽象类和接口的区别u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 语法层次u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E抽象类和接口分别给出了不同的语法定义。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 设计层次u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 跨域不同u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在”is-a”关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,”like-a”的关系。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003E自动装箱与拆箱u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 装箱u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E将基本类型用它们对应的引用类型包装起来;u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E· 拆箱u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E将包装类型转换为基本数据类型;u003Cu002Fpu003Eu003Cpu003EJava使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003E什么是泛型、为什么要使用以及泛型擦除u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E泛型,即“参数化类型”。u003Cu002Fpu003Eu003Cpu003E创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。u003Cu002Fpu003Eu003Cpu003EJava编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。泛型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。u003Cu002Fpu003Eu003Cpu003E类型擦除的主要过程如下:u003Cu002Fpu003Eu003Cpu003E1)将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。u003Cu002Fpu003Eu003Cpu003E2)移除所有的类型参数。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003EJava中的集合类及关系图u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EList和Set继承自Collection接口。u003Cu002Fpu003Eu003Cpu003ESet无序不允许元素重复。HashSet和TreeSet是两个主要的实现类。List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。u003Cu002Fpu003Eu003Cpu003EMap也属于集合系统,但和Collection接口没关系。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。u003Cu002Fpu003Eu003Cpu003ESortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003EHashMap实现原理u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EHashMap基于hashing原理,通过put()和get()方法储存和获取对象。当将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用LinkedList来解决碰撞问题,当发生碰撞了,对象将会储存在LinkedList的下一个节点中。 HashMap在每个LinkedList节点中储存键值对对象。u003Cu002Fpu003Eu003Cpu003E当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的LinkedList中。键对象的equals()方法用来找到键值对。u003Cu002Fpu003Eu003Cpu003E(具体文章参考可在文末识别二维码,回复“真题”即可)u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003EHashTable实现原理u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。u003Cu002Fpu003Eu003Cpu003EHashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。u003Cu002Fpu003Eu003Cpu003EHashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。u003Cu002Fpu003Eu003Cpu003E(具体文章参考可在文末识别二维码,回复“真题”即可)u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003EHashMap和HashTable区别u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E1).HashTable的方法前面都有synchronized来同步,是线程安全的;HashMap未经同步,是非线程安全的。u003Cu002Fpu003Eu003Cpu003E2).HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。u003Cu002Fpu003Eu003Cpu003E3).HashTable有一个contains(Objectvalue)功能和containsValue(Objectvalue)功能一样。u003Cu002Fpu003Eu003Cpu003E4).HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。u003Cu002Fpu003Eu003Cpu003E5).HashTable中hash数组默认大小是11,增加的方式是old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。u003Cu002Fpu003Eu003Cpu003E6).哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。u003Cu002Fpu003Eu003Cpu003E✍ u003Cstrongu003EArrayList和vector区别u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003EArrayList和Vector都实现了List接口,都是通过数组实现的。Vector是线程安全的,而ArrayList是非线程安全的。u003Cu002Fpu003Eu003Cpu003EList第一次创建的时候,会有一个初始大小,随着不断向List中增加元素,当List 认为容量不够的时候就会进行扩容。Vector缺省情况下自动增长原来一倍的数组长度,ArrayList增长原来的50%。u003Cu002Fpu003Eu003Cpu003E由于真题比较多,小编就不一一写到文中,除此之外,还有23篇word真题。u003Cu002Fpu003Eu003Cp class=”ql-align-center”u003E部分资源截图u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F8aea4075e04644d19cbd7ba5ec13fa42″ img_width=”621″ img_height=”201″ alt=”63道java面试真题击破BAT招聘套路!跳槽季助你一臂之力” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E小编会将文中之外的真题全部打包,发给你!u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E资源获取u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E关注:黑马程序员 头条号,评论转发后台回复 “真题”即可。u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:63道java面试真题击破BAT招聘套路!跳槽季助你一臂之力

主题测试文章,只做测试使用。发布者:玩家L-,转转请注明出处:http://www.cxybcw.com/26884.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code