java面试题复习(一)

时间:2022-09-20 16:43:06

//基础最重要,如果面试官问一个答不上一个,那有难度的都都不用问了,直接就pass了,就像我,嘿嘿。

//每天最好熟记10个问题,这些问题在编程是会很厚帮助,帮你避免很多不应该出现的错误。

一、面向对象的特征

先说说啥叫面向对象。这个对象可不是你谈的那个对象啊。我还记的我刚学Java的时候,老师说:“万物皆对象,但如果你敢在面试官面前这样说,就别想被录取了”。万物皆对象有点假大空的意思。解释对象时最好具体为一类事物。面向对象就是考虑这类对象具有的属性和功能。比面向过程更容易扩展补充。

抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。比如说有一群小脑斧,我们把他们的共同特征总结出来,而不是只关注其中一只小脑斧喜欢吃啥,是啥颜色等。

继承继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。注意,子类只能继承父类的公共域和公共方法。通俗点说就是儿子可以继承爸爸愿意给他的东西,爸爸藏起来的就不能得到了。想想看儿子除了继承爸爸的东西,是不是还可以有自己的东西,所以一般在java中子类比父类更详细,具有的内容更多。

封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。比如用手机打电话时只需按几个键,而不需要关心手机是如何将号拨出去的。手机具体的操作细节就可以当成被封装起来了。

多态多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。java的引用变量有两种类型:编译时的类型,运行时的类型如果编译时的类型和运行时的类型不一致,就叫多态。简单来说就是编译时调用父类的方法,实际执行的是子类的方法,或者是父类表现出来的行为特性不像父类,像子类,这种现象叫多态。注意:属性不具有多态性。最常用到多态的是:父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。

方法重写:方法重写(override)实现的是运行时的多态性(也称为后绑定),子类继承父类并重写父类中已有的或抽象的方法,。注:和父类有相同的返回值

方法重载:方法重载(overload)实现的是编译时的多态性(也称为前绑定),一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。注:参数必须不同,对返回值类型没有要求

二、public,private,protected,default (不写时默认就是这个)范围

从小到大private(类)<default(同一包下)<protected(子类公开)<public(公共)

三、String 是最基本的数据类型吗,String,StringBuffer,StringBulider的区别?

Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;(很重要,面试也会问基础数据类型)

string是只读字符串,确定后就不变了,不能操作;stringBulider,stringBuffer的字符串可以直接被修改(增加删除字符都可以),stringBulider线程不安全,但速度快。一般来说都用StringBuffer。

四、基本数据类型操作

float f=2.8;//坑爹啊,竟然不对。记住像2.8之类的是双精度(double),把它赋值给float向下转型了,会出现精度损失,必须强制类型转换。

shout s=2;s=s+1和shout s=2;s+=2;哪个对?

2是int类型,s+1也是int型,必须强转类型;s+= 2;相当于s1= (short)(s+ 2);其中有隐含的强制类型转换

五、Java有没有goto,const;

当然有了,但目前没有用到,所以java把他们称为保留字。

六、==和equals的区别

==比较的是他们的引用地址是不是一样,eqluals比较的是值是否相等。偷点懒,就不new对象举例了,等到看内存堆栈部分再说)

七、基础类型和包装类

原始类型: boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

包装类型就是把基础类型变成了对象。而且java提供自动装箱拆箱

我偷了个题可以看看

public class Test {

public static void main(String[] args) {

Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;

System.out.println(f1 == f2);

System.out.println(f3 == f4);   }

}

答案的 true、flase;

因为:当我们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf;

public static Integer valueOf(int i) {

if (i >= IntegerCache.low && i <= IntegerCache.high)

return IntegerCache.cache[i + (-IntegerCache.low)];

return new Integer(i);

}

IntegerCache是Integer的内部类,其代码如下所示

private static class IntegerCache {

static final int low = -128;

static final int high;

static final Integer cache[];

static {

// high value may be configured by property

int h = 127;

String integerCacheHighPropValue =

sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");

if (integerCacheHighPropValue != null) {

try {

int i = parseInt(integerCacheHighPropValue);

i = Math.max(i, 127);

// Maximum array size is Integer.MAX_VALUE

h = Math.min(i, Integer.MAX_VALUE - (-low) -1);

} catch( NumberFormatException nfe) {

// If the property cannot be parsed into an int, ignore it.

}

}

high = h;

cache = new Integer[(high - low) + 1];

int j = low;

for(int k = 0; k < cache.length; k++)

cache[k] = new Integer(j++);

// range [-128, 127] must be interned (JLS7 5.1.7)

assert IntegerCache.high >= 127;

}      private IntegerCache() {}

}

代码看不懂没关系,记住整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象就够了。

八、逻辑操作符和条件操作符的区别

逻辑操作(&,|,^)、条件操作(&&,||)

逻辑操作符不仅可以操作布尔型还可以操作数值型;逻辑操作符不会短路

短路:如果&&左边的表达式的值是false,右边的表达式会被直接pass掉,就不用管它了

九、内存中的栈(stack)、堆(heap)和静态区(static area)

堆内存:

1、存储的全部是对象,每个对象都包含一个与之对应的class信息(class的目的是得到操作指令)

2、jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

注:理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用

栈内存:

1、每个线程都有一个栈区,栈中保存对象的引用,还有就是函数调用的现场

2、每个栈中的数据都是私有的,其他栈不能访问(我的钱,别人不能取)

3、栈分为3个部分:基本变量区、执行环境上下文,操作指令区

4、栈小但操作快

注:”逃逸分析”:从Java 6的某个更新开始可以将一些局部对象放在栈上以提升对象的操作性能

静态区

存放字面量和常量

来  看这个  String str = new String("hello");

str放在栈,new出来的字符串放在堆 ,"hello"放在静态区

并且它创建了两个对象,一个静态区的,一个new创建在堆上的对象(可能会被问到)

十、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

swith现在除了long型不行,剩下的都可以了。(String--java7;enum--java5)

今天先到这了。/-==/

java面试题复习(一)的更多相关文章

  1. Java面试题复习笔记(数据库)

    1.数据库分类? 关系型数据库和非关系型. 常用关系型:Myspl.Oracle.SQLServer 非关系型:Redis.Hadoop.Memcache.Mogobd 2.关系数据库三范式? 范式就 ...

  2. Java面试题复习笔记(Web方向)

    1.Http中get和post请求的区别? 共同点:都是Http请求方式,用户可以通过不同的请求方式完成对资源(Url)的操作.具体来讲就是get一般用于获取/查询资源信息,post用于更新资源信息. ...

  3. java面试题复习(八)

    71.如何通过反射创建对象? 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()  方法2:通过类对象的getConstructor()或 ...

  4. java面试题复习(七)

    61.jdbc的操作步骤 加载驱动:Class.forName("oracle.jdbc.driver.OracleDriver"); 创建连接:Connection con =D ...

  5. java面试题复习(六)

    51.实现多线程的方法 一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如 ...

  6. java面试题复习(五)

    41.阐述final.finally.finalize的区别 final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract ...

  7. java面试题复习(四)

    31.内部类可以引用它的外部类的私有成员吗? 可以,内部类对象可以访问创建它的外部类对象的成员 32.final关键字有哪些用法? 修饰类时该类不能被继承,修饰方法时,该方法不能被重写,修饰变量时表示 ...

  8. java面试题复习(三)

    21.静态嵌套类和内部类的不同? 答:静态嵌套类是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化.而通常的内部类需要在外部类实例化后才能实例化.//还是考的static的知识 ...

  9. java面试题复习(二)

    //我又回来了 11.数组有没有length()方法?String有没有length()方法? 数组只有length属性,String有length()方法.注意:JavaScript获取字符串长度使 ...

随机推荐

  1. 【WPF】TextBox样式重写注意事项

    1.普通控件重写需要添加一行 <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="C ...

  2. Jetty与tomcat的比较

    Google 应用系统引擎最初是以 Apache Tomcat 作为其 webserver/servlet 容器的,但最终将切换到 Jetty 上. 这个决定让许多开发人员都诧异的想问:为什么要做这样 ...

  3. &num;&num;&num;Git使用问题

    #@date: 2014-05-04 #@author: gerui #@email: forgerui@gmail.com 一.git reset的使用 今天修改了代码,就git add ./,添加 ...

  4. js程序调试技巧

    1.No "Access-Control-Allow-origin" 解决方案:这是API参数没有穿对的跨域错误,修改API(ajax请求路径)以保证其参数传递正确即可: 2.lo ...

  5. JS笔记 入门第三

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树) 把上面的代码进行分 ...

  6. SQLSERVER中的log block校验(译)

    原文:SQLSERVER中的log block校验(译) SQLSERVER中的log block校验(译) 来自:http://sankarreddy.com/2010/03/transaction ...

  7. &lbrack;翻译&rsqb; 编写高性能 &period;NET 代码--第二章 GC -- 避免使用终结器&comma;避免大对象&comma;避免复制缓冲区

    避免使用终结器 如果没有必要,是不需要实现一个终结器(Finalizer).终结器的代码主要是让GC回收非托管资源用.它会在GC完成标记对象为可回收后,放入一个终结器队列里,在由另外一个线程执行队列里 ...

  8. 12 Things Developers Will Love About Oracle Database 12c Release 2

    by Chris Saxon-Oracle It's Here: Oracle Database 12c Release 2 (12.2) Is available on Oracle Cloud. ...

  9. How far away ?(LCA)dfs和倍增模版

    How far away ? Tarjan http://www.cnblogs.com/caiyishuai/p/8572859.html Time Limit: 2000/1000 MS (Jav ...

  10. AC自动机(加强版)

    题目描述 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串TT中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据. 每组数据 ...