Shawn's Blog

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

0X00 什么是REST风格的API

众所周知http协议有GET/PUT/POST/PATCH/DELETE等众多方法,还能在提交请求和发送响应的时候携带数据。REST风格的API就是使用了这些HTTP特性的API。针对一个URL可以有多种动词(方法)来表示不同的操作。
更多详细的内容可以点击查看阮一峰的博客:理解RESTful架构

阅读全文 »

在写一些系统脚本或者自动化运维脚本的时候经常会用到os库,这里做个整理,方便查找

os.sep

获得当前操作系统使用的目录分隔符,比如Windows就会得到\而Linux/Unix就会得到/

os.name

获得当前使用的操作系统,Windows是NT内核,所以会得到nt,而Linux/Unix用户则会得到posix

os.getcwd()

获得当前工作目录,即当前Python脚本工作的目录路径。

os.getenv()

用来获得环境变量
os.getenv('PATH')

阅读全文 »

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()
阅读全文 »
0%