【实习】暑期实习之python笔试题(一)
2013-04-16 15:30
316 查看
近期忙于找一个暑期实习的公司,无奈个人水平实在太水,合适的公司也不是很多,笔试题目也积累了一些,整理一下好了。
公司 A
题目一:编写一个脚本main.py,使用方式如下:
main.py -u http://www.sohu.com -d 'a=1,b=2,c=3' -o /tmp/index.html
功能要求:打开-u指定的页面,将页面中所有的链接后面增加参数a=1&b=2&c=3(需要考虑链接中已经存在指定的参数的问题), 然后保存到-o指定的文件中。
题目二:编写一个 ab(Apache Benchmark)的替代程序,请尽可能的兼容 ab 你所认为重要的功能和参数。
题目三:
有配置文件有类似下面的配置:
http://m.sohu.com/c/5/|财经|200
http://m.sohu.com/|体育|200
http://m.sohu.com/n/346620805/|信号|200
编写一个脚本,要求如下:
1. 读取配置文件,对每一个url进行检查.
例如http://m.sohu.com/c/5/, 这个url返回的结果应该包含"财经"两个字,并且HTTP状态码是200, 否则报错。
2. 需支持并行的检查多个链接
Solutions:
我选做的是第一题和第三题。
第一题不难,主要解决的是打开某个url并遍历其中的所有链接,以前写爬虫的时候搞过这些东西就比较简单了,同时也涉及到了基本的I/O操作,考的还是比较基本的吧。比较生疏的是命令行参数问题,平时用的比较多但是自己貌似没实现过,趁这个机会也看了一下有关的问题,不过鉴于问题比较简单我就用了getopt解决了,其实有可以实现更加复杂的命令行参数的方法的。
有关的连接可以看一下这里: http://blog.csdn.net/jiang1013nan/article/details/5854378
代码如下:
第二题时间原因我没有做,只是大体的了解了一下,有兴趣的同学可以参考一下的链接:
http://blog.csdn.net/jhonguy/article/details/7576155
第三题考察的有基本的I\O操作,对获得的URL内容的处理,返回的HTTP状态码可以分析header解决,以及用多线程读取同一文件,涉及到了锁与同步的问题,也没有特别偏的东西吧,看来公司都是比较注重基础知识的,唉自己基础这么不扎实怎么办,还要继续努力呀。
代码如下:
找实习的一点感受:
1. 扎实的基础知识+某一方面的特长才能有好的offer
2. 不管找不找得到,准备工作的同学都应该尽力去找,感觉找实习的时候自己提高的很多,多投几个公司多笔试面试几次,就会发现很多自己觉得不重要的东西还是很有必要牢牢掌握的,以前偷懒丢下的东西,以后都要一个个的捡起来。
3. 找实习的渠道很重要,我在微博上找了几个公司发了邮件去问基本上都收到回复了,时效性比较强。大街网上一堆HR很感兴趣的投递都没什么反馈,还是要转变思路吧。
公司 A
题目一:编写一个脚本main.py,使用方式如下:
main.py -u http://www.sohu.com -d 'a=1,b=2,c=3' -o /tmp/index.html
功能要求:打开-u指定的页面,将页面中所有的链接后面增加参数a=1&b=2&c=3(需要考虑链接中已经存在指定的参数的问题), 然后保存到-o指定的文件中。
题目二:编写一个 ab(Apache Benchmark)的替代程序,请尽可能的兼容 ab 你所认为重要的功能和参数。
题目三:
有配置文件有类似下面的配置:
http://m.sohu.com/c/5/|财经|200
http://m.sohu.com/|体育|200
http://m.sohu.com/n/346620805/|信号|200
编写一个脚本,要求如下:
1. 读取配置文件,对每一个url进行检查.
例如http://m.sohu.com/c/5/, 这个url返回的结果应该包含"财经"两个字,并且HTTP状态码是200, 否则报错。
2. 需支持并行的检查多个链接
Solutions:
我选做的是第一题和第三题。
第一题不难,主要解决的是打开某个url并遍历其中的所有链接,以前写爬虫的时候搞过这些东西就比较简单了,同时也涉及到了基本的I/O操作,考的还是比较基本的吧。比较生疏的是命令行参数问题,平时用的比较多但是自己貌似没实现过,趁这个机会也看了一下有关的问题,不过鉴于问题比较简单我就用了getopt解决了,其实有可以实现更加复杂的命令行参数的方法的。
有关的连接可以看一下这里: http://blog.csdn.net/jiang1013nan/article/details/5854378
代码如下:
# _*_ coding: utf-8 _*_ ''' 题目一:编写一个脚本main.py,使用方式如下: main.py -u http://www.sohu.com -d 'a=1,b=2,c=3' -o /tmp/index.html 功能要求:打开-u指定的页面,将页面中所有的链接后面增加参数a=1&b=2&c=3 (需要考虑链接中已经存在指定的参数的问题), 然后保存到-o指定的文件中。 ''' import urllib2 import re import sys,getopt opts, args = getopt.getopt(sys.argv[1:],'hu:d:o:') def Tryurlopen(url,d,o): d = getd(d) patterns = re.compile('<a\s(?:.*?\s)*?href=[\'"](.*?)[\'"].*?>') f = urllib2.urlopen(url) contents = f.read() m = re.findall(patterns, contents) file = open(o,'w') for ele in m: #print ele if '&' in ele or '?' in ele: #url后面有参数 ele += '&' + d elif ele[-1:] == '/': ele += d else: ele += '/' + d file.writelines(ele + '\n') file.close() def getd(d): changeresult = '' dtest = d.split(',') for dele in dtest: changeresult += dele + '&' changeresult = changeresult[:-1] return changeresult def main(argv):#利用getop模块实现基本的命令行参数处理 url = '' d = '' orietion = '' for op, value in opts: if op =='-u': url = value elif op == '-d': d = value elif op == '-o': orietion = value Tryurlopen(url,d,orietion) if __name__ == '__main__': main(sys.argv)
第二题时间原因我没有做,只是大体的了解了一下,有兴趣的同学可以参考一下的链接:
http://blog.csdn.net/jhonguy/article/details/7576155
第三题考察的有基本的I\O操作,对获得的URL内容的处理,返回的HTTP状态码可以分析header解决,以及用多线程读取同一文件,涉及到了锁与同步的问题,也没有特别偏的东西吧,看来公司都是比较注重基础知识的,唉自己基础这么不扎实怎么办,还要继续努力呀。
代码如下:
# _*_ coding: utf-8 _*_ ''' 题目三: 有配置文件有类似下面的配置: http://m.sohu.com/c/5/|财经|200 http://m.sohu.com/|体育|200 http://m.sohu.com/n/346620805/|信号|200 编写一个脚本,要求如下: 1. 读取配置文件,对每一个url进行检查. 例如http://m.sohu.com/c/5/, 这个url返回的结果应该包含"财经"两个字,并且HTTP状态码是200, 否则报错。 2. 需支持并行的检查多个链接 ''' import re import urllib2 import threading from os.path import getsize import os,time rlock = threading.RLock() #锁 curPosition = 0 #当前读取到的文件位置 '''设计检查url的函数(完成)''' def TestUrl(line): m = line.split('|') url = m[0] tag = m[1] #print tag f = urllib2.urlopen(url) statuscode = f.getcode() contents = f.read() if tag in contents and statuscode == 200: print 'The url %s is true' %url else: print 'The url %s is wrong.' %url ''' 设计支持并行连接的程序''' class Resource(object): def __init__(self, fileName): self.fileName = fileName #分块大小 self.blockSize = 1000 self.getFileSize() #计算文件大小 def getFileSize(self): #获取文件有多少行,即多少个url fstream = open(self.fileName,'r') fstream.seek(0,os.SEEK_END) self.fileSize = fstream.tell() fstream.close() class Reader(threading.Thread): def __init__(self, res): self.res = res super(Reader,self).__init__() def run(self): global curPosition fstream = open(self.res.fileName, 'r') while True: #锁定共享资源 rlock.acquire() startPosition = curPosition if (startPosition + self.res.blockSize) < self.res.fileSize: curPosition = endPosition = (startPosition + self.res.blockSize) else: curPosition = endPosition = self.res.fileSize #释放股共享资源 rlock.release() if startPosition == self.res.fileSize: break elif startPosition != 0: fstream.seek(startPosition) fstream.readline() pos = fstream.tell() while pos < endPosition: line = fstream.readline() #处理line TestUrl(line) pos = fstream.tell() fstream.close() if __name__ == '__main__': starttime = time.clock() #线程数 threadNum = 4 #文件 fileName = '/Users/gixiaochen/Documents/config.log' res = Resource(fileName) #线程池 threads = [] #初始化线程 for i in range(threadNum): rdr = Reader(res) threads.append(rdr) #开始线程 for i in range(threadNum): threads[i].start() #线程结束 for i in range(threadNum): threads[i].join()
找实习的一点感受:
1. 扎实的基础知识+某一方面的特长才能有好的offer
2. 不管找不找得到,准备工作的同学都应该尽力去找,感觉找实习的时候自己提高的很多,多投几个公司多笔试面试几次,就会发现很多自己觉得不重要的东西还是很有必要牢牢掌握的,以前偷懒丢下的东西,以后都要一个个的捡起来。
3. 找实习的渠道很重要,我在微博上找了几个公司发了邮件去问基本上都收到回复了,时效性比较强。大街网上一堆HR很感兴趣的投递都没什么反馈,还是要转变思路吧。
相关文章推荐
- 阿里暑期实习在线笔试(2016.04.20)
- 蘑菇街2016暑期实习笔试编程题
- 金山WPS暑期实习招聘笔试题2013-7-28
- 2015小米暑期实习笔试题_懂二进制(位运算)
- 百世集团2015暑期实习研发工程师笔试题
- 百度2010暑期实习笔试面试全面备战
- 2012腾讯暑期实习笔试总结
- 腾讯2013暑期实习笔试&面试总结
- 乐视2017暑期实习笔试
- 2011微软暑期实习笔试海选题目(欢迎讨论)
- 百度2010暑期实习笔试面试全面备战
- 暑期实习4月份笔试试题解答-Android 工程师
- 名企笔试:2015小米暑期实习(风口的猪-中国牛市)(2017-04-09 算法爱好者)
- 招行2018暑期实习笔试题知识点3
- 2012微软暑期实习笔试
- 思杰(Citrix)南京笔试(暑期实习)
- 百度2010暑期实习笔试面试全面备战
- 2013微软暑期实习笔试题及答案
- 2013腾讯暑期实习笔试
- [2016腾讯暑期实习在线笔试题][蛇形矩阵]