当前位置: 主页 > JAVA语言

java中的事物-人为事物和自在事物

发布时间:2023-02-13 10:24   浏览次数:次   作者:佚名

1、overload和override有什么区别? 重载方法可以改变返回值的类型吗?

Overload:重载 Override:重写

重载:在同一个类中,方法具有相同的名称但参数列表不同。 无论返回类型如何。

Override:存在于父子类中,或者存在于子父接口中,方法名相同,参数列表相同。

遵循“两同两小一大”原则:

1.两个相同:相同的方法名,相同的参数列表

2.两小:a:派生类方法返回值类型小于等于超类方法返回值类型

void 和原始类型必须相等

小于或等于引用类型时

b:派生类方法抛出的异常小于等于超类方法抛出的异常

3:一大:派生类的访问权限大于等于超类的方法

重载方法可以改变返回类型,因为它与返回类型无关。

2、switch可以对byte起作用吗,对long起作用吗,对String起作用吗?

它可以应用于字节,但不适用于长

switch可以是String,(可以用JDK1.7重新串)

switch可以作用于:byte、short、int、char、string、枚举类型,其他类型不允许

switch可以作用于:byte、short、int对应的封装类

switch 不能应用于:long、double、float、boolean 及其包装类

3.简述static和final的用法

静态:修改属性、方法、代码块

(1)静态属性:也可以称为类变量类名。 要访问的属性名称

(普通类变量与对象无关,只与类有关)

注意:吕中的实例变量是在创建对象时初始化的,static修饰的属性,即类变量,是在类加载时创建并初始化的。 类加载过程执行一次。 也就是说,类变量只会被创建一次。

(2)静态方法:类名。 方法名直接访问

注意:静态修饰的方法不能直接访问本类的非静态(static)成员(包括方法和属性)。 该类的非静态方法可以访问该类的静态成员(包括方法和属性),也可以调用静态方法。 修饰的变量、方法、类。

final:修改变量、类、方法

(1) 修改变量

final修饰的成员变量是常量(常量名大写),一旦赋值就不能改变

修改局部变量:修改基本数据类型-->变量的值不能改变

修饰引用 --> 引用只能指向一个固定的对象

修改实例变量:默认值不生效,可以重新赋值

(2)修改方法:不能被子类重写

(3)修饰类:不可继承

默认情况下,final 类中的所有方法都是 final

注意:final,不能用来修饰构造函数

4、一个JAVA源文件中可以包含多个类吗,有什么限制?

一个.java文件可以写多个类,但是piblic修改的类只有一个!

5.编写冒泡排序的算法

for(int i=0;iarr[j+1]){//每次都是和它下一个元素比
         int t =arr[j];
         arr[j]=arr[j+1];
         arr[j+1]=t;
       }
    }
 }
   

冒泡排序思路:

1. 比较相邻元素。 如果第一个大于第二个,则交换它们。

2. 对每一对相邻的元素做同样的事情,从开始的第一对到最后的最后一对。 这一步做完后,最后一个元素就是最大的数。

3. 对除最后一个元素之外的所有元素重复上述步骤。

4. 每次越来越少的元素继续重复以上步骤,知道没有一对数可以比较了。

JAVA有多少种数据类型? 有哪些基本类型? 以及各自占用的字节数?

两种数据类型:原始类型和引用类型

基本型:

数据类型

字节数

范围

字节

1个

-128——127

短的

2个

-32768——32767

整数

4个

-2^31——2^31-1

长的

8个

-2^63 - 2^63-1

漂浮

4个

双倍的

8个

布尔值

1个

字符

2个

6.抽象类和接口有什么区别

抽象类(abstract class)

界面(界面)

实例化

不能

不能

种类

一个继承关系,一个类只能使用一次继承关系。可以实现多个接口

一个类可以实现多个接口

数据成员

可以有自己的

static不可修改,即必须是static final,这里一般不定义

方法

可以私有,非抽象方法必须实现,可以定义构造函数,可以有抽象方法和具体方法

不能是private,默认是public,抽象类型,完全抽象,没有构造函数,方法是抽象的,没有方法实现

多变的

可以是私有的,变量有默认类型,其值可以在子类中重新定义,也可以重新赋值

它不能是私人的。 默认为public static final,必须给出其初始值。 它不能在实现类中重新定义,它的值也不能改变。

设计理念

表示一个“is-a”关系

表示“like-a”关系

实现方法

子类使用extends关键字继承抽象类。如果子类不是抽象类,他需要提供抽象类中声明的所有方法的实现

子类使用implements来实现接口。他需要提供接口中声明的所有方法的实现

影响

提取相同的东西,即复用

为了固化程序模块的契约,就是降低耦合度

1.相似之处

A:都是抽象类,都不能实例化

B:接口实现类和抽象类的子类都必须实现声明的抽象方法。

2. 差异

A:接口要实现,要用implements,抽象类要继承,要扩展。

B:一个类可以实现多个接口,但是一个类只能继承一个抽象类。

C:接口强调具体功能的实现,而抽象类则强调所有权关系。

D:虽然接口实现类和抽象类的子类都必须实现相应的抽象方法,但实现形式不同。 接口中的每个方法都是一个抽象方法,只是一个声明(declaration, no method body),实现类必须要实现。 可以选择性地实现抽象类的子类。

7.类的基本特征是什么? 每个功能的优点?

类具有封装、继承和多态性。

封装:类的封装为类的成员提供公共的、默认的、受保护的和私有的访问权限。 目的是隐藏类中的私有变量和类中方法的实现细节。

继承:允许通过继承原类的部分或全部特性来生成新的类。 原来的类称为父类,生成的新类称为子类。 子类既可以直接继承父类的共性,又可以创造出其独特的个性。

多态性:是指基类中定义的属性和方法被子类继承后,可以具有不同的数据类型或表现出不同的行为。 多态有两种表现形式:重载和覆盖。

8. Error和Exception有什么区别?列出你见过的Exception,并简单描述

error 表示程序不必处理的系统级错误和异常。

是一个严肃的问题,其中的答案不是不可能的,而是困难的;

比如内存溢出,不可能指望程序去处理这样的情况;

exception表示程序需要捕获或处理的异常。

是设计或实施问题; 也就是说,它表示如果程序允许

永远不会发生的情况。 常见的例外是:

操作空引用时会出现此错误:NullPointerException;

数据格式转换出现问题时出现异常:NumberFormatException;

转换类型不匹配时发生异常:ClassCastException;

数组下标越界:ArrayIndexOutOfBoundsException;

9、java会不会有内存泄漏?请简单描述一下

内存泄漏是指系统中无法回收的内存,有时会导致内存不足或系统崩溃。 Java有内存泄漏

内存泄漏在 Java 中当然意味着:有些对象是无用的,但不能被垃圾收集器回收。

而且即使有内存泄漏问题,也不一定会表现出来。

自己实现栈数据结构可能会出现内存泄漏。

10、多线程的实现方式有几种,都是什么? 有几种实现同步的方法,它们都是什么?

实现多线程有两种方式:继承Thread类或者实现Runnable接口。

实现同步的方式也有两种:一种是时间同步方式,一种是同步代码块方式。

同步方法就是在方法返回类型前加上synchronized关键字

同步代码块synchronized(这里写需要同步的对象){需要多线程同步执行的代码片段}

互斥锁:当使用多个synchronized锁来锁定多个代码片段,且指定的锁对象都相同时,这些代码片段是互斥的。 即:多个线程不能同时执行。

死锁:以两个线程为例:当两个线程各自持有锁,等待对方先释放锁时,就会形成僵局,导致程序卡住,无法继续后续执行。 这种脱机称为死锁

要解决死锁:

1.尽量避免在等待持有另一个锁的同时持有一个锁(避免同步嵌套)

2.当无法避免synchronized嵌套时,需要保证多个线程锁对象的持有顺序必须一致。

即当线程A在持有锁1的同时持有锁2时java中的事物java中的事物,线程B也需要依次持有锁2。

11. sleep() 和 wait() 有什么区别?

区别:

1、Thread类的方法:sleep()、yield()等。

对象方法:wait()和notify()等。

2. 每个对象都有一把锁来控制同步访问。 Synchronized 关键字可以与对象的锁交互,实现线程同步。

sleep方法不释放锁,

wait 方法释放锁,以便其他线程可以使用同步控制块或方法。

3.wait、notify和notifyAll只能用在同步控制方法或同步控制块中,而sleep可以用在任何地方

4.sleep必须捕获异常,而wait、notify和notifyAll则不需要捕获异常

12、请说出集合类中List、Map、Set的区别

List和Set继承了Collection接口,而Map没有;

List中存储的元素是有序的,可以重复;

集合中存储的元素是无序且不可重复的;

键值对存储在Map中,其键不允许重复,但值可以重复

13、Collection和Collections有什么区别?

Collection是java.util下的一个接口,是各种集合的父接口。

继承及其接口主要包括Set和List; Collections是java.util下的一个类,

它是集合的辅助类,提供了一系列静态方法来实现对各种集合的查找、排序、线程安全等操作。

14.说说java与你所知道的其他语言相比的优势。

Java 是一种面向对象的编程语言,用于编写跨平台应用程序。 Java技术具有出色的通用性、高效性、平台可移植性和安全性,被广泛应用于PC、数据中心、游戏机、科学超级计算机、手机和互联网,拥有全球最大的专业开发者社区。

Java 是一种功能齐全的通用编程语言,可用于开发可靠且要求苛刻的应用程序。

Java是纯面向对象的开发,功能强大,分支众多。 没有Java做不到的软件。 C/S 或 B/S。 在功能上,没有语言可以与 java 相提并论。

C是过程式编程,往往会导致所谓的单一程序,即所有的功能只能包含在少数几个(通常是一个)代码模块中。 当然,C语言也有自己的不足,比如:C语言的语法限制不是太严格,对变量的类型限制不严格,影响程序的安全性,没有检查出的下标bounds in the number family等。从应用的角度来看,C语言比其他高级语言更难掌握。

15.谈谈你对面向对象的理解?

Java 是一种纯面向对象的语言。 面向对象编程模式将现实世界中的一切都视为一个对象。 例如,人是物体,汽车、飞机、鸟类等都是物体; 以人的思维方式为中心去认识和思考问题。 每个对象都有自己的状态特征(也称为属性)和行为特征(方法)。 Java通过对象之间的行为交互来解决问题。

所谓面向对象就是把我们的程序模块化、对象化,把具体事物的特征属性和通过这些属性实现某些动作的具体方法放到一个类中,这就是封装。

封装是我们所说的面向对象编程的特征之一。除​​了继承和多态

Java面向对象的三大特点是什么

封装(面向对象程序设计的核心思想):封装就是将一个对象的属性和行为特征封装成一个程序单元(即类),隐藏实现细节,展示对象提供的功能通过公共方法类。 对象的内聚性降低了对象之间的耦合度。

继承:对原有类的扩展,是指从已有的类中派生出新的类。 新类可以吸收已有类的数据属性和行为,可以扩展新的功能。

多态性:它基于继承。 意思是允许不同类的对象响应同一个消息,根据创建的对象实例调用不同的方法。 本质是对象的行为是在编译时和运行时决定的。 例如,子类类型的对象可以赋值给父类类型的引用变量,但在运行时仍然表现出子类的行为特征(在内存中运行,new 的一个实例)。 换句话说,相同类型的对象在执行相同的方法时可以表现出不同的行为特征。

16.简述java的跨平台原理

java源程序(.java文件)被编译器编译成Class文件(字节码文件),而他的class文件是基于字节码(字节存储的文件),而字节码文件就是描述虚拟的集合程序要运行的指令。 这些虚拟指令集与任何平台无关。 java虚拟机识别(只需在不同平台部署相应的JRE,运行JVM即可)

17. 有了基本数据类型,为什么还需要包装类型?

我们知道Java是一门面向对象的编程语言,基本类型不具备对象的属性。 为了使基本类型具有对象的特性,出现了包装类型(比如我们在使用集合时,必须使用包装类型,而不是非基本类型),相当于对基本类型进行了“包装”,使得它具有对象的性质,并为其添加属性和方法,丰富了基本类型的操作。

另外,当需要在ArrayList和HashMap里面放东西的时候,int、double等基本类型是不能放的,因为容器里面都是装的对象,然后就需要这些基本类型的封装类型。

18.告诉我“==”和equals方法有什么区别?

(1)==:对于基本类型,比较的是值是否相等

对于引用类型,比较的是内存地址是否相等

(2)equals:调用equals()时,默认比较还是==(即比较地址),没有引用意义。

所以经常重写equals()来比较具体的属性值

注意:java类(String)已经重写了equals(),但是我们定义的类必须自己重写equals()

在派生类中覆盖 equals() 的基本规则:

a:两个对象必须是同一类型,如果类型不同则返回false

b:如果参数对象为null,则返回false

c:原则上两个对象需要比较对象的属性是否相同

19. 说说java中的集合? **

主要分为两类:Collection和Map

1)集合:是单列集合的顶层父类,是一系列独立的元素,遵循一个或多个规则。

List必须按照插入顺序保存元素,而Set不能有重复的元素。 即Collection分为这两类。

a:List是一个有序的集合,可以存储重复的元素,每个元素都有自己的索引。 第一个元素的索引值为 0。

List集合的实现类有LinkedList、ArrayList、Vector、Stack

java.util.ArrayList:内部使用数组实现,查询性能更好

java.util.LinkedList:内部使用链表实现,增删性能更好,首尾增删性能最佳

b:Set集合是不允许有重复元素的集合。

Set的实现类有HashSet和TreeSet。 HashSet依赖于HashMap,实际上是通过HashMap来实现的; TreeSet依赖于TreeMap,实际上是通过TreeMap实现的

2)Map:是双列集合的顶级父接口,是一个映射接口,即key-value键值对。 允许使用键来查找对应的值,从某种意义上说,他将数字和对象联系在一起。 Map中的每个元素都包含“key”和“key”对应的“value”值。

20、String、StringBuffer、StringBuilder有什么区别?

1.首先说一下运行速度,或者说执行速度。 在这方面,运行速度为:StringBuilder>StringBuffer>String

2.谈谈线程安全

在线程安全方面,StringBuilder是线程不安全的,而StringBuffer是线程安全的

String:用于少量的字符串操作

StringBuilder:适合单线程下对字符缓冲区进行大量操作

StringBuffer:当多个线程对字符缓冲区进行大量操作时使用

21.ArrayList和LinkedList有什么区别?

1.ArrayList实现了一种基于动态数组的数据结构,LinkedList实现了一种基于链表的数据结构

2、随机访问get和set,ArrayList肯定比LinkedList好,因为LinkedList需要移动指针。

3.对于增删操作add和remove,linkedList比较占优势,因为ArrayList需要移动数据。

22.说说HashMap和HashTable的区别? **

1)继承的父类不同:HashMap继承自AbstractMap类,HashTable继承自Dictionary类,已废弃。 两者都实现了 Map 接口。

2)线程安全不同:HashMap线程不安全,HaspTable线程安全

3)contains方法不同:HashMap没有contains方法,但是包含了containsValue和containsKey方法; HashTable保留了contains方法,效果和containsValue一样,还包括containsValue和containsKey方法。

4)是否允许空值:HashMap允许key和value为空,使用containsValue和containsKey方法判断是否包含对应的键值对; HashTable键值对不能为空,否则会报空指针异常

23.说说线程的几种实现方式?

扩展线程

实现 Runnable

实现可调用

Runnable 和 Callable 的区别在于:

1)Callable指定的方法是call(),Runnable指定的方法是run()。

2)Callable任务执行后可以返回值,而Runnable任务不能返回值

3)call方法可以抛异常,run方法不能

4) 运行 Callable 任务得到一个 Future 对象,它代表了一次计算的结果。

24.说说启动线程的几种方式?

1) 将该类声明为Thread 的子类。 该类要重写Thread类的run方法,然后在run方法中填写相应的逻辑代码。

2)实现Runnable接口,编写run方法。 创建线程相比继承Thread类的优势在于,以实现接口的方式创建线程可以更好的扩展类。 这个类可以继承其他类来扩展自己的需求。 相比第一种方式更加灵活和可扩展

实现Callable接口创建线程和Runnable接口的区别在于,如果想在线程执行后得到一个有返回值的线程,实现Callable接口

25.你用过线程并发库吗?

java5以后有了线程池功能。 在介绍线程池之前,我们先简单了解一下线程池的概念。

线程池是多线程的一种形式,其中任务在处理过程中被添加到队列中,然后在创建线程后自动启动。 线程池线程都是后台线程,每个线程使用默认栈大小,以默认优先级运行,处于多线程单元。 如果线程在托管代码中空闲(等待事件),线程池将插入另一个工作线程以保持所有处理器忙碌。 如果所有线程池线程都处于忙碌状态,但队列中仍有工作,则将创建新的工作线程至最大值,如果超过最大值则排队。 (相当于雇几个客服,客服相当于线程)

Java提供四种静态方法通过Executors创建四个线程池

1) newCachedThreadPool 创建一个可缓存的线程池。 如果线程池长度超过处理需要,可以灵活回收空闲线程。 如果没有回收,就会创建一个新的线程。

2)newFixedThreadPool创建一个定长线程池,可以控制最大并发线程数,超出的线程会在队列中等待。

3)newScheduledThreadPool创建一个支持定时和周期性任务执行的定长线程池。

4)newSingleThreadExector创建单线程线程池,只会使用唯一的工作线程执行任务,保证所有任务按指定顺序执行(先进先出,后进先出,优先级)

26.静态变量和实例变量有什么区别?

静态变量也叫类变量,前面有static修饰符。 它可以直接用列表或对象调用。 而且,所有对象的同一个类变量共享同一个内存空间。

实例变量也称为对象变量,没有静态修饰符。 只能通过对象调用,所有对象的同一个实例变量共享不同的内存空间。

区别:

静态变量由所有对象共享。 如果一个对象改变了它的值,其他对象将获得它的值并获得改变后的值。

实例变量对每个对象都是私有的。 如果一个对象改变了它的值,它不会影响其他对象的值的结果。 其他对象仍将获得实例变量在开始时分配的值。

27、try{}中有一个return语句,那么finally{}中的代码会不会在这个try之后紧接着执行,什么时候执行,在return之前还是之后?

它会在try{}中执行return,没有数据返回时,再执行finally{}中的代码,然后返回。所以finally{}是在return中间执行的

28、同步和异步有什么异同,都用在上面的案例中吗?例如

如果数据会在线程之间共享,比如正在写入的数据可能稍后被另一个线程读取,或者正在读取的数据可能已经被另一个线程写入,那么这些数据就是共享数据,必须同步访问

当一个应用程序在一个对象上调用一个需要很长时间执行的方法并且不希望程序等待该方法的返回时,它应该使用异步编程。 在许多情况下,使用异步方法往往更有效。

29.java中有多少种流? JDK 为每一种流都提供了一些抽象类用于继承。 请告诉我他们分别是哪几类?

Java中有两种流:字节流和字符流。

字节流:java.io.InputStream、java.io.OutputStream

字符流:java.io.Reader、java.io.Writer

java中的其他各种流都是从他们派生出来的

30、什么是交易处理?

事务是一种确保将多个 SQL 语句作为单个工作单元处理的机制。 事务具有以下功能:

* 一致性:同时查询和更新不会相互冲突,其他用户看不到已经改变但还没有提交的数据

* 可恢复性:一旦系统出现故障,数据库将自动完全恢复未完成的事务。

31.&和&&有什么区别?

& 和 && 都可以作为逻辑运算符,代表逻辑与。 只有运算符两边的表达式都为真,结果才为真; 否则,结果为假。

另外,&&还有一个短路功能,即当&&左边的表达式结果为假时,&&右边的表达式将不会被求值,结果必须为假。 例如对于if(str!=null && !str.equals("")),当str为null时,不会对&&右边的表达式进行操作,否则会出现空指针异常。

& 也可以用作按位运算符。 当&两边的表达式都不是布尔类型时,&表示按位与。

32.数组有length()方法吗? String 有 length() 方法吗?

数组中没有length()方法,但是数组中有一个length属性,用来表示数组的长度。

String中有个length()方法可以获取字符串的长度

33.Constructor可以被覆盖吗?

构造函数Constructor不能被继承,所以Override不能被重写,但是Overload可以被重载。

构造函数不能被继承,所以构造函数不能被重写。 每个类都要有自己的构造函数,负责构造属于自己的部分结构。子类不会重写父类的构造函数,但必须负责一开始就调用父类的构造函数

34. 构造函数如何工作?

Java构造实例的顺序是这样的:

1、分配对象空间,将对象中的成员初始化为0或空。 Java 不允许用户操作具有不确定值的对象。

2.执行属性值的显示初始化

3.执行构造函数

4.将变量与堆中的对象相关联

35.super和this有什么区别?

不同之处:

1)super()主要是对父类构造函数的调用,this()是对重载构造函数的调用

2)super()主要用在继承父类的子类的构造函数中,在不同的类中使用:this()主要用在同一个类的不同构造函数中

相同点:

super()和this()都必须在构造函数的第一行调用,否则报错

36.什么是GC? 为什么会有GC?

GC是垃圾回收的意思,内存处理是程序员容易出问题的地方。

忘记或错误的内存恢复将导致程序或系统不稳定甚至崩溃。 Java提供的GC功能可以自动监测对象是否超出范围,达到自动回收内存的目的。

Java 语言不提供释放已分配内存的显式方法。 Java 程序员不必担心内存管理,因为垃圾收集器会自动管理它。 要请求垃圾收集,可以调用以下方法之一:System.gc() 或运行时。 getRuntime().gc(),但 JVM 可以屏蔽显示的垃圾收集调用。

垃圾回收可以有效防止内存泄漏,有效使用可用内存。 垃圾收集器通常作为一个单独的低优先级线程运行。 在不可预料的情况下,堆内存中已经死亡或长时间未被使用的对象被清除并回收。 程序员无法实时调用垃圾收集器。 一个对象或所有对象都被垃圾收集。

在Java早期,垃圾回收是Java最大的亮点之一,因为服务端编程需要有效防止内存泄漏。 然而,随着时间的推移,Java的垃圾回收机制也成为了饱受诟病的东西。 移动智能终端用户通常感觉IOS系统的用户体验要好于Android系统。 其中一个深层次的原因是Android系统垃圾回收的不可预测性。

37. Can an interface inherit an interface? Can abstract classes implement (implements) interfaces? Can an abstract class inherit from an entity class?

Interfaces can inherit interfaces.

Abstract classes can implement (implements) interfaces

Abstract classes can inherit entity classes, but only if the entity class must have a clear constructor

38. Can an inner class refer to the member codes of its containing class? 有什么限制吗?

absolutely okay. If it's not a static inner class, there's no limit!

If the static nested class is regarded as a special case of the inner class, then in this case, the ordinary member variables of the outer class cannot be accessed, but only the static members of the outer class

39. The optimization problem of mysql database

1) Select the most applicable field attributes

MySQL can well support the access of large amounts of data, but generally speaking, the smaller the table in the database, the faster the queries executed on it will be.Therefore, when creating a table, in order to live better performance, we can set the width of the fields in the table as small as possible

2) Use joins (JOIN) instead of subqueries (Sub-Queries)

MySQL has supported SQL subqueries since 4.1. This technique uses the SELECT statement to create a single-column query result, and then uses this result as a filter condition in another query.For example, if we want to delete customers who do not have any orders in the customer basic information table, we can use the subquery to first fetch all the customer IDs that issued orders from the sales information table, and then pass the results to the main query

3) Use union (UNION) instead of manually created temporary table

MySQL has supported union queries since version 4.0, which can combine two or more select queries that need to use temporary tables into one query. At the end of the client's query session, the temporary table will be automatically deleted, so as to ensure that the database is tidy and efficient.When using union to create a query, we only need to use UNION as a keyword to connect multiple select statements. It should be noted that the number of fields in all select statements must be the same

4) things

Another important function of transactions is that when multiple users use the same data source at the same time, it can use the method of locking the database to provide users with a secure access method, which can ensure that the user's operations will not be interfered by other users .

5) Lock table

Although transactions are a very good way to maintain database integrity, they sometimes affect database performance because of their exclusiveness, especially in large application systems. Since the database will be locked during the execution of the transaction, other user requests can only wait temporarily until the transaction ends. If a database system is used by only a few users, the impact of transactions will not be too much of a problem. But if there are tens of thousands of users accessing a database system at the same time, such as accessing an e-commerce website, there will be serious response delays.

6) Use foreign keys

The method of locking the table can maintain the integrity of the data, but it cannot guarantee the criticality of the data. At this time we can use foreign keys.

7) Use indexes

Indexing is a common way to improve database performance. It allows the database server to retrieve specific rows much faster than without an index, especially when the query statement contains commands such as MAXO(), MIN(), and ORDERBY. The performance improvement is even more pronounced.

8) Optimized query statement

In most cases, using an index can improve the query speed, but if the SQL statement is not used properly, the index will not be able to play its due role.

40. Steps for JDBC to connect to the database

1) Load (register) the database driver (to the JVM).

2) Establish (obtain) database connection

3) Create (get) the database operation object.

4) Define the SQL statement for the operation.

5) Perform database operations

6) Get and manipulate the result set

7) When the object is closed, the database resources are reclaimed (close the result set ---> close the database operation object ---> close the connection)

41. The difference between statement and preparestatement

In JDBC applications, you should always use PreparedStatement instead of Statement

1. Code readability and maintainability

Although using PreparedStatement instead of Statement will add a few more lines of code, such code is much higher in terms of readability and maintainability than code directly using Statement

2. PreparedStatement can improve performance as much as possible

3. The most important point is that the security is greatly improved

42. What are views, indexes, constraints? View (view): The stored SLECT statement, based on the query results of the base table. Views are also called virtual tables. It is generally not recommended to insert or update content into a view, because the view is subject to the field restrictions of the base table. Not very useful in mysql. Index: An index is a special file (the index on the InnoDB data table is an integral part of the table space), and they contain reference pointers to all records of the data table. The purpose of the index is to improve the speed of query execution.constraint

1) Domain constraints: data type constraints

2) Foreign key constraints: reference complete constraints

3) Primary key constraint: Gradually, a field can uniquely represent the entity to which this field belongs, and it is not allowed to be empty. Those that meet this condition are called candidate primary keys. A table can have only one primary key. 2 entities are not allowed to have the same value on the primary key.

Unique constraint: A field in each row is not allowed to have the same value. But can be empty. More than one can appear in the table.

Check constraints: custom constraints. The function on mysql is relatively weak.

43. What operations are included in DDL and what operations are included in DML?

DML (data manipulation language) data manipulation language:

They are SELECT, UPDATE, INSERT, DELETE, just like its name, these 4 commands are the language used to operate on the data in the database.

DDL (data definition language) database definition language:

DDL is more than DML. The main commands are CREATE, ALTER, DROP, etc. DDL is mainly used to define or change the structure of tables (TABLE), data types, links and constraints between tables, etc. Initialization work, most of them are established table when used

DCL (Data Control Language) data control language:

is the database control function. It is a statement used to set or change database user or role permissions, including (grant, denv, revoke, etc.) statements.在默认状态下,只有sysadmin,dbcreator,db owner 或db securityadmin等人员才有权力执行DCL

44. Oracle 与mysql有什么区别?

mysql:

mysql没有类似oracle的构造多版本数据块的机制,只支持read commited的隔离级别。

一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。

session更新数据时,要加上排他锁,其他session无法访问数据。

三、事务

oracle很早就完全支持事务。

mysql在innodb存储引擎的行级锁的情况下才支持事务。

四、数据持久性

甲骨文

保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,

如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。

mysql:

默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。

五、提交方式

oracle默认不自动提交,需要用户手动提交。

mysql默认是自动提交。

六、逻辑备份

oracle逻辑备份时不锁定数据,且备份的数据是一致的。

mysql逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用。

七、热备份

oracle有成熟的热备工具rman,热备时,不影响用户使用数据库。即使备份的数据库不一致,也可以在恢复时通过归档日志和联机重做日志进行一致的回复。

mysql:

myisam的引擎,用mysql自带的mysqlhostcopy热备时,需要给表加读锁,影响dml操作。

innodb的引擎,它会备份innodb的表和索引,但是不会备份.frm文件。用ibbackup备份时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库。但此工具是收费的。

innobackup是结合ibbackup使用的一个脚本,他会协助对.frm文件的备份。

八、sql语句的扩展和灵活性

mysql对sql语句有很多非常实用而方便的扩展,比如limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from。

oracle在这方面感觉更加稳重传统一些。

九、复制

oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。

mysql:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。

十、性能诊断

oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等

mysql的诊断调优方法较少,主要有慢查询日志。

十一、权限与安全

mysql的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。

oracle的权限与安全概念比较传统,中规中矩。

十二、分区表和分区索引

oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。

mysql的分区表还不太成熟稳定。

十三、管理工具

oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。

mysql管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性