快手:看见每一种生活(一面凉经)

快手:看见每一种生活(一面凉经)

第一次面试,很幸运的遇见了快手

开局两道题,直接整懵

一:Javascript实现字符串反转

//方法一:
function strReverse(str) {
	 return str.split("").reverse().join("") 
}

//方法二:
function strReverse(str) {
		var i=str.length;
		var nstr = ""; 
		i=i-1; 
		for (var x = i; x >=0; x--) { 
				nstr+=str.charAt(x)
		}
		return nstr
}

//方法三:
function strReverse(str) {
    	if(str.length == 0)return null; 
	    var i = str.length; 
	    var dstr = ""; 
	    while(--i >= 0) 
	    { 
	        dstr += str.charAt(i);  
	    } 
	    return dstr; 
}

//方法四:
function strReverse(str) {
	return str.split('').reduce((prev, next) => next + prev);
}

//方法五:
function strReverse(str) {
		var newstr="";
           for(var i=0;i<str.length;i++){
               newstr=str.charAt(i)+newstr;
           }
           return newstr
}

//方法六:
function strReverse(str) {
            if(str.length===1){
                return str
            }
            return str.slice(-1)+strReverse(str.slice(0,-1));
}

二:穷举字符串的所有大小写组合

例:输入’kwai’
输出’Kwai,kWai…'一共十六种

这道题没做出来-附网络代码

//方法一:
var a1 = ['s','S'];
var a2 = ['w','W'];
var a3 = ['z','Z'];
var a4 = ['s','S'];
var a5 = ['w','W'];
var a6 = ['z','Z'];
 
var b1 = '';
var b2 = '';
var b3 = '';
var b4 = '';
var b5 = '';
var b6 = '';
var re = '';
var r = [];
for(var i=0;i<=1;i++){
  b1 = a1[i];//b1=s
  for(var j=0;j<=1;j++){
    b2 = a2[j];//b2=w
    for(var k=0;k<=1;k++){
      b3 = a3[k];
      for(var l=0;l<=1;l++){
        b4 = a4[l];
        for(var m=0;m<=1;m++){
          b5 = a5[m];
          for(var n=0;n<=1;n++){
            b6 = a6[n];
            re = b1 + b2 + b3 + b4 + b5 + b6;
            r.push(re);
            document.write(re+'<br/>');
          }
        }
      }
    }
  }
}


//在网上没多大找到关于js解决穷举算法的示例,建议可以多了解大小写转换

三:前端实现水平垂直居中

1.绝对定位元素的居中实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>绝对定位元素的居中实现margin</title>
    <style>
        .center-vertical{
            width: 100px;
            height: 100px;
            background: orange;
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -50px; /*高度的一半*/
            margin-left: -50px; /宽度的一半*/
        }
    </style>
</head>
<body>
    <div class="center-vertical"></div>
</body>
</html>

2.margin: auto;实现绝对定位元素的居中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>margin:auto实现绝对定位元素的居中</title>
    <style>
    .center-vertical{
        width: 100px;
        height: 100px;
        background: orange;
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        margin: auto;
    }
    </style>
</head>
<body>
    <div class="center-vertical"></div>
</body>
</html>

3.CSS3.0弹性布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>水平垂直居中==弹性布局</title>
    <style>
    html,body{
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
    }
    body{
        display: flex;
        align-items: center;/*定义body的元素垂直居中*/
        justify-content: center;/*定义body的元素水平居中*/
    }
    .content{
        width: 300px;
        height: 300px;
        background: orange;
    }
    </style>
</head>
<body>
    <div class="content"></div>
</body>
</html>

4.vertical-align:middle;垂直方向居中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>vertical-align:middle;</title>
    <style>
    .big-box{
        width: 500px;
        height: 400px;
        background: green;
        text-align: center;
    }
    .box{
        line-height: 400px;
    }
    img{
        vertical-align: middle;
    }
    </style>
</head>
<body>
    <div class="big-box">
        <span class="box">
            <img src="ermao.jpg"/>
        </span>
    </div>
</body>
</html>

5.display:table实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>display: table-cell;</title>
    <style>
    .parent{
        width: 300px;
        height: 300px;
        background: orange;
        text-align: center;
        display: table;
    }
    .son{
        display: table-cell;
        background-color: yellow;
        vertical-align: middle;
    }
    </style>
</head>
<body>
    <div class="parent">
        <div class="son">nihaosssss</div>
    </div>
</body>
</html>

6.相对定位

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>实现水平垂直居中==相对定位实现</title>
    <style>
    html,body{
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
    }
    .content{
        width: 300px;
        height: 300px;
        background: orange;
        margin: 0 auto;/*水平居中*/
        position: relative;/*设置position*/
        top: 50%; /*偏移*/
        /*margin-top: -150px;*/    /*第一种:margin-top*/
        transform: translateY(-50%);/*第二种:transform:转换*/
    }
    </style>
</head>
<body>
    <div class="content"></div>
</body>
</html>

四:Event Loop

Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。
JavaScript语言就采用这种机制,来解决单线程运行带来的一些问题。

如果有很多任务需要执行,不外乎三种解决方法。

1)排队。因为一个进程一次只能执行一个任务,只好等前面的任务执行完了,再执行后面的任务。

(2)新建进程。使用fork命令,为每个任务新建一个进程。

(3)新建线程。因为进程太耗费资源,所以如今的程序往往允许一个进程包含多个线程,由线程去完成任务。

五:操作系统:线程和进程的区别

这里再次小懵,前端突如其来的操作系统问题

概念:

1.进程:在操作系统中,能够独立运行,并且作为资源分配的基本单位。它表示运行中的程序。

2.线程:是进程中的一个实例,作为系统调度和分派的基本单位。是进程中的一段序列,能够完成进程中的一个功能。

两者的区别和联系

1.同一个进程可以包含多个线程,一个进程中至少包含一个线程,一个线程只能存在于一个进程中。

2.同一个进程下的所有线程能够共享该进程下的资源

3.进程结束后,该进程下的所有线程将销毁,而一个线程的结束不会影响同一进程下的其他线程

4.线程是轻量级的进程,它的创建和销毁所需要的时间比进程小得多,所有操作系统的执行功能都是通过创建线程去完成的

5.线程在执行时是同步和互斥的,因为他们共享同一个进程下的资源。

6.在操作系统中,进程是拥有系统资源的独立单元,它可以拥有自己的资源。一般而言,线程不能拥有自己的资源,但是它能够访问其隶属进程的资源

总结:

   作为2021届的毕业生,很幸运,在找实习的过程中收获的第一份面试邀请是来自快手的。幸运中带着一丝不幸,幸运是能有与大厂大牛交流的机会,不幸是因为自己的技术不太扎实,回答的很紧张。在接下来的时间需要多刷刷面试题,学习过程中需要了解技术底层的东西。真正的大厂并不需要你对框架的了解有多少,他们更看重算法更看重思路,更看重你对JavaScript原生的理解。多了解了解理论,不能局限于应用级开发!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值