Python-自省机制
help
如果说能够通过一个函数就能够学会 Python,那这个函数一定就是 Python 提供的第一 个自带说明 help()。help 函数的作用就是查看对象的帮组文档。比如:
>>> help(123)
Help on int object:
class int(object)
| int(x=0) -> integer
| int(x, base=10) -> integer
|| Convert a number or string to an integer, or return 0 if no arguments
| are given. If x is a number, return x.__int__(). For floating point
| numbers, this truncates towards zero.
(此处有省略)。
help 函数其实就是查看对象的帮助文档,类似于把帮助文档放到 linux 命令的 less 中的效果,按下 q 退出。
上面的例子,显示了 int 对象的帮助文档,int 是内置类型,代码在编译 Python 的时候已经
编译过了,没有.py 的源代码。
那么我们来看看,help 到底有啥用呢,让 Python 来告诉你。
>>> help(help)
Help on _Helper in module _sitebuiltins object:class _Helper(builtins.object)
| Define the builtin 'help'.
|| This is a wrapper around pydoc.help that provides a helpful message
| when 'help' is typed at the Python interactive prompt.
|
| Calling help() at the Python prompt starts an interactive help session.
| Calling help(thing) prints help for the python object 'thing'.
还可以不加参数额。试试吧
>>> help()
Welcome to Python 3.5's help utility!If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.5/tutorial/.Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics". Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".
输入上面标红的关键字试试。。
modules:显示模块
keywords:显示关键字
symbols:显示操作符
topics:显示常见主题
进去试试吧。。。。
那么问题来了,我们怎么知道 Python 的世界中还有哪些元素等待着我们去探索呢?我们怎
么找到这些元素呢?答案就是 Python 自带说明的第二个函数:dir。
dir
告诉我这个函数有啥用呢?先用上面的知识 help 来会会这个 dir。
>>> help(dir)
Help on built-in function dir in module builtins:
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
Else, return an alphabetized list of names comprising (some of) the attributes
of the given object, and of attributes reachable from it.
If the object supplies a method named __dir__, it will be used; otherwise
the default dir() logic is used and returns:
for a module object: the module's attributes.
for a class object: its attributes, and recursively the attributes
of its bases.
for any other object: its attributes, its class's attributes, and
recursively the attributes of its class's base classes.
简单的讲,dir 就是把这个对象有的属性(非模块对象也包括类属性,父类属性等)都
列出来放到一个 list 中,不知道啥是 list,那就先复习下上面的知识。若对象有__dir__方法,
就调用该方法,否则就用默认的方法。就拿上面的 help 实验一把:
>>> dir(help)
['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__',
'__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__']
可以看到 help 这个函数有这些属性。
这样知道的还是不够多啊,只有 help 和 dir 函数。别急,dir 不接参数试试。
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
这个__builtins__不是内置的意思吗?看看他有什么货。
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError',
'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError',
'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning',
'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError',
'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning',
'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError',
'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotADirectoryError',
'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError',
'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError',
'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration',
'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError',
'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning',
'ValueError', 'Warning', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__',
'__import__', '__loader__', '__name__', '__package__', '__spec__', '_format', 'abs', 'all', 'any',
'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp', 'compile', 'complex',
'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float',
'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance',
'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object',
'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',
'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'xrange', 'zip']
一下子出来这么多,小心脏激动了吧。找找 help,dir 是不是都在里面,那其他别的是
不是也是 Python 提供给我们的呢,试试才知道。
>>> abs
<built-in function abs>
是吧,内置函数。老师,这么多怎么学啊?前面的知识刚学完就忘了啊。help,help,
help 重要的事情说三遍。
好了这么多函数慢慢学吧,学到这个几个函数的时候是否有点小激动呢?callable,
hasattr,getattr,setattr,delattr,type,isinstance,issubclass。
callable
首先看看这个 callable 是不是讲的就是我们常说的调用,help 一下。
Help on built-in function callable in module builtins:
callable(obj, /)
Return whether the object is callable (i.e., some kind of function).
Note that classes are callable, as are instances of classes with a
__call__() method.
讲的很详细,字面意思也能明白,返回对象能不能调用,能调用就返回 True,不能就返
回 False。
>>> def f():
... pass
...
>>> callable(f)
True
在试试匿名函数。
>>> callable(lambda x:x)
True
帮助文档说了类可调用,类的实例若有__call__属性也能调用。
那么怎么知道对象有没有__call__属性呢?下面就是另一个内置函数,hasattr。
hasattr
继续套路,先 help 一下。
>>> help(hasattr)
Help on built-in function hasattr in module builtins:
hasattr(obj, name, /)
Return whether the object has an attribute with the given name.
This is done by calling getattr(obj, name) and catching AttributeError.
hasattr(obj,name)返回 obj 对象是否有 name 属性,那么上面的 callable==lambda
x:hasattr(x,’__call__’)?????这个内部实现在源码,我也没看。
上面的帮助文档说他是通过调用 getattr 来实现的,那 getattr 是个什么鬼?
getattr
套路啊,记得。
>>> help(getattr)
Help on built-in function getattr in module builtins:
getattr(...)
getattr(object, name[, default]) -> value
Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.
When a default argument is given, it is returned when the attribute doesn't
exist; without it, an exception is raised in that case.
文档看出 getattr(object,name[,default])就是获取 object 对象的 name 属性,若 name 不
存在,若定义了 default 参数返回 default,否则抛出异常。
那么这样对吗?????
def hasattr(obj, name):
try:
getattr(obj,name)
except AttributeError:
return False
return True
setattr,delattr
现在我们学会了判断属性是否存在,获取属性,那我们怎么设置属性,删除属性呢?之
前 dir(‘__builtins__’)返回的列表中找找,setattr,delattr 一看就是这两个,长的太像了。具体
用法,help 吧,不讲了。。
type
现在知道对象的属性怎么操作了,然后是不是就想知道这个对象到底是个什么玩意啊,
那么 type 就出场了。
>>> help(type)
Help on class type in module builtins:
class type(object)
| type(object_or_name, bases, dict)
| type(object) -> the object's type
| type(name, bases, dict) -> a new type
|| Methods defined here:
|| __call__(self, /, *args, **kwargs)
| Call self as a function.
|(此处有省略。。)
显示一个对象的类型,还可以创建一个类型。
type 只提供一个参数,返回对象的类型,提供三个参数返回一个新类型。>>> type('123')
<class 'str'>
>>> type(123)
<class 'int'>
>>> a=type('mylist',(list,),{‘n’:1}) #第一个参数为类型名,第二个参数为类型的父类,用 tuple,
可以有多个,第三个参数为默认类属性组成的字典。>>> a
<class '__main__.mylist'>
>>> type(a)
<class 'type'>
>>> a.n
1
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__',
'__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
'__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append',
'clear', 'copy', 'count', 'extend', 'index', 'insert', 'n', 'pop', 'remove', 'reverse', 'sort']是不是有 list 的所有属性和 n 属性?type 还有一些属性很有意思,比如
__subclasses__,__bases__留给大家研究。 isinstance
那么上面生成的 a 和 type 是个什么关系呢?以及,之前的学的 int,list 这些和 type 是什
么关系呢,答案是他们都是 type 的实例。怎么证明?答案在内置函数中找。isinstance
help 步骤略。自行 help。。
isinstance(obj, class_or_tuple)就是判断对象 obj 是否为 class_or_tuple 的实例或者其中一
个类的实例。
>>> isinstance(a,type)
True
>>> isinstance(int,type)
True
issubclass
剩下一个 issubclass,用法自行 help。。。。
之前讨论的 bool 和 int 的关系,就可以用这个函数解释。
>>> issubclass(bool,int)
True
bool 是 int 的子类。
类中的常见自省属性
既然说到类,那我们就看看常见的类中到底是怎么做自带说明的。
>>> class A:
... def __init__(self,data):
...
...
>>> dir(A)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__']
看到熟悉了的吧__delattr__,__getattribute__,__setattr__,和之前学的是不是很像?再来看
看第一个属性__class__
>>> A.__class__
<class 'type'>
原来 A 是 type 的实例,还不相信,再复习下。
>>> isinstance(A,type)
True
然后可以看到__dict__是不是很熟悉,试试
>>> A.__dict__
mappingproxy({'__module__': '__main__', '__init__': <function A.__init__ at 0x007CAC90>,
'__doc__': None, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute
'__weakref__' of 'A' objects>})
原来是类的基本属性,dict 为啥不是字典呢?别急用实例试试。
>>> A(123).__dict__
{'data': 123}
既然是类,那么能不能知道有哪些基类子类之类的,当然可以。试过了 A 的所有属性还
没有看到额~怎么办?那有可能 dir 出问题了,没有显示全额~那就再底层点,用 object.__dir__
>>> object.__dir__(A)
['__abstractmethods__', '__setattr__', 'mro', '__eq__', '__doc__', '__str__', '__subclasshook__',
'__le__', '__prepare__', '__subclasses__', '__dict__', '__gt__', '__qualname__',
self.data=data
'__text_signature__', '__repr__', '__dir__', '__init__', '__dictoffset__', '__instancecheck__',
'__ge__', '__base__', '__sizeof__', '__module__', '__basicsize__', '__itemsize__', '__call__',
'__new__', '__mro__', '__hash__', '__reduce_ex__', '__getattribute__', '__class__', '__bases__',
'__subclasscheck__', '__delattr__', '__lt__', '__reduce__', '__format__', '__weakrefoffset__',
'__flags__', '__ne__', '__name__']
试试里面的属性吧~
>>> A.__name__ #类的本名
'A'
>>> A.__subclasses__()
[]
>>> A.__base__
<class 'object'>
>>> A.__module__
'__main__'
>>> A.__bases__
(<class 'object'>,)
#类的子类
#类的基类
#类所在的模块
#类的基类集
之前用到了实例,看看实例中还有些啥玩意。
>>> A(123).__module__ '__main__'
>>> A(123).__class__
<class '__main__.A'>
>>> A
<class '__main__.A'>
>>> A(123).__class__ is A
True
>>> A.__doc__
#实例的类所在的模块
#实例的类
#实例的类的帮助文档
拿到实例就知道他是什么类的实例,不信试试
>>> r = range(10)
>>> r.__class__
<class 'range'>
函数中的自省属性
类玩完了,(其实没有玩完,很多可以挖掘的),是不是跃跃欲试的玩下函数?马上就来。
>>> def func(a,b):
... c=a+b
... print(c)
... return c+1
...>>> dir(func)
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__',
'__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__',
'__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__',
'__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__']之前说过函数之所以会叫调用是因为有__call__属性,这里可以看到,再试试其他属性。
>>> func.__class__
<class 'function'>
函数是 function 类的实例。
>>> func.__closure__ #闭包,这个留给老司机
>>> func.__code__ #code 对象
<code object func at 0x007B4250, file "<stdin>", line 1>
>>> func.__doc__
>>> func.__name__
'func'
>>> f = func
>>> f.__name__
'func'
#函数的帮助文档
#函数的本名
函数的主要内容在 code 对象,
>>> dir(func.__code__)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags',
'co_freevars', 'co_kwonlyargcount', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize',
'co_varnames']
看看里面都有些啥。
>>> func.__code__.co_consts
(None, 1)
>>> func.__code__.co_argcount
2
>>> func.__code__.co_nlocals
3
>>> func.__code__.co_filename
'<stdin>'
>>> func.__code__.co_names
('print',)
>>> func.__code__.co_name
'func'
>>> func.__code__.co_varnames
('a', 'b', 'c')
>>> func.__code__.co_stacksize
2
>>> func.__code__.co_stacksize
2
还有其他属性,自行探索。。。
inspect
#函数用到的常量
#函数的参数个数
#函数局部变量的个数
#函数所在文件的文件名
#函数用到的函数名
#函数本名
#函数中变量名
#函数中栈大小
#编译之后的字节码
有了这么多让 Python 做自我说明的方法,还不满足?Good boy!再来重头戏,inspect
模块。
help> inspect
Help on module inspect:
NAME
inspect - Get useful information from live Python objects.
DESCRIPTION
This module encapsulates the interface provided by the internal special
attributes (co_*, im_*, tb_*, etc.) in a friendlier fashion.
It also provides some help for examining source code and class layout.
Here are some of the useful functions provided by this module:
ismodule(), isclass(), ismethod(), isfunction(), isgeneratorfunction(),
isgenerator(), istraceback(), isframe(), iscode(), isbuiltin(),
isroutine() - check object types
getmembers() - get members of an object that satisfy a given condition
getfile(), getsourcefile(), getsource() - find an object's source code
getdoc(), getcomments() - get documentation on an object
getmodule() - determine the module that an object came from
getclasstree() - arrange classes so as to represent their hierarchy
getargspec(), getargvalues(), getcallargs() - get info about function arguments
getfullargspec() - same, with support for Python 3 features
formatargspec(), formatargvalues() - format an argument spec
getouterframes(), getinnerframes() - get info about frames
currentframe() - get the current stack frame
stack(), trace() - get info about frames on the stack or in a traceback
signature() - get a Signature object for the callable
上面的介绍都够详细了,我就只举两个例子。
>>> import threading
>>> import inspect
>>> inspect.getsourcefile(threading)
'/usr/lib/python3.5/threading.py'
>>> inspect.getsource(threading)
'"""Thread module emulating a subset of Java\'s threading model."""\n\nimport sys as
_sys\nimport _thread\n\nfrom time import monotonic as _time\nfrom traceback import
format_exc as _format_exc\nfrom _weakrefset import WeakSet\nfrom itertools import islice as
_islice, count as _count\ntry:\n
(此处有省略......)
对函数也可以,但是要记住,这两个方法对内置的对象是行不通的,因为之前说过内置
对象,是在编译 Python 的时候写入的没有 py 的代码。怎么判断是不是内置对象?又没有好
好看前面的文档啊..............................inspect.isbuiltin()或者 obj.__name__ in dir(‘__builtins__’)
dis
还感觉不够么,那只能发绝招了~~~~~~~dis 模块
>>>
>>>
1
>>>
...
...
...
>>>
2
3
import dis
dis.dis('a=1')
def f(a):
for i in range(a):
print(i)
dis.dis(f)
>>
>>
>>
0 SETUP_LOOP
3 LOAD_GLOBAL
6 LOAD_FAST
9 CALL_FUNCTION
12 GET_ITER
13 FOR_ITER
16 STORE_FAST
19 LOAD_GLOBAL
22 LOAD_FAST
25 CALL_FUNCTION
28 POP_TOP
29 JUMP_ABSOLUTE
32 POP_BLOCK
33 LOAD_CONST
36 RETURN_VALUE
0 LOAD_CONST
3 STORE_NAME
6 LOAD_CONST
9 RETURN_VALUE
0 (1)
0 (a)
1 (None)
30 (to 33)
0 (range)
0 (a)
1 (1 positional, 0 keyword pair)
16 (to 32)
1 (i)
1 (print)
1 (i)
1 (1 positional, 0 keyword pair)
13
0 (None)
有没有熟悉汇编的童鞋,讲解下啥意思。貌似不用熟悉汇编英文好就可以了。这个
函数展现了函数代码或者函数对象编译之后变成字节码之后的执行过程。是不是越来越
接近底层了?
总结
讲了这么多,讲下这个 Python 的自带说明的名字叫自省。(反射是 java 的说法,我
们叫自省)
那么自省是什么?总结下
自省简单的说,就是用 python 的代码自己告诉这个对象是什么,有什么,以及祖
宗是什么,子孙是什么....
好了总结下 python 提供的自省机制:help,dir 。没了么?是的没了其他的可以用
这两个找到,但是每次用的时候再去找吗?当然不是,所以多用多积累,多记忆吧。谢
谢大家。
Python-自省机制的更多相关文章
- Python的自省机制
什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为. 在计算机编程中,自省是指这种能力:检查某些事物以确定它是什么.它知道什么以及它能做什么.自省向程序员提供了极大的灵活 ...
- Python 自省指南
原作者:Patrick K. O'Brien 什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为.自省是指对某人自身思想.情绪.动机和行为的检查.伟大的哲学家苏格拉底将生 ...
- Python面试题之Python反射机制
0x00 前言 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') a = ...
- python自省指南
深入python中对自省的定义: python的众多强大功能之一,自省,正如你所知道的,python中万物皆对象,自省是指代码可以查看内存中以对象形式存在的其他模块和函数,获取它们的信息,并对它们进行 ...
- 【Python&数据结构】 抽象数据类型 Python类机制和异常
这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Pyt ...
- Python反射机制理解
Python反射机制用沛齐老师总结的话说就是:利用字符串的形式去对象(模块)中操作(寻找)成员. getattr(object, name) object代表模块,name代表模块中的属性或成员,该函 ...
- [py]python自省工具
参考 在日常生活中,自省(introspection)是一种自我检查行为.自省是指对某人自身思想.情绪.动机和行为的检查.伟大的哲学家苏格拉底将生命中的大部分时间用于自我检查,并鼓励他的雅典朋友们也这 ...
- 理解Python命名机制
理解Python命名机制 本文最初发表于恋花蝶的博客(http://blog.csdn.net/lanphaday),欢迎转载,但必须保留此声明且不得用于商业目的.谢谢. 引子 我热情地邀请大家猜测下 ...
- MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具
mybatis – MyBatis 3 | 日志 http://www.mybatis.org/mybatis-3/zh/logging.html MyBatis 内置日志工厂基于运行时自省机制选择合 ...
- Python自省 type(),dir(),getattr(),hasattr(),isinstance().
Python自省 这个也是python彪悍的特性. 自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr() ...
随机推荐
- springMVC的HandleMapping
http://blog.chinaunix.net/uid-20415521-id-1949916.html SpingMVC中的HandlerMapping (2007-05-22 11:33) 分 ...
- 小程序 当button遇上Flex布局
当需要将button按行排列,当超过一行时,可以换行,从左到右排列,想实现如下效果(实现的比较粗糙,能说明问题就行,呵~~~): 使用Flex布局,在设置主轴方向上对齐方式,使用justify-con ...
- 在HTML里面HEAD部分的META元素要表达的内容是什么
1.name属性主要有以下几种参数: A.Keywords(关键字) 说明:keywords用来告诉搜索引擎你网页的关键字是什么. 举例:<meta name ="keywords&q ...
- python - 用户交互/数据类型/格式化输出/运算符/流程控制单双多分支
python:用户交互: 等用户输入,做反应: username=input("username:")password=input("password:")pr ...
- Mybatis框架学习总结-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定是完全相同的. 1.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY ...
- window7配置SQLserver 允许被远程连接
需要别人远程你的数据库,首先需要的是在一个局域网内,或者连接的是同一个路由器,接下来就是具体步骤: (一)首先是要检查SQLServer数据库服务器中是否允许远程链接.其具体操作为: (1)打开数据库 ...
- Java基础—输入输出流
流的概念 在Java中,流是从源到目的地的字节的有序序列.Java中有两种基本的流——输入流(InputStream)和输出流(OutputStream). 根据流相对于程序的另一个端点的不同,分为节 ...
- 查看Oracle latch _spin_count默认值
查看Oracle latch _spin_count默认值 SELECT X.KSPPINM NAME, Y.KSPFTCTXVL VALUE, Y.KSPFTCTXDF ISDEFAULT FRO ...
- Yarn架构
jobtracker存在单点故障问题 jobtracker只支持mapreduce,计算框架不具有可扩展性 jobtracker是性能瓶颈 yarn可以整合不同的计算框架,提高资源利用率 yarn的基 ...
- Mock Server 之 moco-runner 使用指南二
文章出处http://blog.csdn.net/crisschan/article/details/53335234 moco-runner 安装配置 1. 下载jar https://repo1. ...