欢聚时代2017秋招笔试 编程题

感觉yy的笔试题出的很用心,不会随便拿一下数据结构什么的题目过来糊弄~出的题目也几乎没有见过原题。

当然,个人答得好不好是另外一回事了,不会做是自己知识没掌握好,但是题目确实个个经典~

填空、不定向选择、问答、编程,其他不怎么记得了,编程题目倒是还能想起来:

点击ul中的li标签删除

 1 <html>
 2 <head>
 3     <title></title>
 4 </head>
 5 <body>
 6     <script>
 7         window.onload = function () {
 8             var li = document.getElementsByTagName('li');
 9             for(var i = 0; i<li.length; i++) {
10                     li[i].onclick = function () {
11                       this.parentNode.removeChild(this);
12                     }
13             }
14         }
15     </script>
16     <ul class="itemList">
17         <li>item 1</li>
18         <li>item 2</li>
19         <li>item 3</li>
20         <li>item 4</li>
21         <li>item 5</li>
22         <li>item 6</li>
23     </ul>
24 </body>
25 </html>

第一题不难,但是我好像没答好,错的地方应该是在

this.parentNode    
//用以下代替
var ul = document.getElementByClassName('itemList');
ul = ul[0];        //忘记写上这句ORZ

html css3实现圆来回滚动

这本也不是什么难题,但是我错的有点离谱了ORZ,把margin-left 写成了 padding-left,变成了来回拉伸了吧应该!!!

 1 <html>
 2 <head>
 3     <title></title>
 4 </head>
 5 <body>
 6     <style>
 7         .circle {
 8             width: 100px;
 9             height: 100px;
10             background-color: red;
11             border-radius: 50%;
12             animation: move 3s infinite;
13         }
14 
15         @keyframes move {
16             0% {
17                 margin-left: 0px;
18             }
19 
20             50% {
21                 margin-left: 400px;
22             }
23 
24             100% {
25                 margin-left: 0px;
26             }
27         }
28     </style>
29     <div class="circle"></div>
30 </body>
31 </html>

我记得我答题的时候写的代码是如下:

 1 <html>
 2 <head>
 3     <title>aaa</title>
 4 </head>
 5 <body>
 6     <style>
 7         .circle {
 8             width: 100px;
 9             height: 100px;
10             background-color: red;
11             border-radius: 50%;
12             animation: move 3s infinite linear;
13         }
14 
15         @keyframes move {
16             0% {
17                 margin-left: 0px;
18                 translate:rotate(0deg);
19             }
20 
21             25% {
22                 padding-left: 200px;
23                 translate:rotate(180deg);
24             }
25 
26             50% {
27                 padding-left: 400px;
28                 translate:rotate(360deg);
29             }
30              75% {
31                 padding-left:200px;
32                 translate:rotate(180deg);
33             }
34             100% {
35                 padding-left: 0px;
36                 translate:rotate(0deg);
37             }
38         }
39     </style>
40     <div class="circle"></div>
41 </body>
42 </html> 

见笑见笑ORZ、。。

第三题:

获取cookie的函数

这个题我刚好之前看过一篇文章:

有兴趣或者看不懂下面的代码可以阅读一下;

1 function getCookie(name) {
2     var a;
3     var r = new RegExp(name+"=([^;]*)(;|$)");
4     if(a = document.cookie.match(r))
5         return a[1];
6     else
7         return null;
8 }

唉~很遗憾的是我中毒太深了,之前也没搞懂unescape和escape的编码和解码,以至于我return a[1]的时候加了unescape(a[1]);然后还用了test来匹配= =???

如果你不是很懂正则表达式,我这里简单解释一下,因为document.cookie的存取方式是字符串,而且是以key、value的形式储存的,也就是:

"username=lingjiawen; password=123456; xxx=xxxxxx"

所以,匹配的时候使用

/name=([^;]*)(;|$)/

这个正则表达式来匹配,[^;]* 指的是不匹配";",然后*表示匹配前面元字符0次或多次。

a数组第一个值存的就是匹配值,第二个值存的就是([^;]*)这个匹配值,也就是=号后面的值,假如上面的name="username"

那么a[0]就是"username=lingjiawen",而a[1]就是"lingjiawen",而a[2]便是";"。

写一个EventEmitter函数,包含on,once,off,trigger方法

 

 1 class EventEmitter {
 2     constructor() {
 3         this.events = {};
 4         this.getEvents = this.getEvents.bind(this);
 5         this.getListener = this.getListener.bind(this);
 6         this.on = this.on.bind(this);
 7         this.off = this.off.bind(this);
 8         this.once = this.once.bind(this);
 9         this.trigger = this.trigger.bind(this);
10         this.removeEventListener = this.removeEventListener.bind(this);
11     }
12 
13     getEvents() {
14         return this.events;
15     }
16 
17     getListener(event) {
18         var events = this.getEvents();
19         return events[event];
20     }
21 
22     on(event, listener, time) {
23         var listeners = this.getListener(event);
24         var listenerWrap = {
25             listener: listener,
26             time: time
27         };
28         listeners.push(listener);
29     }
30 
31     once(event, listener) {
32         return this.on(event, listener, 1);
33     }
34 
35     trigger(event, args) {
36         var listeners = this.getListener(event);
37         for(let i=0; i<listeners.length; i++) {
38             var listener = listeners[i];
39             listener.time --;
40             if(listener.time === 0) {
41                 this.removeEventListener(listener);
42             }
43             listener.listener.apply(this, args||[]);
44         }
45     }
46 
47     off(event) {
48         var events = this.getEvents();
49         events[event] = [];
50     }
51 
52     removeEventListener(event, listener) {
53         var events = this.getEvents();
54         var listeners = evetnts[event];
55         for(let i=0; i<listeners.length; i++) {
56             if(listener == listeners[i]) {
57                 delete listeners[i];
58             }
59         }
60     }
61 
62 }

这题用了ES6写的,对不对不是很清楚~

以上题目有更好的想法或者答案、或者我的答案有错误,欢迎留言~!!

原文地址:https://www.cnblogs.com/ljwTiey/p/7543787.html