Java材料

 实例化的方法:

方法一:直接用new的方式开辟一个对象;

方法二:使用工厂设计模式,引入工厂类;

方法三:使用反射机制:Class.forName;

方法四:使用对象克隆:Object类中的clone方法.

 

abstract class和interface有什么区别?

1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是一个类却可以实现多个interface。

  2.其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托。

  3.在abstract class方式中,可以有自己的数据成员,也可以有非abstract的成员方法,而在interface方式的实现中,只能够有静态的不能被修改的数据成员,所有的成员方法都是abstract的.

Static:

1. static变量  静态变量在内存中只有一个拷贝,实例变量可以在内存中有多个拷贝

2. static代码块 是类加载时,初始化自动执行的。

3. static方法 可以直接通过类名调用,只能访问static的变量和方法,因为非static的变量和方法是需要创建一个对象才能访问的,而static的变量/方法不需要创建任何对象。

全局变量和静态全局变量的区别

全局变量, 静态全局变量是静态存储方式。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

 

Final

    在Java中声明属性、方法和类时,可使用关键字final来修饰。

     final变量即为常量,只能赋值一次;

     final方法不能被子类重写;

     final类不能被继承。

 初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数

多态和继承的区别:继承是子类使用父类的方法,而多态则是父类使用子类的方法

Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

 

构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

Servlet生命周期:

当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例,并且调用Servlet的init()方法进行初始化,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。

ClassLoader加载过程:

当运行一个程序的时候,JVM启动,运行bootstrap Classloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。

=============================================

java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下: 
1、首先加载要创建对象的类及其直接与间接父类。 
2、在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序进行。 
3、需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行。 
4、最后执行构造器,构造器执行完毕,对象生成。

=============================================

 

String和StringBuffer区别:

String:

是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.

对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承.

 

StringBuffer:

是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象

它只能通过构造函数来建立,向StringBuffer中赋值的时候可以通过它的append方法,多线程同步安全的

 

StringBuilder类似StringBuffer,不是同步安全的,适合单线程

字节流和字符流:

字节流:InputStream,OutputStream

字符流:Reader,Write

 

treeset与hashset的区别:

TreeSet类实现了java.util.SortedSet接口,从而保证在遍历集合时按照递增的顺序获得对象。实现Comparable接口。

HashSet类按照哈希算法来存取对象,当向集合中加入一个新对象时,会调用对象的HashCode()方法得到对象的哈希码,然后根据这个码计算出对象在集合中存储的位置。

Hashcode:当两个对象的hashcode一样时,两个对象就有可能一样。如果不一样的话两个对象就肯定不一样。一般用hashcode来进行比较两个东西是不是一样的,可以很容易的排除许多不一样的东西。

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

Transient:java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

instanceof是Java的一个二元操作符,它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。可以用在继承中的子类的实例是否为父类的实现。

异常的分类:

① 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。

② Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked),一定要处理。

如果出现RuntimeException,那么一定是程序员的错误,我们可以不处理。其他非RuntimeException(IOException等等):这类异常一般是外部错误。

 

内部类:

成员内部类 :不能定义静态成员,可以访问外部类的所有成员。

作为外部类的一个成员存在,与外部类的属性、方法并列

静态嵌套类 :不需要内部类对象与其外围类对象之间有联系

1. 要创建嵌套类的对象,并不需要其外围类的对象。

2. 不能从嵌套类的对象中访问非静态的外围类对象

// 静态内部类可以用public, protected, private修饰

方法内部类 :不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,和此外围类所有的成员。

匿名内部类  

·匿名内部类不能有构造方法。 
·匿名内部类不能定义任何静态成员、方法和类。 
·匿名内部类不能是public, protected, private, static

 

基本数据类型:byte,int,char,long,short,Boolean,float,double

   SessionCookie的区别

1.Session将信息保存在服务器上,而Cookie保存在客户端上

2SessionCookie更安全,但是session依赖于cookie的,SessionCookie更占资源

3Cookie只能存String类型的数据,而Session可以存Object类型和简单数据类型的数据

 

3。什么是内存泄漏?

答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

当没有任何引用指向堆中的某个对象实例时,这个对象就被视为不再使用。

 

时间复杂度:

插入,选择,冒泡        时间复杂度o(n2)

堆,二叉树,希尔        时间复杂度o(nlog n)

冒泡,交换,选择:最大次数(n-1)*n/2

多态简单实例:

public abstract class A {
abstract void Execute(); 
}
public class B extends A {
public void Excute(){System.out.println("I'm lili");}
}
public class C extends A {
public void Execute(){System.out.println("I'm C");}
}
public static void main(String[] args){
A b=new B();
A c=new C();
b.Execute();
c.Execute();
}

byteshortchar三种类型的优先级是相同的,相同优先级之间是不能进行自动转换的,

byteshortchar-->int-->long-->float-->double

 

线程

Thread和Runnable有什么不同?

JAVA线程控制着程序执行的主路径。当你用java命令调用JVM时,JVM创建了一个隐式线程来执行main方法。Thread类提供了主线程调用其它线程并行运行的机制。
Runnable接口定义了一个能被Thread运行的类。实现Runnable的类只需要实行run方法。可以很灵活的扩展现在的已经继承自其它父类的类。而thread则不可以,因为java只允许继承一个父类。

synchronized关键字修饰同步方法,反对使用stop(不安全,解除了线程获取的所有锁定),反对使用suspend(容易发生死锁)

状态:就绪,运行,synchronize阻塞,wait和sleep挂起,结束。

Lock和synchronize

Lock可以完成synchronize的所有功能,更精确的线程语义和更好的性能。手动释放锁。

Java中的线程有四种状态分别是:就绪、运行、挂起、结束

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

2。触发器的作用?

  答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。

 

3。索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

 

数据库三范式:

第一范式,字段具有原子性,不可再分            

第二范式,字段具有原子性,不可再分,数据库表中每一行可以被唯一地区分

第三范式,每一列只有一个值,每一行都能区分,每一个表都不包含其它表已经包含的非主关键字信息

5。什么是事务?什么是锁?

答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

Oracle数据库支持READ COMMITTED和 SERIALIZABLE这两种事务隔离级别。所以Oracle不支持脏读

一、事务的基本要素(ACID)

  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

   2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

   3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

   4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

 

二、事务的并发问题

  1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

  2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

  3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

  小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

 

三、MySQL事务隔离级别

事务隔离级别脏读不可重复读幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

mysql默认的事务隔离级别为repeatable-read

6。什么叫视图?游标是什么?

答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。

  游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值