配色: 字号:
面试六
2016-03-03 | 阅:  转:  |  分享 
  




















三.html&JavaScript&ajax

1.判断第二个日期比第一个日期大

如何用脚本判断用户输入的的字符串是下面的时间格式2004-11-2112等等,另外我需要用户输入两个,并且后一个要比前一个晚,只允许用JAVASCRIPT,请详细帮助作答,,

//这里可用正则表达式判断提前判断一下格式,然后按下提取各时间字段内容



window.onload=function()

{

//这么写是为了实现jshtml代码的分离,当我修改js时,不能影响html代码。

document.getElementById("frm1").onsubmit=

function(){

vard1=this.d1.value;

vard2=this.d2.value;

if(!verifyDate(d1)){alert("第一个日期格式不对");returnfalse;}

if(!verifyDate(d2)){alert("第二个日期格式不对");returnfalse;}

if(!compareDate(d1,d2)){alert("第二个日期比第一日期小");returnfalse;}

};

}

functioncompareDate(d1,d2)

{

vararrayD1=d1.split("-");

vardate1=newDate(arrayD1[0],arrayD1[1],arrayD1[2]);

vararrayD2=d2.split("-");

vardate2=newDate(arrayD2[0],arrayD2[1],arrayD2[2]);

if(date1>date2)returnfalse;

returntrue;

}

functionverifyDate(d)

{

vardatePattern=/^\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1])$/;

returndatePattern.test(d);

}













2.用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。





1
2
3
4
5
6
7
8
9
10






window.onload=function()

{

vartbl=document.getElementById("tbl");

rows=tbl.getElementsByTagName("tr");

for(i=0;i
{

varj=parseInt(i/3);

if(j%2==0)rows[i].style.backgroundColor="#f00";

elserows[i].style.backgroundColor="#0f0";

}

}



3、HTML的?form提交之前如何验证数值文本框的内容全部为数字?否则的话提示用户并终止提交?











functionchkForm(this)

{

varvalue=thist.d1.value;

varlen=value.length;

for(vari=0;i
{

if(value.charAt(i)>"9"||value.charAt(i)<"0")

{

alert("含有非数字字符");

returnfalse;

}

}

returntrue;

}



4、请写出用于校验HTML文本框中输入的内容全部为数字的javascript代码





functionchkNumber(eleText)

{

varvalue=eleText.value;

varlen=value.length;

for(vari=0;i
{

if(value.charAt(i)>"9"||value.charAt(i)<"0")

{

alert("含有非数字字符");

eleText.focus();

break;

}

}

}



除了写完代码,还应该在网页上写出实验步骤和在代码中加入实现思路,让面试官一看就明白你的意图和检查你的结果。

5、说说你用过那些ajax

四.Javaweb

1、Tomcat

答:web.xml的监视,把jsp提前编辑成Servlet。

有富余物理内存的情况,加大tomcatjvm的内存

2、HTTPGET与POST方式的区别

答:servletjavax.servlet.Servlet接口的init,service和destroy方法表达。

3、解释一下什么是servlet;

答:servletjavax.servlet.Servlet接口的init,service和destroy方法表达。

4、说一说Servlet?

答:servletjavax.servlet.Servlet接口的init,service和destroy方法表达。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do()方法。结束服务,web容器调用servlet的destroy()方法。

5、Servlet

publicclassServletNameextendsHttpServlet{

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throws

ServletException,IOException{

}

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throws

ServletException,IOException{

}

}

6、SERVLETAPI中forward()与redirect()的区别?

答:forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用

sendRedirect()方法。

7、什么情况下调用doGet()doPost()?

Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()。

8、Request

setAttribute(Stringname,Object):设置名字为name的request的参数值

getAttribute(Stringname):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式

getContentLength():返回请求的Body的长度

getHeader(Stringname):获得HTTP协议定义的文件头信息

getHeaders(Stringname):返回指定名字的requestHeader的所有值,结果是一个枚举的实例

getHeaderNames():返回所以requestHeader的名字,结果是一个枚举的实例

getInputStream():返回请求的输入流,用于获得请求中的数据

getMethod():获得客户端向服务器端传送数据的方法

getParameter(Stringname):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParametervalues(Stringname):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址

getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端的名字

getSession([Booleancreate]):返回和请求相关Session

getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(Stringname):删除请求中的一个属性

9、forwardredirect的区别

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect就是服务端根据逻辑,,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

10、request.getAttribute()request.getParameter()有何区别?

11.jsp有哪些内置对象??分别有什么方法?

答:JSP9个内置的对象:

request?用户端请求,此请求会包含来自GET/POST请求的参数

response?网页传回用户端的回应

pageContext?网页的属性是在这里管理

session?与请求有关的会话期

applicationservlet?正在执行的内容

out?用来传送回应的输出

config?servlet的构架部件

pageJSP

exception?针对错误网页,未捕捉的例外

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,essay-header,和session数据的有用的方法。

response表示HttpServletResponsecookies,头信息等)

out对象是javax.jsp.JspWriter

pageContext表示一个javax.servlet.jsp.PageContextservlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

session表示一个请求的javax.servlet.http.HttpSessionSession可以存贮用户的状态信息

applicaton?表示一个javax.servle.ServletContextservlet引擎和servlet环境的信息

config表示一个javax.servlet.ServletConfigservlet实例的初始化参数。

page表示从该页面产生的一个servlet

12.jsp有哪些动作??

(这个问题似乎不重要,不明白为何有此题)

答:JSP6种基本动作

jsp:include:在页面被请求的时候引入一个文件。

jsp:useBean:寻找或者实例化一个JavaBean。

jsp:setProperty:设置JavaBean的属性。

jsp:getProperty:输出某个JavaBean的属性。

jsp:forward:把请求转到一个新的页面。

jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

13、JSP

isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)

14.JSP中动态INCLUDEINCLUDE的区别?

答:动态INCLUDEjsp:include动作实现

它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面?<%@includefile=included.htm%>

15、两种跳转方式分别是什么??

(下面的回答严重错误,应该是想问forwardsendRedirect的区别,毕竟出题的人不是专业搞文字艺术的人,可能表达能力并不见得很强,用词不一定精准,加之其自身的技术面也可能存在一些问题,不一定真正将他的意思表达清楚了,严格意思上来讲,一些题目可能根本就无人能答,所以,答题时要掌握主动,只要把自己知道的表达清楚就够了,而不要去推敲原始题目的具体含义是什么,不要一味想着是在答题)

答:有两种,分别为:





前者页面不会转向include.后者完全转向新页面,不会再回来。相当于goto语句。

16、页面间对象传递的方法

requestsession,application,cookie等

17、JSPServlet有哪些相同点和不同点,他们之间的联系是什么?

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

18、MVC?如何实现?

答:MVCModel-View-Controller的简写。Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),View是应用的表示面(由JSP页面产生),Controller是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

19、我们在webiso8859-1等,如何输出一个某种编码的字符串?

PublicStringtranslate(Stringstr){

StringtempStr="";

try{

tempStr=newString(str.getBytes("ISO-8859-1"),"GBK");

tempStr=tempStr.trim();

}

catch(Exceptione){

System.err.println(e.getMessage());

}

returntempStr;

}

20.现在输入nreset

五.

1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。

employee:

eid,ename,salary,deptid;

selectfromemployeeorderbydeptiddesc,salary

2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序

创建表:

mysql>createtableemployee921(idintprimarykeyauto_increment,namevarchar(5

0),salarybigint,deptidint);

插入实验数据:

mysql>insertintoemployee921values(null,''zs'',1000,1),(null,''ls'',1100,1),(null

,''ww'',1100,1),(null,''zl'',900,1),(null,''zl'',1000,2),(null,''zl'',900,2),(null,''z

l'',1000,2),(null,''zl'',1100,2);

编写sql

()selectavg(salary)fromemployee921groupbydeptid;

()mysql>selectemployee921.id,employee921.name,employee921.salary,employee921.dep

tidtidfrom?employee921wheresalary>(selectavg(salary)fromemployee921wheredeptid=tid);

效率低的一个语句,仅供学习参考使用(在groupby之后不能使用where,只能使用having,在groupby之前可以使用where,即表示对过滤后的结果分组):

mysql>selectemployee921.id,employee921.name,employee921.salary,employee921.dep

tidtidfrom?employee921wheresalary>(selectavg(salary)fromemployee921groupbydeptidhavingdeptid=tid);

()selectcount(),tid

from(

selectemployee921.id,employee921.name,employee921.salary,employee921.deptidtid

fromemployee921

wheresalary>

(selectavg(salary)fromemployee921wheredeptid=tid)

)ast

groupbytid;

另外一种方式:关联查询

selecta.ename,a.salary,a.deptid

fromempa,

(selectdeptd,avg(salary)avgsalfromempgroupbydeptid)b

wherea.deptid=b.deptidanda.salary>b.avgsal;

3、存储过程与触发器必须讲,经常被面试到?

createprocedureinsert_Student(_namevarchar(50),_ageint,out_idint)

begin

insertintostudentvalue(null,_name,_age);

selectmax(stuId)into_idfromstudent;

end;

callinsert_Student(''wfz'',23,@id);

select@id;

mysql>createtriggerupdate_StudentBEFOREupdateonstudentFOREACHROW

->selectfromstudent;

触发器不允许返回结果

createtriggerupdate_StudentBEFOREupdateonstudentFOREACHROW

insertinto?studentvalue(null,''zxx'',28);

mysql的触发器目前不能对当前表进行操作

createtriggerupdate_StudentBEFOREupdateonstudentFOREACHROW

deletefromarticles?whereid=8;

这个例子不是很好,最好是用删除一个用户时,顺带删除该用户的所有帖子

这里要注意使用OLD.id

触发器用处还是很多的,比如校内网、开心网、FacebookUCH没有用触发器,效率和数据处理能力都很低。

存储过程的实验步骤:

mysql>delimiter|

mysql>createprocedureinsertArticle_Procedure(pTitlevarchar(50),pBidint,out

pIdint)

->begin

->insertintoarticle1value(null,pTitle,pBid);

->selectmax(id)intopIdfromarticle1;

->end;

->|

QueryOK,0rowsaffected(0.05sec)

mysql>callinsertArticle_Procedure(''传智播客'',1,@pid);

->|

QueryOK,0rowsaffected(0.00sec)

mysql>delimiter;

mysql>select@pid;

+------+

|@pid|

+------+

|3?|

+------+

1rowinset(0.00sec)

mysql>selectfromarticle1;

+----+--------------+------+

|id|title?|bid|

+----+--------------+------+

|1?|test|1|

|2?|chuanzhiboke|1|

|3?|?传智播客?|1|

+----+--------------+------+

3rowsinset(0.00sec)

触发器的实验步骤:

createtableboard1(idintprimarykeyauto_increment,namevarchar(50),ar

ticleCountint);

createtablearticle1(idintprimarykeyauto_increment,titlevarchar(50)

,bidintreferencesboard1(id));

delimiter|

createtriggerinsertArticle_Triggerafterinsertonarticle1foreachro

wbegin

->updateboard1setarticleCount=articleCount+1whereid=NEW.bid;

->end;

->|

delimiter;

insertintoboard1value(null,''test'',0);

insertintoarticle1value(null,''test'',1);

还有,每插入一个帖子,都希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,用触发器做效率就很高。下次课设计这样一个案例,写触发器时,对于最后发帖时间可能需要用declare方式声明一个变量,或者是用NEW.posttime来生成。

4、数据库三范式是什么?

第一范式(1NF,不可再分。所有关系型数据库系统都满足第一范式)

数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。

第二范式(2NF

第二范式(2NF1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。

第二范式(2NF

第三范式的要求如下:

满足第三范式(3NF2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

所以第三范式具有如下特征:12,每一行都能区分。3,每一个表都不包含其他表已经包含的非主关键字信息。

例如,帖子表中只能出现发帖人的idid,还同时出现发帖人姓名,否则,只要出现同一发帖人id的所有记录,它们中的姓名部分都必须严格保持一致,这就是数据冗余。

5、说出一些数据库优化方面的经验?

用PreparedStatementStatement性能高:一个sql发给服务器去执行,涉及步骤:语法检查、语义分析,编译,缓存

“inertintouservalues(1,1,1)”-à二进制

“inertintouservalues(2,2,2)”-à二进制

“inertintouservalues(?,?,?)”-à二进制

有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。(比喻:就好比免检产品,就是为了提高效率,充分相信产品的制造商)

(对于hibernateempleyee->Deptment对象,现在设计时就成了employeeàdeptid)

看mysql

1.?selecte.name,e.salarywheree.managerid=(selectidfromemployeewherename=''zxx'');

2.?selecte.name,e.salary,m.name,m.salaryfromemployeese,employeesmwhere

e.managerid=m.idandm.name=''zxx'';

表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等

将姓名和密码单独从用户表中独立出来。这可以是非常好的一对一的案例哟!

sqlsql命令的缓存功能,更加需要统一大小写,sql语句à发给oracle服务器à语法检查和编译成为内部指令à缓存和执行指令。根据缓存的特点,不要拼凑条件,而是用?和PreparedStatment

还有索引对查询性能的改进也是值得关注的。

备注:下面是关于性能的讨论举例

43个城市

mn

selectfromflight,citywhereflight.startcityid=city.cityidandcity.name=''beijing'';

m+n

selectfromflightwherestartcityid=(selectcityidfromcitywherecityname=''beijing'');

selectflight.id,''beijing'',flight.flightTimefromflightwherestartcityid=(selectcityidfromcitywherecityname=''beijing'')

6、union和unionall有什么不同?

假设我们有一个表Student

droptablestudent;

createtablestudent(idintprimarykey,namenvarchar2(50)notnull,scorenumbernotnull);

insertintostudentvalues(1,''Aaron'',78);insertintostudentvalues(2,''Bill'',76);insertintostudentvalues(3,''Cindy'',89);insertintostudentvalues(4,''Damon'',90);insertintostudentvalues(5,''Ella'',73);insertintostudentvalues(6,''Frado'',61);insertintostudentvalues(7,''Gill'',99);insertintostudentvalues(8,''Hellen'',56);insertintostudentvalues(9,''Ivan'',93);insertintostudentvalues(10,''Jay'',90);

commit;

Union和UnionAll的区别。

selectfromstudentwhereid<4

union

selectfromstudentwhereid>2andid<6

结果将是

1Aaron782Bill763Cindy894Damon905Ella73

如果换成UnionAll

1Aaron782Bill763Cindy893Cindy894Damon905Ella73

可以看到,UnionUnionAll的区别之一在于对重复结果的处理。

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:selectfromgc_dfysunionselectfromls_jg_dfys这个SQL而UNIONALL从效率上说,UNIONALLUNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNIONALL,

7.分页语句

取出sql表中第3140的记录(以自动增长ID为主键)

sqlserver方案1:

selecttop10fromtwhereidnotin(selecttop30idfromtorderbyid)ordebyid

sqlserver2:

selecttop10fromtwhereidin(selecttop40idfromtorderbyid)orderbyiddesc

mysqlselectfromtorderbyidlimit30,10

oracle方案:selectfrom(selectrownumr,fromtwherer<=40)wherer>30



献花(0)
+1
(本文系领导love经...首藏)
类似文章 更多
发表评论: