sokaoti.com
武汉凡谷电子技术股份有限公司2月招聘面试题188道2020223

下列的说法中,不正确的是()

A.迭代器协议是指:对象必须提供一个next方法

B.list、dict、str虽然是Iterable,却不是Iterator

C.生成器与迭代器对象的区别在于:它仅提供next()方法

D.生成器实现了迭代器协议,但生成器是边计算边生成达到节省内存及计算资源


正确答案:C


以下关于迭代器访问集合结构错误的是()

A、访问聚合对象的内容而无需暴露内部表示

B、不支持对聚合对象的多种遍历

C、为遍历不同的聚合结构提供不同的接口

D、定义聚合对象和迭代器接口时,具体的迭代器可实现访问聚合对象的方法


参考答案:BC


RDD的flatMap操作是将函数应用于RDD之中的每一个元素,将返回的迭代器数组、列表等中的所有元素构成新的RDD。()

此题为判断题(对,错)。


正确答案:正确


DNS客户向本机所配DNS服务器发出的查询和DNS服务器向其它DNS服务器发出的查询分别是()。

A.迭代,递归

B.迭代,迭代

C.递归,迭代

D.递归,递归


参考答案:C


使用Iterator迭代集合元素时,可以调用集合对象的方法增删元素。( )

此题为判断题(对,错)。


参考答案:错误


武汉凡谷电子技术股份有限公司2月招聘面试题面试题面试官常问到的一些题目整理如下:问题 Q1:简述 生成器、迭代器、可迭代对象 以及应用场景?可用的回答 : Python可迭代对象(Iterable) Python中经常使用 for 来对某个对象进行遍历,此时被遍历的这个对象就是可迭代对象,像常见的 list , tuple 都是。 如果给一个准确的定义的话,就是只要它定义了可以返回一个迭代器的 _iter_ 方法, 或者定义了可以支持下标索引的 _getitem_ 方法,那么它就是一个可迭代对象。 Python迭代器(iterator) 迭代器是通过 next() 来实现的,每调用一次他就会返回下一个元素,当没有下一个元素的时候返回一个 StopIteration 异常, 所以实际上定义了这个方法的都算是迭代器。 Python生成器(Generators) 生成器是构造迭代器的最简单有力的工具,与普通函数不同的只有在返回一个值的时候使用 yield 来替代 return , 然后 yield 会自动构建好 next() 和 iter() 因为迭代器如此普遍,python专门为for关键字做了迭代器的语法糖。 在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作。 问题 Q2:遇到过得反爬虫策略以及解决方法?可用的回答 : 反爬虫策略: 1.通过headers反爬虫 2.基于用户行为的发爬虫(同一IP短时间内访问的频率,封IP) 3.动态网页反爬虫(通过ajax请求数据,或者通过JavaScript生成) 4.对部分数据进行加密处理的(数据是乱码) 解决方法: 1. 对于基本网页的抓取可以自定义headers,添加headers的数据 2. 使用多个代理ip进行抓取或者设置抓取的频率降低一些, 3. 动态网页的可以使用selenium + phantomjs 进行抓取 4. 对部分数据进行加密的,可以使用selenium进行截图,使用python自带的pytesseract库进行识别,但是比较慢最直接的方法是找到加密的方法进行逆向推理。 问题 Q3:谈谈你对面向对象的理解?可用的回答 : 在我理解,面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。 在现实生活中的任何 物体都可以归为一类事物,而每一个个体都是一类事物的实例。 面向对象的编程是以对象为中心,以消息为驱 动,所以程序=对象+消息。 面向对象有三大特性,封装、继承和多态。 封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化, 提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。 继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类-有父类的行为和属性,也有自己特有的行为和属性。 这样做扩展了已存在的代码块,进一步提高了代码的复用性。 如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。 多态的一大作用就是为了解耦-为了解除父子类继承的耦合度。 如果说继承中父子类的关系式IS-A的关系,那么接口和实现类之之间的关系式 HAS-A。 简单来说,多态就是允许父类引用(或接口)指向子类(或实现类)对象。很多的设计模式都是基于面向对象的多态性设计的。 总结一下,如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。掌握多态必先了解接口,只有充分理解接口才能更好的应用多态。 问题 Q4:你常用的mysql引擎有哪些?各引擎间有什么区别?可用的回答 : 主要 MyISAM 与 InnoDB 两个引擎,其主要区别如下: 一、 InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。 事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了; 二、 MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用; 三、 InnoDB 支持外键,MyISAM 不支持; 四、 MyISAM 是默认引擎,InnoDB 需要指定; 五、 InnoDB 不支持 FULLTEXT 类型的索引; 六、 InnoDB 中不保存表的行数,如 select count(*) from table 时,InnoDB; 需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。 注意的是,当 count(*)语句包含 where 条件时 MyISAM 也需要扫描整个表; 七、 对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立联合索引; 八、 清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表; 九、 InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like %lee% 问题 Q5:什么是socket?简述基于tcp协议的套接字通信流程?可用的回答 : 套接字: 也称为BSD套接字,是支持TCP/IP的网络通信的基本操作单元, 可以看做是不同主机之间的进程进行双向通信的端点, 简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题 通信流程: 1. 服务器先用 socket 函数来建立一个套接字,用这个套接字完成通信的监听。 2. 用 bind 函数来绑定一个端口号和 IP 地址。 因为本地计算机可能有多个网址和 IP,每一个 IP 和端口有多个端口。需要指定一个 IP和端口进行监听。

阅读下列函数说明和C++代码,回答问题

[说明]

对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图5-1显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。

[图5-1]

[C++代码]

template (1) >

class Iterator{

public:

virtual bool hasNext() = 0;

(2) Object* next() = 0;

};

class Book{

//省略具体方法和属性

};

class BookShelf{

private:

vector books;

public:

BookShelf(){

}

Book* getBookAt(int index){

return &booksindex;

}

int getLength(){

return books. size();

}

};

template

class BookshelfIterator : public (3) {

private:

BookShelf * bookShelf;

int index;

public:

BookshelfIterator(BookShelf *bookShelf){

this->bookShelf = bookShelf;

index = 0;

}

bool hasNext(){//判断是否还有下一个元素

if(index < bookShelf->getLength()){

return true;

}else{

return false;

}

}

Objeot* next(){//取得下一个元素

return bookShelf->getBookAt(index++);

}

};

int main()

{

BookShelf bookShelf;

//将书籍上架,省略代码

Book *book;

Iterator *it = new BookShelfIterator( (4) );

while( (5) ){//遍历书架,输出书名

book=(Book*)it->next();

/*访问元素*/

}

return 0;

}


正确答案:(1)Object virtual IteratorObject> &bookShelf it->hasNext()
(1)Object virtual IteratorObject> &bookShelf it->hasNext()


DNS客户向本机所配DNS服务器发出的为()查询,DNS服务器向其它DNS服务器发出的为()查询。

  • A、迭代,递归
  • B、迭代,迭代
  • C、递归,迭代
  • D、递归,递归

正确答案:C


下面关于迭代评估的内容哪个是正确的()。

  • A、每次迭代后,一定要进行迭代评估,并根据迭代评估的结果来制定下一次迭代计划
  • B、迭代评估可以在一次迭代中进行
  • C、迭代评估主要是对文档的评估
  • D、迭代评估可以根据项目情况在多次迭代后做一次评估

正确答案:A


以下哪些是Python3相对于Python2的改动?()

  • A、字符串默认使用unicode
  • B、使用新的字符串格式化方法format取代%运算符
  • C、整数除法行为改变
  • D、range变得和xrange一样返回迭代器

正确答案:A,B


在python中,生成器是特殊的迭代器。


正确答案:正确

更多 “武汉凡谷电子技术股份有限公司2月招聘面试题188道2020223” 相关考题
考题 单选题DNS客户向本机所配DNS服务器发出的查询和DNS服务器向其它DNS服务器发出的查询分别是()。A 迭代,递归B 迭代,迭代C 递归,迭代D 递归,递归正确答案:B解析:暂无解析

考题 单选题以下哪项最能描述确定迭代(时间箱)长度的方法?()A 迭代(时间箱)应该总是30天B 团队通过将故事点的总数除以团队的平均速度来确定迭代(时间箱)的长度C 迭代(时间箱)应该总是两周D 考虑到项目的规模和复杂性,团队应该迭代的长度(计时器)达成一致正确答案:A解析:暂无解析

考题 单选题对于UP方法的“构造阶段”描述正确的是()A 对风险较低和比较简单的元素进行迭代实现B 对风险较高元素进行迭代实现C 开始进入编程实现阶段D 边编程边部署正确答案:D解析:暂无解析

考题 使用Iterator迭代集合元素时,可以调用集合对象的方法增删元素正确答案:错误

考题 下面有关迭代器说法错误的是?()A、迭代器it的两个基本操作是next和hasNextB、调用迭代器next()会返回迭代器的下一个元素,并且更新迭代器的状态C、Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法D、Scala Iterator(迭代器)是一个集合正确答案:D

考题 对于UP方法的“构造阶段”描述正确的是()A、对风险较低和比较简单的元素进行迭代实现B、对风险较高元素进行迭代实现C、开始进入编程实现阶段D、边编程边部署正确答案:A

考题 判断题在python中,生成器是特殊的迭代器。A 对B 错正确答案:错解析:暂无解析

考题 在迭代器模式中,提供一个()的迭代器来对聚合对象进行访问和遍历。A、外部B、内部C、中间D、以上三者都可以正确答案:A

考题 多选题遍历全部数组元素的方法有?()A使用for 循环B使用迭代器IteratorC使用枚举器EnumerationD使用增强型for 循环正确答案:D,C解析:暂无解析

考题 遍历全部数组元素的方法有?() A、使用for 循环B、使用迭代器IteratorC、使用枚举器EnumerationD、使用增强型for 循环正确答案:A,D