我的美团面试

来源:互联网 发布:淘宝大学一飞 编辑:程序博客网 时间:2024/04/28 17:28

1 在<ul id="test"></ul>中添加<li>1</li><li>2</li><li>3</li>

    $(document).ready(function(){
        var ul = document.getElementById("test");
        var li;
        var textNode;
        for(var i=0;i<30;i++){
            li= document.createElement("li");
            textNode=document.createTextNode(i+1);
            li.appendChild(textNode);
            ul.appendChild(li);
        }
    });

    <ul id="test">
    </ul>



2 在第一题的基础上实现点击哪个li,弹出对应信息


$(document).ready(function(){
        
        var EventUtil={
                
                addHandler:function(element,type,handler){
                    if(element.addEventListener){
                        console.log("非IE浏览器,如火狐类的!");
                        element.addEventListener(type,handler,false);
                    }else if(element.attachEvent){
                        console.log("IE");
                        element.attachEvent("on"+type,handler);
                        handler.call(element);
                    }else{
                        console.log("其他");
                        element["on"+type]=handler;
                    }
                },
                removeHandler:function(element,type,handler){
                    if(element.removeEventListener){
                        element.removeEventListener(type,handler,false);
                    }else if(element.detachEvent){
                        element.detachEvent("on"+type,handler);
                    }else{
                        elemetn["on"+type]=null;
                    }
                },
                getEvent:function(event){
                    return event?event:window.event;
                },
                getTarget:function(event){
                    return event.target||event.srcElement;    //event.srcElement为IE中的对象
                }
            };
            
            var ulListner=document.getElementById("test");
            EventUtil.addHandler(ulListner, "click", function(event){
                  event=EventUtil.getEvent(event);
                  var target=EventUtil.getTarget(event);
                  if(target.tagName.toLowerCase()==='li'){
                      var _v=target.textContent||target.innerText;
                      console.log(_v);
                      alert(_v);
                  }
            });
    });

    <ul id="test">

 <li>1</li>

<li>2</li>

<li>3</li>

<li>4</li>

    </ul>


3 写一下原生ajax过程

<script type="text/javascript">
//参考网址  http://abstractforever.iteye.com/blog/524148
function getVerify(){//校验

    var xhr=createXHR();
    var userName = document.getElementById("userName").value;//获取用户名字  
    console.log(userName);
    //xhr.onreadystatechange=callback;//注册回调函数
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4){//完成,已经接受到全部响应数据,而且已经在客户端使用
            if(xhr.status==200){
                var responseText=xhr.responseText;
                var divNode=document.getElementById("result");  
                divNode.innerHTML=responseText;
            }
            
        }
    };
    xhr.open("GET", "servlet/UserServlet?username="+userName, true);//true表示异步
    
    //同步方式下,send这句话会在服务器段数据回来后才执行完  
    //异步方式下,send这句话会立即完成执行  
    xhr.send(null);
}

function postVerify(){//校验

    var xhr=createXHR();
    var userName = document.getElementById("userName").value;//获取用户名字  
    console.log(userName);
    //xhr.onreadystatechange=callback;//注册回调函数
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4){//完成,已经接受到全部响应数据,而且已经在客户端使用
            if(xhr.status==200){
                var responseText=xhr.responseText;
                var divNode=document.getElementById("result");  
                divNode.innerHTML=responseText;
            }
            
        }
    };
    xhr.open("POST", "servlet/UserServlet", true);//true表示异步
    //POST方式需要自己设置http的请求头  
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
     //POST方式发送数据  
    xhr.send("username=" + userName);  
}

function createXHR(){
 var xmlHttpRequest=null;
 if(window.XMLHttpRequest){//针对FireFox,Mozillar,Opera,Safari,IE7,IE8  
    console.log("XMLHttpRequest对象");
    xmlHttpRequest=new XMLHttpRequest();
 }else if(window.ActiveXObject){ // //针对IE6,IE5.5,IE5
     console.log("ActiveXObject对象");
     //两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中  
     //排在前面的版本较新  
     var activexName = [ "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ];
     for ( var i = 0; i < activexName.length; i++) {  
         try {  
             //取出一个控件名进行创建,如果创建成功就终止循环  
             //如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建  
             xmlHttpRequest = new ActiveXObject(activexName[i]);  
             break;  
         } catch (e) {  
         }  
     }
 }else{
     alert("创建对象失败!");
 }
 return xmlHttpRequest;
}
</script>
</head>

<body>

<input type="text" name="userName" id="userName"/>
<input type="button" onclick="getVerify()" value="get验证"/>
<input type="button" onclick="postVerify()" value="post验证"/>
<br/>
结果为(get的结果可能为乱码,Post传递参数没有乱码):
<div id="result">

</div>

</body>


后台界面为:

response.setContentType("text/html");

String username = request.getParameter("username");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        // 将数据返回给页面
        out.print("" + username + "----可以使用");


4 说一下状态码

100继续,一般在发送post请求时,已发送了http header之后服务端将返回此消息,表示确认,之后发送具体参数信息;

200正常返回信息

201请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。

202服务器已经接受请求,但还未处理

301请求的网页已永久移到新位置

302临时性重定向

303临时性重定向,且总是使用GET请求新的URI

304自上次请求后,请求的网页未修改过

400服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。

401请求未授权

403禁止访问

404找不到如何与URI相匹配的资源

500服务器错误

503服务器暂时无法处理请求(可能是过载或维护)

5 输出:

var Obj={
v1:"ttt",
te:function(){
 console.log(this.v1);
 console.log(this);
}
}

Obj.te();//


结果为:

ttt
Object { v1="ttt",  te=function()}


6 说一下三次握手的过程

参考了Simple life的博客,网址:http://blog.csdn.net/whuslei/article/details/6667471



7 说一下你知道的排序算法,并就一种,写代码


8  二维数组:



/*
 1  0  0  0
 2  5  0  0
 7  9  6  0
 10 11 3  2

 相邻相加求最大值,1可以跟2或者5,5可以跟9或者6,6可以跟3或者2,加到最下方,求最大值
 1
 2 5
 7 9 6
 10 11 3 2
 
 输出为:
1   
3   6   
10   15   12   
20   26   18   14   
最大值max为b[3][1]=26  i值为=3  最后的j值为=1
 *
 */

public class MaxSum {
    public static void main(String[] args) {

        int[][] a = {{ 1,0,0,0 }, { 2, 5,0,0 }, { 7, 9, 6,0 }, { 10, 11, 3, 2 } };
        int[][] b=new int[4][4];//存储最大的结果
        int max=0;
        int lastI=0,lastJ=0;
        
        int i = 0, j = 0;
        for (i = 0; i < a.length; i++){
            for (j = 0; j <=i; j++) {
                int temp1=0,temp2=0;//临时值

                if(i-1>=0){ //并非第一行
                    if(j-1>=0){  //左面的值
                        temp1=b[i-1][j-1];
                    }
                    if(i-1>=j){  //右面的值
                        temp2=b[i-1][j];
                    }
                    if(temp1>temp2){
                        b[i][j]=temp1+a[i][j];
                    }else{
                        b[i][j]=temp2+a[i][j];
                    }
                    
                    
                }else{//第一行
                    b[i][j]=a[i][j];//第一行
                }
                
                
                if(i+1==a.length){//最后一行
                    if(b[i][j]>max){
                        max=b[i][j];
                        lastI=i;
                        lastJ=j;
                    }
                }
                
                //System.out.print(a[i][j]+"   ");
            }
            //System.out.println();
        }

        
        for (i = 0; i < a.length; i++){
            for (j = 0; j <=i; j++) {
                System.out.print(b[i][j]+"   ");
            }
            System.out.println();
        }

        System.out.println("最大值max为b["+lastI+"]["+lastJ+"]="+b[lastI][lastJ]+"  i值为="+lastI+"  最后的j值为="+lastJ);
        
    }

}


0 0