Ant Summer Internship Frontend Interview

This time the interview was for Ant's Intelligent Collaboration Business Unit, that is, the product line where I work, okbug insisted on referring me. So far this year, I've only interviewed with two companies, so it wasn't unreasonable to have one more interview, and okbug referred me. I submitted the application in the morning around 11 a.m. on March 12, 2022, and then had to take an assessment. It was quite annoying, but I completed it quickly.

First Interview

I applied around 11 a.m. on Saturday, and by 7 p.m. the same day, they called me to schedule an interview. They also gave me three written test questions to complete. The interview was scheduled for March 16, 2021 at 7:00 p.m. and was supposed to last 55 minutes.

  • The first written test was about parsing a directory into a tree structure.
  • The second one involved removing duplicates from an array.
  • The third one was about the serial execution of Promise.
  • The implementation of a Greasemonkey script, which is a script I open-sourced on Github.
  • Major responsibilities during my internship at Tencent, and the challenges faced while working on live streaming services.
  • Understanding of frontend frameworks and frontend engineering.
  • Specific features of Vue.js that I like.
  • Overall frontend and backend processes for user login and registration.
  • Detailed process for mobile phone verification code login and specific implementation details.
  • Possible issues when a user is unable to receive the verification code.
  • Ensuring secure data transmission.
  • Specific security measures for preventing data-related issues.
  • Implementation of adding items to the shopping cart on the PC side using drag and drop.
  • Specific implementation of adding multiple items to the shopping cart on mobile, considering multi-touch interactions.
  • Understanding of backend development using Node.js.
  • Preference towards frontend or backend development.
  • How ThinkPHP handles page output or API interfaces.
  • Performance monitoring and anomaly monitoring on servers.
  • Protocol for dealing with sudden CPU overload on a server and troubleshooting procedures.
  • Exception monitoring and alarm handling of backend code.
  • Seamless transition and upgrade for frontend and backend systems.
  • Smooth handling of backend upgrade on multiple servers.
  • Relevant aspects of Docker containers.
  • Aspects related to databases.
  • How Babel handles code and its underlying principles.
  • Other approaches for the first written test and the time and space complexity, and managing a billion numbers.
  • Handling latency issues in mini programs.
  • Tools and methods for identifying and diagnosing performance issues in frontend development, as well as troubleshooting methods.
  • Techniques for optimizing page performance.

During the feedback phase, I inquired about the business group related to Yuque. I thought it was a frontend role, but it turned out to be a full-stack role, including frontend, backend, database, and operations. To be honest, I thought the first interview would be relatively relaxed, but it turned out to be quite challenging. The entire interview was based on real-world scenarios, which left me feeling a bit perplexed, but the overall interview experience was still quite good. The interviewer also provided some hints, although he was a bit serious and not much of a cheery person. By the way, he is the only person I know so far who has looked at my Github before the interview. He's really something. Attached below is the code I wrote for the first written test question at the time.

class Node {
    constructor({ value, level, parent }) {
        this.value = value;
        this.level = level;
        this.children = [];
        this.parent = parent;
        // hint: you can also add this.parent node to assist in parsing the data structure
    }
}

const str = `
- Chapter One
  - Title One
    - Subtitle One
- Chapter Two
    - Sub-Subtitle of Chapter Two
- Title One
- Title Two
`;

function parseTree(text) {
    const lines = text.split("\n");
    let curLevel = 0;
    let preIndex = 0;
    const target = [];
    let preNode = null;
    let parentNode = null;
    lines.forEach(line => {
        if(line === "") return void 0;
        if(!/^[\s]*- /.test(line)) throw new Error("Each line should start with - ");
        const index = line.indexOf("- ");
        if(index % 2 !== 0) throw new Error("Start tabs must be even");
        let levelChange = Math.floor(Math.abs(index - preIndex) / 2); // level change
        if(index > preIndex) {
            while(levelChange--){
                curLevel++;
                parentNode = preNode;
                if(levelChange > 0) { // if going directly from a first-level title to a third-level one, add an empty node
                    preNode = new Node({
                        value: "Empty Node",
                        level: curLevel,
                        parent: parentNode
                    });
                    parentNode.children.push(preNode);
                }
            }
        }else if(index < preIndex){
            while(levelChange--){
                curLevel--;
                if(parentNode) parentNode = parentNode.parent;
                else parentNode = null;
            }
        } 
        preIndex = index;
        const node = new Node({
            value: line.slice(index + 2, line.length), 
            level: curLevel, 
            parent: parentNode
        });
        if(parentNode) parentNode.children.push(node);
        else target.push(node);
        preNode = node;
    })
    return target;
}
const result = parseTree(str);
const output = node => {
    console.log(new Array(node.level).fill("  ").join(""), node.value, node.level);
    node.children.forEach(item => output(item));
}
result.forEach(item => output(item));

Second Interview

Wow, I just finished the first interview on Wednesday night, and on Thursday noon they called me to schedule the second interview. This time, the interviewer is no small potato from Alibaba. It's someone to look up to. But the interview turned out to be just chatting with me, not as serious as I thought, haha. The time for the second interview is set at 2021-03-18 15:00, and the interview duration is 35 minutes.

  • Introduce a project that you find interesting.
  • Technical solutions for front-end of Mini Programs.
  • Technical solutions for back-end of Mini Programs.
  • What functions does the Mini Program have?
  • What did you learn during your internship at Tencent, and what was the most important thing?
  • Were the projects you worked on during the internship launched?
  • How do you usually study?
  • What triggered your interest in learning front-end, and why not back-end?
  • Research direction during your postgraduate stage.
  • Why didn't you continue with the postgraduate research direction?
  • How did you implement virus detection?
  • What model did you use, and how did you build the neural network?
  • Understanding of Node.js.
  • Research on back-end technologies.
  • Advantages and disadvantages of the http protocol.
  • Expectations for the internship.

During the Q&A stage, I asked for some advice. The interviewer commented on the Mini Programs and some script plugins I worked on in school, and then told me that my expectation for technical improvement during the internship may not be fully met by the company, as it might be difficult to adopt or follow new technologies due to time or technical debt issues. They suggested that I should try to incorporate what I learn into my own projects as much as possible. It's important for both my personal technical improvement and leaving something for others to continue in the future. Things I do on my own can be done and changed as I wish, but things at the company may be more constrained. What the interviewer said really makes sense, and I should try to do that, especially since I still have time now. After I start working, I may not have the luxury to do whatever I want. Many thanks to the interviewer. In retrospect, I feel that I didn't perform well in this interview. I feel that I should have mentioned my relevant strengths, not just answering the interviewer's questions.

HR Interview

I finished the second interview on Friday, and on Monday they called me to schedule the HR interview. The HR interviewer is quite cheerful. It's a bit embarrassing to say, but I entered the meeting five minutes early, humming a song, and then it became awkward. I really hate it when the air suddenly goes quiet, haha. The time for the HR interview is set at 2021-03-24 09:50, and the interview duration is 25 minutes.

  • What are your thoughts on the city where you will do the internship?
  • Was your internship at Tencent on-site or remote?
  • The most important thing you learned during the internship.
  • Give an example of something you learned.
  • If you could start over, how would you avoid this problem?
  • Have you interviewed with other companies? Why didn't you interview with Tencent for the internship?
  • Your strengths and weaknesses, and your classmates' evaluations of you.
  • A detailed example of one of your strengths.
  • When did you officially start learning front-end development?
  • Any activities and projects you participated in at school?
  • Have you used Yuque? Provide some advantages and disadvantages.
  • What do you usually discuss with your classmates?
  • Would you recommend Yuque to your classmates? Why?

During the Q&A stage, I asked about the most important thing for being successful in this position, and the HR interviewer gave me two important points: 1) learning to communicate, which is very important in the workplace. You need to be able to understand what others are saying and be able to explain clearly what you need to do; 2) it's okay to ask questions when you don't understand. Every project comes with the company's cost, so it's important to ask questions in a timely manner. I thank the HR interviewer for the advice. What they said really makes sense, haha. Finally, the interviewer said that it would take 1 to 2 weeks to evaluate and get back to me, so I can only wait patiently, haha.

Follow-up

No need to wait for 1 to 2 weeks. On 2022.02.25, I casually checked the company's official website and found out that I got rejected. It's alright, I wasn't in their priority list anyway, haha.