Shawn's Blog

一个伪程序员的伪技术博客

0X00 HDFS的设计

HDFS作为GFS的开源实现,和GFS是高度一致的。在HDFS中有着下面的优点

  1. 对超大文件支持良好,由于其分布式实现,可以存储超大文件,甚至单个文件大小可以超过集群中任意一台机器的磁盘大小
  2. 采用流式数据访问,一次写入、多次读取是最高效的访问模式。因为Hadoop作为一个大数据处理平台,并没有频繁的写入操作,只是在需要的时候一次将大量的数据写入然后在对这些数据进行读操作
  3. Hadoop并不需要运行在昂贵且高可靠的硬件之上,单个节点可能性能可靠性都参差不齐,但是由于其高可靠性的设计,使之能在遇到节点故障时继续运行且不让用户察觉到明显的终端

但是HDFS也不是适用于各种场景,一下的几种场景就不适

  1. 低时间延迟的数据访问,因为HDFS是以时间延迟为代价针对高数据吞吐量优化的,所以HDFS不适用与低延迟的数据访问
  2. 大量的小文件,因为Namenode的设计是将文件系统的元数据存储在内存中的,所以理论上HDFS中的文件最大数量受限于Namenode的内存容量,因此大量的小文件会占用Namenode大量的内存
  3. HDFS目前不支持有多个写入者的操作,也不支持修改文件系统中的文件
阅读全文 »

String类中每一个看起来会修改String值得方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。 —《Java编程思想》第13章

0X00 String常量池

如果使用常用的方式定义两个内容完全一样的字符串,那么Java使用常量的方式,也就是说第二个字符串并没有生成一个对象而是引用了之前的字符串,导致他们的本质是一样的,所以当使用==判断两个字符串对象是否是同一个对象的时候,会显示是同一个对象。但是如果我们每次声明一个字符串的时候使用new String()的方式,则会每次创建一个String对象,两者就不是同一个对象了。

阅读全文 »

文章中的代码仅在Python3中测试成功,没有在Python2中测试。

0X00 退出程序,显示错误信息

写脚本的时候经常会有执行出错,出错的时候可以用一句话把程序退出并且打印错误信息
raise SystemExit('error message')

0X01 输入密码

有的时候需要输入用户名和密码,使用input()输入用户名自然没有问题,但是用相同的方法输入密码的时候时使用明文的。长期用Linux的可能对Linux中密码的输入比较有印象,输入密码的时候是密文,且没有任何提示,包括星号,所以用这种方法输入密码是非常安全的。使用petpass库可以简单的输入用户名和密码,输入用户名最简单还是input(),如果要获取当前登录的用户名就可以使用getpass.getuser(),输入密码就可以使用getpass.getpass()来实现Linux中的那种密码输入。 如果测试的时候有问题可以在命令行下测试,比如Windows的CMD或者Linux的终端

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/python
# coding=utf-8

import getpass


if __name__ == "__main__":
user = input("Username:")
# user = getpass.getuser()

passwd = getpass.getpass()
阅读全文 »

文章中的代码仅在Python3中测试成功,没有在Python2中测试。

0X00 指定编码

每个文本文件都是以某一编码格式保存的,如果解码格式和文本格式不同就会出现乱码,在Python中可以简单的控制用什么编码来打开文件以读写文件。使用open打开文件的时候指定一个encoding参数就可以使用其他而非默认编码打开文件了。这里用到了一个打开文件的方式是with open() as f:这样,这样做的话在这个with下面的代码块中可以直接调用f这个文件对象,并且执行到with代码块之外的时候会自动关闭文件,不需要再手动关闭文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python
# coding=utf-8


if __name__ == '__main__':

# 使用utf-8编码,写模式,打开文件D:/test.txt
with open('D:/test.txt', 'w', encoding='utf-8') as f:
f.write('你好,世界') # 写一行汉子

# 使用utf-8编码,读模式,打开文件D:/test.txt
with open('D:/test.txt', 'r', encoding='utf-8') as f:
print(f.read()) # 因为是编码相同所以可以正常读出文字

# 使用latin-1编码,读模式,打开文件D:/test.txt
with open('D:/test.txt', 'r', encoding='latin-1') as f:
print(f.read()) # 因为使用的编码格式不同,所以会出现乱码
阅读全文 »

文章中的代码仅在Python3中测试成功,没有在Python2中测试。

0X00 任意个参数

Python中一般定义函数是这样的def add(a, b),参数的个数是固定的,那么怎么才可以接收任意多个参数就像rm 1.txt 2.jpg 3.mp3 4.cpp这样?很简单,使用***就可以。下面代码里第一个参数a接收到了hello,world*b则接收到了其余所有的参数,将其作为一个元组。

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python
# coding=utf-8


def add(a, *b):
print(a)
return b


if __name__ == '__main__':
x = add('hello,world', 2, 3, 4, 5)
print(x)
阅读全文 »
0%