今天特意先整理了 10 道 web 前端大厂面试题, 包含比较详细的解题思路, 希望对大家的求职备战有帮助.
一, 百度面试题:
写一个 JS 函数, 实现对一个数字每 3 位加一个逗号, 如输入 100000, 输出 100,000(不考虑负数, 小数)
解题思路:
本题是 JS 实现 number.toLocaleString() 方法, 面试题做了简化不考虑负数小数, 此题主要是考数据类型及字符串操作, 答案不唯一.
按现实思路解题, 现实中添加千位分隔符是从后到前, 每 3 位添加逗号, 所以这里输入数据转换成字符串后, 利用 slice 方法的输入负数参数从后取的特点, 从后取三位数字保存在数组中, 并把取剩后的数据递归重复取值, 直到数据不足 3 位, 把剩下一起存入数组中. 在这里相信有许多想要学习前端的同学, 大家可以加下 Web 前端学习群: 659479860, 即可免费领取一整套系统的前端学习教程.
这时数组中按顺序保存从后到前的分割数据. 实例中数组是 ['789','456','123']. 通过 reverse 方法倒叙输出, 并通过 join 方法添加逗号.
二, 字节跳动面试题:
给定一个字符串, 找出其中无重复字符的最长子字符串长度
解题思路:
这题的要点就是无重复字符的理解. 首先字符串内字符位置是固定的, 我们要采用顺序循环的方式解题, 然后就是理解无重复字符的含义, 把当前字符串分割, 每个小分割内不能出现重复的字符. 也就是说分割的字符串是不会互相叠加重复的, 每当该段分割的下一个字符与该段分割内字符相同, 当即重新开始分割字符.
所以解题时需要一个存储当前分割片段的对象, 用来比较下一个字符. 并取这个分割片段的长度, 与每个分割片段的最大长度比较即可.
本题主要考的是题面的理解, 以及字符串方法的运用, 需要熟练地运用才能快速解题.
三, 腾讯面试题:
实现超出整数存储范围的两个大正整数相加
解题思路:
首先了解超出存储范围的大数字概念, 每种数据类型可存储数据量都是存在范围的
数字类型的范围:
- Number.MAX_VALUE = 1.7976931348623157e+308
- Number.MIN_VALUE = 5e-324
整数类型的范围:-2-53-253
当超出这个范围, 为了避免数据丢失, 就要采用其他手段进行运算. 在参考答案中, 运用数组的方式解决这个问题. 首先两个大整数要存储在数组中, 要先保证位数对其, 我们比较字符串长度把低位数的大整数字符串前面添加相应的 0 占位, 并逆排序. 创建一个新的数组保存运算结果, 将两个大整数按从后到前的顺序进行相加减, 这里注意进位. 把得到的数组反转到正常顺序即可.
四, 阿里巴巴面试题:
任意二维数组的全排列组合
解题思路:
本题做法不唯一, 这里采用了把多项数组逐步两两相乘的方式, 第一次先取二维数组前两项组合, 把组合的结果在与第三项组合以此类推. 这种递归做法简单易懂, 把复杂的多项问题简化成两项问题的逐渐递增.
五, 京东面试题:
公司最近新研发了一种产品, 共生产了 n 件. 有 m 个客户想购买此产品, 已知每个顾客出价. 为了确保公平, 公司决定要以一个固定的价格出售产品. 每一个出价不低于要价的客户将会得到产品 (每人只买一个), 余下的将会被拒绝购买. 请你找出能让公司利润最大化的售价.
解题思路:
本题是京东的业务演变题, 首先要理清思路. 本题中, 固定出价, 以及出价低于产品的顾客会被拒绝购买是解题核心.
条件中已知产品总个数, 顾客出价. 这里有个小陷阱, 会出现 N<M 供不应求的情况, 要特殊考虑. 依据题目, 我们首先需要对顾客出价排序, 这里按升序排列. 当供不应求出现时, 我们截取出价高的顾客. 然后把每个顾客的出价当做最终售价循环, 得出最大化利润下的售价.
六, 华为面试题:
计算出字符串中出现次数最多的字符是什么, 出现了多少次?
解题思路:
本参考答案是计算出全部字符出现次数, 并留下最大的. 首先利用 filter() 与 indexOf() 的方法连用字符串去重, 再将得到的作为索引, 利用 split() 分割字符串, 得到字符出现次数, 比较得出结果.
七, 小米面试题:
"123456789876543212345678987654321..." 的第 n 位是什么?
解题思路:
本题答案不唯一, 这里利用数学中最小循环节的概念解题, 找到最小循环节后, 利用余数查找第 n 位数字.
八, 淘宝面试题:
请编写一个 JavaScript 凼数 parseQueryString, 它的用途是把 URL 参数解析为一个对象.
解题思路:
淘宝这道题是很常用的场景题, 这里需要处理好分段次序, 首先把? 分离, 然后按 & 分割最后按 = 分割, 主要考察字符串的函数运用以及对象的创建.
九, 网易面试题:
如果给定的字符串是回文, 返回 true, 反之, 返回 false.
回文: 如果一个字符串忽略标点符号, 大小写和空格, 正着读和反着读一模一样, 那么这个字符串就是 palindrome(回文).
解题思路:
去掉字符串多余的标点符号和空格, 然后把字符串转化成小写来验证此字符串是否为回文.
十, 搜狐面试题:
确保字符串的每个单词首字母都大写, 其余部分小写.
来源: http://www.jianshu.com/p/9d97e39d1c71