前言:

近年来T行业就业者越来越多,有关于编程行业的高薪工作也变得越来越难找,竞争力越来越大,想要在众多的应聘者当中脱颖而出,面试题和笔试题一定要多加研究和琢磨,以下记录的是自己的面试过程之中遇到的一些比较经典的笔试题。

我找工作面试的时候没有太多的经验,也走了不少的弯路,但是有所记录,有所总结现在分享出来,很多企业的面试题并没有那么难,大多数都是来源于网络,只要自己准备充分,将网络上的各类面试题一一掌握,那么在面试中,就能做到胸有成竹。

记录滴滴打车一次面试JavaScript的经典面试题,当时回答不全,特意回来在百度上找了一些权威的答案,后来仔细想想,题目也是万变不离其宗好,几乎都是从多方位各角度考察一个知识点的。

一: this在javascript中是如何工作的

以下代码的结果是什么?请解释你的答案。

var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
prop: {
fullname: 'Aurelio De Rosa',
getFullname: function() {
return this.fullname;
}
}
}; console.log(obj.prop.getFullname()); var test = obj.prop.getFullname; console.log(test());

答案

代码打印了Aurelio De RosaJohn Doe。原因是在javascript中,一个函数的语境,也就是this这个关键词引用的,依赖于函数是如何调用的,不是如何定义的。

在第一个console.log()调用中, getFullname()是作为obj.prop的函数被调用的。因此,这里的语境指向后者并且函数返回对象的 fullname属性。相反,当 getFullname() 被指定为test的变量,那个语境指向全局对象(window)。因为test相当于设置为全局对象的属性。因为这个原因,函数返回window的一个fullname属性,这在这个案例中是在代码片段中第一行设置的。

二: 记忆化斐波那契函数(Memoization)

题目:斐波那契数列指的是类似于以下的数列:

1, 1, 2, 3, 5, 8, 13, ....

也就是,第 n 个数由数列的前两个相加而来:f(n) = f(n - 1) + f(n -2)

请你完成 fibonacci 函数,接受 n 作为参数,可以获取数列中第 n 个数,例如:

fibonacci(1) // => 1
fibonacci(2) // => 1
fibonacci(3) // => 2

...

测试程序会从按顺序依次获取斐波那契数列中的数,请注意程序不要超时,也不要添加额外的全局变量。

本题来源:《JavaScript 语言精髓》

答案:

const fibonacci = ((memo = [0, 1]) => {
const fib = (n) => {
let result = memo[n]
if (typeof result !== "number") {
result = fib(n - 1) + fib(n - 2)
memo[n] = result
}
return result
}
return fib
})()

三: 创建 “原生(native)” 方法

String 对象上定义一个 repeatify 函数。这个函数接受一个整数参数,来明确字符串需要重复几次。这个函数要求字符串重复指定的次数。举个例子:

JavaScript 代码:
1.  console.log('hello'.repeatify(3));

应该打印出hellohellohello.

答案

一个可行的做法如下:

JavaScript 代码:
 String.prototype.repeatify =  String.prototype.repeatify ||  function(times)  {
var str = ''; for (var i = 0; i < times; i++) {
str += this;
} return str;
};

四:同字母异序

同字母异序指的是两个字符串字母种类和字母的数量相同,但是顺序可能不同。

完成 isAnagram,接受两个字符串作为参数,返回true 或者 false 表示这两个字符串是否同字母异序。例如:

isAnagram("anagram", "nagaram") // => return true.
isAnagram("rat", "car") // => return false.

(本题来源:github, LeetCode)

答案:

const isAnagram = (str1, str2) => /* TODO */ {
return !str1.split('').sort().join('').replace(str2.split('').sort().join(''), '');
}

五:给定无序整数序列,求连续子串最大和。(滴滴出行2018校园招聘内推笔试)

输入描述:输入为整数序列,数字用空格分隔。例:-23 17 – 7 11 -2 1 -34
输出描述:输出位子序列的最大和。例:21

答案:

思路:动规思想,更新遍历到当前位置的最大值,并且每次都判断一下是否大于答案,注意全为负数和一个数这些特殊情况。遍历依次,求从第一个数开始累加的和,并记录最大值和最小值,最小值和最大值的差就是子序列最大的和。

   using namespace std;

int max(const int& a, const int& b)
{
return a>b?a:b;
} int main()
{
int a[10005];
int count = 0;
while(cin >> a[count++]);
count--;
int ans = 0;
int result = a[0];
for(int i = 0; i < count; ++i)
{
ans = max(ans+a[i], a[i]);
result = max(result, ans);
}
cout << result << endl;
return 0;
}
/*
-23 17 -7 11 -2 1 -34
*/

六:给定无序整数序列,求其中第K大的数。

输入描述:输入的第一行为整数序列,数字用空格分隔。例:45 67 33 21
输入的第二行一个整数K,K在数组长度范围以内。例:2

答案:(来源于博客,侵删)

采用两个指针left和right,分别从数组起始和末尾开始查找,满足left左侧的元素小于等于current值,right右侧的元素大于等于current,直至left = right。返回left指针位置,根据left和K的关系,确定下一步的查找范围。

package cn.thinking17;
import java.io.*;
import java.util.*;
public class NOK {
public static void main(String args[])
{
Scanner in = new Scanner(System.in);
String nextLine = in.nextLine();
int kth = in.nextInt();
String[] splits = nextLine.split(" ");
int[] numbers = new int[splits.length];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = Integer.parseInt(splits[i]);
}
System.out.println(kthLargestElement(2, numbers));
} public static int kthLargestElement(int k, int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
if (k <= 0) {
return 0;
}
return helper(nums, 0, nums.length - 1, nums.length - k + 1); }
public static int helper(int[] nums, int l, int r, int k) {
if (l == r) {
return nums[l];
}
int position = partition(nums, l, r);
if (position + 1 == k) {
return nums[position];
} else if (position + 1 < k) {
return helper(nums, position + 1, r, k);
} else {
return helper(nums, l, position - 1, k);
}
}
public static int partition(int[] nums, int l, int r) {
int left = l, right = r;
int pivot = nums[left];
while (left < right) {
while (left < right && nums[right] >= pivot) {
right--;
}
nums[left] = nums[right];
while (left < right && nums[left] <= pivot) {
left++;
}
nums[right] = nums[left];
}
nums[left] = pivot;
return left;
} }

文末福利:

福利一:前端,Java,产品经理,微信小程序,Python等资源合集大放送:https://www.jianshu.com/p/e8197d4d9880
福利二:微信小程序入门与实战全套详细视频教程

image

领取方式:
如果需要学习视频,欢迎关注 【编程微刊】微信公众号,回复【领取资源】一键领取以下所有干货资源,获取更多有用技术干货、文档资料。所有文档会持续更新,欢迎关注一起成长!

原文作者:祈澈姑娘
原文链接:https://www.jianshu.com/u/05f416aefbe1
创作不易,转载请告知

90后前端妹子,爱编程,爱运营,爱折腾。
坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。

JavaScript经典面试题(二)的更多相关文章

  1. 20道JavaScript经典面试题

    该篇文章整理了一些前端经典面试题,附带详解,涉及到JavaScript多方面知识点,满满都是干货-建议收藏阅读 前言 如果这篇文章有帮助到你,️关注+点赞️鼓励一下作者,文章公众号首发,关注 前端南玖 ...

  2. javascript经典面试题之for循环click

    经典重现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...

  3. 前端必会的Javascript经典面试题

    这是前端最基础的问题,也是在面试中难倒无数同学的经典问题 01. Javascript 数据类型 Javascript 数据类型 = 基本类型 + 引用类型 ES6 之前 5 + 1 = 6 种 ES ...

  4. C++经典面试题(二)

    近期看一些面试题,认为假设自己被问到了,并不能非常利落的回答出来. 一是从来没有这个意识,二是没有认真的梳理下. 以下对这些题做出分析,哈!个人能力有限,当中难免有疏漏,欢迎大家补充咯. 11.引用与 ...

  5. JavaScript经典面试题系列

    1.javascript的typeof返回哪些数据类型 Object number function boolean underfind 2.例举3种强制类型转换和2种隐式类型转换? 强制(parse ...

  6. 前端javaScript经典面试题

    1.alert(1&&2),alert(1||0) alert(1&&2)的结果是2 只要“&&”前面是false,无论“&&”后面是t ...

  7. JavaScript经典代码【二】【javascript判断用户点了鼠标左键还是右键】

    IE 下 onMouseDown 事件有个 events.button 可以返回一个数值,根据数值判断取得用户按了那个鼠标键 events.button==0 默认.没有按任何按钮. events.b ...

  8. JavaScript经典作用域问题(转载)

    题目 var a = 10; function test(){ a = 100; console.log(a); console.log(this.a); var a; console.log(a); ...

  9. Web前端经典面试试题(二)

    上次由于时间有限只分享了一部分的前端面试题,所以本篇继续分享前端经典面试试题 一. 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈 ...

随机推荐

  1. Hi35xx NVR GDB调试

    Hi35xx NVR GDB调试   1. 下载gdb源代码 嵌入式Linux 的GDB 调试环境由Host 和Target 两部分组成,Host 端使用arm-linuxgdb,Target Boa ...

  2. Django环境搭建(一)

    搭建Django环境之前先搭建python运行环境 需要了解: 解释器(编译器): 计算机不能直接理解任何除机器语言外的其他语言,所以程序员必须要把自己写的语言翻译成机器语言,而将其他语言翻译成机器语 ...

  3. Appium_Python_API

    1) find_element_by_android_uiautomator (‘new UiSelector().text(“XXXX”)’).click 正常匹配2) find_element_b ...

  4. 【CS Round #43 A】Expected Dice

    [链接]https://csacademy.com/contest/round-43/task/expected-dice/ [题意] 大水题 [题解] 把36种可能的结果都存下来. 然后把重复出现的 ...

  5. [Angular & Web] Retrieve user data from Session

    Once user sign up, we store the user data inside cookie in the broswer and also keep a memory copy i ...

  6. 使用Maven构建eclipse项目 (以zorka为例)

    第一步:下载和配置Maven 下载地址:http://maven.apache.org/download.cgi 下载第二项(binary zip)后解压,如图. 第二步:添加环境变量 MAVEN_H ...

  7. Could not find action or result: There is no Action mapped for namespace [/] and action name [GetG

    Could not find action or result: /car/GetGpsDataAction  There is no Action mapped for namespace [/] ...

  8. 程序中图片透明 函数(使用SetBkColor API函数)

    void DrawTransparentBitmap(HDC  hdc,  HBITMAP  hBitmap,  short  xStart,  short  yStart,  COLORREF  c ...

  9. multi_input_paths

  10. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一)

    原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一) 写下此文章只为了记录Surging微服务学习过程,并且分享给广大想学习surging的基友,方便广大 ...