1.数组去重

2.看代码答输出题

很简单一道题

function O() {
    this.x = 1;
    this.print = function () {
        console.log(this.x);
    }
}
let o = new O();
let print = o.print;
print();
let n = { x: 2, print: print };
n.print();

我答错了:正确答案是undefined 2

我答的是:error 2

我认为浏览器window.x找不到会报错,回来试了一下,一个未经声明的变量,如下

美团面试题 java上级实操题 美团面试题前端_同源策略


是不会报错的,报undefined,呜呜呜

3. 把一个div块垂直居中,两种方法

法1:flex

<style>
    #ae{
        width:250px;
        height:800px;
        display:flex;
        align-items:center;
        background-color: greenyellow;
    }
    #ab{
        width:250px;
        height:100px;
        background-color:red;     
    }
</style>
</head>
<body>
    <div id="ae">
        <div id="ab">hello meituan</div>
    </div> 
</body>

法2,往四个方向扯,margin auto,注意带方向的,必须要带position

<style>
    #ae{
        width:250px;
        position:relative;
        height:800px;
        background-color: greenyellow;
    }
    #ab{
        width:250px;
        height:100px;
        left:0;
        right:0;
        bottom:0;
        top:0;
        margin:auto;
        position:absolute;
        background-color:red;     
    }
</style>
</head>
<body>
    <div id="ae">
        <div id="ab">hello meituan</div>
    </div> 
</body>

法3 已知子元素宽高的,可以设置top和margin-top

<style>
    #ae{
        width:250px;
        position:relative;
        height:800px;
        background-color: greenyellow;
    }
    #ab{
        width:250px;
        height:100px;
        top:50%;
        margin: top -50px;;
        position:absolute;
        background-color:red;     
    }
</style>
</head>
<body>
    <div id="ae">
        <div id="ab">hello meituan</div>
    </div> 
</body>

4. 一个ul内含五个 li,把他的第一个li弄到最后的位置去

<body>
    <ul id="ad">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <script>
        let ul=document.getElementById("ad");
        let li=ul.children;
        ul.appendChild(li[0]);
        很简单的一句话,appendchild即可搞定,它会自动的把li[0]切到最后来
        console.log(li);
    </script>
</body>

美团面试题 java上级实操题 美团面试题前端_美团面试题 java上级实操题_02


美团面试题 java上级实操题 美团面试题前端_前端_03


注意,这里的li不是纯数组,不能使用splice等内置的数组方法,足见我之前的《DOM编程艺术》白看了,TMD。

引申DOM操作:insertBefore与手写insertAfter

一些已经遗忘的东西:lastChild,可以在不知子节点有多少的时候取最后一个

<script>
        let ul=document.getElementById("ad");
        let li=ul.children;
        let newli=document.createElement("li");
        newli.innerHTML="5.5";
        ul.insertBefore(newli,li[1])
        console.log(li);
    </script>

美团面试题 java上级实操题 美团面试题前端_同源策略_04


手写一个insertAfter()

function insertAfter(newele,targetele){
    let dad=targetele.parentElement;
    if(targetele.nextElementSibling){
        dad.insertBefore(newele,targetele.nextElementSibling);
    }else{
        dad.appendChild(newele);
    }
}

常用的DOM操作


document.createElement(div);
document.createTextNode();
document.createComment();
document.createDocumentFragment();

ParentNode.appendChild();
ParentNode.insertBefore(a,b);
Element.nodeType //显示对应节点的值,元素节点为1,文本节点为3

parent.removeChild();
child.remove();

div.getAttribute(‘属性名’);
div.setAttribute(“class”,“className”); // 可以这样子动态的修改 CSS 样式

<body>
    <ul id="ad">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <script>
        let ul=document.getElementById("ad");
        let li=ul.children;
        console.log(li[1].nodeType);//1
        let allcld=ul.childNodes;
        console.log(allcld[0].nodeType);//3
        console.log(allcld[1].nodeType);//1
        console.log(allcld[2].nodeType);//3
    </script>
</body>

5.趣味智力题:

甲乙两人抓球,球的序号1-100号, 甲乙二人依次按序号抓球,每次可以抓1到9个球,规定拿到100号的人胜出,探寻乙必胜策略。interesting。

问答过程:

  • 事件委托
  • 冒泡和捕获,阻止冒泡捕获 js中的冒泡和捕获
  • link和@import的区别
  • px,rem,em间的区别
  • 输入url到看到页面发生了什么?
  • DNS联系域名与机器码,那找到这个机器后,机器怎么处理请求呢?(事后推测是Nginx)
  • 类方法能调用实例方法吗?(不能)
  • 同源策略
  • 跨域的解决方案:(JSONP、使用代理、。。。。)
    JSONP、CORS(跨域资源共享,服务端要有access-control-allow-origin HTTP响应头)、使用代理(目前最常用)、websocket.
  • iframe能够相互通信吗
    原来这里其实是考察同源策略!!!浏览器是有同源限制的,假如没有了跨域限制,那么不同域的iframe就可以相互访问了。
    同源策略可以很好的限制CSRF跨站请求伪造之类的攻击手段。
    浏览器跨域是受限制的,但服务器与服务器之间没有限制

同源策略会限制AJAX发送网络请求,不能跨域请求server
但是不会限制<link><img><script><iframe>等加载第三方资源

  • 闭包的理解及其作用
  • call、apply、bind的区别,说一下改变this指向的应用场景(继承,方法复用)
  • 谈谈MVC、MVVM(这是啥,之前面荣耀的时候被问到过)
  • React中class和hook两种写法的区别 (我对钩子函数的理解有问题)
  • webpack有用过吗?
  • 说几个常见的git命令
  • node有用过吧,项目中npm install xxx -s,这个-s是什么意思
  • dev-dependencies和dependencies的区别
  • 你的项目是怎么打包的,babel,不懂(JSX–>JS)

鬼扯

怎么学前端的
人生中的高光时刻
人生的至暗时刻

##反问
我现在最需要学什么?
前端工程化。把一个项目自己不看视频搞下来,不断完善,弄个阿里云服务器,放到某个站点上去,这个过程中会遇到很多问题,促使你去做相应的事。
6.8号收到面试反馈,凉