java面试题复习(一)
//基础最重要,如果面试官问一个答不上一个,那有难度的都都不用问了,直接就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面试题复习(一)的更多相关文章
- Java面试题复习笔记(数据库)
1.数据库分类? 关系型数据库和非关系型. 常用关系型:Myspl.Oracle.SQLServer 非关系型:Redis.Hadoop.Memcache.Mogobd 2.关系数据库三范式? 范式就 ...
- Java面试题复习笔记(Web方向)
1.Http中get和post请求的区别? 共同点:都是Http请求方式,用户可以通过不同的请求方式完成对资源(Url)的操作.具体来讲就是get一般用于获取/查询资源信息,post用于更新资源信息. ...
- java面试题复习(八)
71.如何通过反射创建对象? 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance() 方法2:通过类对象的getConstructor()或 ...
- java面试题复习(七)
61.jdbc的操作步骤 加载驱动:Class.forName("oracle.jdbc.driver.OracleDriver"); 创建连接:Connection con =D ...
- java面试题复习(六)
51.实现多线程的方法 一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如 ...
- java面试题复习(五)
41.阐述final.finally.finalize的区别 final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract ...
- java面试题复习(四)
31.内部类可以引用它的外部类的私有成员吗? 可以,内部类对象可以访问创建它的外部类对象的成员 32.final关键字有哪些用法? 修饰类时该类不能被继承,修饰方法时,该方法不能被重写,修饰变量时表示 ...
- java面试题复习(三)
21.静态嵌套类和内部类的不同? 答:静态嵌套类是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化.而通常的内部类需要在外部类实例化后才能实例化.//还是考的static的知识 ...
- java面试题复习(二)
//我又回来了 11.数组有没有length()方法?String有没有length()方法? 数组只有length属性,String有length()方法.注意:JavaScript获取字符串长度使 ...
随机推荐
- explain和profiling分析查询SQL时间
mysql可以通过profiling命令查看到执行查询SQL消耗的时间. 默认情况下,mysql是关闭profiling的,命令: select @@profiling; +------------- ...
- [NLP]非终结字符集&终结字符集
参考:终结符和非终结符 终结字符集: 不能单独出现在推导式左边的符号, 不能够再继续推导. 非终结字符集: 不是终结字符集中的符号都为非终结字符集. 是可拆分元素. 例子: 文法如下: S->A ...
- Oracle—通过操作系统进程查看数据库sql语句
工作中遇到一个问题,某报表运行时间特别长,通过操作系统可以看到一个oracle进程消耗资源比较大,如何能够通过该操作系统进程找到具体SQL呢.记录如下: 1.查看Linux系统进程号 可以通过top动 ...
- Linux下的常用文本编辑器
Linux的文本编辑器 ed 在早期的unix平台上,ed可以说是唯一的编辑工具.它是一个很古老的行编辑器,vi这些编辑器都是从ed 演化而来.行编辑器使用起来很不方便,每次只能对一行进行操作,.而后 ...
- 我发起了一个 ILBC 的 子项目 ILBC Studio
ILBC 见 <ILBC 规范> https://www.cnblogs.com/KSongKing/p/10354824.htm 发起这个项目的原因是, 本来想用 VsCode 来写 ...
- Ntrip协议简介(转)
原文地址:https://blog.csdn.net/sinat_19447667/article/details/67637167 1 什么是Ntrip? CORS(Continuously Ope ...
- vscode setting
{ "files.autoSave": "onFocusChange", "window.openFilesInNewWindow": tr ...
- .Net Core跨平台应用研究-HelloDDNS(动态域名篇)
.Net Core跨平台应用研究-HelloDDNS -玩转DDNS 摘要 为解决自己搭建的内网服务器需要域名而因没有超级用户密码不能开启光猫内置DDNS功能的问题,自己动手,基于.net core, ...
- git中加入中文时,乱码
原因:编码问题,可以看到txt转为为ANSI编码 ---->将编码方式改为UTF-8即可
- react的学习笔记
React中几个核心的概念### 虚拟DOM(Virtual Document Object Model) + **DOM的本质是什么**:浏览器中的概念,用JS对象来表示 页面上的元素,并提供了操作 ...