今天去竞技世界面试了ReactNative工程师,已经有一段时间没写过RN了,本以为都会和RN相关,结果RN方面只面试了一道描述RN生命周期的题目,其他题目都是考的js基础知识,下面是我印象里记起来的面试题,都是很经典的题目啊,值得一看(答案如有不对的地方欢迎指正)
1、
var a = [];
for(let i = 0; i < 10; i++){
a[i] = function () {
console.log(i);
}
}
a[6]();
//输出结果:6
//这个题考的匿名函数,
//for循环是给每个数组元素赋予相对应的匿名函数:a[0] = function(){console.log(0)}、a[1] = function(){console.log(1)}、a[2] = function(){console.log(2)}...a[9] = function(){console.log(9)};但是此时函数都没有被调用,只有被调用用函数才会执行;
//当调用 a[6]()这个匿名函数时,会调用a[6] = function(){console.log(6)};所以打印的是 6;
2、
var tmp = new Date();
function f() {
console.log(tmp);
if(false){
var tmp = "Hello world";
}
}
f();
//输出结果:undefined
//这个涉及到变量提升的问题,以上代码相当于
function f() {
var tmp;
console.log(tmp);
if(false){
tmp = "Hello world";
}
}
//虽然if语句为假,但是tmp变量存在就会提升
3、
var name = "Hello A!";
var objects = {
name : "Hello B!",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
}
}
}
let a = objects.getNameFunc()();
console.log(a);
//输出结果 Hello B;
//this作用域指向objects;
4.进程和线程的定义区别
5.内存分配方式以及它们的区别
6.编写一个递归函数,传入两个值,求出最大公约数;
答案:
//最大公约数
function gcd( x , y){
var max,min,temp;
max = x > y ? x : y ;
min = x < y ? x : y ;
while( max % min ){
temp = max % min;
max = min;
min = temp;
}
return min;
}
//通过递归实现
function digui(m , n){
return m%n==0?(n):(digui(n,m%n));
}
7.编写一个函数,得到字符串中不重复的最大长度;
例如:"ababcdcd" 最大不重复字符串为:"abcd",长度为4
"qwwekw" 最大不重复字符串为: "wek",长度为3
时间复杂度为O(0)
答案:
var newStr = "";
function f1 (str,indexs = 0){
var tempStr = "";
for(let i=indexs;i<str.length;i++){
if(tempStr.indexOf(str[i]) == -1){
tempStr += str[i];
}else {
if(tempStr.length > newStr.length){
newStr = tempStr;
}
tempStr = '';
f1(str,i);
}
}
}
f1('qwwekw');
console.log('newStr:',newStr.length);