zoukankan      html  css  js  c++  java
  • 前端面试题记录

    有幸去鹅厂面试一次,然鹅作为一个水货果然一面都没过Emmm,,,

    面试题记一下然后找找答案好了。。。根本不需要问多深我自己底就漏了。叹气。

    1.链表和数组的区别(话说我把数据结构全还给老师了我简历上还是不要写了,问的我真是惨不忍睹……)

    答案:

    数组:

    数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。

    链表:
    链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素你就需要用链表数据结构了。

    js实现链表可以参考这篇博客http://web.jobbole.com/88843/

    2.实现字符串反转

    这个我会

    function resStr(str){
        return str.split('').reserve().join('');
    }

    3.浏览器兼容性方面要注意哪些点,pc端和移动端兼容要注意哪些点?

     4.用css实现三列布局


    没有其他条件,当时就随便写了几种,浮动,行内,定位,以及flex。应该是没答错。

    5.iframe的优缺点

    答:可参考这个回答https://zhihu.com/question/20653055/answer/35387821。可以说是很详细了。缺点之一:搜索引擎不会抓取iframe中的内容

    6.如何实现浏览器内多个标签页之间的通信?

    答:

    7.一个页面从输入URL到页面加载显示完成,这个过程都发生了什么?

    答:https://segmentfault.com/a/1190000006879700

    8.选出表tab_qq_info中性别为女的用户,如果只想看前一百条呢?(性别字段sex,类型int,0表示男性,1表示女性)

    9.分别统计出tab_qq_info中男女用户最早的注册时间(注册时间字段名regist_time,类型int)

    10、解释异步、同步

    答:

    举个例子:普通B/S模式(同步)AJAX技术(异步)
    同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
    异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
    同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
    异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
    所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。
    举个例子 打电话时同步 发消息是异步。

    引自http://blog.chinaunix.net/uid-21411227-id-1826898.html

    11、http2.0协议主要改动点

    答:简要的说是

    多路复用 (Multiplexing)
    多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息

    二进制分帧

    首部压缩(Header Compression)

    具体参考https://zhihu.com/question/34074946/answer/75364178

    12、json和xml两种协议比较

    答:http://www.jianshu.com/p/64cbfcfe507b

    13、TCP和UDP的区别,http呢?

    答:http://feinibuke.blog.51cto.com/1724260/340272

    14、DOM操作——添加、移除、移动、复制、创建和查找节点给出对应函数。

    答:

    //创建
    var el1 = document.createElement('div');
    var node = document.createTextNode('hello world!');
    //移除节点的稳妥方法http://www.cnblogs.com/rubylouvre/archive/2009/07/17/1525637.html
    //移除节点的普通函数
    removeChild()
    //移动//添加
    appendChild()
    insertBefore()

    //复制
     var deepList = ul.cloneNode(true);            //深复制
     var shallowList = ul.cloneNode(false);        //浅复制
     

     查找节点

    15、将css应用到html上有哪些方式?

    16、解释下盒模型。

    答:开始固执的认为分为ie盒模型与标准盒模型,面试官问我确定高版本IE盒模型也是一样的么,瞬间傻眼。刚刚测试了发现高版本盒模型还是标准的。主要靠contentbox来区分。Ummmm,官方文档很详细了https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model

    17、div左右居中样式

    div {
       width:100px;
       margin: 0 auto;  
    }

    18、js中如何实现私有变量?

    19、js如何做垃圾回收?

    js具有自动垃圾收集机制。最常用的垃圾收集方式是标记清除,不太常用的一种叫做引用计数。

    20、vue实现双向绑定的原理。

    21、简要解释vue实例的生命周期。

    22、写一个兼容chrome和IE的事件绑定方法。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>绑定</title>
        <script>
            window.onload = function()
            {
                var oBtn = document.getElementById("btn1");
                //IE  attachEvent(事件名,函数),此方法只有ie支持,FF和Chrome均不支持
                /*oBtn.attachEvent("onclick",function()
                {
                    alert("a");
                });
                oBtn.attachEvent("onclick",function()
                {
                    alert("b");
                })*/
                //FF和Chrome  addEventListener(事件名,函数),此方法ie不支持
                /*oBtn.addEventListener("click",function()
                {
                    alert("a");
                });
                oBtn.addEventListener("click",function()
                {
                    alert("b");
                })*/
                //兼容写法:if/else判断
                /*if(oBtn.attachEvent)
                {
                    oBtn.attachEvent("onclick",function()
                    {
                        alert("a");
                    });
                    oBtn.attachEvent("onclick",function()
                    {
                        alert("b");
                    })
                }
                else
                {
                    oBtn.addEventListener("click",function()
                    {
                        alert("a");
                    },false);
                    oBtn.addEventListener("click",function()
                    {
                        alert("b");
                    },false)
                }*/
                //另外,还可以把这个兼容写法封装成一个函数,这样就不用每次绑定事件时都要判断一下
                function myAddEvent(obj,ev,fn)    //obj为要绑定事件的元素,ev为要绑定的事件,fn为绑定事件的函数
                {
                    if(obj.attachEvent)
                    {
                        obj.attachEvent("on" + ev,fn);
                    }
                    else
                    {
                        obj.addEventListener(ev,fn,false);
                    }
                }
                myAddEvent(oBtn,"click",function()
                {
                    alert("a");
                })
                myAddEvent(oBtn,"click",function()
                {
                    alert("b");
                })
            }
        </script>
    </head>
    <body>
    <input id="btn1" type="button" value="按钮"/>
    </body>
    </html>

    23、https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

    在MDN上看闭包内容发现有个笔试题直接是这里边的。题目答案直接是示例。。。。

    24、如何做异常处理,异常类型有哪些?

    25、如何并发10个请求,所有请求完成后打印一行日志,如何实现?

    26、怎么实现1000以内数的阶乘?

    27.什么是箭头函数。有什么限制?

    28.写一个方法返回一个时间的的字符串要求(yyyy-mm-dd HH:MM:SS)

    29.new一个对象,执行的过程。

    30、js有哪几种数据类型,请画一下他们的内存图。

    31、var let const区别、

    32、怎么把字符串 转为数字、

    33、怎么判断一个字符串是不是回文?

    34、for in和for of的区别。

  • 相关阅读:
    单例模式
    C++中迭代器原理、失效和简单实现
    C++中静态成员变量要在类外部再定义或初始化的原因
    idea maven javaweb项目迁移时的maven和版本报错问题解决(可解决同类错误)
    java 继承类之后,访问不到超类的属性的原因及解决方法
    spring boot admin
    javaweb 报表生成(pdf excel)所需要用到的技术和思路
    团队合作开发git冲突解决方案 Intellij IDEA
    【项目管理】 使用IntelliJ IDEA 将项目发布(提交)到GitLab
    IDEA/Git 设置多个push远程仓库或者同时提交多个push仓库
  • 原文地址:https://www.cnblogs.com/liyinSakura/p/7528660.html
Copyright © 2011-2022 走看看