【前端面試】字節跳動2019校招面經 - 前端開發崗

這是一次失敗的面經……但是吃一塹才能長一智不是嗎?

字節跳動2019校招面經 - 前端開發崗

1. 介紹以及項目經歷

吧啦吧啦……此處省略10000字

面試官會從項目經歷入手,考察項目中遇到的難題,以及解決方法,強調個人的努力以及在解決過程中扮演的角色(是主導還是參與)。
每個人都有不一樣的精彩經歷,好好琢磨簡歷怎麼寫吧 Q-Q

2. 瀏覽器基礎

從瀏覽器輸入網址到網頁呈現,中間發生了什麼?

具體可以參照我的另外一篇文章《【前端芝士樹】從瀏覽器搜索框輸入網址到網頁呈現發生了什麼?》

3. Javascript相關

字符串數組的倒序

題目如下

var input = 'Hello my best friend';
function reverse(){
//todo Please code here.
};
console.log(reverse(input));//'friend best my Hello'

我的解法
先把字符串切分成數組,然後進行倒序插入

let input = 'Hello my best friend';
/**
 * reverse
 * @param str
 * */
function reverse(str) {
  let arr = str.split(' ');
  let result = [];
  let length = arr.length;
  for (let i = length - 1; i > -1; i--) {
    result.push(arr[i]);
  }
  return result.join(' ');
}
function reverse_2(str){
  return str.split(' ').reverse().join(' ');
}

console.log(reverse(input));//'friend best my Hello'
console.log(reverse_2(input));//'friend best my Hello'

CSS相關

實現一個寬度爲父容器一半的位置居中的正方形

HTML代碼如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div class="father">
    <div class="item"></div>
</div>

</body>
</html>

首先分解題目的幾個關鍵點

  1. 寬度爲父容器一半的正方形
  2. 位置居中

一些邊寫邊問的過程中涉及的知識點

  1. div的默認display是block(塊級元素)
  2. 塊級元素行內元素 的區別

    • 塊級元素 獨佔一行, 其寬度自動填滿父元素寬度,可以設置高度
      [div/h1~h6-p/ol-ul-li/form-button-textarea-select/table]
    • 行內元素 可以與其他行內元素排列在同一行中,寬高無效
      [a/img/span-strong-b-i-em/label]
  3. 父元素的display設置爲flex後,子元素的display是?

    • emmm,難道不是默認值static?

幾種解題的方法

我按各個點,在代碼中列舉了幾種方法,歡迎提供其他的思路
HTML

<!DOCTYPE html>
<html lang="ch">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <div class="father center_1">
        <div class="item square_1"></div>
    </div>
    <div class="father center_2">
        <div class="item square_2"></div>
    </div>
    <div class="father center_3">
        <div class="item square_2"></div>
    </div>
</div>
</body>
</html>

CSS

 .father {
        position: relative;
        width: 500px;
        height: 300px;
        margin: auto auto 2rem;
        background: lightskyblue;
    }

    .item {
        background: indianred;
    }

    /* 實現寬度爲父元素一半的正方形 */
    .square_1 {
        width: 250px;
        height: 250px;
    }

    .square_2 {
        width: 50%;
        padding-top: 50%;
        height: 0;
    }

    /* 實現位置居中 */
    .center_1 {
        display: flex;
        align-items: center; /* 決定交叉軸上的對齊方式(垂直方向)*/
        justify-content: center; /* 決定主軸上的對齊方式(水平方向)*/
    }

    .center_2 .item {
        position: absolute;
        margin: auto;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
    }

    .center_3 .item{
        position: relative;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }

算法相關

拋硬幣問題

假設你是小A,和小B玩一個拋硬幣的遊戲,硬幣爲正面時獲勝,如果一方失敗了則交由另一方,現在由你先開始,求獲勝的概率?

經典概率問題

  1. 假設小A第一次就拋到了正面,那小A獲勝而遊戲結束,概率爲二分之一
  2. 假設小A第一次拋到的是反面,想要小A獲勝只能小B拋反面,小A再拋回正面,至此概率爲八分之一
  3. 後續同理,依次乘以四分之一,所有的概率進行相加,求極限可得結果爲三分之二
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章