编程技术文章分享与教程

网站首页 > 技术文章 正文

上海特斯拉.NET岗位笔试题解答(特斯拉 笔试)

hmc789 2024-11-17 11:22:25 技术文章 2 ℃

近期,我有幸参与了特斯拉公司的面试流程,竞聘一个高级.NET工程师岗位。特斯拉作为全球领先的电动汽车和能源公司,以其创新精神和前瞻性而闻名。以下是我在这次面试过程中的一些经历和感悟,希望对有意向加入这家公司的朋友们有所帮助。

一直以来都对特斯拉这家引领创新与科技融合的公司抱有极大的兴趣。因此,收到面试邀请也比较期待,了解到有线上算法时候,虽然比较排斥算法面试,但是还是准备试一试。也算对自己一次考验,也是一次难得的学习机会。抱着这种心态,按照线上面试网站提前注册账号(后面发现不用注册也可以。直接点击链接就可以做题)。

面试经历,主要有以下三点
1、 .NET API实现,考题比较多,大多数都比较简单。很快完成了。
2、前端React实现一个定时任务,由于之前做前端比较少,这块花了大量时间,最后没有完成。感觉时间不够了,马上调到后面的数据库题目。

3、SQL脚本,这道题感觉比较灵活。还是有点技术含量。最终答案感觉没有过,感觉面试无望了,就用手机拍下最后两道考题。

没有做出来,感觉一整天不是很爽,在电脑变查阅了很多资料,终于完成了。如下是面试题目和参考答案。

const useCountdown = () => {
  const [time, set] = React.useState(0);
  const ref = React.useRef(time);
  const state = React.useRef(false);
  const hasStarted = React.useRef(false);
  const fn = () => {
    setTimeout(() => {
      if (state.current || ref.current === 0) return;
      --ref.current;
      set(ref.current);
      if (ref.current > 0) fn();
    }, 1000);
  };
  const resume = () => {
    state.current = false;
    fn();
  };
  const pause = () => {
    state.current = true;
  };
  const start = (t) => {
    if (hasStarted.current) return;
    hasStarted.current = true;
    state.current = false;
    ref.current = t;
    fn();
  };
  const reset = () => {
    set(0);
    hasStarted.current = false;
    ref.current = 0;
  };

  return [
    time,
    {
      start,
      reset,
      runOrStop() {
        state.current ? resume() : pause();
      },
      set: (t) => {
        ref.current = t;
        set(t);
      }
    }
  ];
};

const App = () => {
  const [time, handle] = useCountdown(0);
  const minutes = Math.floor(time / 60);
  const seconds = time % 60;
  const minuteHandle = (e) => {
    let t = parseInt(e.target.value);
    handle.set(t * 60 + seconds);
  };
  const secondHandle = (e) => {
    let t = parseInt(e.target.value);
    let m = minutes;
    if (t < 0) {
      if (m > 0) {
        t = 59;
        m = m - 1;
      } else {
        t = 0;
      }
    }

    handle.set(t + m * 60);
  };

  return (
    <>
      <h1 data-testid="running-clock">
        {minutes < 10 ? `0${minutes}` : minutes}:
        {seconds < 10 ? `0${seconds}` : seconds}
      </h1>
      <label>
        <input min="0" type="number" onChange={minuteHandle} value={minutes} />
        Minutes
      </label>
      <label>
        <input type="number" onChange={secondHandle} value={seconds} />
        Seconds
      </label>
      <button onClick={() => handle.start(time)}>START</button>
      <button onClick={handle.runOrStop}>PAUSE / RESUME</button>
      <button onClick={handle.reset}>RESET</button>
    </>
  );
};

ReactDOM.render(<App />, document.getElementById("root"));

<div id="root"></div>

*:focus {
  outline: 3px solid red;
}

数据库考题如下:


参考答案:

select group_id,winner_id from (
SELECT p.group_id,total_score,p.player_id AS winner_id,
ROW_NUMBER() 
OVER (PARTITION BY group_id ORDER BY total_score DESC,p.player_id Asc) as rowNo
FROM players p
left join
    (
    select player_id, sum(score) AS total_score from 
    (
        SELECT first_player AS player_id, first_score AS score
        FROM matches
        UNION ALL
        SELECT second_player AS player_id, second_score AS score
        FROM matches
    ) as temp  
    GROUP BY player_id
    ) as play_score
on p.player_id=play_score.player_id
) as res
where rowNo=1

这次线上面试让我认识到了自己在知识储备方面的不足之处,特别是在前端和数据库这两个领域。它促使我意识到,作为一个全栈开发者,我需要加强这些领域的能力以应对多变的工作需求。面试估计是无望了。


屏幕前的朋友,如果遇到这些问题,你感觉难吗?欢迎大家留言。

标签列表
最新留言