1.==与equals的区别
==在比较基本数据类型时比较的是值,在比较引用类型时比较的是内存地址
equals在重写之后比较的是值,在不重写时比较的是地址
equals不能比较基本数据类型
2.String Stringbuffer StringBuilder区别
String是final修饰的常量 对象内容不可变
StringBufffer对方法加了同步锁所以线程安全,但性能不高
StringBuilder线程不安全但是性能高
操作少量数据用String
多线程下操作大量数据用Stringbuffer
单线程下操作大量数据用Stringbuilder
3.ArraryList与LinkedList的区别
ArraryList的底层代码是动态数组,LinkedList的底层是链表,所以ArrayList适合做查询操作,LinkedList适合做增删操作,并且只能使用迭代器遍历
4.什么是Spring
Spring是一个用于简化企业操作的中间层框架,主要是管理项目中javaBean的生命周期,简化了代码编写,降低了代码的耦合度,提高了代码的复用性,主要有两大核心:IOC(Inversion of Control)和Aop(Aspect Orient Programming)
4.1IOC
把创建对象的权力交给容器,当调用者创建对象的实例时,不是由调用者的代码实现,而是由spring容器创建实例,容器会控制程序间的关系。控制权由代码转移到了容器,这就是控制反转,他是spring框架的核心之一。
4.2DI
IoC和DI其实是同一概念的不同角度描述。IoC强调的是将对象实例的创建控制权由spring容器来统一管理,需要的时候从容器中取出,而不是由调用者自身去创建,从而达到降低代码耦合性与硬代码的目的。依赖注入强调的是当调用者需要使用对象实例时,spring容器为调用者提供对象实例这个过程。本质上应该是属于同一技术实现方式,但是在不同的情况,叫法不同。就好比李云鹏在寝室的时候,室友叫他鹏弟,但是出到外面上课,别人叫他李云鹏一样。
4.3AOP
AOP 采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。简单说就是在不修改源代码的基础上为系统中的业务组件添加某种通用功能。
5.面向对象三大特性
封装
将对象的属性隐藏起来,仅对外公开接口,将数据与操作数据的源代码进行结合,形成一个类似于类的整体,属性和方法都是类的成员。外界可通过预留的getset方法来访问成员属性。
继承
从已有类中派生出子类,已有的类成为父类,子类拥有父类的所有属性和方法。子类可以拥有自己本身的特有方法以及特有属性。
多态
多态是同一个行为具有多个不同表现形式或形态的能力,就是同一个接口,使用不同的实例而执行不同操作。多态体现为父类引用指向子类引用
6.反射的基本概念
1.在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java的反射机制。反射是框架的核心灵魂,动态代理设计模式采用了反射机制,还有Spring 等框架也大量使用到了反射机制。
优点是运行时动态获取类的全部信息,缺点是破坏了类的封装性,泛型的约束性。
7.为什么说 Java 语言“编译与解释并存”
高级编程语言按照程序的执行方式分为编译型和解释型两种。简单来说,编译型语言是指编译器针对特定的操作系统将源代码一次性翻译成可被该平台执行的机器码;解释型语言是指解释器对源程序逐行解释成特定平台的机器码并立即执行。比如,你想阅读一本英文名著,你可以找一个英文翻译人员帮助你阅读,有两种选择方式,你可以先等翻译人员将全本的英文名著(也就是源码)都翻译成汉语,再去阅读,也可以让翻译人员翻译一段,你在旁边阅读一段,慢慢把书读完。
Java 语言既具有编译型语言的特征,也具有解释型语言的特征,因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码( \*.class 文件),这种字节码必须由Java 解释器来解释执行。因此,我们可以认为 Java 语言编译与解释并存。
8.Java 和 C++的区别
都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。
C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这
与 Java 最初的设计思想不符)。
9.continue、break、和 return 的区别是什么
continue指跳出当前的这一次循环,继续下一次循环。
break指跳出整个循环体,继续执行循环下面的语句。
return用于跳出所在方法,结束该方法的运行。
10.构造方法
构造方法就是一种特殊的方法,每当一个类被实例化的时候,就会调用构造方法,而且只有构造方法被调用的时候,对象才会被分配内存空间。也就是说,每次我们使用new关键字的时候,构造方法至少会被调用一次。构造方法的名字必须和类名一致,构造方法没有返回值,返回的是一个类
构造方法不能是抽象的,静态的,最终的,同步的也就是说,他不能通过abstract,static,final,synchronized关键字修饰。
11.重载和重写的区别
重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理。
重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法。
重载
发生在同一个类中(或者父类和子类之间),方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同。
重写
重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写。返回值类型、方法名、参数列表必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。如果父类方法访问修饰符为 private/final/static 则子类就不能重写该方法,但是被 static 修饰的方法能够被再次声明。构造方法无法被重写。
12.深拷贝与浅拷贝
浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,浅拷贝复制对象的第一层,引用类型字段共享同一对象。
深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,递归复制对象及其所有引用,确保新对象与原对象完全独立。
希望我的文章同样能帮助到你。如有错误请指出,谢谢!