JDK/JRE/JVM的关系是什么?java
JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,可以运行以Java语言写做的软件程序。sql
咱们开发的实际状况是:咱们利用JDK(调用JAVA API)开发了属于咱们本身的JAVA程序后,经过JDK中的编译程序(javac)将咱们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。数据库
说出Servlet的生命周期编程
Servlet生命周期共4个阶段:缓存
实例化---初始化---服务--销毁tomcat
实例化:当用户第一次发送请求当时候,容器判断是否已经建立过servlet对象,因为是第一次,因此没有建立TOMCAT进行建立安全
初始化:建立完毕,调研init方法初始化服务器
第二次请求,判断已经存在则无需进行实例化喝初始化网络
服务:初始化完毕,调用service方法,进行doget dopost方法去处理相应当请求并发
销毁:tomcat关闭,调用destory方法销毁servlet对象
jdbc访问数据库步骤
JDBC编程有6步,分别是
1.加载sql驱动,
2.使用DriverManager获取数据库链接,
3.使用Connecttion来建立一个Statement对象 Statement对象用来执行SQL语句,
4.执行SQL语句,
5.操做结果集,
6.回收数据库资源。
反射的做用和实现?
JAVA反射机制是在运行状态中,对于任意一个类,都可以知道这个类的全部属性和方法;对于任意一个对象,都可以调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射框架提供如下功能:
①、在运行时判断任意一个对象所属的类
②、在运行时构造任意一个类的对象
③、在运行时判断任意一个类所具备的成员变量和方法(经过反射设置能够调用 private)
④、在运行时调用任意一个对象的方法
反射最重要的用途就是开发各类通用框架。
不少框架(好比 Spring)都是配置化的(好比经过 XML文件配置JavaBean,Action之类的),为了保证框架的通用性,他们可能根据配置文件加载不一样的对象或类,调用不一样的方法,这个时候就必须用到反射——运行时动态加载须要加载的对象。
如何处理前台到后台的乱码
方法一:修改tomcat配置,在server.xml中找到<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>内容,并将标红的内容加入便可。不过此种方法只能局限于用tomcat的项目中,若是后期项目迁移到其余服务仍是会出现乱码问题,因此对项目的迁移性会形成很差影响。
方法二: 若是是在页面中出现乱码,那我建议在页面有中文数据的参数前加入encodeURI(),例如:encodeURI('内存利用率')。经过此方法对数据进行一次解码就能够解决乱码问题。
方法三:若是是在java后台产生乱码,那能够经过String id = new String(str.getBytes("ISO8859-1"), "utf-8");此方法解决。
存储过程的优缺点
优势
1. 运行速度:对于很简单的sql,存储过程没有什么优点。对于复杂的业务逻辑,由于在存储过程建立的时候,数据库已经对其进行了一次解析和优化。存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行一样的存储过程时,能够从内存中直接调用,因此执行速度会比普通sql快。
2. 减小网络传输:存储过程直接就在数据库服务器上跑,全部的数据访问都在数据库服务器内部进行,不须要传输数据到其它服务器,因此会减小必定的网络传输。可是在存储过程当中没有屡次数据交互,那么实际上网络传输量和直接sql是同样的。并且咱们的应用服务器一般与数据库是在同一内网,大数据的访问的瓶颈会是硬盘的速度,而不是网速。
3. 可维护性:的存储过程有些时候比程序更容易维护,这是由于能够实时更新DB端的存储过程。 有些bug,直接改存储过程里的业务逻辑,就搞定了。
4. 加强安全性:提升代码安全,防止 SQL注入。这一点sql语句也能够作到。
5. 可扩展性:应用程序和数据库操做分开,独立进行,而不是相互在一块儿。方便之后的扩展和DBA维护优化。
缺点
1. SQL自己是一种结构化查询语言,但不是面向对象的的,本质上仍是过程化的语言,面对复杂的业务逻辑,过程化的处理会很吃力。同时SQL擅长的是数据查询而非业务逻辑的处理,若是若是把业务逻辑全放在存储过程里面,违背了这一原则。
2. 若是须要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍须要更新程序集中的代码以添加参数、更新调用,等等,这时候估计会比较繁琐了。
3. 开发调试复杂,因为IDE的问题,存储过程的开发调试要比通常程序困难。
4. 没办法应用缓存。虽然有全局临时表之类的方法能够作缓存,但一样加剧了数据库的负担。若是缓存并发严重,常常要加锁,那效率实在堪忧。
5. 不支持群集,数据库服务器没法水平扩展,或者数据库的切割(水平或垂直切割)。数据库切割以后,存储过程并不清楚数据存储在哪一个数据库中。
左链接/右链接/内链接的区别
数据库索引的做用及优势和缺点
索引就像是书的目录,是与表或视图关联的磁盘上结构,能够加快从表或视图中检索行的速度。索引中包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(BTree)中,使SQL能够快速有效地查找与键值关联的行。
2. 为何要创建索引,即索引的优势:
① 创建索引的列能够保证行的惟一性,生成惟一的rowId
② 创建索引能够有效缩短数据的检索时间
③ 创建索引能够加快表与表之间的链接
④ 为用来排序或者是分组的字段添加索引能够加快分组和排序顺序
3. 索引的缺点:
① 建立索引和维护索引须要时间成本,这个成本随着数据量的增长而加大
② 建立索引和维护索引须要空间成本,每一条索引都要占据数据库的物理存储空间,数据量越大,占用空间也越大(数据表占据的是数据库的数据空间)
③ 会下降表的增删改的效率,由于每次增删改索引须要进行动态维护,致使时间变长
4. 什么样的表跟列要创建索引:
① 总的来讲就是数据量大的,常常进行查询操做的表要创建索引
② 表中字段创建索引应该遵循几个原则:
1) 越小的数据类型一般更好:越小的数据类型一般在磁盘、内存中都须要更少的空间,处理起来更快。
2) 简单的数据类型更好:整型数据比起字符,处理开销更小,由于字符串的比较更复杂,处理起来也更耗时。
3) 尽可能避免NULL:应该指定列为NOT NULL。含有空值的列很难进行查询优化,由于它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。
4) 对非惟一的字段,例如“性别”这种大量重复值的字段,增长索引也没有什么意义,因此索引的创建应当更多的选取惟一性更高的字段。
③ 表与表链接用于多表联合查询的约束条件的字段应当创建索引
④ 用于排序的字段能够添加索引,用于分组的字段应当视状况看是否须要添加索引。
⑤ 添加多列索引的时候,对应的多条件查询能够触发该索引的同时,索引最左侧的列的单条件查询也能够触发。
⑥ 若是有些表注定只会进行查询全部,也就不必添加索引,由于查询所有只能进行全量搜索即扫描全表。
5. 索引的原理:
索引的原理大体归纳为以空间换时间,数据库在未添加索引的时候进行查询默认的是进行全量搜索,也就是进行全局扫描,有多少条数据就要进行多少次查询,而后找到相匹配的数据就把他放到结果集中,直到全表扫描完。而创建索引以后,会将创建索引的KEY值放在一个n叉树上(BTree)。由于B树的特色就是适合在磁盘等直接存储设备上组织动态查找表,每次以索引进行条件查询时,会去树上根据key值直接进行搜索,次数约为log总条数,底数为页面存储数,例如一个100万数据的表,页面存储数为100,那么有索引的查询次数为3次log1000000100,可是全量搜索为100万次搜索,这种方式相似于二分法,可是这个是n分法。
索引对增删改的影响实际数据修改测试:
一个表有字段A、B、C,同时进行插入10000行记录测试
在没有建索引时平均完成时间是2.9秒
在对A字段建索引后平均完成时间是6.7秒
在对A字段和B字段建索引后平均完成时间是10.3秒
在对A字段、B字段和C字段都建索引后平均完成时间是11.7秒
从以上测试结果能够明显看出索引对数据修改产生的影响