How can iOS be reliable in recruitment?

How can iOS be reliable in recruitment?

I have interviewed many people in the past year. The transition from an interviewer to an interviewer has given me more insights into iOS recruitment. After a large number of interviews some time ago, we finally found like-minded partners, and the interviews have come to an end for the time being. To summarize the feelings during the interview process, you can also read our views on resumes, algorithms, personality, iOS basics, underlying knowledge, and some frequently asked interview questions.

A solid resume

A resume can reflect a person's personality and level. Compared with how many awards you have won in school, work experience, project experience, familiar technology, etc. are more important. If there are blogs and some projects on github, the favorability is ++, but remember to tidy up before the interview, we will really review your open source code file by file. We also like to pay attention to some details, such as the spelling of keywords in the resume, which seems insignificant but can reflect the requirements for ourselves. It is common to see the spelling of the three letters of iOS in a resume as IOS, iOS, and ios, which is very unbearable. Here are a few common problems:

  • iPhone -> IPHONE IPhone
  • Xcode -> XCode xcode
  • Objective-C -> Objective-C
  • JSON -> Json
  • HTTP -> Http

Also, please note that there is a half-width space between Chinese and English, which will make the layout more beautiful. The resume carries not only the content, but also the details and attitude, which often reflect the interviewer's coding style and the seriousness of work. Of course, there are also people who write beautiful resumes but find out that they don't know anything after the interview. I even saw someone who came to the interview and told me that the resume was fake and that he just wanted an interview opportunity. - -

interview

Don't be late, don't be late, don't be late. I say this three times. If there are any changes, notify HR in advance. I have encountered someone who didn't come because of something urgent, didn't tell anyone, and called to ask for a change of time. Goodbye to such people.

It is best to prepare paper, pen, and resume for the interview. You may not need them, but they can show your seriousness. If possible, bring your Mac and source code, and install all the apps that appear in your resume on your phone.

About Algorithms

We are pragmatic. In iOS development, we rarely need to write complex algorithms ourselves, so it is not included in the interview assessment criteria.

Coding Standards

This is a key examination item. I once posted a style correction question on Weibo:

[[139147]]

I have also asked people to revise my work on the spot during interviews. There were quite a few flaws. If more than 10 revisions were made, it basically met the standards (Virgos are very good at this).

A very discriminating interview question

To test the basics of an interviewee, it is basically enough to ask a @property:

What modifiers can follow @property?

When to use weak keyword and how is it different from assign?

How to use the copy keyword?

What will go wrong with this writing: @property (copy) NSMutableArray *array;

How can I make my own class use the copy modifier? How can I override the setter with the copy keyword?

This set of questions has a large degree of differentiation. If you can answer the above questions correctly, you can extend them to ask more in-depth questions:

What is the essence of @property? How are ivar, getter, and setter generated and added to this class?

How to use @property in @protocol and category

How to implement the weak attribute in r untime

Everyone has different areas of expertise. We usually talk about the technical skills that we write about our expertise in on our resume. If we are not very familiar with them, it is best not to write them down or bring them up, in case the interviewer happens to be very proficient in them, then we will be exposed.

Checklist

I have summarized some interview questions, but I didn't stick to them. Later, I used these as a checklist to remind me when I have nothing to talk about during the interview. They are about language, framework, and operating mechanism:

[※]What are the attribute keywords in @property?

[※]Do weak properties need to be set to nil in dealloc?

[※※]What are the functions of @synthesize and @dynamic respectively?

[※※※] Under ARC, when no attribute keywords are explicitly specified, what are the default keywords?

[※※※]NSString (or NSArray, NSDictionary) declared with @property often uses the copy keyword. Why? What problems may arise if the strong keyword is used instead?

[※※※]@synthesize What are the rules for synthesizing instance variables? If the property name is foo and there is an instance variable named _foo, will the new variable be automatically synthesized?

[※※※※※]After having automatically synthesized property instance variables, what other usage scenarios does @synthesize have?

[※※]What will happen if you send a message to a nil object in ObjC?

[※※※]What is the relationship between sending a message to an object in ObjC [obj foo] and the objc_msgSend() function?

[※※※]When will an unrecognized selector exception be reported?

[※※※※] How to lay out the memory of an objc object? (Considering the case of a parent class)

[※※※※]What does the isa pointer of an objc object point to? What is its function?

[※※※※]What does the following code output?

  1. @implementation Son : Father
  2. - (id)init
  3. {
  4. self = [ super init];
  5. if (self) {
  6. NSLog(@ "%@" , NSStringFromClass([self class ]));
  7. NSLog(@ "%@" , NSStringFromClass([ super   class ]));
  8. }
  9. return self;
  10. }
  11. @end  

[※※※※]How does runtime find the corresponding IMP address through the selector? (Consider class methods and instance methods separately)

[※※※※]Do objects associated using the runtime Associate method need to be released when the main object is dealloc?

[※※※※※]What are the essential differences and connections between class methods and instance methods in objc?

[※※※※※]What does the _objc_msgForward function do and what will happen if we call it directly?

[※※※※※]How to automatically set weak variables to nil in runtime?

[※※※※※]Can I add instance variables to a compiled class? Can I add instance variables to a class created at runtime? Why?

[※※※]What is the relationship between runloop and thread?

[※※※]What is the function of runloop mode?

[※※※※]When a timer is triggered by + scheduledTimerWithTimeInterval..., the timer is temporarily called back when the list on the page is swiped. Why? How to solve it?

[※※※※※]Guess how runloop is implemented internally?

[※]What mechanism does objc use to manage object memory?

[※※※※]How does ARC help developers manage memory?

[※※※※] Without manually specifying the autoreleasepool, when is an autorealese object released? (For example, created in a vc's viewDidLoad)

[※※※※]Under what circumstances does BAD_ACCESS occur?

[※※※※※]How does Apple implement autoreleasepool?

[※※]When using blocks, under what circumstances will a reference cycle occur and how to solve it?

[※※]How to modify block external variables within a block?

[※※※] When using certain block APIs of the system (such as the block version of UIView to write animations), do you also consider the reference cycle problem?

[※※]What are the two types of GCD queues (dispatch_queue_t)?

[※※※※] How to use GCD to synchronize several asynchronous calls? (For example, asynchronously load multiple images according to several URLs, and then combine them into a whole image after all the images are downloaded)

[※※※※]What is the function of dispatch_barrier_async?

[※※※※※]Why did Apple abandon dispatch_get_current_queue?

[※※※※※]What is the running result of the following code?

  1. - ( void )viewDidLoad
  2. {
  3. [ super viewDidLoad];
  4. NSLog(@ "1" );
  5. dispatch_sync(dispatch_get_main_queue(), ^{
  6. NSLog(@ "2" );
  7. });
  8. NSLog(@ "3" );
  9. }

[※※]What are the functions of each parameter in addObserver:forKeyPath:options:context:? Which method needs to be implemented in observer to obtain KVO callback?

[※※※]How to manually trigger KVO of a value

[※※※]If a class has an instance variable NSString *_foo, when calling setValue:forKey:, can foo or _foo be used as the key?

[※※※※]How to use the collection operators in KVC's keyPath?

[※※※※]Is the keyPath of KVC and KVO necessarily an attribute?

[※※※※※]How to turn off the default implementation of KVO and enter a customized KVO implementation?

[※※※※※]How does Apple implement KVO for an object?

[※※]Why can the view properties connected by IBOutlet be set to weak?

[※※※※※]How to use User Defined Runtime Attributes in IB?

[※※※] How to debug BAD_ACCESS error

[※※※]What are the commonly used debugging commands of lldb (gdb)?

These small questions can be used as an entry point for discussion, and the conversation can continue based on the interviewee's answer. Some of these questions are relatively basic and are reserved for tough interviewers or for trial rating. Generally, they are not the focus of the examination.

Business Capabilities

After all, my daily work is not about runtime or runloop, so I rarely use the underlying black magic. 80% of my time is spent dealing with building pages, writing business logic, and network requests.

The interviewee is required to be proficient in building UI. I will find a page that the interviewee has made and ask him to analyze the page structure, constraints or the connection and calculation methods of frame layout; sometimes I will also ask the interviewee to talk about several commonly used delegate and data source proxy methods of UITableView, dynamic Cell height calculation, etc. Next, find a random App page on the phone and ask the interviewee to talk on the spot about which UI components and layout methods he should use if he wrote it. After asking a few questions, you can roughly understand the business capabilities. We use IB and AutoLayout heavily here. If the interviewee still uses code to code UI, it doesn’t matter. It’s good to have the intention to "be a good person"~

If the interviewee thinks they are good at programming architecture and some design patterns, we will talk about them, but please don’t mention Singleton. The more you use it, the more you doubt your skills. As someone who is confident in design patterns, I usually ask a question: In which classes in the Cocoa SDK is the abstract factory pattern reflected?

In terms of architecture, whether it is MVC, MVVM, or MVP, you can discuss your own views. Anyway, there is no correct answer, as long as you don't make it too outrageous. For example, some people say that network requests and database operations are best done in subclasses of UIView.

Network requests, databases, etc. are all packaged maturely, and you just need to know how to use them. In addition, we will also ask what other programming languages ​​you know besides iOS development, or what scripting languages ​​and Terminal operations you are familiar with, and even ask how to bypass the firewall - - I believe these skills are very important.

character

We are all programmers, so there is no need to embarrass the other party with strange and difficult questions. The more important thing is personality and whether you can get along with the team's style. An interviewer with a good mentality needs to be calm, not arrogant or flattering, and express himself normally. It is often encountered that after asking a question, he will be in a state of contemplation for one or two minutes without saying a word. The communication is like squeezing toothpaste, which is very frustrating; there are also very arrogant people who obviously don’t understand but still forcefully argue. It’s okay to calm the interviewer, but don’t blame me for being rude when you run into the gun point--. It takes about 5 minutes to decide whether to talk to one person. I like the feeling of things happening naturally. If you like each other, you can’t stop it.

The recruitment has come to an end, and there will be more exciting things to come. Finally, thank you again for your support and trust in me.

<<:  Meizu Flyme Developer Salon opens in Beijing to create and grow together

>>:  What do you think about vocational college students giving up their 400,000 yuan annual salary to return to school to take the postgraduate entrance examination?

Recommend

Cook hints at new iWatch feature: voice control

Apple CEO Cook has hinted many times that they wil...

Brand Yuanqi Forest Marketing Data Report

When it comes to sugar-free beverages with “0 sug...

September marketing promotion hot calendar!

Autumn is the season of harvest. In the upcoming ...

Snapdragon 808 global first test: six-core outperforms eight-core Snapdragon 810

LG G Flex 2 was the first in the world to use Sna...

High-end products often only require the simplest Chinese manufacturing!

Biden talks infrastructure Background made in Chi...

iPads are not selling well. Analyzing the story behind the tablet industry

Looking at the 2014 tablet shipment report, the n...

Changlu Teacher Chip Conversion Ultimate Edition

Introduction to the Ultimate Edition of Changlu T...

How to play Baidu bidding ocpc second level

For SEMers who often play with small Baidu accoun...

Is financing too difficult? NIO CFO Xie Dongying resigns

Recently, NIO issued an announcement stating that...

He Jie's vivid diary makes it easier for children to write

"He Jie - Vivid Diary" is suitable for ...

A collection of ViewHolder tool classes

Preface In the process of developing APP, enginee...