回到上一章
问题引入
- 查找给定键值的元组,如:
Select * From Employee Where Dept=‘Toy’ and Salary>=50K
- Where条件中涉及了多个属性
本文源于自己平常上网时遇到的问题,有的网站由于某些原因域名发生了变化,原域名无法访问了。另一种情况是网站域名未发生改变,只是单纯的被墙,那么也可以采用本文的方法暂时性地访问该网站。不过由于是在线代理,可能在这个过程中的访问记录等信息会被记录,因此不建议使用它来进行一些涉及到个人隐私甚至于财产安全的访问行为。闲言少叙,下面开始正题。
这个过程挺简单的,在网页上搜索“在线代理 访问网站”,就可以得到相应的结果。在此推荐使用bing搜索,当然如果是google搜索可用肯定首选google,百度我试了一下效果不理想。下面放上使用三个搜索引擎进行搜索的结果对比:
通过以上对比可以看出,使用bing和google搜索引擎能够比较快的找到结果,baidu找起来可能需要点时间。经过bing和baidu的搜索,其中的第一个链接包含同一个代理网站,而它也是今天我采用的在线代理网站 The Big Bridge,其他功能没有尝试,使用它进行简单的代理访问是可以的。
打开网站后,点击左下角的代理服务器链接,如下图所示:
然后在下图红框指定的区域写上自己想访问的网站的域名就可以了。
输入的可以是网站的原域名,也可以是现域名,例如我输入的是1
developer.google.com
然后就会跳转到指定网站的访问页面,如下图
上图中红框处是当前网站的网址,ps:将这个网址和以前自己使用的网址做个比较就知道究竟是网站域名换了还是被墙了:-)
不过稍显不足的是通过在线代理访问时一些javascript脚本文件没有办法正常加载,所以对于一些网站可能无法正常使用。好了,说了这么多,大家可能看得不耐烦了,那就赶紧试试吧。
本章主要解决如下问题:
下面具体介绍
基本SQL数据类型表示成记录的字段
二进制位
枚举类型
数据库系统使用的每一种记录类型必须有一个模式。模式由数据库存储,包括记录中字段的名称和数据类型,以及在记录内它们的偏移量。需要存取记录的组成部分时将参考模式。
表示关系元组的记录存储在磁盘块中
它有一个可选的块首部,存储如下各种信息:
例如:假设记录长度为316字节,使用4096字节的块,其中,12个字节用于块首部,剩余4084字节由数据使用。在这个空间中,我们能装入12条给定的316字节格式的记录,余下的292空闲。
到目前为止,最简单的情况是块存储一个关系的元组,并且元组的记录有固定格式。在这种情况下,在块首部的后面,我们把尽可能多的记录装入块内,而留下剩余空间不用。
所谓变长可以归为以下几类:
对于这类记录,一个简单而有效的模式是将所有定长字段放在变长字段之前。例如:
某一定长字段重复出现(长度为L)
将一条新记录插入到关系中
若关系的记录无序
下面具体介绍
磁盘分类有以下两种
盘片结构如下图:
下面简要介绍一下各个部分
时间 = 寻道时间 + 旋转时间 + 传输时间 + 其他消耗
其中寻道时间在其中占有相当大的比重,通常以毫秒计,随机寻道时间一般10-40ms
平均要旋转半周才能定位到需要的block,所以旋转时间取旋转一周时间的一半,对于3600RPM(即3600转/秒)的磁盘来说,旋转时间约为8.33ms
传输时间=块大小/传输速率
其他时间消耗:
上述讨论的是随机访问时间,如果在定位好位置后,进行下一个block的读取操作,那么就不需要 寻道时间 和 旋转时间 了,一旦省去了寻道时间,那么I/O代价就会大幅度降低,例如一个1KB的block,随机访问I/O可能需要时间为20ms,而顺序I/O可能只需要1ms。
前段时间参加了优酷土豆2016实习生招聘的在线笔试环节,由于选择的是Python开发实习生,所以整个试卷全部是Python相关的,光凭这种专一的程度,就足以落360几条街(想当初我投的360 C++实习岗位,结果笔试时冒出来PHP的题,我也是醉了)。闲言少叙,下面一起来看看今年实习的机试环节编程题。
整个笔试部分编程环节共有三道编程题,难度相差不大,考察Python编程的基本功和一般的算法和程序设计思维,下面分别介绍这三道题。
大意如下:输入num为四位数,对其按照如下的规则进行加密:
1、每一位分别加5,然后分别将其替换为该数除以10取余后的结果
2、将该数的第1位和第4为互换,第二位和第三位互换
3、最后合起来作为加密后的整数输出
例如: 输入:1000,输出:5556
时间限制:1s 内存限制:16MB
此题说得有点啰嗦而且拗口,其实操作过程很简单,下面就它说的前两步进行展开和详细说明:
第一步是给每一位都加5,然后除以10取余数,用这个余数替代原来的数,例如原来的某一位上的数是3,那么3+5%10=8,于是用8替换掉原来位上的3,就这么简单。
第二步题上面说1位和4位互换,2位和3位互换,而输入固定只有4位,那说的直白一些就是把这个数的位颠倒过来了,本来是1234的位置,现在变成了4321位置,这块题目说成这样有混淆视听之嫌
最后就更好说了,颠倒完了合成一个数输出就可以了。
经过前面的分析,代码设计的逻辑就已经很清晰了。不过考虑到对输入的整数分离位不太方便,这里将它转成字符串再操作,最后再转成了整数。具体代码如下:
1 | #coding:utf-8 |
第一行设定编码字符集为utf-8,因为代码中含有中文。对于Python2.x的解释器,由于默认的字符集为ASCII,遇到中文会出现错误,所以要包含。接下来定义了一个函数,输入参数为num。第8行先讲num转为str类型,假如输入1000,现在就变成了字符串”1000”,然后经过list方法后编程了单个字母组成的列表,具体为:[‘1’,’0’,’0’,’0’],这就完成了按位分割的功能,而且列表操作起来很方便。9到11行对列表中的每个数加5除以10再取余,这里没有pop再insert,而是一直pop列表首部元素,然后再尾部添加,这样操作的结果与前一种效果是一样的,这样操作完成后,对于[‘1’,’0’,’0’,’0’]来说,将会变成[‘6’,’5’,’5’,’5’]。第12行将列表逆置,对于[‘6’,’5’,’5’,’5’],就会变为[‘5’,’5’,’5’,’6’]。第13行通过str类的join方法将[‘5’,’5’,’5’,’6’]合成字符串”5556”,最后一行转为int类型再输出。
整个过程比较简单,不过为了提高运行效率,上面有两处代码看似拖沓实则有意而为之:for循环处,1
for i in [0,1,2,3]
比1
for i in range(4)
要更高效;最后得到result处没有将整个列表元素依次相加,而是采用了join方法,也是由于join操作更有效率。
输入:一个字符串 输出:该字符串的全排列
如:输入:’abc’ 输出:abc,acb,bac,bca,cab,cba
时间限制:1s 内存限制:16MB
这道题没什么好分析的,是一个很常见的全排列实现,下面给出递归的实现
1 | #coding:utf-8 |
大意为:给定一个字符串作为输入,将其中的数字用数字前近邻的字母序列进行替换,字母序列重复的次数等于该数字。最后将字符串输出。
例如: 输入:’a2bc3d1’ 输出:’aabcbcbcd’
时间限制:1s 内存限制:16MB
这道题题目和第一题有一点遥相呼应的味道,第一题加密,这一题解密。虽然规则不同,但是字符串操作的方式基本不变。下面给出实现代码。
1 | def com_baiyi_decode(str): |
上面三道题都是与字符串相关的题,涉及到了str的一些基本操作,如str的拆分、合并;当然还有函数定义,基本的控制语句等。总体来说考察的都是很基础的Python编程知识和编程技能。
MySQLdb作为python操作MySQL数据库的模块,使用起来较为方便(主要是其他的模块没试过⊙﹏⊙‖∣),不过安装过程稍有波折,于是在此记录一下整个安装过程,仅供参考。
俗话说“巧妇难为无米之炊”,要想安装MySQLdb,首先要下载安装文件,下载地址
这个过程挺简单,不用著名的三板斧,因为安装包中自带setup.py 文件,具体只需要以下几步:1
2
3
4$ tar zxvf MySQL-python-1.2.3.tar.gz
$ cd MySQL-python-1.2.3
$ python setup.py build
$ python setup.py install
如果整个过程没问题的话,那么就算是安装完成了,然而事实往往不尽如人意,上面过程中可能会出现下面的问题
详细错误:EnvironmentError: mysql_config not found
这种情况说明环境变量的设置有问题,解决方案如下:
首先查找mysql_config的位置,使用1
$ find / -name mysql_config
比如我的在 /usr/local/mysql/bin/mysql_config
然后修改setup_posix.py文件,在26行:1
2
3mysql_config.path = “mysql_config”
修改为:
mysql_config.path = “/usr/local/mysql/bin/mysql_config”
然后重新执行1
$ python setup.py build
这样就可以顺利build了