sql优化,js,数据库 适合面试者看的一些要点

来源:互联网 发布:手机淘宝如何一件代发 编辑:程序博客网 时间:2024/06/12 03:41
**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" onsubmit="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




       


                              
0 0
原创粉丝点击