preface

This article is for the development friends who want to enter the “BAT” and other enterprises to provide ideas, the content is all from real experience.

About me

Hello everyone, I am Xiao Bai (alias), an iOS development engineer.

Some people get into “BAT”, “TMD” and “FLAG” when they graduate, but many people don’t. For example, the most typical one — me.

Hard work can change your fate. Is it true?

In my opinion, although I am not particularly smart (but not stupid either), working hard does bring me more opportunities. Through my efforts, I successfully got the offer from the big factory. I believe that you who are reading this article will also be able to do it.

So whether you want to move to the big work party, or is about to graduate to find a job this year, if you want to be into the big but don’t know where to begin, hope you can give this article, several times according to the content of this article find the correct and suitable method, grinding hard, and then stick to keep keeping, I’m sure you can get a giant offers.

Decadent campus experience

I graduated from an ordinary second-grade university. In college, I dreamed of becoming a student with excellent academic performance and fantasized about entering a BAT enterprise. However, the reality smacked face, the poor grades of a student. On the first day of graduation, I became an unemployed person.

I used to be the real version of “Yu Huanshui” : “efforts” to live, but always “cheated” by life.

When he was in college, he had a wide range of interests, but Ye Gong was good at nothing. I wanted to be an excellent student and achieve, but I was too ambitious to do anything. Graduate year postgraduate entrance examination, successfully failed; Later, he took part in the civil service examination, unexpectedly passed the written test, but narrowly failed in the interview.

That year, I realized how big the world was, but there was no place for me.

Entering the workplace

Under the pressure of life, with the introduction of my relatives, I entered a start-up company in Shenzhen to do iOS development.

Because of my poor skills, my salary is only 5K. I didn’t even know how to use UITableView proxies, I didn’t even know how to set UIView frames, and every time I went to a requirements panel, I couldn’t get a word in, because I didn’t really understand it.

When really want to speak, but also can only echo android’s colleague, say: an also.

If even the simplest business requirements can not be completed, is to be fired, so AT that time I was on the edge of being fired. Under pressure at work, I had to spend extra time getting the basics right.

However, because of vanity, I do not want to be accused of being too lazy, so I choose to study crazily in the company after my colleagues go off work every day. If others leave work on time, I “996”; If others are 996, I am 10106.

All my efforts paid off. In about three months, I was competent to develop independent modules. In order to move forward, I read Effective Objective-C, Core Animations, and all the iOS books and technical articles available in the market that year, and applied some advanced techniques to the project in time.

Due to my good performance in the company (possibly due to more overtime 😂), the leader raised my salary to 8K. But I thought my level at that time could be above 12K at least. After working in this company for a year, I decided to jump ship. The year was 2015.

Advanced workplace

The market of iOS in 2015 was not bad. When the iron was hot, I applied for a resume interview by myself and easily entered a Top 10 financial Internet company.

The division of labor in big companies is more detailed and the process is more standardized. I stayed here for two years and always kept a learning mentality.

The iOS development landscape has turned a corner in the last two years, with more developers than developers, and less job hunting overall. In order to stay relevant, I copied the growth pattern of my previous company — crazy learning.

I studied and practiced techniques that were popular in the community at the time, such as RAC, RxSwift, reverse development, componentalization, etc. But I understand that because of my poor foundation in university, there is still a gap in the level of leaving the first-line Internet manufacturers.

Join the goose factory

One day, I received a call from a headhunter asking if I would consider Tencent. I readily agreed, and the dream that had lain dormant in my heart for many years was awakened.

However, it is not so easy to get into a big factory, which requires systematic preparation for the interview.

I began to use my spare time to consolidate the basic knowledge needed for the interview. After about three months of preparation, I passed five rounds of interview and finally joined the goose factory successfully!

Now I will share with you my experience in preparing for the interview (out of respect for the company, I can’t tell you the original questions, but I will tell you the directions, because of course there is a “question bank” in the directions), which is divided into three aspects: basic skills, soft skills and bonus points. Let’s do it one by one.

The basic skills

The basics are the skills you need to develop muscle memory skills that you can pull off when asked.

Resume Basics

The quality of the resume determines the first impression.

Many people may have great skills but fail to get an interview because of their resume. For example, misspelled words, typography confusion, redundant sentences do not make sense. Here are my main points:

typography

I went minimalist, writing directly using Markdown and converting to PDF.

As a GUI developer, you can also create a static page with beautiful animations to show off your basic skills and impress the interviewer. For example, a friend of mine created her resume this way and successfully passed the interview.

Writing logic

Please follow the STAR rule. That is, situation, task, action and result.

For example, “TO solve the remaining callback hell and memory problems in the project, I used RxSwift to reconstruct the XX module, popularized the idea of responsive programming in the team, and received unanimous praise from the team members”. This is often the logic behind the interviewer’s questions.

content

Make sure you are familiar with the content of your resume. Because there are two ways of thinking about an interview.

One, follow your resume. Second, follow his own train of thought.

If you fall into the first category and the interviewer asks you what you have on your resume and you get stuck, that can be very embarrassing, and the interviewer may suspect that your resume is not truthful.

If this is the case, then the content of your resume is giving the interviewer psychological clues, and the following question is likely to be about the diverging knowledge points in your resume.

For example, the interviewer will probably ask you about RAC, Promise, AND FRP when you write about your experience with RxSwift.

So go with the formula: after you’ve written your resume, examine each piece of information carefully and ask yourself some questions.

Basic data structures and algorithms

This is the knowledge point THAT I am afraid of, although I was trained, because of the poor foundation (even forgot what a linked list is at that time), there is no way, if I want to enter a big factory, I have to bite the bullet to learn these basic skills. The learning material I used at that time was The Beauty of Data Structure and Algorithm written by Mr. Wang Zheng.

I divided into two aspects of data structure and algorithm to learn, because data structure is the basis of solving algorithm problems.

Basic data structure

Focus on array, linked list, binary tree.

For example, can you write a non-recursive binary tree traversal by hand in less than three minutes?

When I first started reviewing, I had to think a lot about recursively traversing a binary tree, let alone writing it in a non-recursive form. After my own strenuous review training, I was able to write the non-recursive form of binary tree preorder traversal in less than a minute:

var stack = []
var resut = []
func inOrder(_ root: TreeNode?) {
    cur = root
    while! stack.isEmpty || cur {whilecur ! =nil {
            result.append(cur.val)
            stack.append(cur)
            cur = cur.left
        }
        if! stack.isEmpty { cur = stack.popLast() cur = cur.right}}}Copy the code

If you also encounter the same situation, please calm down first, analyze the cause carefully, we can apply the right medicine to the case.

Is the train of thought not understanding? Or did the API forget? Or do you know what you’re thinking and can’t write the code?

After analyzing the reasons, we should take appropriate measures:

Train of thought did not understand, go to see the basis until understand so far; API forget to look at the documentation, in your mind; There are ideas to write, that the usual code knock less, usually practice, no matter how simple knowledge points must also important field knock out.

The basic algorithm

DFS, BFS, sorting, binary search, recursion, dynamic programming. Many gods in the sharing of experience, will say that the algorithm is not difficult, standing on their point of view is indeed so.

But for underachievers like me, climbing the algorithmic mountain was a challenge. I remember the first time I did an Easy algorithm problem in Leetcode, I could not even read the problem 😂.

However, after continuous efforts in orientation and being abused by the questions for thousands of times, I gradually mastered the routine and became a contestant with 100 questions.

The routine is: if you have no idea about a question after five minutes of thinking, you can read the answer directly, and then type it out according to your own understanding until Accepted. Then, for the next five days, type the solution to the problem every day. After you do that, you will find that the algorithm is “no one but the hand.”

I chose the cards in the “Exploration” section of Leetcode for training. Finish the elementary, intermediate and advanced questions in turn.

If you have enough time, you can carry out targeted training on your weaknesses. For example, if you are strange to “tree”, you can directly find the card of “tree” and train.

Fundamentals of Computer Networks

TCP/IP model, HTTPS principle, DNS principle and so on.

These principles do not need to be memorized, but you need to be able to explain the process and steps of these principles through specific cases.

For example, the logic behind accessing an HTTPS URL in a browser.

Recommended materials: “Diagram of TCP/IP”, “Perspective of HTTP protocol” by Luo Jianfeng, “Interesting Talk about Network Protocol” by Liu Chao.

Fundamentals of client development

Client development basics: Runtime, Runloop, common frameworks, response chains, multithreading, blocks, etc.

Understand these points to the extent of “Why”.

You can do some soul searching on the basics of iOS development along the lines of “what-how-why.” For instance,

What is KVO? How do you use it in your projects? What are the underlying principles or how can you design a KVO mechanic yourself?

There are plenty of interview questions on the Internet that you can quiz yourself on.

The iOS developer environment is now very introverted, and many interviews use “partial questions” to eliminate some candidates. The answers to these questions are mostly confirmatory conclusions, focusing on your “memory “😂:

Don’t worry. There’s a pattern to these problems. Most of them are from the latest articles or the latest terminology in the iOS technology community, as long as you read more articles and do more accumulation, you will not be difficult to overcome.

For example, an interview question asks, what are Functor and Monad? If you have seen Tang Qiao Swift brain exercise (5) – Monad, this problem will be easily solved.

So, if you come across a new concept or term when you’re reading technical articles, be on the lookout for future interview questions. There are many more questions like this, you can refer to this question bank.

Recommended materials: “iOS development master class” by Mr. Daiming.

Teacher Dai’s class is more like an introduction, and you can dig into the content of each class to a certain depth. Many interviewers are also loyal readers of these classes. Some interviewers directly ask “How to achieve non-invasive embedding plan? As an interview question, this question is from the 9th class of “Master class”.

Soft power

Ability to communicate

I can sum it up in four words: confident, fluent, patient and polite.

Many people may have good coding skills that they can’t convey in an interview.

During the interview, you should maintain a positive attitude, regardless of the environment or the attitude of the interviewer. Remember, you’re looking for a job, so make everything work in your favor.

For example, you could offer an unsolicited handshake to the interviewer to increase goodwill.

If the interviewer asks you a question that you don’t know, try to list some concepts related to the question and guess the answer.

For example, the interviewer asks, how does binary rearrangement work?

Assuming you just don’t know this, you can guess a possible binary rearrangement mechanism by asking about dyLD concepts before the App starts or the principles of the Mach-O binary format. If you’re wrong, it doesn’t matter, because you’re at least demonstrating your ability to actively solve problems in the process.

Of course, if you can’t come up with a concept, be honest and say you don’t know or ask your interviewer for advice.

Quotient ability

As a developer, it is inevitable to fight with all kinds of people in the work. It is also an important quality to be able to overcome these pressures.

For example, the interviewer may ask, “What are your advantages in competing with 211 and 985 graduates with average academic background and low school ranking?”

How are you gonna answer that?

If you are a poor interviewer, you are likely to stutter or leave angrily. Instead, you should be humble and calm, as this could be a sign that some interviewers are optimistic about you. The stress interview gives you the final test, so don’t let it slip.

Answer examples:

Although my academic background is not 211 or 985, I still passed the previous technical interview, which shows your company’s recognition of my technical strength. My academic degree proves my learning ability in the past. I am an ordinary undergraduate, but I can compete with 211 and 985 graduates on the same stage, which shows that my learning ability is not inferior to them.

pluses

A plus is anything that highlights your strengths, preferably technology-related. For example, you

Participated in ACM competition and won ranking; Once built a wheel that addressed development pain points and posted on Github; I live in StackoverFlow community, and I’m a senior contributor to StackoverFlow. Have your own tech blog, write frequently, have a deep knowledge of a particular technology, and have a good subscription to your blog.

I don’t have much technical advantage, but MY English is ok. I got more than 600 points in cet-6, which I included in my resume and successfully attracted the interest of the interviewer.

Afterword.

Now a lot of big company recruit a person to already definite limit to need 211, 985 record of formal schooling, and I this kind of double non 2 this record of formal schooling, do not have even stepping stone. However, I was really lucky to get the offer, but it was also inseparable from my efforts.

If you have any questions or questions, please leave a comment below.

Finally, wish all students who want to enter Dachang as soon as possible!!