超类的构造方法能被派生类继承么?
不能!派生类可以继承超类的成员变量和方法,但是不能继承超类的构造方法。
什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程;Java源文件被编译成能被Java虚拟机执行的字节码文件;Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译;Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。
通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间;而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集器都采用分代收集算法,所以堆空间还可以细分为新生代和老生代,再具体一点可以分为Eden、Survivor(又可分为From Survivor和To Survivor)、Tenured;方法区和堆都是各个线程共享的内存区域,用于存储已经被JVM加载的类信息、常量、静态变量、JIT编译器编译后的代码等数据;程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在常量池中,常量池是方法区的一部分。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,栈和堆的大小都可以通过JVM的启动参数来进行调整,栈空间用光了会引发StackOverflowError,而堆和常量池空间不足则会引发OutOfMemoryError。
什么是方法的重载?构造方法可以重载吗?
重载(Overload):发生在一个类中,方法名相同,参数列表不同,方法体不同,与返回值类型无关重载遵循"编译期"绑定构造方法可以重载。
什么是抽象类?什么是抽象方法?两者有什么联系?
抽象类:由abstract修饰的类,抽象类需要被继承,抽象类不能使用new方法进行实例化的类,在抽象类中的方法可以包括一般方法和抽象方法;
抽象方法:抽象方法就是以abstract修饰的方法,只声明返回的数据类型,方法名称和所需要的参数,没有方法体。
两者联系:抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类,
final关键字的用法。
1)修饰变量:变量不可被改变
2)修饰方法:方法不可被重写
3)修饰类:类不可被继承
final关键字修饰成员变量,意为初始化后不可改变。该成员变量必需在初始化时赋值,对象一旦创建即不可改变。可以在声明时初始化或在构造方法中进行初始化。
抽象类与接口的区别
接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
接口可以多继承,抽象类不行
接口定义方法,不能实现,而抽象类可以实现部分方法。
接口中基本数据类型为static 而抽类象不是的。
HTML中”checkbox”、”text”、“select”有什么用?
checkbox为form表单中的复选框元素
text为form表单中的文本框元素
select为下拉列表框元素
请写出 JavaScript 中常用的三种事件并解释。
例如:onclick,onblur,onChange并分别写出js代码其中包含事件的应用。
(1)--- onchange ( HTML事件属性 )
onchange 在元素值改变时触发。
onchange 属性适用于:input、textarea 以及 select元素。
(2)--- onclick 事件会在对象被点击时发生。
请注意, onclick 与 onmousedown 不同!
单击事件是在同一元素上发生了鼠标按下事件之后又发生了鼠标放开事件时才发生的。
支持该事件的 JavaScript 对象:
button, document, checkbox, link, radio, reset, submit
(3)--- onblur( HTML事件属性 )
onblur 事件会在对象失去焦点时发生。
支持该事件的 JavaScript 对象:
button, checkbox, fileUpload, layer, frame, password, radio, reset, submit, text, textarea, window
写出一下JS代码的运算结果(在每一行后面写上值)
<script>
alert(typeof(null));//object
alert(typeof(undefined));//undefined
alert(typeof(NaN));//number
alert(NaN==undefined));//报错
alert(NaN==NaN);//false
var str="123abc";
alert(typeof(str));//string
alert(typeof(str++));//number
alert(str);//NaN
</script>
js怎样添加、移除、移动、复制、创建和查找节点?
1)创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
2)添加、移除、替换、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入
3)查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值
getElementById() //通过元素Id,唯一性
javascript的全局函数有哪些?并解释说明。
parseInt(String,radix):返回转换成整数的值。
parseFloat(string):返回转换成浮点型的值。
isFinite(value):检测某个是是否是无穷值
isNaN(value):检测某个值是否是NaN。
encodeURI(uri):将字符串编码为URI。
encodeURIComponent(uri):将字符串编码为URI组件
escape():对字符串进行编码
eval():将JavaScript字符串当作脚本来执行
Number(object):把对象的值转换为数字
String():把对象的值转换为字符串JavaScript的特点是什么?
(1)解释性
JavaScript不同于一些编译性的程序语言,例如C、C++等,它是一种解释性的程序语言,它的源代码不需要经过编译,而直接在浏览器中运行时被解释。
(2)基于对象
JavaScript是一种基于对象的语言。这意味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。
(3)事件驱动
JavaScript可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的响应,是以事件驱动的方式进行的。所谓事件驱动,就是指在主页中执行了某种操作所产生的动作,此动作称为“事件”。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。
(4)跨平台
JavaScript依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。
(5)安全性
JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。这样可有效地防止数据的丢失。
JS中的常用内置对象哪些?
String对象、Number对象、Boolean对象、Array对象、Math对象、Date对象、RegExp对象、Function对象
Js 和 jquery 哪个更好?区别?
Js是最原始的脚本代码,jquery 是javascript的一个扩展,封装,就是让javascript更好用,更简单,从使用上说,jquery使用性更强。
char和varchar的区别?
char:固定长度,定长字符串,最多255个字节
CHAR存储定长数据很方便,CHAR字段上的索引效率级高,
比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
varchar:存储变长数据,但存储效率没有CHAR高。
如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,
把它定义为 VARCHAR(10)是最合算的。
简述truncate ,delete,drop之间的区别
truncate删除表内容,释放表空间,但是保留表结构,数据不可以回滚。
delete属于数据操作语言,不能自动提交事务,需commit提交。
drop属于数据定义语言,可以自动提交事务。将删除表结构、约束、触发器等。删除表数据同时删除表结构。
如何优化sql语句?
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10 union all select id from t where num=20
5.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
6.避免频繁创建和删除临时表,以减少系统表资源的消耗。
7.很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
8.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,
因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。
一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
哪情况下不适合建立索引?
1.对于在查询过程中很少使用或参考的列,不应该创建索引。
2.对于那些只有很少数据值的列,不应该创建索引。
3.对于那些定义为image,text和bit数据类型的列,不应该创建索引。
4.当修改性能远大于检索性能,不应该建立索引。
5.数据表中的数据很少
sql语句关键词的执行顺序。
select , from, where, order by, group by , having 等
标准的 SQL 的解析顺序为:
(1).FROM 子句, 组装来自不同数据源的数据
(2).WHERE 子句, 基于指定的条件对记录进行筛选
(3).GROUP BY 子句, 将数据划分为多个分组
(4).使用聚合函数进行计算
(5).使用 HAVING 子句筛选分组
(6).计算所有的表达式
(7).使用 ORDER BY 对结果集进行排序
Statement和PreparedStatement的区别?
共同点:都是用来执行SQL的,PreparedStatement extends Statement
区别:(1)Statement适合执行静态(无条件)SQL,
每执行一次都要对传入的sql语句编译一次,效率差
(2)PreparedStatement适合执行动态(有条件)SQL,预防sql注入攻击
PreparedStatement是预编译的,对于批量处理可以大大提高效率,执行速度快于Statement
数据库中事务的特征有哪些?
1)原子性 保证操作要么都成功 要么都失败 然后回滚
2)一致性 一旦事务完成,不管成功失败,整个系统处于操作规则的统一状态也就是数据不会损坏
3)隔离性 指数据库中一个事务的执行不能被其他事务干扰,为了防止同时的读写,事务与锁同时使用
4)持久性 也称为永久性,事务提交后,对数据库中的数据的改变时永久的
简述java,jsp,js,html的运行机制及周期
java和jsp必须在服务端运行,jsp中可以嵌入java代码;
jsp需要转化成servlet,然后由服务器执行后相应html信息给浏览器;
html中包含js,可以在浏览器端显示和执行。
Servlet如何处理表单(如何获得请求参数值)需要注意什么?
用request对象的getParameter方法和getParameterValues方法获取数据
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterValues(String name):获得有name指定的参数的所有值
BS和CS的联系和区别?
C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。
http协议是什么?
超文本传输控制协议,是一种应用层协议,定义了浏览器(也可以是其它程序)与web服务器之间通讯的过程与数据的格式。特点:Http是一种简单的、无状态的协议,不会一直保存客户的状态。
说一说Servlet生命周期
Servlet生命周期包括三部分:
初始化:Web容器加载servlet,调用init()方法
处理请求:当请求到达时,运行其service()方法。service()自动派遣运行与请求相对应的doXXX(doGet或者doPost)方法。
销毁:服务结束,web容器会调用servlet的distroy()方法销毁servlet。
get提交和post提交有何区别
(1)get一般用于从服务器上获取数据,post一般用于向服务器传送数据
(2)请求的时候参数的位置有区别,get的参数是拼接在url后面,用户在浏览器地址栏可以看到。post是放在http包的包体中。比如说用户注册,你不能把用户提交的注册信息用get的方式吧,那不是说把用户的注册信息都显示在Url上了吗,是不安全的。
(3)能提交的数据有区别,get方式能提交的数据只能是文本,且大小不超过1024个字节,而post不仅可以提交文本还有二进制文件。所以说想上传文件的话,那我们就需要使用post请求方式
(4)servlet在处理请求的时候分别对应使用doGet和doPost方式进行处理请求
Cookies 和 Session的区别:
1.cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据。
2.session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了。注:为这个用户创建的Cookie的名称是aspsessionid。这个Cookie的唯一目的就是为每一个用户提供不同的身份认证。
3.cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
4.cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。 简单的说,当你登录一个网站的时候,
5.两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以在cookie生成的时候设置进去。
重定向和转发的区别
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用。
转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
过滤器和拦截器的区别
拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
过滤器:是在javaweb中,你传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.。
描述Spring框架的作用和优点。
Spring框架的作用和优点如下:
1. Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入;
2. Spring提供的IoC和AOP应用,可以将组件的耦合度降至最低,即解耦,便于系统日后的维护和升级;
3. Spring为系统提供了一个整体的解决方案,开发者可以利用它本身提供的功能外,也可以与第三方框架和技术整合应用,可以自由选择采用哪种技术进行开发。
如何控制Bean对象的作用域,默认作用域是什么?
1. 可以通过<bean>定义的scope属性指定Bean对象的作用域或者使用注解@Scope指定Bean对象的作用域。
2. 默认Bean对象的作用域为singleton。
描述 JSP 和 Servlet 的区别、共同点、各自应用的范围
JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事务处理而通过Servlet来生成动态网页;JSP由HTML代码和JSP标签构成,可以方便地编写动态网页因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
什么是DAO模式?
DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。在实际的开发中,应该将所有对数据源的访问操作进行抽象化后封装在一个公共API中。用程序设计语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据存储。DAO模式实际上包含了两个模式,一是Data Accessor(数据访问器),二是Data Object(数据对象),前者要解决如何访问数据的问题,而后者要解决的是如何用对象封装数据。