其他分享
首页 > 其他分享> > 校招笔试回顾总结-01

校招笔试回顾总结-01

作者:互联网

今天参加了西山居的校招笔试,总体感受是:难。(也是因为自己太菜鸡了),现在趁热打铁,把做过会的、不会的题总结一下。

1、现有一个线性表( 38、25、74、63、52、48 ) ,使用散列函数 h(key) = kay % 7 来计算散列地址,存放于散列表 A(0……6)中,采用线性探测法,则等概率成功查找的平均查找长度为?

按余数插入散列表并使用线性探测解决冲突后,计算平均查找长度:(平均查找长度就是每个数据查找长度之和除以数据个数)

38 % 7 = 2

25 % 7 = 4

74 % 7 = 4(发生冲突,使用线性探测解决)

63 % 7 = 0

52 % 7 = 3

48 % 7 = 6

还好,没有发生二次冲突。。。

所以插入后散列表中为:

0( 63 )

1(null) 

2( 38 )

3( 52 )   

4( 25 )   

5( 74 )  //从4号位置线性探测到这个位置

6( 48 )

查找长度:

38:1次    25:1次    74:2次     63:1次     52:1次   48:1次

平均:(1+1+2+1+1+1)/ 6 = 1.17

2、代码的设计模式?

    (1)观察者模式

观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。

观察者模式:定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。

    (2)适配器模式

将两种完全不同的事物联系到一起。适配器模式就是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    (3)装饰器模式

装饰器模式,也叫包装模式 。是指在不改变原有对象的基础之上,将功能附加到对象上.提供了比继承更灵活的替代方法 属于结构型模式。

包含:

抽象组件(Component):可以是一个接口或者抽象类:其充当被装饰类的原始对象,定义了被装饰的对象方法(既抽出公用的方法)

具体实现类(ConcreteComponent): 继承/实现Component的一个具体对象,也是被装饰对象抽象装饰器(Decorator)* 通用的装饰ConcreteComponent的装饰器,Decorator其内部必然有个属性指向Component 抽象组件;里面一般包含的是抽象类/接口,主要是为了让其子类按照其构造形式传入一个 Component 抽象组件,这是强制的通用行为(当然,如果系统中装饰逻辑单一,并不需要实现许多装饰器,那么我们可以直接省略该类,而直接实现一个具体装饰(ConcreteDecorator)即可);

具体装饰器(ConcreteDecorator):Decorator 的具体实现类,理论上,每个 ConcreteDecorator
都扩展了Component对象的一种功能。

    (4)工厂模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

3、A、B、C、D使用频率分别为:22、7、9、27,则哈夫曼编码为?

没什么好说的,构建哈夫曼树后转换为哈夫曼编码树,则哈夫曼编码为:

A:11

B:100

C;101

D:0

4、不属于网络应用层协议的是?

websocket:应用层协议

Telnet(远程通信网络):应用层协议

icmp:ICMP协议是一个网络层协议。
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。所以我们就需要一种协议来完成这样的功能–ICMP协议。

http:应用层协议

5、判断对错:

全局变量I,I++是多线程安全的。( × )

多线程访问方法中的变量全部是局部变量是线程安全的。( √ )

i++和++i的线程安全分为两种情况:
1、如果i是局部变量(在方法里定义的),那么是线程安全的。因为局部变量是线程私有的,别的线程访问不到,其实也可以说没有线程安不安全之说,因为别的线程对他造不成影响。
2、如果i是全局变量,则同一进程的不同线程都可能访问到该变量,因而是线程不安全的,
会产生脏读。

主线程初始化好一个vector后,多线程使用迭代器只读vector是线程安全的。( × )

当vector空间不足时,会申请一块更大的内存空间,并将原指向内存空间的数据移动到新

的内存空间中,接着,旧的内存空间将会被回收。这里就可能会出现问题了,当vector指向新的内存空间之后,原来指向旧内存空间的迭代器都会失效了,若再使用这些失效迭代器,将会出现coredump。因为当需要插入数据到vector的时候,就需要注意当前的迭代器还是否有效了。

多线程共同访问某个类的const变量是线程安全的。() ?????

6、一组数据{ 9、1、10、7、6、5、2、8 }进行堆排序,在建立大根堆后,中序遍历输出序列是?

转换为二叉树后,按大根堆特点调整到大根堆,然后中序遍历。很简单的一道题。

标签:01,对象,内存空间,模式,回顾总结,vector,线程,校招,装饰
来源: https://blog.csdn.net/lxy_lucky/article/details/120913045