2

大家好,我来自驾考宝典。时间不知不觉进入2018金九银十,下半年的尾声了,想必很多朋友已经看过网上新出的各大厂面试题。同时,我在驾考宝典也工作一年多了。驾考宝典算不上一线大公司,但我个人不管是通过工作,平常的积累,还是自主学习,我觉得还是能和大家分享一些更加实战化的面试题。主要是工作当中运用的相关技术和遇到的坑,希望以此共勉。

Q: JS 部分

1、什么是自执行函数,它的优点是什么?
!function(){}()被称为"自执行函数",好处是把所有变量都运行在函数内部,可以避免产生全局变量,而"!"的作用是使它和上面的代码隔绝,不会受到其影响。

2、求1-100里7的倍数及包含7的所有数字,最后放置数组中

function calculate() {
        var arr = [];
        var reg = /7/;
        for (var i = 1; i <= 100; i++) {
            reg.test(i) || (i % 7 == 0) ? arr.push(i) : arr;
        }
        return arr;
}
console.log(calculate());

更精简版是?

3、为什么0.1 + 0.2 != 0.3
js没有float型没有int型 浏览器解析小数时 会转换成二进制 而小数转换成二进制时 js就会失精度 0.1+0.2会得0.30000004后面无穷个小数 所以正确的做法是 parseFloat((0.1 + 0.2).toFixed(10))

4、将数组进行排序,比如

var arr = [ { name : 'a', value: 21}, { name : 'b', value: 10}, { name : 'c', value: -1}, { name : 'd', value: 1}];

该怎么写;若用箭头函数输出,() => {} 和() => ()区别是什么,各将输出什么。
如果数组是这样

var arr = [5,20,40,15];

用箭头函数输出,() => {} 和() => (),又各将输出什么。为什么没有实现我们想要的排序,该如何做。

var demo = arr.sort((a,b) => (
    a - b
    )
);
console.log(demo);

如果是二维数组

var arr = [ [30, -5, 0, 5], [100, 50, 20], [1, 15, 10] ];

又该如何做。

for(var i = 0; i < arr.length; i++){
    arr[i].sort(function(a,b){
        return a - b;
    });
}
console.log(arr);

5、如何将这么一组数据

var arr = ["123@qq.cn","zhangsan@163.cn"];转化为<123@qq.cn>;<zhangsan@163.cn>

var str = '';
for (var j = 0; j < arr.length -1; j++) {
    str += '<' + arr[j] + '>' + ";"
}
str += '<' + arr[arr.length -1] + '>'
console.log(str);

6、使用js匹配相同的questionId,三个相同的变绿色,四个红色,并重新渲染至页面中。

var data = [{
            projectId: 3,
            questionId: 1124900
        },
        {
            projectId: 2,
            questionId: 1124900
        },
        {
            projectId: 1,
            questionId: 1124900
        },
        {
            projectId: 1,
            questionId: 1120900
        },
        {
            projectId: 3,
            questionId: 1119600
        },
        {
            projectId: 2,
            questionId: 1119600
        },
        {
            projectId: 3,
            questionId: 1119500
        },
        {
            projectId: 2,
            questionId: 1119500
        },
        {
            projectId: 1,
            questionId: 1119500
        },
        {
            projectId: 3,
            questionId: 836200
        },
        {
            projectId: 2,
            questionId: 836200
        },
        {
            projectId: 3,
            questionId: 836100
        },
        {
            projectId: 2,
            questionId: 836100
        }
    ]

var obj = {};
var newData = data.length;
for (var i = 0; i < newData; i++) {
    if (obj[data[i].questionId]) {
        obj[data[i].questionId] += 1;
    } else {
        obj[data[i].questionId] = 1;
    }
}

for (var i = 0; i < newData; i++) {
    for (var n in obj) {
        if (data[i].questionId == n && obj[n] == 4) {
           data[i].color = "red";
        } else if (data[i].questionId == n && obj[n] == 3) {
           data[i].color = "green";
        }
    }
}

var html = [];
html.push("<ul>")
for (var i = 0, len = data.length; i < len; i++) {
    html.push("<li id=" + data[i].projectId + " style='color: " + data[i].color + "'>" + data[i].questionId + "</li>");
}
html.push("</ul>")
var conDom = document.getElementById("xxx");
conDom.innerHTML = html.join("");

7、用最少的原生JS实现文字超出...显示。

var oBox = document.getElementById('box');
var demoHtml = oBox.innerHTML.slice(0, 10) + '...';
oBox.innerHTML = demoHtml;

8、如何将获取的数据,里面分别是1 2 3 … 10、102等,转化为对应的一、二、三…十、一百零二

9、移动端常见的字数统计,不管是递增或递减,同时兼容pc端的复制、粘贴、撤销等操作,实时统计,以及支持移动端的emoji表情的统计,该如何实现。
input propertychange 事件

10、define和require有什么区别。
简言之,define定义模块,require加载模块,模块依赖声明是很重要的一步。

11、dom我们都知道,bom是什么。
BOM是浏览器对象模型,DOM是文档对象模型,前者是对浏览器本身进行操作,而后者是对浏览器(可看成容器)内的内容进行操作。比如window.open()。

12、如何优雅地用原生JS实现textarea随着内容增多,高度自动增加

13、如何监听app自带的返回键,以及安卓机里物理返回键。产品需要前端编写一个h5,里面有若干audio或video,不与客户端交互。当用户点击app自带返回键,如何暂停正在播放的文件。并处理好广大安卓机的兼容性。

14、将所有的html内容一键转化为图片,有实现的大概思路吗。html2canvas.js插件bug太多,是否有替代方案。

15、支付宝里的芝麻信用,目前是静态的,如何实现让小白点随着对应的分数、文案从零跳转到对应的位置。

16、移动端轮播图,比如swiper3.js(目前是4),实现的原理是什么。当swiper.js有兼容性问题时,是否有轻量级替代方案。

17、iscroll.js的替代方案有哪些,优缺点是什么。

18、中英文一键切换,前端该怎么实现。

19、模板渲染引擎用过吗。和传统的拼接字符串相比,优缺点是什么。

20、判断JS数据类型有哪些方式,它们的区别是什么。

21、什么是防抖和节流。

22、延迟加载有哪些方式,什么是阻塞模式。

23、JSON全称是什么,JSON.parse()和JSON.stringify()区别是什么。

24、移动端点击穿透、滚动穿透是否了解,是否解决过。

25、移动端点击延迟300ms,怎么处理。

26、click和input的区别。实际应用场景,当用户点击input要改变type的类型,你会如何处理。

27、$(document).on(“click”,function(){})和$(document).on(“click”,”.xxx”,function(){})区别。

28、jQ的on、bind、live、delegate各有什么异同。

29、移动端和PC端jQ版本的选择,是否有差异,如果有,对应的规范、原因是什么。

30、雅虎军规35条(前端性能优化)。

31、什么是回流和重绘。

32、let和var的区别。

33、原生js实现图片上传,有哪些注意事项。

布局和css、框架暂时就不问了,这次先和各位分享到这,都是本人平常工作当中的部分积累,和各位高大上的面试题比起来,不值一提,喜欢的朋友可以收藏下。欢迎在评论区补充更多实用的坑。我会持续更新,各位下次见~


Playable_WckY
513 声望25 粉丝

贝塔科技和赤子城H5试玩广告业务线技术负责人,负责三消Townest、合成Mergical、海外产品lucky系列、word jump系列、游戏社交Gaga产品等。