A. getParameterValues() B. getParameters()
C. getParameterNames() D. getAttributeValues()
A. pageContext B. context C. application D. out
SQL注入:
sql中的单引号与程序中的双引号
Statement与PrepareStatement区别:
可读性:
PrepareStatement可以将SQL语句中的变量抽象出来,这样可以提高代码的可读性 ;
效率:
Statement 执行每一条SQL语句时,都是编译+执行,相当于静态SQL;
PrepareStatement执行的SQL语句,会进行预编译,SQL中可以包含动态参数"?“,在执行时可以为”?"动态设置参数值,当下次执行相同类型的SQL语句时,可以解析并直接执行编译好的SQL语句,从而减少编译次数提高数据库的性能,相当于动态SQL(我是这么理解的);另一方面,他还有Batch功能可以进行批量请求,从而减少了JDBC驱动和数据库的连接请求次数,eg:
PreparedStatement pstmt = conn.prepareStatement("INSERT into users values (?, ?, ?)");
for (i = 0; i < list.length(); i++) {
pstmt.setLong(list[i].id);
pstmt.setString(list[i].name);
pstmt.setString(list[i].phone);
pstmt.addBatch();
}
pstmt.executeBatch();
~Statement每次执行sql语句,数据库都要执行sql语句的编译 ,最好用于仅执行一次查询并返回结果的情形时,效率高于PreparedStatement。
安全性:
Statement: SQL语句每次都是重新编译执行的,这就导致你传进去的参数和SQL语句是有联系,可以改变原先SQL的功能结构
select * from user where username= '"+name+"' and userpwd='"+passwd+"'
如果传进去的passwd参数值是 ’ or ‘1’ = '1 那SQL就变成了永真式:
select * from user where username= '"+name+"' and userpwd='' or '1' = '1'
权限就这样被轻易获取了;
PrepareStatement:SQL的参数会被强制类型转换成表中的列属性值,由于SQL语句已经实现被编译过,参数和原来SQL语句不会有交集,也就避免了这种情况的发送;
A.Statement
B.PreparedStatement
C.ResultSet (游标,保持数据库的连接获取结果集,因此不能先断开数据库连接才获取)
D.DriverManager
A.Xml B.JavaScript C. Json D. Junit (
做单元测试的组件 与ajax无关
)
A.
B.
C.<%@ page import=”java.util.*” %> (编译时指令–>)
D .<%@ page include=”java.util.*” %>
==A. getContextPath() == (获取项目根目录)
B.getPath()
C.getRequestURL() (获取请求的URL地址)
D.getRequestURI() (URI)
A. dealFilter (ServletRequest request,ServletResponse response,FilterChain chain)
B. dealFilter (ServletRequest request,ServletResponse response)
C. doFilter (ServletRequest request,ServletResponse response,FilterChain chain)
D. doFilter (ServletRequest request,ServletResponse response)
forward:请求转发 只能在应用程序内进行请求转发,不能跨程序
A.forward之后可以使用原来的request对象,而且效率较高
B.sendRedirect之后不可以使用原来的request对象,而且效率较低。
C.forward地址栏不变化,只能在Web应用程序内的页面间跳转。
D.forward地址栏变化,可以跳转到任何页面和机器。
Servlet接口方法 init() service() destroy()
A、doGet方法 B、doPost方法
C、init方法 D、service方法
<servlet>
<servlet-name>PDFSvlservlet-name>
<servlet-class>com.etime.servlet.PDFSvlservlet-class>
servlet>
<servlet-mapping>
<servlet-name>PDFSvl<servlet-name>
<url-pattern>/pdfurl-pattern>
servlet-mapping>
仅根据这些片段判断,可能下列那些URI可以访问SimpleDemo应用的PDFSvl ( )
访问路径 /pdf
端口8088
计算机端口取值范围:1-65535 2^16-1
一般使用1024 以后的端口号 之前的端口号为预留系统的端口号,占用容易产生冲突
A.http://127.0.0.1:8080/SimpleDemo/servlet/PDFSvl
B.http://127.0.0.1:8088/SimpleDemo/servlet/PDFSvl
C.http://127.0.0.1:8088/SimpleDemo/pdf
D.http://127.0.0.1:8080/pdf
.A、<%@ page %>作用于整个JSP页面
B、可以在一个页面中使用多个<%@ page %>指令
C、为增强程序的可读性,建议将<%@ page %>指令放在JSP文件的开头,但不是必须的
D、<%@ page %>指令中的属性只能出现一次
规范 一般放JSP开头但不是必须的
属性可以出现多次 例如:import
execute : __返回值 —> statement 中的Execute返回值为Boolean 类型 表示sql有无执行结果
A. 结果集ResultSet B .受影响的记录数量
C. 有无ResultSet返回 D. SQL语句是否存在语法错误
A. 获取Cookie的名字用cookie的getName方法,getValue方法获取cookie的值
B. getMaxAge和 setMaxAge是获取和设置cookie经过多长时间过期的方法
C. Cookie是服务器端状态管理机制 (浏览器端 cookie在浏览器端上的)
D. 浏览器可以关闭Cookie功能
A. sendURL()
B. redirectURL()
C.getRequestDispatcher()
D.sendRedirect()
15.在J2EE中,在web.xml中,有如下代码:C
<session - config>
<session - timeout>30session - timeout>
session - config>
session过期时间配置方法:
①Java程序中对request进行配置 秒
②Application中的web.xml中session-config 分钟
③Tomcat根目录下的web.xml中配置 分钟
A.毫秒 B.秒
C.分钟 D.小时
A. getParameter方法只用于接收POST请求参数,接收GET请求参数需要使用getQueryString方法
getParamter可以获取get及post的请求参数
getQueryString 返回所有请求参数
B. 如果一个参数key有多个值,那么getParameter(key)方法会返回空
返回一组数据中的第一个数据
C. 如果一个参数key有多个值,那么getParameterValues(key)方法会返回一个包含所有值的字符串数组
D. getParameter方法返回Object对象,使用前要强制类型转换:如String str=(String) request.getParameter(key)
返回值为String类型
A.必须实现Filter接口
B.无需配置web.xml即可工作
C.可以由多个过滤器组成过滤器链分别工作
D.过滤器也可以配置初始化参数
A.http://www.edu-learn4fun.com
B./index
C.user/adduser.html
D…/user/adduser.html
A. req.getSession()
getSession带参的情况 参数 为Boolean类型
true 如无session对象则创建httpsession对象返回一个session对象
false 如无session对象则返回null
B. req.getSession(false)
C. req.getSession(true)
D. req.createSession()
A.从request获取传入的参数,可以调用getParameter方法
B.由Java Web应用的Servlet或JSP组件负责创建,当Servlet或JSP组件响应HTTP请求时,先创建HttpServletRequest对象
C.由程序员通过编码形式创建,以传递请求数据
D.以上都不对
A. *.html
B. *.jsp
C. /*
D. *
22.、在Web 项目的目录结构中,web.xml文件位于( )中。
A.src目录
B.文档根目录
C.META-INF目录
D.WEB-INF目录
设置字符编码。
A.response.setContentType()
B.response.setCharacterEncoding()
C.response.setPageCoding()
D.response.setCharset()
public class Animal{}
public class Dog extends Animal{}
public class Cat extends Animal{}
试分析以下代码:
1. Animal a1 = new Dog();
2. Animal a2 = new Cat();
3. Cat c2 = (Cat)a1;
下列说法正确的是():
A.程序正常运行
B.第2行编译错误;
C.第3行编译错误
多态特点 :
向上转型 随意转
向下转型 强转 InstanceOf判断是否同类型 再强转 否则 通过Try catch 抛出异常
D.程序运行时抛异常;
public class One{
public int f1(int x){}
}
public class Two extends One{
1.//insert code here
}
A.public void f1(int x){};
B.public int f1(long x){}; (重载)
C.public int f1(int x){}; (重写)
D.public void f1(long x){}; (重载)
A.int a
声明默认值则为0
B.double b=4.5
C.boolean b=true
D.float f=9.8
float 9.8默认为double类型 尾部需跟上F
A.div
B.span
C.h3
D.p
编译器会为我们提供无参构造方法
构造不能有返回值
可重载
可初始化设置参数
A.系统提供默认的构造方法
B.构造方法可以有参数,所以也可以有返回值
C.构造方法可以重载
D.构造方法可以设置参数
A. :q
B. :w
C. :wq (保存退出)
D. :q! (强制退出)
A. del /tmp/*
B. rm -rf /tmp (删除temp)
C. rm -Ra /tmp/*
D. rm -rf /tmp/* (删除temp/下的子目录)
1、在一个应用程序中不同的页面共享数据时,最好的JSP内置对象为___session___。
用户独有的数据session 会话期间都可以用
2、Servlet 类的存放位置是___/x/WEB-INF/classes__(设 Web 服务目录为 x)。
3、Tomcat服务器的默认端口是__8080__,可以通过修改Tomcat服务器安装目录中conf文件下的主配置文件_server.xml_来更改端口号。
4、在JSP文件中使用 对HTML文本进行注释;使用 ___
<%-- --%>
_____符号对JSP语句进行注释。
HTML注释
<%-- --%>
Jsp注释
/* */ //
Java注释
5、当前目录____./
_;上层目录用什么表示 ../
;主目录用什么表示 /
;切换目录用什么命令 cd
请求转发 | 重定向 |
---|---|
1次请求 | 2次请求 |
能带数据 | 不能带数据 |
只能在项目内容 | 任意互联网位置 |
Url地址栏不变 | 地址栏为最后访问资源的地址 |
面试回答?:
1)分别执行过程:
2)分别描述区别:
2、请简单介绍Servlet的生命周期。
- 生命周期方法:
init() service() destroy()
- init() 初始化 service()处理请求 destroy() 销毁
3、get请求和Post请求区别
- 从http协议层面来说,get请求用于资源获取,应该是安全和幂等的,而post请求表示该请求可能会修改服务器上的资源,所以我们一般查询数据一般采用get请求,而增加,修改,删除等操作应该使用post请求.
- get请求的扁担数据是放在url地址栏中的,而oist请求表单数据是放在请求体里面的.所以:
2.1 get请求得url地址栏中有数据,而post得数据在请求体中,所以对于信息安全来说,post相对安全一些
2.2由于url地址栏得长度有限制,限制为2k,所以get的请求的数据长度最大不能超过2k,而post限制;
2.3get请求可以收藏,可以添加书签,刷新无害,记录历史记录;而post请求不行,原因在于浏览器在记录历史记录,添加书签只记录地址,并不会记录请求体.
2.4如果上传文件,只能采用post请求;- get请求与post 请求编码方式不一样
4、cookie,session,application的区别?
Cookie | Session | Application | |
---|---|---|---|
存放位置 | 浏览器 | 服务器,浏览器存放JSESSIONID | 服务器 |
内容 | String字符串 | Object | Object |
存放时间 | 可设置,默认会话结束后删除 | 默认30分钟,可设置 | 从服务器启动到服务器关闭整个周期 |
数据权限 | 用户独有 | 用户独有 | 所有用户共享 |
5、接口和抽象类的区别?
往往答不全
接口 | 抽象类 |
---|---|
不能有方法实现,所有方法都是抽象方法 | 可以有方法实现 |
所有方法的访问修饰都是public的 | 可以定义protected,public,default (不能定义为private 无法继承抽象类) |
所有的成员变量默认是静态常量 | 可以定义普通变量 |
接口时多继承的 | 抽象类只能继承一个父类(类的继承时单继承) |
jdk1.8之后,可以定义接口方法的默认实现 | |
接口一般用于定义标准 | 抽象类一般用于复用 |
6、请描述vim编辑器的三种模式,以及三种模式之间如何切换。
VIM 编辑器的三种模式 命令模式 —> i
-->编辑模式 -->ESC
–>命令模式—>:
—>末行模式—>ESC
---->命令模式
四、数据库(20分,每题4分)
数据库中有如下数据表:
员工表(staff)
员工编号 sid number
员工姓名 sname varchar
部门番号 sdid number
部门表(development)
部门番号 did number
部门名称 dname varchar
项目表 (project)
项目番号 pid number
部门番号 pdid number
项目名称 pname varchar
奖金表(bonus)
员工编号 bsid number 主键
项目番号 bpid number 主键
奖金 bbouns number
1、统计奖金小于2000,2000-3999,4000-5999,6000-7999,8000及以上的人数;
select
sum(case when bonus<2000 then 1 else 0 end) as '<2000'),
sum(case when bonus between 2000 and 3999 then 1 else 0 end) as '2000--3999'),
...
from
(select sum(bbonus) as sumbonus,bsid from bonus group by bsid) t
2、查询平均奖金大于10000的人数最多的部门;
select avg(bbonus) as avgbonus,count(b.sid) as countstaff,pid
from bonus a inner join staff b on a.sid = b.sid
group by spid
having avgbonus > 10000 and countstaff = max(countstaff)
/*
order by countstaff desc
limit 1*/
3、删除部门名称为‘第一部门’的所有奖金记录
delete from bonus where bpid in (select pid from project inner join department on (project.pid = b.did ) where b.dname = '第一部门')
4、新增一个员工编号为‘20130001’,项目番号为‘D0001’,他的奖金与员工编号为
insert into bonus (bsid,bpid,bbnouns) values('20130001','D0001','')
‘20140001’的项目平均奖金一样
5、修改项目番号为‘D0001’的部门名称为“成都银行”。
update department set dname = '成都银行' where did =(select pdid from project where pid ='d0001')