Recruiting a reliable iOS programmer and a reliable ios programmer
A reliable resume
Your resume reflects your personality and level. It is more important than how many awards you have received at school, your work experience, project experience, and familiar technologies, if you have a blog or Github project, you can feel it better. But remember to clear it before you go to the interview. We will review your open source code in a file. We also like to pay attention to some details, such as the spelling of keywords in our resumes, which seem insignificant but can reflect our requirements.IOSThe spelling of these three letters is IOS, iOS, and ios, which is intolerable. Let's list several other common problems:
IPhone-> IPHONE
Xcode-> XCode xcode
Objective-C-> Object-C
JSON-> Json
HTTP> Http
Also, note that the Chinese and English documents are separated by a half-width space, and the layout will be much more beautiful. The resume carries not only content, but also details and attitudes, the above points often reflect the code style and seriousness of the subject. Of course, my resume is very beautiful, but after chatting, I found that I could not do anything. I even told me that my resume was fake when I came to the interview, I just want to ask for an interview --
Interview
Don't be late, don't be late, don't be late, say the important thing three times. If there is any change, inform HR in advance. If there is a temporary problem, don't say anything to anyone, and you still need to change the time when you call.
It is best to prepare paper, pen, and resume during the interview. It may not be used, but it is very serious. With Mac and source code, you can install all the apps that appear on your resume on your mobile phone.
About Algorithms
We are pragmatic. In iOS development, we seldom need to write complicated algorithms by ourselves, so we are not in the interview assessment criteria.
Code Specification
This is a key research item. I once posted a style correction question on Weibo:
I also asked people to change it on the spot during the interview. There were a lot of slots, and the number of modifications that allowed more than 10 had basically reached the standard (Virgos did well in this regard ).
A face-to-face question with a high degree of discrimination
Evaluate the knowledge of an interviewer. Simply ask @ property:
- @ What modifiers does property have?
- What is the difference between using the weak keyword and assign?
- How to use the copy keyword?
- What will happen to this writing method:
@property (copy) NSMutableArray *array;
- How can I make my class use the copy modifier? How do I rewrite the setter with the copy keyword?
This set of questions has a large degree of discrimination. If the above questions can be answered correctly, you can extend the question to more in-depth points:
- @ Property what is the essence? How ivar, getter, and setter are generated and added to this class
- @ Protocol and category how to use @ property
- How does runtime implement weak attributes?
The fields that everyone is good at are different. We generally look for technical chats we are good at from our resumes. If we are not very familiar with them, we 'd better not write them out or pull them out, in case the interviewer is very proficient, it will show up.
Checklist
After summing up some interview questions, I did not stick to it. Later I used these questions as checklist. I had nothing to talk about during the interview, so I made a reminder about the nature of the language, framework, and operating mechanism:
[※] What attribute keywords are included in @ property?
[※] Does the weak attribute need to be set to nil in dealloc?
[※※※] What are the functions of @ synthesize and @ dynamic?
[※※※※] What are the default keywords when no attribute keyword is explicitly specified under ARC?
[※※※※It is declared with @ property.NSString
(OrNSArray
,NSDictionary
) Frequently usedcopy
Keyword, why? If you usestrong
Keyword. What problems may this cause?
[※※※※] What are the rules for @ synthesize to synthesize instance variables? If the property name is foo and an instance variable named _ foo exists, will the new variable be automatically merged?
[※※※※※※] What are the application scenarios of @ synthesize after an instance variable is automatically merged?
[※※※] What will happen when a message is sent to an nil object in objc?
[※※※※] A message is sent to an object in objc.[obj foo]
Andobjc_msgSend()
What is the relationship between functions?
[※※※※When will the message be reported?unrecognized selector
?
[※※※※※] How does one perform memory layout for an objc object? (Consider having a parent class)
[※※※※※] For an objc objectisa
What is the pointer? What is the function?
[※※※※※] What is the output of the following code?
1 2 3 4 5 6 7 8 9 10 11
|
@implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); NSLog(@"%@", NSStringFromClass([super class])); } return self; } @end
|
[※※※※※] How does a runtime locate the corresponding IMP address through selector? (Consider the class method and instance method respectively)
[※※※※※Useruntime Associate
Do objects associated with methods need to be released when the primary object is dealloc?
[※※※※※※] What are the essential differences and connections between class methods and instance methods in objc?
[※※※※※※]_objc_msgForward
What does a function do? What will happen when a function is called directly?
[※※※※※※How does runtime automatically set the weak variable to nil?
[※※※※※※Can I add an instance variable to the compiled class? Can I add instance variables to the class created at runtime? Why?
[※※※※What is the relationship between a runloop and a thread?
[※※※※] What is the role of runloop mode?
[※※※※※+ scheduledTimerWithTimeInterval...
Timer, timer will tentatively call back when sliding the list on the page. Why? How can this problem be solved?
[※※※※※※※How is the internal implementation of runloop?
[※] What mechanism does objc use to manage object memory?
[※※※※※How does ARC help developers manage memory?
[※※※※] When Will an autorealese object be released without manually specifying autoreleasepool? (For example, create in viewDidLoad of a vc)
[※※※※Under what circumstances does BAD_ACCESS appear?
[※※※※※※How does apple implement autoreleasepool?
[※※※] When block is used, what will happen when a reference loop occurs? How can this problem be solved?
[※※※] How does one modify the external variables of a block?
[※※※※Using some block APIs of the system (for exampleUIView
When writing an animation in the block version), do you also consider the reference loop issue?
[※※※What are the two types of GCD queues (dispatch_queue_t?
[※※※※※How does one use GCD to synchronize multiple asynchronous calls? (For example, load multiple images asynchronously based on several URLs, and then synthesize an entire image after all the images are downloaded)
[※※※※※] What is the role of dispatch_barrier_async?
[※※※※※※※Why does apple discard dispatch_get_current_queue?
[※※※※※※] What is the result of the following code?
1 2 3 4 5 6 7 8 9
|
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"1"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"2"); }); NSLog(@"3"); }
|
[※※※]addObserver:forKeyPath:options:context:
What are the functions of each parameter? What method does observer need to implement to obtain the KVO callback?
[※※※※] How to manually trigger a value KVO
[※※※※] If a class has instance variablesNSString *_foo
, CallsetValue:forKey:
You can usefoo
Or_foo
As key?
[※※※※※keyPath
How to use the set operators in?
[※※※※※] KVC and KVOkeyPath
Must it be an attribute?
[※※※※※※How does one disable the default KVO implementation and go to the custom KVO implementation?
[※※※※※※How does apple implement KVO for an object?
[※※※Why can IBOutlet's view attributes be setweak
?
[※※※※※※In IBUser Defined Runtime Attributes
How to use it?
[※※※※How to debug the BAD_ACCESS error?
[※※※] Common Debugging commands for lldb (gdb?
These questions can be used as the entrance to the discussion. Continue with the discussion based on the answers provided by the interviewer. Some of these questions are relatively low-level, which are left for the interview or test rating. Generally, they are not the focus of the study.
Business capability
After all, the common work content is not runtime or runloop, and the underlying black magic is not used very much. 80% of the time is spent dealing with page building, business logic writing, and network requests.
Ask the interviewer to be proficient in building the UI. I will find a page that the interviewer has done to analyze the link and calculation methods of the page structure, constraints, or frame layout; sometimes, the interviewer is asked to talk about the delegate and data source proxy methods commonly used by UITableView, and the height of dynamic Cell computing. Next, find an App page on your phone, ask the interviewer to talk about the UI components and layout modes he should use on the spot. After asking a few questions, we can get a rough idea of our business capabilities. We are using IB and AutoLayout heavily. It doesn't matter if the interviewer still uses the code UI, willingness to be "good" is good ~
The program architecture and some design patterns can also be discussed if the interviewer thinks it is not bad, but the more he uses it, the more he doubts the level. I usually ask a question about the self-confidence in the design model. which classes of the abstract factory model are embodied in the Cocoa SDK?
In terms of architecture, MVC, MVVM, or MVP, you can talk about your own opinions. There is no correct answer, as long as you don't want to be too outrageous, for example, some people say that network requests and database operations are best placed in the subclass of UIView.
Network requests, databases, and other systems all have mature encapsulation, so you can basically understand what to use. In addition, we will also ask what other programming languages besides iOS development, or which scripting language and Terminal operation are familiar, I even asked how FQ--is important.
Character
Everyone is writing programs, and there is no need to use strange and difficult questions for each other. What's more important is whether the character and Team style are consistent. An interviewer with a good mentality needs to have a normal mind, Don't be arrogant, don't kneel, and expression should be normal, often encounter a question after a minute or two has been in the status of meditation, do not say a word, communication is like squeezing toothpaste, and it is very frustrating; there are also very embarrassing, clearly do not understand and still forcibly argue and strive for, the town has to hold the interviewer, hit the gun, don't blame you --. I decided whether or not I could just talk for five minutes. I like the feeling that I can't block my eyes.
Recruitment has come to an end, and more exciting things will happen in the future. Finally, I would like to thank you again for your support and trust in me.