前言

大家好,我是 Vic,今天给大家带来Java面试集合(三)的概述,希望你们喜欢

1.在Java中是否可以含有多个类?
答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致。

2.说说&和&&的区别?
答:&&短路与,当第一个表达式为false时,第二个表达式不会进行。&,当一个表达式为false时,第二个表达式会进行。

3.char变量类型,能否存储一个中文汉字?
答:可以储存一个汉字,因为char是用Unicode编码来存储的,所以可以存储。

4.final关键字修饰变量时,是引用不变,还是引用对象不变?
答:使用final关键字修饰变量时,是引用变量不能变,引用变量所指对象中的内容是可以改变的。

5.静态变量和实例变量的区别?

答:静态变量前要加static修饰,而实例变量不用。在静态变量中不需要实例对象来调用输出,而实例变量则需要进行实例化,才能使用。

public class Test{
public int i = 1;
public static int j = 0;
public static void main(String[] args) {
Test in = new Test();
System.out.println(in.i);
System.out.println(j);
}
}

6.如何理解Math类中的ceil,floor,round?
答:ceil为天花板,则向上取整为取大的值,补充到整数;floor为地板,则向下取整为取最近小的整数;round为周围,四舍五入,原则在原来基础上+0.5,超过0.5的进位,不超过0.5就取进小整数。

7.Overload和Override的区别?
答:Overload为重载,Override为覆盖,重写。

8.请说说分层设计的好处?
答:

  • 实现了软件之间的解耦

  • 便于进行分工

  • 便于对软件组件的重用

  • 便于进行维护

  • 便于对功能的扩展

9.Java中实现多态的机制是?
答:父类或接口定义的引用变量指向子类具体实现类的实例对象,引用变量指向具体的实例对象。

10.说说abstract,interface?
答:

  • abstract修饰class为抽象类,抽象类不能创建实例对象,抽象类中的方法不必要抽象abstract修饰,但是含有abstract修饰的方法的类则必须是抽象类。
    abstract class内可以没有抽象方法,不可以被实例化,但是可以被声明。

  • interface接口中的所有方法必须是抽象的,接口中方法默认为public abstract类型,接口中变量类型默认public static final类型。
    接口中的成员变量必须定义初始化,实现接口类必须在该类实现所有的方法。

在抽象类中有构造方法,接口中没有;抽象类中有普通成员变量,接口中没有;抽象类中可以有静态方法,接口中不能有静态方法。

11.什么是内部类?
答:内部类是在一个类的内部定义的类,静态内部类可以有静态成员变量,而非静态内部类不能有静态成员;内部类可以在外部类中的方法中定义,也可以在外部类的方法外定义。

静态内部类中对外部类进行引用,只有非静态外部类才能对外部类进行引用。

在静态内部类中不需要进行外部类的实例,就可以进行实例化,而非静态内部类需要在外面创建内部类的实例对象,创建时,一定要先创建外部类的实例对象,然后用外部类的实例对象去创建内部类的实例对象。

12.String是否可以被继承?
答:不可以被继承,因为java.lang.String类是final类型的,不能继承的类,被final关键字修饰的类,并且不能被修改,不能改变!

当一个final类型中,String s = "Vic";s = s + " love ";表示原有的对象并没有被改变而是该引用转向了新的对象,原有的s引用不在指向原有的对象了。

13.1到99累加的String和StringBuffer效率?

StringBuffer sb = new StringBuffer();
for(int i = 0; i<100; i++){
sb.append(i);
}
String str = new String();
for(int i = 0; i<100; i++){
str = str + i;
}

StringBuffer只创建一个对象,而String创建了多个对象。

14.说说final,finally,finalize?
答:final用于修饰属性,方法,类,被修饰的属性是不可以变的,被修饰的方法是不可被覆盖的,被修饰的类是不可以被继承的。

finally这个是在异常处理语句中的一部分,finally中的语句是总要执行的。

finalize是垃圾回收集机制的,记住这点就够了。

15.在Java中有几种方法来实现线程?
答:

//new Thread(){}.start();
new Thread(){
public void run(){
}
}.start(); new Thread(new Runnable(){
public void run(){
}
}).start();

16.说说迭代器模式?

答:

public static void print(String str){
Iterator it = str.iterator();
while(it.hasNext()){
String str = it.next();
System.out.println(str);
}
}

17.说说装饰者模式?

答:

public interface Person{
void eat();
}
public class Student implements Person{
public void eat(){
System.out.println("eating");
}
}
public class Me implements Person{
private Student student;
Me(Student student){
this.student=student;
}
public void eat(){
System.out.println("study");
student.eat();
System.out.println("sleeping");
}
}
public class PersonDemo{
public static void main(String[] args){
Student student = new Student();
Me me = new Me(student);
me.eat();
}
}

18.说说单例模式?

//私有构造方法;私有静态引用,返回值为静态的公有方法
public class Singleton{
private static Singleton singleton = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return singleton;
}
}

19.说说工厂模式?

public interface School{
void Study();
}
public class Studentone implements School{
public void Study(){
System.out.println("studyone");
}
}
public class Studenttwo implements School{
public void Study(){
System.out.println("studytwo");
}
}
public interface AllSchool{
School getSchool();
} public class Studentone implements AllSchool{
public School getSchool(){
return new Study();
}
}
public class Studenttwo implements AllSchool{
public School getSchool(){
return new Study();
}
} public class SchoolDemo{
public void test(){
AllSchool allSchool = null
//one
allSchool = new Studentone();
Studentone one = allSchool.getSchool();
one.Study();
//two
allSchool = new Studenttwo();
Studenttwo two = allSchool.getSchool();
two.Study();
}
}

20.说说原型模式?
答:实现Cloneable接口,重写Object类中的clone方法

21.说说生成器模式?
答:

class Ym{
public void ymRequest(){
System.out.println("getYm");
}
}
interface Target{
public void request();
}
class Ym extends Ym implements Target{
public void request(){
super.ymRequest();
}
}
public class Test{
public static void main(String[] args){
Target adapter = new Adapter();
adapter.request();
}
}

22.说说代理模式?

//静态
public interface Info{
public void infoOne():
public void infoTwo();
} public class TrueInfo implements Info{
public void infoOne(){
}
public void infoTwo(){
}
} public class FlaseInfo implements Info{
private Info trueInfo;
public FlaseInfo(Info trueInfo){
this.trueInfo = trueInfo;
}
public void infoOne(){
}
public void infoTwo(){
}
} public class Test{
public static void main(String[] args){
Info trueInfo = new TrueInfo();
Info flaseInfo = new FlaseInfo(trueInfo);
flaseInfo.infoOne();
flaseInfo.infoTwo();
}
}

23.说说外观模式?

public class Studentone{
public void One(){
System.out.println("Studentone one");
}
public void Two(){
System.out.println("Studentone two");
}
} public class Studenttwo{
public void One(){
System.out.println("Studenttwo one");
}
public void Two(){
System.out.println("Studenttwo two");
}
} public class School{
public void Study(){
Studnetone one = new Studentone();
one.One();
one.Two();
Studenttwo two = new Studnettwo();
two.Ono();
two.Two();
}
} public class Test{
public static void main(String[] args){
School school = new School();
school.Study();
}
}

24.说说冒泡排序?

public class Demo{
public static void main(String[] args){
int[] nums = { 3,1,7,5,8,9,23,45};
for(int i = 0; i< nums.length-1;i++){
for(int j = 0;j<nums.length-1-i;j++){
if(nums[j]>nums[j+1]){
int temp = nums[j];
nums[j] = nums [j+1];
nums[j+1] = temp;
}
}
for(int j = 0; j<nums.length;j++){
Systm.out.println(nums[j]);
}
}

25.说说选择排序?

//这种就是排序算法,比如有6个人,第一轮要进行5次比较
//第一轮
for(int index=1;index<arr.length;index++)
{
if(arr[0]>arr[index])
{
int temp = arr[0];
arr[0] = arr[index];
arr[index] = temp;
}
}
print(arr); //第二轮
for(int index=2;index<arr.length;index++)
{
if(arr[1]>arr[index])
{
int temp = arr[1];
arr[1] = arr[index];
arr[index] = temp;
}
}
print(arr); //第三轮
for(int index=3;index<arr.length;index++)
{
if(arr[2]>arr[index])
{
int temp = arr[2];
arr[2] = arr[index];
arr[index] = temp;
}
}
print(arr); //第四轮
for(int index=4;index<arr.length;index++)
{
if(arr[3]>arr[index])
{
int temp = arr[3];
arr[3] = arr[index];
arr[index] = temp;
}
}
print(arr); //第五轮
for(int index=5;index<arr.length;index++)
{
if(arr[4]>arr[index])
{
int temp = arr[4];
arr[3] = arr[index];
arr[index] = temp;
}
}
print(arr); //第六轮没有,我们arr.length=6举例
//int index = 6;index<arr.length; false public static void selectionSort(int[] arr)
{
for(int count=1;count<arr.length;count++)
{
for(int index=count;index<arr.length;index++)
{
if(arr[count-1]>arr[index])
{
int temp = arr[count-1];
arr[count-1] = arr[index];
arr[index] = temp;
}
}
}

26.说说substring()?
答:substring(int beginIndex, int endIndex),返回字符串从beginIndex到endIndex-1的内容。

27.static关键字的用途?
答:“ static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。” ---《Java编程思想》

static代码块,只会在类加载的时候执行一次。static变量不需要创建对象就可以引用。

静态成员变量可以通过对象访问,只要访问权限足够就可以。

静态代码块,随着类的加载而执行,只执行一次。

class StaticDemo{
static{
System.out.println("静态代码块");
}
void show(){
System.out.println("方法");
}
} public class Test{
public static void main(String[] args){
new StaticDemo().show();
new StaticDemo().show();
}
}
//result
静态代码块
方法
方法
public class Test{
static{
System.out.println("静态");
}
public static void main(String[] args){
System.out.println("静态main");
}
}
//result 静态代码块优先于main函数执行
静态
静态main
class StaticDemo{
static{
System.out.println("parent静态代码块");
}
{
System.out.println("parent非静态代码块");
}
StaticDemo(){
System.out.println("parent构造方法");
} public class Test extends StaticDemo{
static{
System.out.println("child静态");
}
{
System.out.println("child非静态");
}
Test(){
System.out.println("child构造方法");
}
public static void main(String[] args){
System.out.println("main");
new Test();
}
} //result
parent静态代码块
child静态
main
parent非静态代码块
parent构造方法
child非静态
child构造方法

28.说说IO?

//第一种:输入流输出流
//第二种:字节流字符流
//第三种:节点流处理流
//FileInputStream
class Test{
public static void main(String args[]){
FileInputStream fis = null;
try{
fis = new FileInputStream("e:/read.txt");
byte[] buffer = new byte[100];
fis.read(buffer,0,buffer.length);
for(int i = 0;i<buffer.length;i++){
System.out.println(buffer[i]);
}
}
catch(Exception e){
System.out.println(e);
}
}
}
class Test{
public static void main(String args[]){
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("e:/read.txt");
fos = new FileOutputStream("e:/write.txt");
byte[] buffer = new byte[100];
int temp = fis.read(buffer,0,buffer.length);
fos.write(buffer,0,temp);
}
catch(Exception e){
System.out.println(e);
}
}
}
class Test{
public static void main(String args[]){
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("e:/read.txt");
fos = new FileOutputStream("e:/write.txt");
byte[] buffer = new byte[1024];
while(true){
int temp = fis.read(buffer,o,buffer.length);
if(temp = -1){
break;
}
fos.write(buffer,0,temp);
}
}catch(Exception e){
System.out.println(e);
}finally{
try{
fis.close();
fos.close();
}catch(Excepiton e){
System.out.println(e);
}
}
}
}
//字符流
public class TextChar
public static void main(String args[]){
FileReader fr = null;
FileWriter fw = null;
try{
fr = new FileReader("e:/read.txt");
fw = new FileWriter("e:/write.txt"); char[] buffer = new char[100];
int temp = fr.read(buffer,0,buffer.length);
fw.write(buffer,0,temp);
}
catch(Exception e){
System.out.println(e);
}finally{
try{
fr.close();
fw.close();
}
catch(Excepiton e){
System.out.println(e);
}
}
}
//FileReader和BufferedReader
class Test{
public static void main(String args[]){
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try{
fileReader = new FileReader("e:/read.txt");
bufferedReader = new BufferedReader(fileReader);
String line = null;
while(true){
line = bufferedReader.readLine();
if(line == null){
break;
}
System.out.println(line);
}
}catch(Exception e){
System.out.println(e);
}
finally{
try{
bufferedReader.close();
fileReader.close();
}
catch(Exception e){
System.out.println(e);
}
}
}
}
public class Test{
public static void main(String[] args) throws Exception{
//字节流
FileInputStream in = new FileInputStream("c:/read.txt");
FileOutStream out = new FileOutputStream("c:/write.txt");
byte[] buffer = new byte[1024];
int len;
while( (len = in.read(buffer)) != -1){
out.write(buffer,0,len);
}
in.close();
out.close();
//字符流
BufferedReader bf = new BufferedReader(new FileReader("c:/read.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/write.txt");
String str;
while( (str=bf.readLine()) != null ){
bw.write(str);
bw.newLine();
}
bf.close();
bw.close();
}
}

29.同步和异步什么时候用?
答:如果数据将在线程间共享,进行同步存取;如果应用程序在对象上调用时间长,建议使用异步。

30.说出一些常用的类,包,接口?
答:类:BufferedReader,BufferedWriter,String,Integer,System,Class,FileReader
包:java.util,java.io,java.lang,java.sql,javax.servlet
接口:List,Map,Set,Remote,Document

总结

  • 本文讲了Java面试集合(三),如果您还有更好地理解,欢迎沟通

  • 定位:分享 Android&Java知识点,有兴趣可以继续关注

Java面试集合(三)-30道面试题的更多相关文章

  1. Java面试集合(三)

    前言 大家好,给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类? 答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致. 2 ...

  2. Java面试集合(七)

    前言: Java面试集合(六) 的回顾,对于final可以修饰常量,方法,和类,一旦常量定义好后就不可改变,而方法,用final来修饰方法,方法不可重载,继承,重写,final用来修饰类,该类不能被继 ...

  3. Java面试集合(一)

    前言 大家好,给大家带来Java面试集合(一)的概述,希望你们喜欢 一 1.Java按应用范围可划分几个版本? 答:Java按应用范围有三个版本,分别是JavaSE,JavaEE,JavaME. 2. ...

  4. Java面试集合(二)

    前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...

  5. 2019 头条java面试笔试总结 (含面试题解析)

       本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条等公司offer,岗位是Java后端开发,因为发展原因最终选择去了头条,入职一年时间了,也成为了面试官,之前面 ...

  6. 2019 京东java面试笔试总结 (含面试题解析)

       本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.京东等公司offer,岗位是Java后端开发,因为发展原因最终选择去了京东,入职一年时间了,也成为了面试官, ...

  7. 2019 滴滴java面试笔试总结 (含面试题解析)

       本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是Java后端开发,因为发展原因最终选择去了滴滴,入职一年时间了,也成为了面试官, ...

  8. 2019 阿里java面试笔试总结 (含面试题解析)

       本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是Java后端开发,因为发展原因最终选择去了阿里,入职一年时间了,也成为了面试官, ...

  9. java面试第三天

    类和对象: 类:主观抽象,是对象的模板,可以实例化对象----具有相同属性和行为的对象的集合. 习惯上类的定义格式: package xxx; import xxx; public class Xxx ...

随机推荐

  1. Java函数式编程

    函数式编程 从JDK1.8开始为了简化使用者进行代码的开发,专门提供有lambda表达式的支持,利用此操作形式可以实现函数式的编程,对于函数编程比较著名的语言是:haskell.Scala,利用函数式 ...

  2. java之hibernate之hibernate查询

    这篇主要简单间接 hibernate查询 1.数据库操作中最重要的是查询,Hibernate提供了多种查询方式来帮助程序员快速实现查询功能. 有hql,本地sql查询,Criteria查询,examp ...

  3. SpringBoot配置中@ConfigurationProperties和@Value的区别

    基本特征 @ConfigurationProperties 与@Bean结合为属性赋值 与@PropertySource(只能用于properties文件)结合读取指定文件 与@Validation结 ...

  4. Oracle恢复流程图

    本图来自于网络,想当初小麦苗刚开始接触备份恢复的时候,就是靠着这张图来学习的,今天把这张图分享给大家,共勉. ............................................. ...

  5. MySQL 5.7开始支持JSON,那还有必要使用MongoDB存JSON吗?请列出你的观点/理由。

    一.观点A:支持MySQL存储JSON MongoDB不支持事务,而MySQL支持事务 MySQL相对MongoDB而言,MySQL的稳定性要优于MongoDB MySQL支持多种存储引擎 二.观点B ...

  6. [AWS][GUI][VNC]rhel 7 安装GUI ,配置VNC

    预计阅读时间:15分钟 预计配置时间:30分钟  (前提是已经申请AWS的EC2的rhel7 云主机并且成功运行) 目前AWS 亚马逊云免费试用一年,申请一个学习使用 痛点:没有GUI,无法搭建Jen ...

  7. Python并发编程-线程同步(线程安全)

    Python并发编程-线程同步(线程安全) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 线程同步,线程间协调,通过某种技术,让一个线程访问某些数据时,其它线程不能访问这些数据,直 ...

  8. 计算机网络基础之IP地址详解

    计算机网络基础之IP地址详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IP地址概述 1>.什么是IP地址 我们为什么要使用逻辑地址(IP地址)来标识网络设备,而不采 ...

  9. Python入门篇-数据结构树(tree)篇

    Python入门篇-数据结构树(tree)篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.树概述 1>.树的概念 非线性结构,每个元素可以有多个前躯和后继 树是n(n& ...

  10. 使用Arduino开发板实现与MPU6050陀螺仪传感器连接的方法

    MPU6050陀螺仪传感器具有许多强大的功能,采用单芯片封装.它是由一个MEMS加速度计.一个MEMS陀螺仪和温度传感器组成.该模块在将模拟量转换为数字量时非常准确,因为每个通道都有一个16位的模数转 ...