**1.如何找出项目中的慢SQL, 如何优化这些SQL**
第一种,如果使用的是mybatis,监控过程如下:
1.web.xml中增加:
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
2 . 访问该网址,查询sql监控即可:http://地址:端口/druid/sql.html //例如我的是:http://192.168.1.134:8080/druid/sql.html
第二种,如果没有使用mybatis:
1.可以使用spring中AOP,环绕通知,设置通知前时间,和通知后的时间差。
2.代理模式
3.使用数据库连接池自带的监控,这个网址有详细说明:
http://blog.csdn.net/aqsunkai/article/details/51760753
**2.如何防止重复提交**
**例如:页面有一个提交按钮 , 如何防止网络慢的时候用户多次点击提交,导致重复的提交**
1.jsp页面可以这样设置,boolean判断:
var isCommited = false; //通过boolean来处理
function dosubmit(){
if(isCommited == false){ //刚点击时是false
isCommited = true;
return true; //返回true
}else{
return false; //如果再次点击,返回false
}
}
2.如点击,可以把提交按钮禁用
function dosubmit(){
var input = document.getElementById("submit");
input.disabled = "disabled";
return true;
}
<form action="/form" οnsubmit="return dosubmit()" method="post"> //返回boolean值
账号:<input type="text" name="admin">
<input type="submit" value="提交" id="submit">
</form>
3.可以在提交前,让客户输入随机验证码,提交后把验证码提交后台,与存在session里面的匹配,如相同则提交,
同时删除存在session的值,以防止重复提交,如果因网络慢再次点击验证码是同一验证码,就不给客户提交。常用这个。
具体代码请看网址:http://www.mamicode.com/info-detail-1091462.html。
**3.前端用JS校验过的表单, 提交到后端还需要重复校验吗,为什么?**
服务端是必须进行验证的,这是最后一道防线,马虎不得。
举个例子:如果服务端不验证,那么完全可以在任何连接互联网的地方重写一个没有JS验证的表单,
然后提交给你网站的程序,后果可想而知,几乎就是自由出入
客户端的JS验证其实质是提升用户体验,可以让用户提前知道填写资料的对错,否则等到一提交,再返回个错误,把原来填的都清空了,那就抓狂了
根据Javascript优雅退化的原则,页面要在禁用JS的情况下仍然能够正常使用。虽然可能用户体验差了点,少了某些效果,但基本的功能都还是可以实现的
所以,不要过分地依赖JS,服务端该验证的还得验证
写服务器程序,给你一个提醒:不要相信任何客户端数据,
JS只是一个辅助验证,是为了减轻不必要的提交,比如提交大堆数据过去,发现有一个数据不合法,这样岂不是浪费服务器资源?
但服务器端的是少不了这些验证的,因为提交者可能不是浏览器,即一些模拟发送工具.
**4.后端校验过的数据, 前端还需要校验吗, 为什么?**
我觉得后端验证过的话,说明数据没有问题,因为后端是最后一道把关,所以前端是不需要验证的。
**5.需求开发周期为一个月,当开发到半途产品要求修改需求, 你一般怎么处理**
我的回答是:如果开发到半途需要修改时,直接与你上司沟通,以免担责;
如果与上司沟通好了,如果觉得可以修改需求,那只要在一个月内自己尽力完成,例如:加班。如果有更好的答案,请告知。
**6.页面中绑定事件有几种方式, 那种最好,为什么?**
1.元素的属性,加"onxxx = 函数名()"
2.JS里动态绑定
例如:
var btn = document.querySelector("button");
btn.onclick = fun; //fun 是函数名
function fun(){}
3.addEventListener(DOM最新规范,目前是最常用)
imgs[i].addEventListener("mouseleave",function(){
var divNode = document.querySelector(".divId");
divNode.removeChild(divNode.firstChild);
});
**7.说几个你常用的数据库函数。 (至少5个oracle ,5个mysql)**
oracle函数:
1.SELECT LOWER('AaBbCcDd')AaBbCcDd FROM DUAL //将字符串全部转为小写
2.SELECT REPLACE('he love you','he','i') test FROM DUAL //将字符表达式值中,部分相同 字符串,替换成新的字符串
3.to_char(sysdate,'ddd') // 每年第几天
4.SELECT to_date(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM DUAL
5.SELECT COUNT(*) 数量 FROM USER; //还有些其他的聚合函数,例如:sum,avg,max,min。
mysql函数:
1.SELECT UPPER("asdf") 大写 FROM DUAL; //将字符串全部转为大写
2.SELECT DAY('03/12/1998') AS 'Day Number' FROM DUAL //日期时间函数,MONTH,YEAR
3.SELECT COUNT(*) 数量 FROM USER; //还有些其他的聚合函数,例如:sum,avg,max,min。
4.SELECT REVERSE("sdf") FROM DUAL //字符串反转
5.SELECT PI() FROM DUAL //数学函数,例如:sin,cos,log,tan等等
**8.原生ajax如何写 , Jquery 对Ajax的封装有几个常用的方法**
原生ajax:
A.创建xmlHttpRequest. var xmlhttp = new XMLHttpRequest();
B.设置回调事件
xmlhttp.onreadystatechange = function(){
// 如果是请求成功则处理此响应
if(xmlhttp.readyState==4 && xmlhttp.status==200){
// 处理内容
alert(xmlhttp.responseText);
}
}
C.向发服务器发送请求
xmlhttp.open("请求方式", "请求地址", 是否异步);
xmlhttp.send(); // 发送请求
Jquery对Ajax封装的常用方法:
$.load(),$.ajax(),$.get(),$.post(),$.getJSON(),$.GETSCRIPT().
**9.前端框架你用过哪些 (bootstrap , jquery , [easyui , ext 需要去看看,至少能说出名字] )**
bootstrap : 这个里面封装了很多很常用的插件非常实用。
jquery: 常用,具体可以查看API。
easyui: jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。
开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。
extjs:自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。
**10.说一下你项目中使用AOP的场景**
比如:日志,事物,权限,调试和持久化管理等。举例说明一下。
**11.有如下代码, 你该如何思考写单元测试? (为每一个分支写一个测试方法)**
public int method(int v) {
if (条件1){
return 结果1;
}
if (条件2){
return 结果2;
}
if (条件3){
return 结果3;
}
if (条件4){
return 结果4;
}
}
为了数据尽量减少BUG,建议每个分支写一个测试方法。
**12.新项目该如何选择数据库, 你选择mysql还是oracle**
除去第三方因素,从技术角度说,谁可以满足系统运行并且有扩展和冗余,就用谁;
从money这个角度来说嘛,当然是开源免费的好;大型项目,选择ORACLE,中小型项目,选择mysql
第一种,如果使用的是mybatis,监控过程如下:
1.web.xml中增加:
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
2 . 访问该网址,查询sql监控即可:http://地址:端口/druid/sql.html //例如我的是:http://192.168.1.134:8080/druid/sql.html
第二种,如果没有使用mybatis:
1.可以使用spring中AOP,环绕通知,设置通知前时间,和通知后的时间差。
2.代理模式
3.使用数据库连接池自带的监控,这个网址有详细说明:
http://blog.csdn.net/aqsunkai/article/details/51760753
**2.如何防止重复提交**
**例如:页面有一个提交按钮 , 如何防止网络慢的时候用户多次点击提交,导致重复的提交**
1.jsp页面可以这样设置,boolean判断:
var isCommited = false; //通过boolean来处理
function dosubmit(){
if(isCommited == false){ //刚点击时是false
isCommited = true;
return true; //返回true
}else{
return false; //如果再次点击,返回false
}
}
2.如点击,可以把提交按钮禁用
function dosubmit(){
var input = document.getElementById("submit");
input.disabled = "disabled";
return true;
}
<form action="/form" οnsubmit="return dosubmit()" method="post"> //返回boolean值
账号:<input type="text" name="admin">
<input type="submit" value="提交" id="submit">
</form>
3.可以在提交前,让客户输入随机验证码,提交后把验证码提交后台,与存在session里面的匹配,如相同则提交,
同时删除存在session的值,以防止重复提交,如果因网络慢再次点击验证码是同一验证码,就不给客户提交。常用这个。
具体代码请看网址:http://www.mamicode.com/info-detail-1091462.html。
**3.前端用JS校验过的表单, 提交到后端还需要重复校验吗,为什么?**
服务端是必须进行验证的,这是最后一道防线,马虎不得。
举个例子:如果服务端不验证,那么完全可以在任何连接互联网的地方重写一个没有JS验证的表单,
然后提交给你网站的程序,后果可想而知,几乎就是自由出入
客户端的JS验证其实质是提升用户体验,可以让用户提前知道填写资料的对错,否则等到一提交,再返回个错误,把原来填的都清空了,那就抓狂了
根据Javascript优雅退化的原则,页面要在禁用JS的情况下仍然能够正常使用。虽然可能用户体验差了点,少了某些效果,但基本的功能都还是可以实现的
所以,不要过分地依赖JS,服务端该验证的还得验证
写服务器程序,给你一个提醒:不要相信任何客户端数据,
JS只是一个辅助验证,是为了减轻不必要的提交,比如提交大堆数据过去,发现有一个数据不合法,这样岂不是浪费服务器资源?
但服务器端的是少不了这些验证的,因为提交者可能不是浏览器,即一些模拟发送工具.
**4.后端校验过的数据, 前端还需要校验吗, 为什么?**
我觉得后端验证过的话,说明数据没有问题,因为后端是最后一道把关,所以前端是不需要验证的。
**5.需求开发周期为一个月,当开发到半途产品要求修改需求, 你一般怎么处理**
我的回答是:如果开发到半途需要修改时,直接与你上司沟通,以免担责;
如果与上司沟通好了,如果觉得可以修改需求,那只要在一个月内自己尽力完成,例如:加班。如果有更好的答案,请告知。
**6.页面中绑定事件有几种方式, 那种最好,为什么?**
1.元素的属性,加"onxxx = 函数名()"
2.JS里动态绑定
例如:
var btn = document.querySelector("button");
btn.onclick = fun; //fun 是函数名
function fun(){}
3.addEventListener(DOM最新规范,目前是最常用)
imgs[i].addEventListener("mouseleave",function(){
var divNode = document.querySelector(".divId");
divNode.removeChild(divNode.firstChild);
});
**7.说几个你常用的数据库函数。 (至少5个oracle ,5个mysql)**
oracle函数:
1.SELECT LOWER('AaBbCcDd')AaBbCcDd FROM DUAL //将字符串全部转为小写
2.SELECT REPLACE('he love you','he','i') test FROM DUAL //将字符表达式值中,部分相同 字符串,替换成新的字符串
3.to_char(sysdate,'ddd') // 每年第几天
4.SELECT to_date(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM DUAL
5.SELECT COUNT(*) 数量 FROM USER; //还有些其他的聚合函数,例如:sum,avg,max,min。
mysql函数:
1.SELECT UPPER("asdf") 大写 FROM DUAL; //将字符串全部转为大写
2.SELECT DAY('03/12/1998') AS 'Day Number' FROM DUAL //日期时间函数,MONTH,YEAR
3.SELECT COUNT(*) 数量 FROM USER; //还有些其他的聚合函数,例如:sum,avg,max,min。
4.SELECT REVERSE("sdf") FROM DUAL //字符串反转
5.SELECT PI() FROM DUAL //数学函数,例如:sin,cos,log,tan等等
**8.原生ajax如何写 , Jquery 对Ajax的封装有几个常用的方法**
原生ajax:
A.创建xmlHttpRequest. var xmlhttp = new XMLHttpRequest();
B.设置回调事件
xmlhttp.onreadystatechange = function(){
// 如果是请求成功则处理此响应
if(xmlhttp.readyState==4 && xmlhttp.status==200){
// 处理内容
alert(xmlhttp.responseText);
}
}
C.向发服务器发送请求
xmlhttp.open("请求方式", "请求地址", 是否异步);
xmlhttp.send(); // 发送请求
Jquery对Ajax封装的常用方法:
$.load(),$.ajax(),$.get(),$.post(),$.getJSON(),$.GETSCRIPT().
**9.前端框架你用过哪些 (bootstrap , jquery , [easyui , ext 需要去看看,至少能说出名字] )**
bootstrap : 这个里面封装了很多很常用的插件非常实用。
jquery: 常用,具体可以查看API。
easyui: jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。
开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。
extjs:自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。
**10.说一下你项目中使用AOP的场景**
比如:日志,事物,权限,调试和持久化管理等。举例说明一下。
**11.有如下代码, 你该如何思考写单元测试? (为每一个分支写一个测试方法)**
public int method(int v) {
if (条件1){
return 结果1;
}
if (条件2){
return 结果2;
}
if (条件3){
return 结果3;
}
if (条件4){
return 结果4;
}
}
为了数据尽量减少BUG,建议每个分支写一个测试方法。
**12.新项目该如何选择数据库, 你选择mysql还是oracle**
除去第三方因素,从技术角度说,谁可以满足系统运行并且有扩展和冗余,就用谁;
从money这个角度来说嘛,当然是开源免费的好;大型项目,选择ORACLE,中小型项目,选择mysql