面试

作者: JamesSawyer | 来源:发表于2017-10-09 11:25 被阅读55次

1.如何实现下列函数

已知 f(2)(3) + 5 === 10
又已知 f(2) + 5 === 7

请问怎么实现 'f' 这个函数

看到这个题目一脸懵逼,为什么一个函数又可以返回一个函数,又可以返回一个常数,后来实在想不出来,人人网的大哥就告诉我利用 函数是一个对象,利用 toString 方法对其改写

function f(a) {
  var res = function(b) {
    return a + b;
  }
 
  // res函数是一个对象,这个对象设置另一个函数
  // 这个方法要和 '+' 进行类型转换
  res.toString = function() {
    return a;
  }

  return res;
}

# 现在
f(2)(3) + 5 === 10

f(2) + 3 === 5

# 如果直接调用函数
f(2)
// 返回
f 2

2.this指向问题

面试题目

var x = 1
var obj = {

  a: {
    x: 2,
    b: {
      x: 3,
      sayThis: function() {
        console.log(this.x)
      }
    }
  }
}

var s = obj.a.b
s.sayThis()
obj.a.b
# 请问打印的值是什么

我的答案是

3
3

原因是

obj.a.b 是引用类型,所以两处的应该是一样的,都是指向对象obj.a.b内部的x

但是面试官大哥告诉我,因为对象s是定义在window下的,所以s应该指向的是window下的 'x',所以答案是

1
3

后来我回家之后发现我的答案是对的

今天是2017-10-08 突然想到那天的题目实际上是

var s = obj.a.b.sayThis   // 这个对象是在window下定义的
s()
obj.a.b.sayThis()

# 打印结果是
1
3

3.闭包的问题

function fun() {
  var i = 0;
  return function() {
    console.log(i++)
  }
}

var f1 = fun()
var f2 = fun()

f1() 
f1()
f2()

请问打印什么

我一开始看成了这个,因为经常看到的下面这个例子
function fun() {
  var arr = []
  for (var i = 0; i <= 4; i++) {
    arr.push(function() {
      console.log(i);
    })
  }
  return arr;
}

var funArr = fun();

for (var i = 0; i < funArr.length; i++) {
  funArr[i]()
}
// 结果
5
5
5
5
5

所以想到没想,就将上面的3个函数的结果写为了
2
2
2

后来才发现这2个例子不一样,本题答案是

0
1
0

4.BFC

问我 BFC 是什么,虽说经常看到这个东西,一开始以为是清楚浮动用的,后来实在想不到,就让面试官大哥直接告诉我了

直接也差了一下文档,BFC(Block Formatting Context) 是Web页面中盒模型布局的CSS渲染模式

一个BFC是一个html盒子并且自杀后满足下列条件中的任何一个:

  • float的值不为0
  • position的值不为static或者relative
  • display的值为 table-cell, table-caption, inline-block, flex 或者 inline-flex中的一个
  • overflow的值不为visible

参考文章:

5.下面图片地下空白是什么

img.jpg
// html
  <div class="container">
    ![](http://fillmurray.com/300/300)
    <span>1</span>
  </div>

// css
.container {
  width: 400px;
  background-color: lightgreen;
}

红色框部分是为什么会出现,我一开始以为是图片的高度不够,后来才知道是 vetical-align 的原因,因为这个值的默认值是 baseline, 下面设置其为 bottom 即可

img {
  vetical-align: bottom
}
vetical-align.jpg

6.数字格式化

把数字格式户

  1. 1234567899 每4位顺着就加一个空格 1234 5678 99
  2. 1234567899 每4位就倒着加一个逗号 1,234,567,899

我知道这个格式化数据考的是正则,奈何我正则很垃圾,基本上都是直接网上抄一下,现在让我手写有点懵逼

# 首先返回的是一个字符串, 肯定现将数字转换为字符串

#1
'1234567899'.replace(/(.{4})/g, '$1 ')
"1234 5678 99"

'123'.replace(/(.{4})/g, '$1 ')
"123"


# 2
'1234567899'.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
"1,234,567,899"

'12345'.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
"12,345"

或者
// ?!^  表示不能是开头的位置
// ?=(\d{3}) 表示3位数字前面的位置
'12345'.replace(/(?!^)(?=(\d{3})+$)/g, ',')
"12,345"
  • ?= 称之为 positive lookahead, 中文名称之为 正向先行断言
  • ?! 称之为 negative lookback, 中文名称之为 负向先行断言

参考文章:

  1. js 每隔四位加一个空格
  2. Number Formatting Using string.replace in JavaScript

7.事件冒泡和事件捕获的区别 以及如何用js实现事件委托

文章:

8.如何在容器宽高已知的情况下 让文字居中

一开始我就问可不可以使用 flex,面试官说可以,我就说

// html
<div>
  <span>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Deleniti 
    quibusdam ullam doloremque nam nesciunt repellat consectetur enim at, 
   autem libero, magnam numquam officia eligendi, laborum nulla, iste 
   quasi corporis accusamus.
  </span>
</div>

// css
.container {
  width: 400px;
  height: 500px;
  padding: 10px;
  background-color: lightgreen;
  display: flex;
  justify-content: center;
  align-items: center;
}

面试官还告诉我另一种方式

// html
<div>
  <span>
  <span>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Deleniti 
    quibusdam ullam doloremque nam nesciunt repellat consectetur enim at, 
   autem libero, magnam numquam officia eligendi, laborum nulla, iste 
   quasi corporis accusamus.
  </span>
  </span>
</div>

9.为什么span之间会有空格,如何解决

看到这个问题一脸懵逼,我也不知道为什么,以为是 padding | margin 的原因

// html
<div class="container">
     <span>1</span>
     <span>2</span>
     <span>3</span>
 </div>

// css
.container {
  width: 400px;
  height: 500px;
  padding: 10px;
  background-color: lightgreen;
}
span空格.jpg

我的解决办法是

span {
  margig: 0;
  padding: 0;
}

估计面试我的大佬觉得这小伙子是不是傻子,这么简单会让你做吗

回来谷歌了一下,找到了答案

下面是解决办法

# 解决办法1
在父容器中添加 'font-size:0' 样式,然后再定义span字体的大小

// html
<div class="container" style="font-size: 0;">
     <span>1</span>
     <span>2</span>
     <span>3</span>
 </div>

// css
span {
  font-size: 14px;
}


# 解决办法2
使用注释的方式
<div class="container">
     <span>1</span><!--
     --><span>2</span><!--
     --><span>3</span>
</div>

10.如何让一个盒子左右可以拖动

这个个人感觉实现起来比较难,可以参考以下以下链接:

总结

还有一些布局方面的题目没有写下来,待改天补充。感觉一次面试能够学到很多平常注意不到的一些细节,很感谢人人网的那位面试官大佬细心的讲解,感觉大佬十分的平易近人,真心学到了很多知识点,也暴露了自己在js,css方面的不足。

以下是以后重点学习的地方:

  • 了解基础原理
  • 学好正则表达式

最后向大佬们学习~

2017年9月30日 23:32:50

相关文章

  • 面试者

    面试面试面试

  • 行为性面试 #3.1.9

    面试主要分类 按面试内容:结构化面试、非结构化面试、半结构面试。 按面试中提问类型:行为性面试、情景性面试、动机面...

  • 面试的构成要素

    面试要素是指构成任何一次面试活动必不可少的基本因素。面试因素有10个:面试目的、面试内容、面试方法、面试考官、面试...

  • 面试材料

    面试经验 面试题1 面试题2 面试题3 面试题4 面试题5 面试题6――数据结构 面试题7――网络 面试题8――汇...

  • 测评工具

    一、笔试/机考 针对专业性强岗位 二、面试 电话面试/视频面试/技术面试/HR面试/综合面试 1.半结构化面试:面...

  • 面试面试面试伤神伤神

    面试面试面试伤神伤神

  • 思维导图助力面试

    面试前 面试中 面试后

  • 12套JAVA高级面试课程(只为冲高薪准备)

    12套JAVA高级面试课程,BAT高级面试,架构师面试,高级工程师面试,java就业面试,校招面试,算法面试,my...

  • 前端面试知识点整理

    面试1:CSS布局面试2:CSS盒模型面试3:flex弹性盒布局面试4:DOM面试5:原型链面试6:面向对象面试7...

  • 掌握这些套路,90%的面试都能过!!

    面试面试面试,走进大学我们开始发现: 进学生会要面试,进社团也要面试,考研保研都要面试,找工作更是有长达五论面试!...

网友评论

      本文标题:面试

      本文链接:https://www.haomeiwen.com/subject/ojynextx.html