1、Java语言的特点是什么?
【答】Java语言特点:简单、面向对象、跨平台、安全性健壮性、多线程、垃圾回收。
2、如何编译和执行java文件?产生帮助文档用什么命令?
【答】编译:javac 文件名
执行:java 类名
产生帮助文档:javadoc
注:JDK中的三个命令。
3、虚拟机的工作流程是什么?
【答】编译源文件(.java)—>编译成字节码文件(.class)—>类加载(启动类库、扩展类库、用户自定义类库)—>字节码校验à解释器—>操作系统
4、main方法怎么书写?
【答】public static void main(String [ ] args){
}
5、什么是标识符?标识符有几种?标识符的命名规则是什么?标识的命名规范是什么?
【答】凡是可以命名的地方都称为标识符。通常使用标识符去命名类、变量、方法。
标识符分为两种:用户标识符、系统标识符(关键字)。
标识符命名规则:字母、数字、下划线及$组成,不能以数字开头,名字不能与关键字重名,同一方法中变量名不得重复。
标识符命名规范:①望文知意、②方法名或变量名首字母小写,采用驼峰命名法、③类名首字母大写,采用驼峰命名法、④常量全部大写。
6、Java中基本数据类型有哪些?各占几个字节?Java中引用数据类型有哪些?基本数据类型和引用数据类型的区别是什么?
【答】Java中数据类型分两种:基本数据类型、引用数据类型。
基本数据类型:
byte(字节型)1个字节 -128~127;
short(短整型)2个字节;
int(整型)4个字节;
long(长整型)8个字节;
float(单精度浮点型)4个字节;
double(双精度浮点型)8个字节;
boolean(布尔型)1个字节;
char(字符型)2个字节;
引用数据类型:类、接口、数组。
区别:基本数据类型中存放的是具体的数据,而引用数据类型中存放的是对象的地址。
7、Java中char类型用什么编码?
【答】Unicode编码规则
8、变量三要素是什么?
【答】数据类型、变量名、变量值
9、Java的注释有几种?
【答】单行注释(/注释内容/)、多行注释(/注释内容/)、文档注释(/*注释内容/);
单行注释和多行注释一般用于方法和语句块中。是对某一行或某几行代码书写的注释。
文档注释用于类、方法、属性中。书写王文档注释后,可以通过javadoc产生帮助文档。
10、定义常量用什么关键字?
【答】final关键字
注:final int x=9;表示x变量不能重新赋为别的值。
final Jframe x=new Jframe();表示x变量不能指向别的对象。
11、什么是对象?什么是类?对象和类的关系是什么?
【答】对象是存在的具体实体,具有明确的行为和特征。万物皆对象,对象因我关注而产生。
类是一组具有相同特征和行为的对象的集合;
类是对象的抽象,对象是类的实例(具体的体现)。
12、变量按作用域划分有哪几种?局部变量使用时需要注意什么问题?
【答】变量按作用域划分:局部变量、成员变量(属性)、静态变量(类变量)。
局部变量书写在方法和语句块中,存放在栈空间中,当方法或语句块结束,局部变量释放。
成员变量书写在类中,方法外面。存放在堆空间中。成员变量是对象的组成部分,随对象产生而产 生,随对象销毁而销毁。
静态变量书写在类中,书写在外面,并且加上static关键字。存放在数据段中。一旦创建,常驻内存不会消失。
局部变量使用时需要注意:①必须初始化;②需要注意作用域;③局部变量修饰符只能是默认或final。
13、静态变量和成员变量有什么区别?
【答】①静态变量是共享的,多个对象共享一个静态变量,它的改变会影响所有的对象。而成员变量是对象的组成部分,不同对象都有各自的成员变量,一个对象成员变量的改变,不会影响别的对象。
②静态变量在类加载时产生,产生在对象之前。而成员变量在创建对象时产生。
③静态变量存放在数据段中,常驻内存不会消失。而成员变量存放在堆空间中,随对象产生而产生,随对象销毁而销毁。
④静态变量可以通过类名.和对象.的方式访问。而成员变量只能通过对象.的方式访问。
14、垃圾回收GC回收什么样的对象?
【答】回收的是没有变量指向,且没有被使用的对象。
15、什么是包?包的作用是什么?如何导入别的包中的类?什么样的类不需要导入?
【答】包就是文件夹,包的作用做到信息的隐藏,利用包组织相关的类。
导入包:import 包名.类名/包名.*。
Java.lang 包中的类和同包中的类不需要导入。
16、静态方法能直接调用成员方法或属性吗?为什么?
【答】不能,因为静态方法加载在对象之前,不能访问内存中还没有创建的东西。
17、当传递和返回对象,传递和返回的是什么?
【答】引用。
18、什么是构造方法?构造方法的作用是什么?
【答】构造方法是一个特殊的方法,方法名与类名相同。没有返回类型。
作用:①为对象分配空间;
②如果该类没有加载,则加载类;
③初始化成员变量;
④返回对象的引用。
19、创建对象有几种方式?
【答】①通过new关键字创建;
②通过反射的方式创建;Class对象.newInstance();
③反序列化;
④克隆(调用Object中定义的clone(),被克隆的类需要实现Cloneable接口(lang包))。
⑤使用Constructor类的newInstance方法 可以调用有参的和私有的构造方法
20、this和super各代表什么含义?
【答】this表示当前对象,super表示父类的对象。
super()表示调用父类的构造方法产生父类的对象。
21、数组如何定义?
【答】
int[]array=new int[5];
int[]array={1,3,5};//只能在定义语句中使用
int[]array=new int[]{1,3,5}
22、数组、字符串、集合各自的长度如何获得?
数组.length;属性
字符串.length();方法
集合.size();方法
23、数组有哪些特点?
【答】①数组是一段连续的内存空间,以下标查找元素,下标从0开始,最大下标为长度-1;
②数组元素都是变量;
③数组元素的数据类型为定义数组时的类型;
④数组创建时会对每个元素进行初始化;
⑤数组定长性,数组创建后,长度不能发生变化。
24、继承用什么关键字?子类继承父类,构造方法第一句应该如何书写?
【答】继承使用extends关键字。子类继承父类,构造方法第一句必须为super();
注: 创建父类对象,在父类对象基础上扩展子类特有的属性和方法。
25、重写和重载的区别是什么?重写有什么要求?
【答】重载发生在同一个类中,两个方法的方法名相同,参数列表不同(参数的个数、顺序、类型),通过实参来决定调用哪个重载方法。
重写发生在父类和子类之间。子类方法名和父类相同,参数列表相同,返回类型也相同。子类方法重写了父类方法后,调用时会优先调用子类重写的方法。
重写时,要求子类方法修饰符要大于或等于父类方法。子类方法抛出的异常要小于或等于父类方法。
26、Java中一个类能同时继承多个类吗?所有类的父类是什么?
【答】Java中一个类同时只能继承一个类,可以实现多个接口。所有类的父类(超类)为Object类。
27、构造方法能继承吗?构造方法能重载吗?
【答】构造方法不能被继承,但是构造方法需要被子类构造方法调用。构造方法可以重载。
28、final、finally、finalize的区别是什么?
【答】final为修饰符,修饰类表示该类不能被继承,修饰方法表示该方法不能被重写,修饰变量则表示该变量值不能改变(常量)。
finally是语句块,表示无论是否抛出异常,都会执行的语句块。
finalize是方法,在Object中定义,表示垃圾回收该对象之前,需要调用的方法。一般用该方法回收资源。
29、访问修饰符有哪些?各自作用范围是什么?
【答】private:私有的,只有本类可以访问;
缺省(默认):同包中的类可以访问;
protected:同包或不同包的子类可以访问;
public:公开的,所有类都可以访问。
30、静态块和实例化块分别在什么时候执行?
【答】静态块在类加载时执行,且只执行一次。
实例化块每产生一个对象,都会执行一次,在super()之后执行。
31、什么是内部类?内部类class文件是怎样命名的?
【答】在一个类中再定义一个类就是内部类,内部类相当于外部类的属性,内部类对象的产生需要依赖外部类对象。
内部类的class文件命名为:外部类名$内部类名.class。
32、什么是多态?多态有什么特点?
【答】多态是指允许用父类变量指向子类对象,允许用接口变量指向实现类对象。
特点:相同的行为,不同的实现。
33、面向对象的特征有哪些?
【答】继承、封装、多态、抽象
34、什么是抽象类?什么是抽象方法?定义抽象类的关键字是什么?
【答】如果一个方法只有定义,没有实现。那么该方法就是抽象方法。而拥有这个方法的类叫做抽象类。定义抽象类的关键字是abstract。
35、接口如何定义?实现接口用什么关键字?一个类实现接口必须做什么?
【答】定义接口使用interface,实现接口使用implements,实现多个接口,中间用逗号隔开。一个类实现一个接口,必须重写接口中的所有抽象方法。否则该类只能定义为抽象类。
36、接口中定义的方法修饰符是什么?接口中定义的变量修饰符是什么?
【答】接口中方法修饰符为:public abstract;
接口中变量修饰符为:public static final,公共的静态的常量。
37、抽象类和接口的区别是什么?
【答】①抽象类和接口都不能直接实例化,抽象类变量只能指向子类对象,而接口变量只能指向实现类对象。
②抽象类中可以有具体方法,但接口中只能是抽象方法。
③抽象类中定义的变量为普通属性,但接口中定义的变量为公共的静态的常量。
④一个类只能继承一个抽象类,但可以实现多个接口。
38、异常的API结构是怎样的?Error和Exception有什么区别?
【答】Thowable为父类,有两个子类:Error和Exception。其中Error表示错误,一般表示严重性的错误,可以捕获,但不能处理。Exception为异常,可以捕获,可以处理。
39、异常的执行顺序怎样?如果在try块中有return,finally会执行吗?
【答】先执行try块,顺序执行,如果发生异常,转到catch块中执行,同时中止try块中的其他语句,
如果在try块或catch块中有return,那么finally会在跳出方法之前执行。
40、finally是否在任何时候都会执行?
【答】不是,如果在try块或catch块中有中止虚拟机的代码(System.exit(0)),finally不会执行。
41、throw 和throws的区别是什么?
【答】throw是语句,表示显示抛出异常对象。throw new Exception();
throws是方法修饰符,表示该方法可能抛出某种异常,那么调用该方法时,需要处理该方法抛出的异常。
42、异常分为几种?如何区分?
【答】编译期异常,要求开发者必须处理,如果不处理,无法通过编译。
运行期异常,开发者可处理可不处理,如果不处理,也可以通过编译。
所有的运行期异常都是RuntimeException的子类。
43、String x = “abc” 和 String x = new String(“abc”)有什么区别?
【答】String x =”abc”; x变量指向的是数据段中的“abc”字符串常量对象。
String x =new String(”abc”); x变量指向的是堆中的字符串对象。在堆中创建字符串。
44、熟练掌握字符串常见的方法。split() trim() indexOf() substring() replace() matches()
【答】split():根据给定正则表达式拆分字符串为数组。返回字符串数组。
trim():去除字符串前后两头的空格,中间空格无法去除。
indexOf():根据给定字符查找所在字符串的第一个出现的下标,返回int下标值。
substring():根据指定下标截取子串。输出包括下标值。
replace():根据给定字符串替换为新的字符串。
matches():用于字符串与正则表达式规则进行匹配比较。
45、正则表达式中:[]、|、\d、\w、\s、+、*、?各代表什么含义。
【答】[ ]:表示匹配[]中描述的任意字符。
|:表示或者的意思。
\d:表示数字,[0-9]。
\w:表示合法标识符,[0-9A-Za-z_]。
\s:表示空格或者回车符。
+:表示一个或以上。等价于{1,}
:表示可以出现,可以不出现,也可以出现多次。等价于{0,}
?:表示可以不出现,出现只能出现一次。等价于{0,1}
46、String和StringBuffer的区别?
【答】String具有长度不可改变的特性,对String做添加、删除、替换不会改变原字符串内容,而是创建新对象。
StringBuffer是缓冲区中的对象,对StringBuffer做添加、删除、替换时,不会创建新对象。
另外StringBuffer因其实现方法中使用了synchronized关键字,所以它是线程安全的。
47、如何将字符串转化为基本数据类型?
【答】包装类名.parseXXX()方法 将字符串转换为基本数据类型;
例如:Integer.parseInt();字符串转化为整型。
48、如何将日期对象进行"2011-12-10"格式化输出?
【答】SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”);
String str = sdf.format(new Date());
49、javaBean规范有哪些内容?
【答】1、必须要有公有的无参构造方法;
2、私有属性+公有的get/set方法,进行访问和设置,属性名前两个字母不能为大写;
3、需要实现序列化接口。
50、什么是反射?
【答】在编译期并不清楚加载哪个类,类的加载时在运行期间进行的。通过反射,可以对类进行加载、探知、自审。
51、如何得到Class对象?如何利用Class对象产生该类的对象?
【答】通过类名.class
对象.getClass()
Class.forName(“类的全路径”);
Object obj = Class对象.newInstance();
52、线程和进程的区别?
【答】线程和进程都是多任务处理的方法。
进程是基于操作系统,也就是一个应用程序,进程开启都会消耗内存。
线程是基于进程的顺序控制流,是比较小的单位,一个进程拥有多个线程,多个线程共享一个进程的内部空间。
53、创建线程有几种方式?如何启动线程?调用start()和调用run()的区别?
【答】创建线程的方式:1、继承Thread类,重写run()。2、实现Runnable接口,并实现run()。
启用线程:线程启动调用start(),线程启动后,会调用run()。
调用start(),是启动线程,会在主线程基础上,开启新的子线程,多个线程交替执行。
调用run(),是普通方法调用,不会开启新的线程,会在一个方法执行完毕后再执行别的方法。
54、线程有几种状态?
【答】线程有八种状态:
新建
就绪—>调用start();
执行—>以下四种状态完成后都会回到就绪状态。
休眠—>sleep();
等待—>wait();
挂起—>yeid();
阻塞—>IO阻塞,等待用户输入内容
死亡—>run();执行完毕
55、什么是线程优先级?分为几级?
【答】当两个或以上的线程处于就绪状态时,优先级高的线程会优先得到CPU的执行。
优先级分为10级,数字越大,优先级越高。默认为5级。
56、什么是线程同步?同步会造成什么结果?
【答】当两个或两个以上的线程同时访问同一个资源时,为了避免数据混乱,只允许同一时间一个线程进行访问。
同步造成结果:1、数据安全,2、效率降低。
57、wait和sleep的区别?
【答】wait方法在Object中定义,sleep方法在Thread中定义。
wait方法只能放在同步方法或者同步块中,表示当前线程对资源进行等待。Sleep方法可以放在任何位置,表示当前线程休眠。
wait方法要释放对象锁,而sleep方法不会。
wait必须要使notify唤醒后才能继续执行。而sleep方法在休眠结束后会自动继续执行。
58、集合的作用是什么?集合框架的API结构是怎样的?
【答】集合可以对数据对象进行储存、检索、操作、传输。
集合框架父接口为Collection,有两个子接口:List和Set。另外有个单独的Map接口。
59、List、Set、Map集合各自有什么特点?
【答】List特点是线性、元素可以重复。以添加顺序排序。多个元素可以指向同一个对象。
Set特点是元素不可重复。无序,使用内部自有排序机制排序。
Map特点是键值对,一个元素包含两个对象。键对象不能重复。
60、集合元素如何添加?如何删除?如何遍历?
【答】添加:List、Set为add(); Map为put();
删除:List:remove(下标); Set:remove(对象); Map:remove(键对象);
遍历:List、Set:
for(Object obj : list/set集合){
}
Map:
Set kset=Map集合.keySet();
for(Object key : kset){
System.out.println(“键:”+key+“ 值:”+map集合.get(key));
}
集合的遍历:List集合可以通过for循环和for each 循环遍历。Set集合只能通过for each循环遍历。Map集合通过获取键的集合(map.keySet()方法),使用for each循环遍历,通过键对象的值遍历值对象的值(map.get(键对象))。
61、List接口实现类ArrayList、Vector、LinkedList的区别?
【答】ArrayList:底层由数组实现(连续空间),遍历速度快,中间插入删除元素速度慢,线程不安全。
Vector:底层由数组实现(连续空间),遍历速度快,中间插入删除元素速度慢,线程安全。
LinkedList:采用不连续空间实现,使用双向链表。集合中的每个元素不仅存储本身的值,还存储有上一个和下一个元素的内存地址。遍历速度慢,但中间插入和删除元素速度快。
62、集合如何进行排序?
【答】Collections.sort(new Comparator());由Comparator比较器接口指定排序规则。
63、awt和swing有什么区别?
【答】awt采用操作系统的风格来定义GUI组件风格,跨平台时,显示效果可能不一致。
Swing拥有自己独立的显示风格,跨平台时,显示风格一致。Swing包是awt的扩展包,swing包中的很多组件都继承awt包中的组件。
64、GUI常见布局管理器有哪些?
【答】绝对布局(null):利用组件的位置和大小定位组件。
边框布局(BorederLayout):将容器分为东西南北中五个部分,每个部分只放一个组件。当容器大小发生变化时,组件大小随之变化。边框布局是JFrame默认的布局管理器。
流式布局(FlowLayout):将组件从上到下,从左到右排列,超出容器自动换行,组件大小由组件内容决定。
网格布局(GridLayout):将容器等分为大小相等的几个部分,一个部分存放一个组件,组件随容器变化而变化。
65、如何进行事件的添加?
【答】确定事件源;
确定监听器;
注册、建立事件源和监听器的联系。
66、流按照输入输出方向分有几种?相对于什么而言?
【答】按输入输出方向分为:输入流和输出流,相对于内存而言。
当从数据源将数据读取到内存中,称为输入流,也称为读取流。
当从内存中将数据写入到数据源,称为输出流,也称为写入流。
67、流按照传输内容分有几种?各自的父类是什么?
【答】流按照传输内容分为:字节流、字符流、对象流。无论是哪一种流,本质都是字节流。但为了方便程序员更好的处理文本数据和对象数据,所以在字节流基础上做了一层封装,形成字符流和对象流
字节流,抽象父类为inputStream和outputStream。
字符流,抽象父类为reader和writer。
对象流,抽象父类为inputStream和outputStream。
68、操作流时,如果文件不存在会出现什么情况?如果流不关闭会出现什么情况?
【答】操作流时,如果文件不存在,读取流会抛出文件不存在异常,写入流时会创建新文件(文件所在目录必须存在)。如果流不关闭。不但浪费资源,还有可能导致信息写入失败。
69、如何判断一个文件是否存在?如何创建一个目录?如何知道一个目录中有多少文件?
【答】判断文件是否存在:File对象.exists();
创建新目录:File对象.mkdir();
创建文件对象File f=new File(“文件名”);
判断是否存在if(f.exists()==flase){}
创建目录f.mkdir();
创建静态变量num统计文件数量,通过lastFiles()方法获取文件目录数组,然后遍历数组,通过isFile()方法判断是否为文件,如果是则num++,如果不是则递归调用自身方法。
70、什么是对象序列化?如何实现对象序列化?
【答】当对象需要传输时,由于对象数据过于庞大,在传输之前,需要将对象打散为字节序列,以便于传输,这个过程称为序列化过程。到达目的地后,又需要将字节序列,还原成对象,这个过程叫反序列化。
实现对象序列化需要所在对象的类实现Java.io.Serializable序列化接口。
71、TCP/IP协议分为几层?
【答】应用层、传输层、网络互连层、网络接口层。
72、什么是端口?常见端口有哪些?
【答】端口就是应用层用于数据交互的通道,用于实现程序间的通信。每个应用程序都有固定的端口。
常见端口:Telnet协议tel 端口为:23;简单邮件传输协议smtp端口为:25;文件传输线协议ftp端口为21;超文本传输协议http端口为:80.
73、TCP和UDP的区别是什么?掌握TCP编程流程。
【答】TCP协议:较可靠的双向流协议,三次握手,提供消息确认,错误检测和错误恢复等服务。如果数据在传输过程中由损耗,有遗失,会要求发送方重新发送。从而确保数据的完整性。
UDP协议:比较不可靠,如果传输过程中有损耗,不会要求重发,优点是速度快。
74、JDBC是什么?JDBC的API为什么大都是接口?
【答】Java连接数据库的一套标准。该标准提供了一系列的接口,由数据库厂家实现。开发者根据接口调用厂商实现类的方法。可以屏蔽不同数据库的差异,这样无论连接什么样的数据库都是一套API。
75、JDBC开发流程是怎样的?
【答】①建立连接 ②执行SQL语句 ③关闭连接。
76、什么是XML?XML声明是怎样的?XML注释是怎样的?
【答】1、XML称为可扩展的标记语言,以标记和子标记的方式描述对象数据的语言。
2、声明:
3、注释:
77、一个格式良好的XML有哪些规定?
【答】①必须有XML声明语句;
②必须有且只有一个根元素;
③标记大小写敏感;
④属性值用引号;
⑤标记成对;
⑥空标记关闭;
⑦元素正确嵌套。
78、格式良好的XML和有效的XML有什么区别?
【答】符合XML语法规则的XML称为格式良好的XML。
有效XML除满足XML格式规范外,还要遵守DTD和Schema定义的元素规则。
79、DOM和SAX有什么区别?
【答】DOM和SAX都是解析XML的方式。
DOM是一种基于树状结构的解析方式,需要将文档读取到内存中进行解析,可以随机访问元素,大型文档可能造成内存紧张。
SAX是一种基于事件的解析方式,是一种边都边解析的方式,不需要将整个文档读取到内存,占用内存小。不能随机访问元素,只能读取不能写入。只能遍历一次。
80、什么是主键,什么是外键?
【答】主键(primary key)是一个数据库表中,每条记录的唯一标识,不能重复,不能为null。
外键(foregone key)是两个表之间建立关系的列。从表利用外键关联主表的主键,从而建立两个表之间的关系。
81、描述关系型数据库中的三种关系
【答】一对多:一条主表记录对应多条重表记录,同时一条从表记录对应一条主表记录。
一对一:一条主表记录对应一条从表记录,同时一条从表记录对应一条主表记录。
多对多:一条主表记录对应多条从表记录,同时一条从表记录对应多条主表记录。
82、如何创建数据库?如何删除数据库?如何创建表?如何删除表?
【答】创建数据库:create datebase 数据库名;
删除数据库:drop datebase 数据库名;
创建表:create table 表名;
删除表:drop table 表名;
83、数据完整性的分类
【答】1、实体完整性:保证一行的数据是有效的,不能出现两条一模一样的记录。实现方式:主键约束和唯一约束。
2、域完整性(MySQL不支持):保证一列的数据是有效的,指定列输入值的合法性。实现方式:非空约束,默认值,检查约束。
3、引用完整性:保证引用的编号是有效的。从表的外键,必须引用主表中主键的值。实现方式:外键约束。
4、自定义完整性:用户自定义规则。
84、如何定义主键约束和外键约束
【答】主键约束:primary key关键字;
外键约束:alter 从表名 add constraint (约束名)fk_1 foreign key (外键列名) references 主表名(主键);
85、外键和外键约束的区别:
【答】外键是建立两个表之间联系的列。而外键约束则是,强行要求从表的外键必须引用主表的主键。没有外键约束不代表没有外键。
86、添加、删除、修改的SQL语句如何书写?
【答】添加:insert into 表名(字段列表…)values(值列表…)
删除:Delete from 表名 where 删除条件
修改:Update 表名 set 字段名1=新值,字段名2=新值 where 修改条件
87、如何查询表全部数据?如何按字符串字段模糊查询?_和%的区别。
【答】查询表全部数据:select * from 表名
模糊查询:select * from 表名 where 列名 like “%字符串字段%”
和%的区别:“”表示一个任意字符,只匹配一个字符。“%”表示零个到多个任意字符。
88、如何去除重复记录,如何得到查询结果限定行数的记录
【答】distinct关键字去除重复记录;
显示查询结果限定行数使用limit 0,3;第一个参数表示起始记录路数,从0开始,第二个参数表示返回几条记录。
89、and和or的区别。in在什么时候使用。
【答】and表示与操作,两个条件同时满足,结果才为真。
or表示或操作,两个条件满足一个,结果都是真。
in表示在什么值之间进行选取。in中包含的是常量。
90、如何处理null值?
【答】比较一个列的值是否为null,不能用=或!=。
比较null值,只能用is null或is not null。
91、如何排序?如何表示升序或降序?
【答】排序使用order by ,默认为升序asc,降序关键字为desc。
92、聚合函数有哪些?
【答】count 统计记录数的总和。
sum 统计某个列值的总和;avg 求某个列的平均数。
**93、count()和count(列名)的区别**
【答】count(*)只要是记录都统计,count(列名)只统计非空列。
94、分组时,查询的字段可以是什么字段。
【答】查询的字段只能是分组列和聚合函数。
95、HAVING和WHERE区别
【答】都是过滤条件,where运行在分组前,因此不能执行任何聚合函数。having运行在分组后,只能用作聚合函数的过滤。
96、描述SQL查询语句执行顺序
【答】执行from—>where条件过滤—>group by分组—>执行select投影列—>having 条件过滤—>执行order by排序—>limit筛选显示。
97、内联接和外联接的区别
【答】内连接:只能查询两个表中有关联记录的数据。
外连接:可以查询一个表中的所有数据,无论该记录是否有关联记录。
98、如何进行表联接查询
【答】select 查询列 from 表名1 , 表名2 where 外键=主键
select 查询列 form 表名1 join 表名2 on 外键=主键
99、什么是JDBC
【答】JDBC:Java连接数据库的一套标准。该标准提供了一系列的接口,由数据库厂商实现。开发者根据接口调用厂商实现类的方法。这样无论连接什么样的数据库都是一套API。
100、Statement和PreparedStatement的区别
【答】都能执行SQL语句,Statement是Prepared Statement的父接口。
Statement插入值只能以拼接字符串的方式插入,容易引起SQL注入。(不支持占位符?);
PreparedStatement提供了占位符方式插入值。无论是什么值都当字符串处理,可以防止SsQL注入攻击。
101、什么是SQL注入。
【答】如果以拼接字符串方式,插入SQL语句的值,并且值中出现了非法字符或SQL语句的关键字时,会导致SQL语句执行错误,或者执行结果不正确的情况。
102、JDBC开发步骤
【答】第一步,建立连接
第二步,执行SQL语句
第三步,关闭连接。
103、什么是事务?事务有哪些特点?
【答】事务是一段操作序列,需要保证这些操作序列中所有更新操作,同时成功或同时失败。
104、描述三层架构
【答】持久层:采用DAO模式。建立实体类和数据库表的映射关系,也就是哪个表对应哪个类,哪个属性对应哪个列,而持久层的目的就是完成对象数据和关系数据的转换。(ORM)
业务层:采用事物脚本模式。将一个业务中所有的操作封装成一个方法。保证该方法中所有数据库更新操作同时成功或同时失败。
表现层:采用MVC模式;
M:表示模型,也就是实体类,负责数据的封装和传输。
V:表示视图,也就是GUI窗体和GUI组件,负责数据的收集和展示。
C:表示控制,也就是事件处理,负责业务流程的控制。
105、书写单例模式(立即加载和延迟加载)
【答】立即加载(饿汉式):
① 私有构造方法;
② 私有属性,创建静态对象;
③ 公有静态方法,返回对象。
public class A{
private A(){}
private static A a = new A();
public static A getA(){
return a;
}
}
立即加载(枚举式)
public enum A{
INSTANCE;
}
//调用方式为类名.INSTANCE。
延迟加载(静态内部类方式):
① 私有构造方法;
② 私有静态内部类,内部类中创建静态对象;
③ 公有静态get方法,返回对象。
public class B{
private B(){}
private static class C{
private static B b=new B();
}
public static B getB(){
return C.b;
}
}
延迟加载(同步块方式):
① 私有构造方法;
② 私有静态对象引用;
③ 公有静态同步get方法,判断引用是否为null,是则创建对象,最后返回对象引用。
public class B{
private B(){}
private static B b;
public static synchronized B getB(){
if(b==null){
b=new B();
}
return b;
}
}
106、项目开发流程。
【答】需求分析—>设计—>编码—>调试—>维护
107、设计原则。
【答】单一职责原则:一个类只应该做和一个职责相关的业务,不要让一个类承担太多的职责。
开闭原则:软件实体应该面向修改关闭,面向扩展开放。实现的核心是抽象。把相同的代码抽取出来便于重用,把不同的代码也抽取出来,便于功能的扩展。
迪米特法则:软件实体之间应该尽量减少交互,不要因为一个类业务的变化而导致另一个类的变化。
聚合/组合复用原则:尽量使用聚合/组合实现代码复用,少用继承复用。
依赖倒置原则:面向抽象编程,不要面向具体编程 。
里氏替换原则:父类出现的地方,子类一定可以替换。如果父类中的方法在子类中不适用或者在子类中发生了畸变,则建议断开继承关系。采用聚合/组合实现代码复用。
接口隔离原则:使用专门的接口比用同一接口好。便于项目的组织和分工,不要让开发者面对自己用不到的方法。
108、集合和数组的区别:
【答】a、数组创建长度固定,集合长度会随集合元素的添加自动扩展。
b、集合中只能存放对象的引用。而数组可以有基本类型的数组,也可以有引用类型的数组。
c、集合中算法更加丰富,使用集合操作数据会比数组简捷。