校招笔试回顾总结-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