目录
1.说出你对面向对象的理解
在我理解,面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息。
面向对象有三大特性,封装、继承和多态。
封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。
继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类--有父类的行为和属性,也有自己特有的行为和属性。这样做扩展了已存在的代码块,进一步提高了代码的复用性。
如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。多态的一大作用就是为了解耦--为了解除父子类继承的耦合度。如果说继承中父子类的关系式IS-A的关系,那么接口和实现类之之间的关系式HAS-A。简单来说,多态就是允许父类引用(或接口)指向子类(或实现类)对象。很多的设计模式都是基于面向对象的多态性设计的。
2.JVM的内存区及其GC算法
元空间:jdk1.8取消了持久代新增了元空间,并将方法区放在元空间中
3.集合框架下的各种接口和实现类有哪些,分别有啥特点
参考:
4.string类有啥特点,有哪些常用的API
1.String类对象的相等判断使用equals()方法完成,“==”实现的是地址数值的比较
2.字符串内容一旦声明则不可改变,String类对象内容的改变是依靠引用关系的变更实现的。
3.String类有两种实例化方式,使用直接赋值可以不产生垃圾空间,并且可以自动入池,不要使用构造方法赋值。
一些常见API:
indexOf():检索字符串中某个字符或某段字符的下标。
lastIndexOf():和indexOf类似,不过是查找最后一个出现的位置。
str.lastIndexOf(str,index):从下标index往前查找最后一个出现的位置
substring():返回一个字符串的子字符串
charAt(index):返回下标对应的字符
trim():去掉字符串前后的空格
startsWith()/endsWith():检测字符串是否已制定字符串开头或结尾,返回值是boolean
split()/根据括号内的字符串分离字符串,返回值是一个字符串数组
....
5.stringBuilder和stringBuffer的区别?
运行速度:StringBuilder >StringBuffer >String
线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适