当前位置:文档之家› 葵花宝典1.0

葵花宝典1.0

葵花宝典欲练此功,必先自宫若不自宫,也能成功前言:本秘籍只针对现场面试的学员,本教没有搜集到视频面试的资料,所以不做评论,姑且认为与现场面试大同小异。

强烈建议学员尽早提交入学测试(可百度可群里讨教),切不可慢慢悠悠看完视频再做,以免耽误时机,后期面试全被约满。

提交测试后应预约较晚的时间面试,如10号是本批次录取,那学员可预约9号10号面试,给自己留下充足准备时间。

话不多说,少年,发功!黑马面试分为3部分:(按顺序)1》笔试:手写3道编程题。

(据说视频只写一道)2》自我介绍。

3》口答。

先说口答:根据官方提供的口答知识点如下:C语言:变量,函数,选择结构,循环结构,指针,结构体,枚举,宏定义OC语言:面向对象,类与对象,方法,封装,继承,多态,self,super设计模式:代理特有语法:协议,分类,代码块(@protocol, Gategory, Block)Foundation框架:NSString,NSArray,NSDictionary根据众教徒的反馈,面试官实际问到的问题为:介绍Foundation框架的结构体,手动管理内存,分类,协议,C预处理指令,Block,autorelease 和release的区别,@property,单例设计模式,枚举,宏定义,self与super,代理,strong与weak,NSString的各种…如有不全之处,绝对正常。

再说自我介绍:如果你有故事,可以讲给面试官听,但是前提是,必须先把自己的基本情况讲清楚。

讲的时候一定要看面试官脸色,如果发现她表情冷漠,应及时转移话题。

可以说实话,但要有选择的说,每个面试官都希望招到性格开朗,学习认真刻苦,家境殷实并全力支持你,你也超级热爱黑马热爱IOS的学员。

这里不多累赘,大家自己发挥。

接下来是最重要的笔试部分:以下是本教整理的笔试真题,多写,你的笔试题最少有一道就在这里面。

具体答案这里只提供一部分,其余请百度或者群内交流。

1》创建一个NSDictionary,并创建可变副本和不可变副本,说下是深复制还是浅复制。

2》有序数组,插入一个数后还保证有序。

(OC)3》NSString和NSDictionary的遍历,知道几种写几种。

4》NSArray的遍历,知道几种写几种。

5》利用分类实现以下两个功能:(1)字符串的反转。

(2)计算字符串中英文字母的个数6》求几个字符串的最大公共子字符串(oc)7》输入6个字符串,按首字符的大小,对6个字符串排序。

8》编写一个函数,找出整数数组的最小值。

9》编写一个程序,用于接收从终端输入的整数,提取并用英文显示这个数的每一位数,例如输入112,输出One One Two10》求两个字符串的公共字母,添加到第三个字符串中。

11》给一个英文句子,把每个单词的首字母转成大写。

12》给一个英文句子,罗列出句子中出现的字母和其出现的次数,不区分大小写。

4》NSArray遍历的四种方法第一种,for循环void arrayFor(){//快速创建一个oc数组NSArray *array = @[@”one”,@”two”]; //遍历数组for(int i=0; i<array.count ; i++){NSLog(@”array[%i]=%@”,i ,array[i]); }}第二种,快速遍历for(if obj in array) void arrayFor()NSArray *array = @[@”one”,@”two”];for(id obj in array){NSLog(@”%@”,obj);}}第三种调用block,原理:每遍历一个元素,就会调用一次block,并且把这个元素和下标当做block的参数传给id obj和idxvoid arrayFor(){NSArray *array = @[@”one”,@”two”]; [array enumerateObjectsUsingBlock:^(id obj, NSInteger idx, BOOL *stop){NSLog(@”array[%zi]=%@”,idx,obj);if(idx==1){*stop=YES;}}];第四种通过迭代器遍历数组void arrayFor(){NSArray *array = @[@”one”,@”two”];//获取数组的迭代器NSEnumerator *enumerator = [array objectEnumerator];id obj = nil;//获取下一个数组元素,当下一个元素不为空的时候,继续遍历直到下个元素为空while((obj =[enumerator nextObject])!=nil){NSLog(@”%@”,obj);3>NSDictionary的遍历第一种for循环快速遍历void dictFor(){NSDictionary*dict=@{@”k1”:@”v1”,@”k2”:@”v 2”};//遍历字典的所有keyfor(id key in dict){id value=[dict objectForKey:key];NSLog(@”%@=%@”,key,value);}第二种使用迭代器遍历void dictFor()NSDictionary*dict=@{@”k1”:@”v1”,@”k2”:@”v 2”};NSEnumerator *enumer=[dict keyEnumerator]; id key =nil;while(key=[enumer nextObject]){id value=[dict objectForKey:key];NSLog(@”%@=%@”,key ,value);}第三种使用block遍历字典void dictFor(){NSDictionary*dict=@{@”k1”:@”v1”,@”k2”:@”v2”};[dict enumeratorKeysAndObjectsUsingBlock:^(id key ,id obj ,BOOL *stop){NSLog(@”%@=%@”,key ,obj);}];5>利用分类实现两个方法第一个:计算某个字符串中英文字母的个数#import “NSString + Number.h”@implementation NSString (Number)-(int)numberCount{int count =0;for(int i=0; i<self.length; i++){//取出i这个位置对应的字符unichar c=[self characteAtIndex:i];if((c>=’a’&&c<=’z’)||(c>=’A’&&c<=’Z’)){ count++;}return count;}第二个:实现字符串的反转@implementation NSString (Reverse)-(NSString *)reverseOfString{//定义一个可变字符串NSMutableString *str = [NSMutableString string];//按倒序遍历字符串for(int i=(int)self.length-1; i>=0; i--){ //按倒序获取每个字符串的range NSRange range =NSMakeRange( i,1);//将每个字符按照它的range截取下来,并保存在不可变字符串s中NSString *s = [self substringWithRange: range];//将每个单字符的字符串s拼接到可变字符串str 中[str appendString: s];}return str;}7》多个字符串排序:char *name[]={“china”,”america”,”australia”};#include<stdio.h>#include<string.h>void sort_string(char *name[], int len) {int min;for(int i=0; i<len-1; i++){min =i ; //假设一个最小值for(int j=i+1; j<len ; j++){//比较大小if(strcmp(name[j],name[min])<0) {min=j;}}//交换(地址交换)if(i!=min)char *temp;temp = name[i];name[i]=name[min];name[min]=temp;}}8>编写一个函数,找出整数数组的最小值int findMin(int *a,int n) //n为个数{int i,min=a[0];for(i=0;i<n;i++){if(min>a[i]){min=a[i];return min;}9>编写一个程序,用于接收从终端输入的整数,提取并用英文显示这个数的每一位数,例如输入112,输出one one two//定义一个变量初始化为0,用于保存用户输入的整数int input =0;//提示用户输入一个整数NSLog(@”请输入一个整数”);//接收用户输入的整数,并保存在input中scanf(“%d”,&input);//将用户输入的整数转换成字符串对象,并保存于inStr中NSString*inStr=[NSStringstringWithFormat:@”%i”,input]//设置一个不可变的英文数组NSArray *engArray=@[@”Zero”,@”Two”…]; //设置一个可变的字符串用于存放处理的结果NSMutableString*engOutArray=[NSMutableString string];//开始遍历for(int i=0;i<inStr.length;i++){//取出字符串对象中得每一个字符,并转换成整型数据int dex=((int)[inStr characterAtIndex:i])-48;//根据整型数据,从英文数组中取出对应的英文单词,并存放于可变字符串中[engOutArray appendString: engArray[dex]]; //存放英文单词后,加入一个空格[engOutArray appendString:@“”];}//遍历结束,输出结果NSLog(@”处理结果为:%@”,engOutArray);10>#include<stdio.h>#include<string.h>//定义一个函数,功能是获取两个字符串的最大公共子字符串//形参分别为字符型指针变量str1、str2和整型常量num1、num2int getMaxSonStr(char*s1,char*s2,int len1,int len2){//index表示出现第一个相同字符时str1中对应字符的下标int index =0;//m表示公共子串初始长度是0, n表示每个公共子串的长度int m =0, n =0;//遍历s1for(int i =0; i < len1; i++){//遍历s2for(int j =0; j < len2; j++){//遇到相同字符时//s1[i] != '\0'可以防止越界if(s1[i]==s2[j]&& s1[i]!='\0'){//子串长度为1m =1;//s1[i+k]!='\0',结束符相等不比较,预防越界for(int k =0; s1[i+k]== s2[j+k]&& s1[i+k]!='\0'; k++) {//没多一个相同字符,子串长度自增+1m++;}//假定n为最长的子串的长度if(m > n){//记录最长子串的起始下标index = i;//将最长子串的长度值赋值给最大公共子串长度n = m;}}}}//当存在子串时候,输出最大的if(m !=0){printf("最长的公共子串:");for(int i =0; i < m; i++){printf("%c",s1[index+i]);}}//不存在子串输出没有elseprintf("没有公共子串!\n"); return0;}int main(int argc,const char* agv[]){//定义两个字符串str1和str2,并对其进行初始化char str1[110];char str2[110];//提示用户输入第一个字符串printf("请输入第一个字符串:\n");//接收用户输入的字符串gets(str1);//提示用户输入第二个字符串printf("请输入第二个字符串:\n");//接收用户输入的字符串gets(str2);//计算输入字符串str1的长度int len_str1 =strlen("str1");//计算输入字符串str2的长度int len_str2 =strlen("str2");//调用函数,获取两个字符串的最大公共子字符串getMaxSonStr(str1,str2,len_str1,len_str2);printf("\n");return0;}。

相关主题