Java工程师笔试主观题

啊南 1611阅读 2020.04.03

【导语】: 喜欢Java工程师的朋友,应该都知道去公司面试这岗位是需要考笔试的吧。其中主观题分数高,可得分率并不是想象中的高,甚至有点难,那么我们遇到考主观题的时候该怎么办呢?以下是小编收集的Java工程师笔试主观题,有答案的,没答案的都在这了,需要的可往下瞧瞧。

Java工程师笔试主观题5例

1. String与StringBuffer有什么区别?
答:简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。
StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
2. 接口和抽象类的区别是什么? 
答:Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于: 
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类 
类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
3. 什么是cookie?session和cookie有什么区别? 
答:cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别: 
无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。
在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。 
4. sendRedirect()和forward()方法有什么区别?
答:sendRedirect()方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上。重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。一般认为sendRedirect()比forward()要慢。
5. 根据你的理解,解释一下MVC。
答:
(1)模型Model:应用对象。
模型是应用程序的主体部分。
模型代表了业务数据和业务逻辑; 当数据发生改变时,它要负责通知视图部分;一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。
(2)视图View:数据的展现。
视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。
(3)控制器Controller:逻辑处理、控制实体数据在视图上展示、调用模型处理业务请求。
当 Web 用户单击 Web 页面中的提交按钮来发送 HTML 表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。

Java工程师笔试主观题10例

1、什么是继承?  
答:继承性是面向对象程序设计语言的另一种基本特征,通过继承可以实现代码的重用。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。
子类可继承父类中的变量及方法,也可定义其自身特有的变量及方法。
Java中不支持多重继承。
2、Java中如何实现继承?  
答:通过在类的声明中加入extends 来创建一个类的子类。
Class SubClass  extends  SubClass{ 

3、Java中,有继承关系时,变量隐藏的原则?  
答:子类中变量名与继承自父类的变量名相同时,则继承自父类的变量将被隐藏。
4、Java中,有继承关系时,方法重写原则?  
答:重写后的方法不能比被重写的方法有更严格的访问权限(可以相同) 
       改写后的方法不能比重写的方法产生更多的例外(异常) 
5、Java中,super关键字的作用? 
答: 调用构造方法: 
Super()必须是子类构造函数第一个执行的语句,如果super()没有被用到,每个超类的默认的或无参数的构造函数将被执行。 
调用被隐藏变量及方法: 
可通过super关键字调用被隐藏的父类中的变量及方法。 
6、Java中,是否支持多继承?   
答:不支持多继承,允许多层继承 
7、Java中,请说明final关键字的使用?  
答:final在类之前 
表示该类是最终类,表示该类不能再被继承。
Final在方法之前 
表示该类方法是最终方法,该方法不能被任何派生的子类覆盖。
Final在变量之前 
表示变量的值在初始化之后就不能再改变,相当于定义了一个常量  
8、 什么叫成员变量的隐藏?   
答:对于成员变量来说,当子类本身具有与继承自父类的某个成员变量名称相同的成员变量时,便构成了成员变量的隐藏。其含义是,在子类中直接调用该成员变量时,将调用的是子类中本身具有的成员变量,而不是从父类继承的成员变量。
9、 什么是方法的重载?方法重载的规则是什么? 
答:方法重载指的是在同一个类里面,有两个或两个以上具有相同的方法名,不同参数序列的方法。 
规则: 重载的方法参数列表各不相同,体现在参数的个数,类型,顺序的不同        
重载方法的返回值类型,访问限制没有特别的要求,可以相同也可以不同  
10、 重载方法是如何进行匹配的?  
答:在方法调用进行匹配的时候,首先选择直接匹配的方法;如果没有则将参数进行提升转换后再匹配方法,总是匹配最接近的方法 对于基本数据类型而言,就是按照基本数据类型间的自动转换关系,将传递的参数进行自动转换,并寻找最匹配的一个方法 
对于对象应用类型而言,则按照继承树向上转型的方式,将传递的参数进行自动转换, 并寻找最匹配的一个方法

Java工程师笔试主观题15例

1. Java有没有goto?
答:有, Goto语句在java中作为保留字, 并没有实现它. 
带标号的break, continue局限于循环体中跳转
带标号的goto可以在一个函数(c语言)中任意跳转
Goto比带标号的break,continue用法灵活, 正因为太灵活了使程序的逻辑结构变得复杂, 流程不够清晰, 程序的可读性下降
所以java把goto保留了.
2.在JAVA中如何跳出当前的多重嵌套循环?
答:Break关键字+标签, 标签的位置放在最外层循环开始的上一行, 以冒号结束. 即使用break outer到指定的位置, 来结束多重嵌套循环. 
3.short s1= 1; s1 = 1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:没有错; 没有错
4.char型变量中能不能存贮一个中文汉字?为什么?
答:可以, 因为char是两个字节, 而unicode的汉字编码所占用的存储空间就是两个字节
5.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
答:是引用不能变, 而不是引用的对象不能改变
6.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?
答:接口可以继承接口, 抽象类可以实现接口, 抽象类可以继承具体类, 抽象类可以有静态的main方法, 还可以直接执行的. 
7.Overload和Override的区别?Overload的方法是否可以改变返回值的类型?
答:Overload是在一个类里面方法的重载, 指方法名相同参数类型,个数,顺序不同, 来实现的方法重载
Override是在继承关系中, 子类重写父类的方法, 方法名, 返回值, 参数都必须相同. 
重载的时候是可以改变方法的返回值的, 因为重载与方法的放回值类型无关
8.构造方法的作用是什么?构造方法和普通方法的区别?
答:构造方法的作用是在新建一个对象的时候, 调用构造方法来创建对象. 
构造方法和普通方法的区别: 
  1.普通方法必须有返回值类型修饰符, 而构造方法不能有返回值类型修饰符;
  2.构造方法名必须和类名相同
  3.普通方法用来定义对象的行为, 而构造方法用来初始化
9.super()或者this():为什么一定要定义在第一行?是否可以同时出现? 
答:因为super()和this()是调用的父类或本类的无参构造器, 因为Java不允许调用没有初始化的成员. 只有使用了super()或this()来初始化了对象之后, 才能调用该对象并继续进行后续操作. 
Super()为什么要定义在第一行? 因为子类的构造器中可能会使用父类的属性或方法, 如果父类都没有被创建, 那么就会导致空指针异常, 因此, super()应先执行, 来创建父类的对象. 
This()为什么要定义在第一行? 因为如果不定义在第一行, 那么当子类创建对象时, 首先会调用父类的无参构造器, 这时候就创建了一个父类的对象. 然后继续执行, 遇到了this()的时候, 就调用该构造器, 而这个构造器又属于是创建子类的对象, 又需要去调用父类的构造器. 也就是说, 造成了资源的浪费, 和同步不一致的问题. 
不能同时出现, 因为它们两个都要求只能出现在第一行. 
Super()和this()都是调用构造函数进行初始化, 而初始化的动作需要先完成. 
10.访问修饰符有哪些?各自的作用范围是什么?
答:Private: 私有的, 本类中
Public: 共有的, 任何位置 
Protected: 受保护的, 本类, 同一个包和子类中可以访问
缺省的: 同一个包中
11.static的作用和用法?
答:Static的作用是把属性和方法定义为静态的, 可以在不创建对象的时候就调用这些属性和方法. 它只需要初始化一次, 可用来定义不经常改变的属性, 或者是对象的计数器. 
用法? 类名.属性 或 类名.方法名() , 即通过类名直接调用.  
12.是否可以从一个static方法内部发出对非static方法的调用?
答:不可以. 
Static的方法内部职能访问static修饰的属性和方法
因为普通的属性和方法是依赖于对象的, 只有创建了对象之后, 才能通过对象进行访问. 而此时静态方法是没有创建对象的, 因此就会报异常. 
13.值传递和引用传递的区别?
答:
  1.一个是针对基本数据类型, 一个针对引用数据类型
  2.值传递传递的是值, 引用传递传递的是地址
  3.值传递是拷贝了一份新的值给形式参数, 在方法中进行操作不会影响原来的值; 而引用传递的是地址, 两个引用指向同一个地址, 因此方法中改变了这个地址中的数据,那么原来的数据也会改变. 
14.什么继承?继承有什么优点?继承使用什么关键字?继承的特点?继承的限制?一个类可以同时继承多个类吗?所有类的父类是什么?
答:继承就是一个类继承另一个类的属性和方法. 继承的优点是可以实现代码的重用, 使组件类型保持一致. Extends关键字, 类只能单继承类, 但可以实现多个接口. 所有类的父类是Object类
15.什么是重写?用什么方法可以强制检当前方法是否重写父类方法?
答:重写是指在继承关系中, 子类重新实现了父类中存在的方法. @Override关键字