java基础总结

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、声明:<?xml version=”1.0” encoding=”uft-8” ?> 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、集合中算法更加丰富,使用集合操作数据会比数组简捷。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值