一、   Java基础部分

1.Java多态的具体体现 【必背】

面向对象编程有四个特征:抽象,封装,继承,多态

多态有四种体现形式:

1. 接口和接口的继承。

2. 类和类的继承。

3. 重载。

4. 重写。

其中重载和重写为核心。

重载(Overload):重载发生在同一个类中,在该类中如果存在多个同名方

法,但是方法的参数类型和个数不一样,那么说明该方法被重

载了。

重写(Override):重写发生在子类继承父类的关系中,父类中的方法被子

类继承,方法名,返回值类型,参数完全一样,但是方法体不

一样,那么说明父类中的该方法被子类重写了。

2.StringBufferStringBuilder String 区别【必背】

String       字符串常量   不可变  使用字符串拼接时是不同的2个空间

StringBuffer  字符串变量   可变   线程安全  字符串拼接直接在字符串后追加

StringBuilder 字符串变量   可变   非线程安全  字符串拼接直接在字符串后追加

1.StringBuilder执行效率高于StringBuffer高于String.

2.String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方 法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer  是 线程安全的而StringBuilder是线程非安全的,所以StringBuilder的效率高于StringBuffer.

3.对于大数据量的字符串的拼接,采用StringBuffer,StringBuilder.

3.Hashtable与HashMap的区别【必背】

HashMap不是线程安全的,HashTable是线程安全。

HashMap允许空(null)的键和值(key),HashTable则不允许。

HashMap性能优于Hashtable。

Map:1.Map是一个以键值对存储的接口。Map下有两个具体的实现,分别是HashMap和HashTable.

2.HashMap是线程非安全的,HashTable是线程安全的,所以HashMap的效率高于HashTable.

3.HashMap允许键或值为空,而HashTable不允许键或值为空.

4.九大隐式对象【必背】

输入/输出对象:  request  response   out

作用域通信对象: session  application pageContext

Servlet 对象:   page  config

错误对象:      exception

5.Forword(请求转发)与Redirect(重定向)

1、从数据共享上

Forword是一个请求的延续,可以共享request的数据

Redirect开启一个新的请求,不可以共享request的数据

2、从地址栏

Forword转发地址栏不发生变化

Redirect转发地址栏发生变化

6.XML和Json的特点【必背】

Xml特点:

  1、有且只有一个根节点;

  2、数据传输的载体

  3、所有的标签都需要自定义

  4、是纯文本文件

  

Json(JavaScriptObject Notation)特点:

  json分为两种格式:

json对象(就是在{}中存储键值对,键和值之间用冒号分隔,

键 值 对之间用逗号分隔);

json数组(就是[]中存储多个json对象,json对象之间用逗号分隔)

(两者间可以进行相互嵌套)数据传输的载体之一

区别:

传输同样格式的数据,xml需要使用更多的字符进行描述,流行的是基于json的数据传输。xml的层次结构比json更清晰。

共同点:xml和json都是数据传输的载体,并且具有跨平台跨语言的特性。

7.request.getSession()、reqeust.getSession(false)和request.getSession(true)

getSession()/getSession(true):当session存在时返回该session,否则新建一个     session并返回该对象

getSession(false):当session存在时返回该session,否则返回null

8.Page和PageContext的区别

Page是servlet对象;使用this关键字,它的作用范围是在同一页面。

PageContext是作用域通信对象;通常使用setAttribute()和getAttribute()来设置和获取存放对象的值。

9.JSP9大隐视对象中四个作用域的大小与作用范围

四个作用域从大到小:appliaction>session>request>page

application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。

session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记              住这个会话状态。

request:请求作用域,就是客户端的一次请求。

page:一个JSP页面。

以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward)。

10.List,Set,Collection,Collections【必背】

1.List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合。Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化。

2.List接口实现类有ArrayList,LinkedList,Vector。ArrayList和Vector是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢LinkedList是基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。又因为Vector是线程安全的,所以他和ArrayList相比而言,查询效率要低。

11.java的基本数据类型【必背】

数据类型 大小:字节

byte(字节)1个字节(8位)

shot(短整型)2个字节(16位)

int(整型)4个字节(32位)

long(长整型)8个字节(32位)

float(浮点型)4个字节(32位)

double(双精度)8个字节(64位)

char(字符型)2个字节(16位)

boolean(布尔型)1位

附加:

String是基本数据类型吗?(String不是基本数据类型)

String的长度是多少,有限制?(长度受内存大小的影响)

12.冒泡排序

publicclass Sort {

publicstatic void sort() {

Scannerinput = new Scanner(System.in);

intsort[] = new int[10];

inttemp;

System.out.println("请输入10个排序的数据:");

for(int i = 0; i < sort.length; i++) {

sort[i]= input.nextInt();

}

for(int i = 0; i < sort.length - 1; i++) {

for(int j = 0; j < sort.length - i - 1; j++) {

if(sort[j] < sort[j + 1]) {

temp= sort[j];

sort[j]= sort[j + 1];

sort[j+ 1] = temp;

}

}

}

System.out.println("排列后的顺序为:");

for(inti=0;i<sort.length;i++){

System.out.print(sort[i]+"  ");

}

}

publicstatic void main(String[] args) {

sort();

}

}

13.UE和UI的区别

UE 是用户体验度

UI 界面原型(用户界面)(相当于买房时用的模型)

设计UI的作用:

1、帮助程序员工作(界面已由美工设计完成)

2、提前让用户对项目有个宏观的了解,知道效果是什么样子。

14.osi七层模型

第一层:物理层

第二层:数据链路层

第三层:网络层

第四层:传输层

第五层:会话层

第六层:表示层

第七层:应用层

15.线程和进程的区别

1.线程(Thread)与进程(Process)

进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。

2.一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。

3.实现线程的两种方式:继承Thread类,实现Runable接口

16.内存泄露和内存溢出

内存泄露 (memory leak),是指应用程序在申请内存后,

无法释放已经申请的内存空间.一次内存泄露危害可以忽略,

但如果任其发展最终会导致内存溢出(out of memory).

如读取文件后流要进行及时的关闭以及对数据库连接的释放。

内存溢出(out of memory)是指应用程序在申请内存时,

没有足够的内存空间供其使用。

如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。

17.解析xml文件的几种技术【必背】

1、 解析xml的几种技术

1.dom4j   2.sax    3.jaxb    4.jdom    5.dom

1.dom4j

dom4j是一个Java的XMLAPI,类似于jdom,用来读写XML文件的。dom4j是一个非常优秀的JavaXML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。

2.sax

SAX(simpleAPI for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。

2、dom4j 与 sax 之间的对比:【注:必须掌握!

dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出的情况;

sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml

也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性

所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j

18.项目的生命周期

1.需求分析

2.概要设计

3.详细设计(用例图,流程图,类图)

4.数据库设计(powerdesigner)

5.代码开发(编写)

6.单元测试(junit白盒测试)(开发人员)

svn版本管理工具(提交,更新代码,文档)

7.集成测试 (黑盒测试,loadrunner(编写测试脚本)(高级测试))

8.上线试运行 (用户自己体验)

9.压力测试(loadrunner)

10.正式上线

11.维护

19.经常访问的技术网站【必背】

1.csdn(详细步骤的描述)

2.iteye(详细步骤的描述)

3.oschina(开源中国获取java开源方面的信息技术)

4.java开源大全 www.open-open.com(获取java开源方面的信息技术)

20.项目团队中交流的工具

飞秋(局域网) qq(局域网,外网)  sametime、notes(中国银行用)

邮箱(foxmail,outlook) (局域网,外网)

21.平时浏览的书籍

实战经验:

  *** in action(实战)

  Java 深入浅出

  *** 入门指南

思想基础:

  大话设计模式 重构

22.java Exception体系结构【必背】

java异常是程序运行过程中出现的错误。Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在JavaAPI中定义了许多异常类,分为两大类,错误Error和异常Exception。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常(非runtimeException),也称之为不检查异常(UncheckedException)和检查异常(Checked Exception)。

1、Error与Exception

Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。

这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。

2、运行时异常和非运行时异常

运行时异常: 都是RuntimeException类及其子类异常:   IndexOutOfBoundsException 索引越界异常

ArithmeticException:数学计算异常

NullPointerException:空指针异常

ArrayOutOfBoundsException:数组索引越界异常

ClassNotFoundException:类文件未找到异常

ClassCastException:造型异常(类型转换异常)

这些异常是不检查异常(Unchecked Exception),程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的。

非运行时异常:是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如:

IOException、文件读写异常

FileNotFoundException:文件未找到异常

EOFException:读写文件尾异常

MalformedURLException:URL格式错误异常

SocketException:Socket异常

SQLException:SQL数据库异常

23.session和cookie的区别【必背】

1.session是存储在服务器端,cookie是存储在客户端的,所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。2.又由于session是存放在服务器的内存中,所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,3.会话cookie确切的说是存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session会不会丢失,4.从上面叙述分析session的信息是通过sessionid获取的,而sessionid是存放在会话cookie当中的,当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在。那么,5.session在什么情况下丢失,就是在服务器关闭的时候,或者是sessio过期,再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,然后session在什么时候被创建呢,确切的说是通过调用session.getsession来创建,这就是session与cookie的区别

24.字节流与字符流的区别【必背】

stream结尾都是字节流,reader和writer结尾都是字符流

两者的区别就是读写的时候一个是按字节读写,一个是按字符。

实际使用通常差不多。

在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。

只是读写文件,和文件内容无关的,一般选择字节流。

25.final,finally,finalize三者区别

Final是一个修饰符:

当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值

当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变量的时候给它赋值

当final修饰方法时,该方法不能被重写

当final修饰类时,该类不能被继承

Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽象方法,(抽 象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方 法时,这个抽象类也就没有了它存在的必要)

Final不能修饰接口,因为接口中有需要其实现类来实现的方法

Finally:

Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行,并且会在return,continue,break关键字之前执行

finalize:

Finalize是一个方法,属于java.lang.Object类,finalize()方法是GC (garbagecollector垃圾回收)运行机制的一部分,finalize()方法是在 GC清理它所从 属的对象时被调用的

26.IO流的层次结构【必背】

从流的方向

输入流   输出流

从流的类型上

字符流    字节流

inputstream和outputstream都是抽象类

它们下面的实现包括

FileInputStream,BufferedInputStream

FileOutputStream,BufferedOutputStream

reader 和 writer

FileReader,BufferedReader,StringReader

FileWriter,BufferedWriter,StringWriter,PrintWriter

27.JAVA:

Java是面向对象的,跨平台的,它通过java虚拟机来进行跨平台操作,它可以进行自动垃圾回收的【c语言是通过人工进行垃圾回收】,java还会进行自动分配内存。【c语言是通过指定进行分配内存的】,只需要new一个对象,这个对象占用了多少空间,不需要我们来管,java虚拟机负责管这些,用完之后也不需要我们来释放,java虚拟机会自动释放

28.JavaSE JavaEEJavaME区别

是什么:

Java SE=Java StandardEdition=j2se = java 标准版

Java EE=Java EnterpriseEdition=j2ee= java 企业版

Java ME=Java Mobile Edition=j2me= java移动版

特点:

SE主要用于桌面程序(swing),控制台开发(main程序)。

EE企业级开发(JSP,EJB,SpringMVC,Struts,hibernate,ibatis等),

用于企业级软件开发,网络开发,web开发。

ME嵌入式开发(手机,小家电,PDA)。[苹果的ios,黑莓]

三者之间的关系:

Java SE(JavaPlatform, Standard Edition,Java标准版)就是基于JDK和JRE的。

Java SE为JavaEE提供了基础。

Java EE除了基于我们这个所谓的Java SE外,还新加了企业应用所需的类库

29.JDK  JRE  JVM的区别:

Jdk【JavaDevelopment ToolKit】就是java开发工具箱, JDK是整个JAVA的核心里边包含了jre,它除了包含jre之外还包含了一些javac的工具类,把java源文件编译成class文件,java命令是用来运行这个程序的,除此之外,里边还包含了java源生的API,java.lang.integer在rt的jar包里边【可以在项目中看到】,通过rt这个jar包来调用我们的这些io流写入写出等

JDK有以下三种版本:

J2SE,standardedition,标准版,是我们通常用的一个版本

J2EE,enterpsiseedtion,企业版,使用这种JDK开发J2EE应用程序

J2ME,microedtion,主要用于移动设备、嵌入式设备上的java应用程序

Jre【Java Runtime  Enviromental】是java运行时环境,那么所谓的java运行时环境,就是为了保证java程序能够运行时,所必备的一基础环境,也就是它只是保证java程序运行的,不能用来开发,而jdk才是用来开发的,所有的Java程序都要在JRE下才能运行。

包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。

Jre里边包含jvm

Jvm:【JavaVirtual Mechinal】因为jre是java运行时环境,java运行靠什么运行,而底层就是依赖于jvm,即java虚拟机,java虚拟机用来加载类文件,java中之所以有跨平台的作用,就是因为我们的jvm

关系:

J2se是基于jdk和jre,

JDK是整个JAVA的核心里边包含了jre,

Jre里边包含jvm

30.报错的状态码:【必背】

301 永久重定向

302 临时重定向

304 服务端 未改变

403 访问无权限

200 正常

404 路径

500 内部错误

31.协议以及默认的端口号【必背】

ftp   21    文件传输协议

Pop3 110  它是因特网 <http://baike.baidu.com/view/1706.htm>电子邮件 <http://baike.baidu.com/view/1524.htm>的第一个离线 <http://baike.baidu.com/view/113466.htm>协议标准

Smtp  25   简单邮件传输协议

http   80   超文本传输协议

oracle 默认端口号1521    Tomcat默认端口8080

mysql默认端口号 3306

32.抽象类与接口的区别

1.一个类只能进行单继承,但可以实现多个接口。

2.有抽象方法的类一定是抽象类,但是抽象类里面不一定有抽象方法;

接口里面所有的方法的默认修饰符为publicabstract,接口里的成员变 量默认的修饰符为  pulbicstatic final。

关系

接口和接口      继承

接口和抽象类    抽象类实现接口

类和抽象类      类继承抽象类

类和类          继承

33.修饰符的作用

修饰符的作用范围:

private  default  protected public

同一个类中      可以  可以   可以    可以

同一个包的类中 可以      可以    可以

不同包的子类中       可以      可以

不同包的类中        可以

34.onready和onload的区别

1.onready比onload先执行

2.onready是在页面解析完成之后执行,而onload是在页面所有元素加载后执行

3.onload只执行最后一个而onready可以执行多个。

35.switch默认接受的几种数据类型(了解)

Short, int, byte, char

36.request 跟session的区别

1.他们的生命周期不同,

request对应的是一次请求,

session对应的是一次会话

2.request占用资源比较少,相对来说缺乏持续性,

而session资源消耗比较大,所以通常使用request来保存信息

四十七、找到解决svn冲突方法

对于svn冲突,可以采用手工处理将冲突的部分进行整合,

之后备份最新整合后的文件,采用覆盖更新的方式处理完

冲突之后,再把最新整合后的文件进行提交。

37.JDBC连接数据库步骤(以MYSQL为例) 【必背】

1、加载JDBC驱动程序:

通过Class类的forName方法实现,并将驱动地址放进去成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL 、创建数据库的连接 •要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。•使用DriverManager的getConnectin()方法传入指定的欲连接的数据库的路径、数 据库的用户名和密码。

Connectioncon=DriverManager.getConnection(url , username , password);&&&:"jdbc:mysql://localhost/test?user=root&password=123&useUnicode=true&characterEncoding=utf-8”;

3、创建一个Statement

•要执行SQL语句,必须获得java.sql.Statement实例

•执行静态SQL语句。通常通过Statement实例实现。

•执行动态SQL语句。通常通过PreparedStatement实例实现。

String sql = “”;

Statement st =con.createStatement() ;

PreparedStatementpst = con.prepareStatement(sql) ;

4、执行SQL语句

Statement接口提供了executeQuery、executeUpdate、execute三种方法 executeQuery:执行select语句,返回ResultSet结果集ResultSet rst = pst.executeQuery();  • executeUpdate:执行insert、update、delete语句pst.executeUpdate();

5、关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源。

38.数据库连接池【必背】

数据库连接池的优点运行原理:

在我们不使用数据库连接池的时候,每次访问数据库都需要创建连接,使用完成之后需要释放关闭连接,而这样是很耗费资源的。当我们使用数据库连接池的时候,在tomcat启动的时候就创建了指定数量的连接,之后当我们程序使用的时候就直接从连接池里面取,而不需要创建,同理,当我们使用完的时候也不需要关闭连接,而是将连接返回到连接池中,供其他请求继续使用。

DBCP:比较稳定。

C3P0: 性能比较高。

39.jdbc分段批量提交的时候出现异常怎么处理? 【必背】

通过Map来解决性能问题。首先在分段批量提交的时候,我们不采用事务,这样就保证了合法的数据就自动提交,不合法的数据就自己自动进行回滚,为了避免不合法数据影响后续合法数据的提交,采用定义业务规则字典表,实现对数据的验证,将不合法的数据记录下来,供用户进行后续处理,而合法的数据就全部提交。

40.jdbc批量处理数据【必背】

批量处理数据:(代码优化:提高程序执行性能)

降低了java程序代码(客户端)和数据库之间的网络通信的次数。

在jdbc中进行批量插入的核心API为 addBatch,executeBatch

大数据量的插入问题:(jdbc,hibernate,ibatis)

1.每次只插入一条和数据库交互多次(很耗时间)

2.批量插入和数据库只交互一次(内存溢出)

3.分段批量插入(推荐)

jdbc批量处理数据是通过PreparedStatement对象的 addbatch(),executebatch() clearbatch()进行和数据库的交互。通常我们使用分段批量处理的方式这样可以提高程序的性能 ,防止内存溢出。

 1.每个sql语句都和数据库交互一次(非批量操作)

 2.只和数据库交互一次(批量操作)(内存溢出)

 当数据达到一定额度的时候就和数据库进行交互,分多次进行(分段批量操作)

 (500或者1000)

pst.addBatch();

if (i > 0&& i%1000 == 0) {

pst.executeBatch();

pst.clearBatch();

}

41.Oracle的基本数据类型

Oracle的基本数据类型(常用):

1、字符型

Char  固定长度字符串  占2000个字节

Varchar2 可变长度字符串 占4000个字节

Nvarchar2 占2000个字符(最多能存2000个字母/中文)

2、大对象型(lob)

Blob :二进制数据 最大长度4G

Blob 用于存一些图片,视频,文件。

比如:当我们在进行文件上传时,我们一般把上传的文件存在硬盘上,可以不占用 数据库,如果项目迁移时,文件也要跟着迁移。因此我们可以把用blob把它存在数据库中。但这样也增加了数据库的负担。

Clob :字符数据 最大长度4G,可以存大字符串  varchar2和nvarchar2都具有一定的局限性,它们长度有限,但数据库中无论用varchar2或nvarchar2类型,还是用clob,在java端都使用String接收。

3、数值型

Integer  整数类型,小的整数。

Float  浮点数类型。

Real  实数类型。

Number(p,s)包含小数位的数值类型。P表示精度,s表示小数后的位数。

Eg: number(10,2) 表示小数点之前可有8位数字,小数点后有2位。

4、日期类型

Date 日期(日-月-年) DD-MM-YY(HH-MI-SS)

Timestamp 跟date比它可以精确到微秒。精确范围0~9 默认为6.

42.主键和唯一索引的区别? 【必背】 

在创建主键的同时会生成对应的唯一索引,主键在保证数据唯一性的同时不允许为空,而唯一可以有一个为空数据项,一个表中只能有一个主键,但是一个主键可以         有多个字段,一个表中可以有多个唯一索引。

43.Preparedstatement和statement的区别【必背】

用Preparedstatement进行开发。Prepared statement是预编译的,而statement不是,在每次执行sql语句的增删改时,如果是一条数据两者没差距,但如果数据量大于1,那么每次执行sql语句statement都要重新编译一次,而Prepared statement不用,Prepared statement的运行效率大于statement;从代码的可维护性和可读性来说,虽然用Preparedstatement来代替statement会使代码多出几行,但这样的代码无论从可读性还是可维护性来说,都比直接使用statement的代码高很多档次;最重要的一点,从安全角度来说,使用Preparedstatement可以大大提高程序的安全性,因为Prepared statement是用‘?’传参,可以防止sql注入,具有安全性,而statement用的是‘+’字符串拼接,安全性较低。

44.视图概述

视图可以视为“虚拟表”或“存储的查询”

创建视图所依据的表称为“基表”

视图的优点:

提供了另外一种级别的表安全性:隐藏了一些关键的字段

简化的用户的SQL命令

隔离基表结构的改变

45.存储过程概述

存储过程(Stored Procedure)

  可以包含逻辑判断的sql语句集合。

  是经过预编译,存在于数据库中。

  通过调用指定存储过程的名字(可有参,可无参)来执行。

优点:

  简化了复杂的业务逻辑,根据需要可重复使用

  屏蔽了底层细节,不暴露表信息即可完成操作

  降低网络的通信量,多条语句可以封装成一个存储过程来执行

  设置访问权限来提高安全性

  提高执行效率,因为它是预编译以及存储在数据库中

缺点:

  可移植性差,相同的存储过程并不能跨多个数据库进行操作

  大量使用存储过程后,首先会使服务器压力增大,而且维护难度逐渐增加

存储过程的语法:

--下面是在oracle数据库下最基本的语法

--仅创建一个名为testProcedure的无参的存储过程

--IS也可以是AS

--如果已经存在名为 testProcedure的存储过程,下面的语法会出现 名称已被使用的错误

--解决办法:

--第一句可以写成 createor replace procedure testProcedure

注意:

  存储过程之间可相互调用

  存储过程一般修改后,立即生效。

46.索引概述【必背】 

1、索引的概念

索引就是为了提高数据的检索速度。

数据库的索引类似于书籍的索引。

在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。

在数据库中,索引也允许数据库程序迅速地找到表中的数据,

而不必扫描整个数据库.

2、索引的优点

  1.创建唯一性索引,保证数据库表中每一行数据的唯一性

  2.大大加快数据的检索速度,这也是创建索引的最主要的原因

  3.减少磁盘IO(向字典一样可以直接定位)

3、索引的缺点

1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加

2.索引需要占用额外的物理空间

3.当对表中的数据进行增加、删除和修改的时候,

索引也要动态的维护,降低了数据的维护速度

4、索引的分类

  1.普通索引和唯一性索引

      普通索引:CREATE  INDEXmycolumn_index ON mytable (myclumn)

      唯一性索引:保证在索引列中的全部数据是唯一的

      CREATE unique INDEXmycolumn_index ON mytable (myclumn)

  

2. 单个索引和复合索引

      单个索引:对单个字段建立索引

复合索引:又叫组合索引,在索引建立语句中同时包含多个字段名,最多16个字段

      CREATE INDEX name_indexON userInfo(firstname,lastname)

  

3.顺序索引,散列索引,位图索引

47.防止表单重复提交【必背】

针对于重复提交的整体解决方案:

1.点击一次之后,按钮失效(前端效果)

2.通过loading

3.自定义重复提交过滤器

48.JSP标签:【必背】

1.JSP  include动作

jsp:include  动作

以“<jsp: 动作名 ” 开始,以“</jsp:动作名>  ” 结束

比如:<jsp:include page=" Filename"/>

2.JSP指令:<%@ include%><%@   %>

以“<%@” 开始,以“%> ” 结束。比如:

<%@ include file= " Filename" %>

3.JSP输出表达式:<%= %><%=Java表达式 %>

输出变量的值,后边不能加<%= ; %>

4.JSP Scriptlet【脚本】:<% ;%>  <% Java 代码 %>

例子:

<% Calendar now= Calendar.getInstance(); %>

5.JSP声明:<%! %> <%! 函数或者方法 %>

例子:

<%!

String getHello(String name) {

return"Hi," + name + "!";

}

%>

6.迭代标签:<c:foreach>

Jstl中的核心标签(core)

7.JSP注释:

<!-- 这是注释,但客户端可以查看到 -->

<%-- 这也是注释,但客户端不能查看到 --%>

8.el表达式:${}

9.jsp:include动作是在运行时动态包含。

@include指令是在编译时包含。

它们两个都只能包含本项目的相关文件,不能包含其他项目的。

如果要包含其他项目的文件可以使用c:import

49.分页步骤【必背】

①前台封装一个显示分页的组件

②查询总条数

③后台封装分页工具类,计算开始位置、结束位置、总页数

④后台写支持分页的sql语句

⑤前台包含分页组件,实现分页效果

注意:

查询总条数的where和查询列表信息的where条件要保证一致。

1:oracle 分页语句:

select * from

(select t.*, rownumrn from

(

select * from t_student order byid desc

) t where rownum< 10

) where rn >=5

【oracle分页:该页展示从5-10的数据,包含下标5不含10】

2: mysql 分页语句:

select * from t_studentwhere id limit 0,5

【语句含义:起点位置为0,开始查询,返回5条数据(即每页5条数据)】

50.Servlet的概述:

Servlet是一个web容器,我们通常用的servlet是继承httpservlet,而httpservlet又是继承于genericservlet,而genericservlet又实现了servlet接口

servlet的生命周期是 :先进行实例化,然后是初始化,然后是提供服务,然后销毁,最后不可用,在这五个生命周期,其中,初始化是调用的init方法,这个方法只有一个,而提供服务的时候调用的是service方法,而我们具体在我们所写的这个方法中,因为我们继承了httpservlet,其实就是对应了doGet(),doPost(),这种方法,然后据我了解,servlet是单例的。

51.sql注入

所谓SQL注入,就是通过一些含有特殊字符的sql语句发送到服务器欺骗服务器并进行攻击。(特殊字符:or, 单引号,--,空格)

52.防止Sql注入

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式(js正则或者java后台正则),或限制长度;对单引号和双"-"进行转换等。

2.永远不要使用动态拼装sql,使用参数化的sql。(永远不要使用+号拼接sql字符串,而是使用?传参的方式进行)

3.不要给用户太高的权限而根据需求进行赋权

4.对敏感信息进行加密 如md5(单向加密不可逆转)。

5.自定义错误页面。目的是为了不把我们的程序的bug暴露在别有用心的人的面前。而去不会让用户看到报错的页面,也提高了用户的体验度。

Java面试宝典之:基础篇相关推荐

  1. python程序员面试算法宝典 pdf_Python面试宝典之基础篇3

    Python面试宝典之基础篇-03 题目011:Python中为什么没有函数重载? 点评:C++.Java.C#等诸多编程语言都支持函数重载,所谓函数重载指的是在同一个作用域中有多个同名函数,它们拥有 ...

  2. python深浅拷贝 面试_Python面试宝典之基础篇-02

    原标题:Python面试宝典之基础篇-02 我觉得你如果正在找工作,我的Python面试宝典几期教程,你一定得花时间看完了! 题目006:说说Python中的浅拷贝和深拷贝. 点评:这个题目本身出现的 ...

  3. python语言面试基础_Python面试宝典之基础篇-04

    Python面试宝典之基础篇-04 发布时间:2020-08-19 02:59:03 来源:ITPUB博客 阅读:101 接着更新Python常见的面试题! 题目016:写一个函数,给定矩阵的阶数n, ...

  4. python 有放回随机抽取_Python面试宝典之基础篇-08

    原标题:Python面试宝典之基础篇-08 题目36:如何使用random模块生成随机数.实现随机乱序和随机抽样? 点评:送人头的题目,因为Python标准库中的常用模块应该是Python开发者都比较 ...

  5. python怎么进行同或函数_Python面试宝典之基础篇-03

    题目011:Python中为什么没有函数重载?点评:C++.Java.C#等诸多编程语言都支持函数重载,所谓函数重载指的是在同一个作用域中有多个同名函数,它们拥有不同的参数列表(参数个数不同或参数类型 ...

  6. python面试笔试宝典pdf_Python面试宝典之基础篇-06

    题目26:什么是鸭子类型(duck typing)? 鸭子类型是动态类型语言判断一个对象是不是某种类型时使用的方法,也叫做鸭子判定法.简单的说,鸭子类型是指判断一只鸟是不是鸭子,我们只关心它游泳像不像 ...

  7. python面试笔试宝典pdf_Python面试宝典之基础篇-02

    题目006:说说Python中的浅拷贝和深拷贝.点评:这个题目本身出现的频率非常高,但是就题论题而言没有什么技术含量.对于这种面试题,在回答的时候一定要让你的答案能够超出面试官的预期,这样才能获得更好 ...

  8. python面试笔试宝典pdf_Python面试宝典之基础篇-09

    题目41:说一下你对Python中模块和包的理解. 每个Python文件就是一个模块,而保存这些文件的文件夹就是一个包,但是这个作为Python包的文件夹必须要有一个名为__init__.py的文件, ...

  9. python面试秘诀_Python面试宝典之基础篇-01

    题目001: 在Python中如何实现单例模式.点评:这个题目在面试中出现的频率极高,因为它考察的不仅仅是单例模式,更是对Python语言到底掌握到何种程度,建议大家用装饰器和元类这两种方式来实现单例 ...

  10. 撩课-Java面试宝典-第八篇

    71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, application, out, config, exce ...

最新文章

  1. 庖丁解牛迭代器,聊聊那些藏在幕后的秘密
  2. SAP WM 2-Step Picking流程里创建的Group的分析
  3. Redis热点Key发现及常见解决方案
  4. 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)
  5. python识别手写文字_如何快速使用Python神经网络识别手写字符?(文末福利)
  6. Kibana_X-Pack管理Elasticsearch权限
  7. 字符串匹配BF/RK/BM/KMP算法
  8. [导入]创建一个ASP通用分页类代码部分
  9. Git学习总结(5)——搭建Git简易高效服务器
  10. 11g RAC 安装后所需修改事项
  11. PHP常用设计模式汇总
  12. 购买嵌入式硬件,焊接设备避坑指南/自用工具推荐
  13. 【程序设计训练】1-7 F1方程式冠军
  14. 华为:活下来!或将卖掉 X86 服务器业务?
  15. 【K8S系列】快速初始化⼀个最⼩集群
  16. 七、基础教程-坐标轴(Axis)
  17. 我用 10 张脑图,征服了一系列大厂面试官。
  18. web前端项目(一) 做一个网易考拉官网 常规静态页面 + 页面放到http服务 + 前后端分离
  19. 网页特效源码分析----标签云
  20. 使用模拟器玩地下城与勇士M电脑版试玩分享

热门文章

  1. vs code修改代码后再次运行,报错:file“<stdin>“,line 1
  2. 2021年3月最新的山东大学网络认证的网址
  3. 理解深度学习中的卷积
  4. rk3288 linux烧录工具,Firefly-RK3288开发板烧写教程
  5. 再谈多态——向上映射及VMT/DMT
  6. 生信工作流框架搭建 | 从零开始入门指南 - 00工作流之华山论剑
  7. 每天一篇论文 289/365Deep Reinforcement Learning for Robotic Pushing and Picking in Cluttered Environment
  8. 在计算机上如何连接网络,详细教您如何在计算机上设置宽带连接
  9. 路由器什么牌子好?游戏宅强推
  10. 【科学有故事】做节目时的Python分析