笔试题

2-26号面试-

1.obj-c有私有方法么?私有变量呢?
答:

有私有方法,也有私有变量。 在objective-C中,所有实例变量默认都是私有的,所有实例方法默认都是公有的

2.#import跟#include的区别?#import<>跟#import又有什么区别?
答:

1.#import是 Objective-C 导入头文件的关键字,而#include是c#/c++导入头文件的关键字
2.使用#import导入的头文件只会导入一次,不会重复导入
3.#import<>用来引用系统的头文件,#import“”用来引用用户的头文件

3.Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

Objective-C不能多继承,可以实现多个接口
运用Category分类去重写一个类的方法,仅对Category有效,不会影响其他类以及原生类

4.Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

创建线程的三种方法:NSThread,GCD的dispatch,使用子类化的NSOperation,然后将其加入NSOperationQueue
在主线程执行代码的方法:performSelectorOnMainThread
延时执行代码:performSelector:onThread:WithObject:waitUntilDone:

5.浅拷贝和深拷贝的区别?

浅拷贝(retain):指复制指向对象的指针,而不复制引用对象的本身
深拷贝(copy):复制引用对象的本身

6.协议、通知和KVO的区别?

Delegate(协议):比较规范,针对one- to - one(1对1)关系,并且receiver(接受者)可以返回值给sender(传递者)
Notification(通知): 比较灵活,针对one - to - one/many/none(1对多)关系,receiver无法返回值给sender,so,delegate用于sender希望接受到receiver的一个反馈值,notification用于通知多个object某个事件
KVO:性能不好(底层会产生新的类),只能监听某个对象的属性的变化,不推荐使用(1个对象的属性能被多个对象监听, 1个对象能监听多个对象的其他属性)

7.协议与通知的不同:

1.协议有控制链(has-a)的关系,而通知没有
2.通知可以一对多,一条消息可以发送给多个消息接受者

8.strong与weak的区别

1.当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使还有weak类型指向它
2.一旦最后一个strong类型指针离去,这个对象将被释放,所有的weak类型指针都将被清除

9.何为isa指针

是一个Class类型的指针。
每一个实例对象有个isa指针,指向对象的类,而Class里也有一个isa指针,指向meteClass(元类); 元类保存了类方法的列表。
当类方法被调用时,会先从本身中查找类方法的实现,如果没有,元类会向他的父类查找这个类方法。同时注意的是:元类也是类,也是对象。元类也有isa指针,它的isa指针最终指向一个根元类(rootClass),根元类的isa指针指向本身,这样实现一个封闭的内循环。

2/29面试题

1.请描述数组,链表,堆栈,队列,集合,散列表的特点与常用使用场景
队列,栈是线性数据结构的典型代表,而数组,链表是常用的两种数据存储结构;
队列和栈均可以用数组或链表的存储方式实现它的功能。
HashSet 用HashMap类实现 集合
HashMap 散列表 Entry节点 key value hashvalue next

2.请用伪代码写出计算二叉树深度的算法

2.1,可以用递归方法,
2.2,先根遍历
2.3,递归函数,增加形参,记录当前的根的层。
2.4,找到和结点对应的记录值 。
2.5,返回结点层数

伪代码如下:
// T结点,L当前层,value,结点值
//返回-1:没有找到,0-n:对应层
int get_node_layer(T *node,int value ,int L)
{int i=-1;
if(node)
{
if(node->value ==value)
return L;
if(i = get_node_layer(node->left,value ,L+1)!=-1) //查左子树,如找到就返回
return i; /
if(i = get_node_layer(node->right,value ,L+1)!=-1)//查右子树,如找到就返回
return i;
}
return i;
}

3.多线程开发中我们经常用到生产者消费模式,请用伪代码写出生产者和消费者方法

3.1.生产者消费者模式
学过操作系统应该对这个概念很熟悉,简单来说就是“你生产我消费”;该模式分为三个部分:生产者,消费者和产品队列(爬虫中该产品就是URL任务队列,故以下称任务队列)。
该模式可灵活应用,生产者和消费者的比例可以是:多v多,多v一,一v多;
该模式解决多线程同步问题的思想是:对任务队列加锁,队列的出队和入队操作原子性;
该模式应用到多线程爬虫:抓取线程主动去任务队列找活干,如果没活就等待,有活了就通知那些等待的抓取线程。

3.2简例代码
一个网页抓取线程类WorkThread,一个任务队列类TaskQueue;简单示例如下,在TaskQueue类中,使用Synchronized关键字使当前线程取得对象TaskQueue的锁,并用wait和notifyAll函数进行线程间通信。
/* 任务队列类 */
public class TaskQueue
{
private Queue taskbuffer;
private int taskcount;
private int maxN;

public TaskQueue(int max) 
{ 
    maxN = max; 
    taskbuffer = new Queue<url>(maxN); 
    taskcount = 0; 
} 

// 生产者调用的任务入队操作 
public synchronized void addTask(List<url> urlList) 
{ 
    while(maxN <= taskcount)// 如果队列够大,while语句块可以略 
    { 
        wait();  // 进入TaskQueue对象等待池,释放锁 
    } 
    while(!urlList.isEmpty()) 
    { 
        taskbuffer.add(str); 
        taskcount++; 
    } 
    notifyAll(); // 唤醒等待池线程 
} 

// 消费者调动的任务出队操作 
public synchronized url getTask() 
{ 
    while(taskcount <= 0) 
    { 
        wait(); 
    } 
    url str = taskbuffer.pop(); 
    taskcount--; 
    return str; 
} 

}

/* 扮演生产者和消费者的网页抓取线程 */
public class WorkThread extends Thread
{
private TaskQueue taskQueue;
private List urlList;

public WorkThread(TaskQueue tq) 
{ 
    taskQueue = tq; 
    urlList = new List<url>(); 
} 

public List<url> crawl(url str) 
{ 
    /* crawl and parse the page str 
     * return the parse link list of page str 
     */ 
} 

public void run() 
{ 
    try { 
        while (true) { 
            Thread.sleep(1000); 

            url str = taskQueue.getTask(); // 扮演消费者 
            urlList = crawl(str);        // 略去url去重,详见读写锁模式 
            tastQueue.addTask(urlList);    // 扮演生成者 
        } 
    } catch (InterruptedException e) { 
    } 
} 

}

4.在做数据库设计时,给某个字段添加索引的依据是什么?索引有什么缺点?

数据库索引是为了增加查询速度而对表字段附加的一种标识。

缺点:
4.1数据库非常巨大,开销会很大
4.2建立太多的索引将会影响更新和插入的速度

5.请用ER图画出学生 老师 班级 课程之间的关系(略)

6.常用的网络相关命令行工具有哪些?它们的功能是什么

7.请描述TCP和UDP的优缺点及常用使用场景
Tcp的优点:
可靠,稳定
TCP的可靠性体现在传输数据之前,三次握手建立连接(四次挥手释放连接),并且在数据传递时,有确认、窗口、重传、拥塞控制机制,数据传完之后,断开连接用来节省系统资源。
TCP的缺点
慢,效率低,占用系统资源高,易被攻击
传数据之前建立连接,这样会消耗时间,而且在消息传递时,确认机制、重传机制和拥塞控制机制都会消耗大量的时间,而且要在每台设备上维护所有的传输连接。而每个连接都会占用系统的CPU、内存等硬件软件资源。并且TCP的取而机制、三次握手,这些也导致TCP容易被人利用,实现DOS,DDOS攻击。
UDP的优点
快,比TCP稍安全
UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,udp是一个无状态的传输协议,所以他在传输数据时非常快。M没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。UDP也是无法避免攻击的,比如:UDP flood攻击。。。
UDP的缺点
不可靠,不稳定
因为UDP没有TCP的那些可靠机制,在网络质量不好时很容易丢包。
在日常生活中,常见使用TCP协议的应用如下:
浏览器,用的HTTP
FlashFXP,用的FTP
Outlook,用的POP、SMTP
Putty,用的Telnet、SSH
QQ文件传输
…………
日常生活中,常见使用UDP协议的应用如下:
QQ语音
QQ视频
TFTP

8.谈谈策略模式和状态模式的区别
一个策略是一个计划或方案,通过执行这个计划或方案,我们可以在给定的输入条件下达到一个特定的目标。
而状态模式不同,对一个状态特别重要的对象,通过状态机来建模一个对象的状态;状态模式处理的核心问题是状态的迁移,因为在对象存在很多状态情况下,对各个business flow,各个状态之间跳转和迁移过程都是及其复杂的。

在状态模式中,状态的变迁是由对象的内部条件决定,外界只需关心其接口,不必关心其状态对象的创建和转化;而策略模式里,采取何种策略由外部条件(C)决定。

9.请用UML类图画出如下模型,英国人,美国人,日本人在排队,当他们出队时会用母语话说出自己的名字

10.请画出自动提款机(ATM)的用例图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值