我有Bash的问题,我不知道为什么.
在shell下,我输入:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
Run Code Online (Sandbox Code Playgroud)
"getpid"是一个获取当前pid的C程序,如:
Run Code Online (Sandbox Code Playgroud)int main() { printf("%d", (int)getpid()); return 0; }
令我困惑的是:
你能帮助我吗?
我有一个关于Emacs Lisp的问题.setq和setq-default有什么区别?我很困惑.
教程说setq在本地缓冲区生效,而setq-default影响所有缓冲区.
例如,如果我在init.el中写了(setq a-var a-vars-value),我发现在启动Emacs并打开一个新缓冲区之后,a-var也在那里,它的值是a-vars-value.我以为不应该在那里.似乎setq和setq-default之间没有区别.
我的理解有问题吗?
非常感谢你.
例如:
1)我在init.el文件中写了(setq hello 123),我在shell中运行emacs abuffer,然后我输入"hello Cx Ce",它显示"123".当我在所有新缓冲区中运行它时,会发生同样的情况.
2)我在init.el文件中写了(setq tab-width 4).当我运行tab-width Cx Ce时,它显示"8"(当前模式为'Text').但是,当我使用(setq-default tab-width 4)时,它显示"4".我无法解释这种现象.
下面有4个bash片段.我打电话给他们./script.sh a b c
for arg in $@; do
echo "$arg"
done ## output "a\nb\nc"
for arg in "$@"; do
echo "$arg"
done ## output "a\nb\nc" -- I don't know why
for arg in $*; do
echo "$arg"
done ## output "a\nb\nc"
for arg in "$*"; do
echo "$arg"
done ## output "abc"
Run Code Online (Sandbox Code Playgroud)
我不知道什么是之间准确的区别$@
和$*
,
我想"$@"
和"$*"
应该是一样的,但事实并非如此.为什么?
我写了一个关于Python生成器的测试程序.但是我得到了一个不期望的错误.我不知道如何解释它.我来告诉你代码:
def countdown(n):
logging.debug("Counting down")
while n > 0:
try:
yield n
except GeneratorExit:
logging.error("GeneratorExit")
n -= 1
if __name__ == '__main__':
c = countdown(10)
logging.debug("value: %d", c.next())
Run Code Online (Sandbox Code Playgroud)
我认为应该没有任何问题.但输出是:
# ./test.py
[2015/06/16 04:10:49] DEBUG - Counting down
[2015/06/16 04:10:49] DEBUG - value: 10
[2015/06/16 04:10:49] ERROR - GeneratorExit
Exception RuntimeError: 'generator ignored GeneratorExit' in <generator object countdown at 0x7f9934407640> ignored
Run Code Online (Sandbox Code Playgroud)
为什么最后一行有错误.我不知道为什么我触发了GeneratorExit异常.我错过了什么东西生成器吗?我还将代码输入到交互式python shell中,一切正常.怎么会发生这种情况?
我对Perl中的范围运算符有疑问.代码在这里:
#! /usr/bin/perl
open FILE, "<test.txt";
while (<FILE>) {
print if (1 .. 5);
}
close FILE;
Run Code Online (Sandbox Code Playgroud)
test.txt中的内容类似于:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
代码的结果是文件的所有五行.我使用时没有区别print if (1 ... 5)
.我认为它应该输出四行.我犯了什么错吗?
我知道在 Python 中我们必须__get__
在实现描述符时提供函数。界面是这样的:
def __get__(self, obj, objtype=None):
pass
Run Code Online (Sandbox Code Playgroud)
我的问题是:
为什么我们必须提供objtype
arg?是什么objtype
用的?
我没有看到一些关于这个 arg 用法的例子。
在Bash中,我想取消设置hashmap的条目.但我失败了.代码如下:
declare -A arr
arr["a'b"]=3
echo ${!arr[@]} ## output: a'b
key="a'b"
unset arr[$key] ## error: -bash: unset: `arr[a'b]': not a valid identifier
Run Code Online (Sandbox Code Playgroud)
我怎样才能取消此条目?
我现在面临一个问题.当我检查erl_crash.dump时,我发现了一些如下内容:
=proc:<0.19275.17>
State: Scheduled
Spawned as: proc_lib:init_p/5
Spawned by: <0.18723.17>
Started: Wed May 8 13:30:40 2013
Message queue length: 1
Number of heap fragments: 0
Heap fragment data: 0
Link list: [<0.20051.17>, <0.9976.18>, ..., **{from,<6524.13.0>,#Ref<6524.0.1.37040>}, {from,<6474.13.0>,#Ref<6474.0.1.36682>}, {from,<6470.13.0>,#Ref<6470.0.1.34219>}**, ...]
Run Code Online (Sandbox Code Playgroud)
在proc <0.19275.17>的链接列表中有类似{from,Pid,Ref}的内容.我不知道这些奇怪的形成过程标识符是什么.我想也许它与"过程监控"有关.我对吗?我仍然想知道如何生成这样的进程标识符以及如何使用它们?
先感谢您 :)
我对运营商不是很清楚defined?
.
例如:
Run Code Online (Sandbox Code Playgroud)defined? var
为什么不:
Run Code Online (Sandbox Code Playgroud)defined? :var defined? 'var' ## i think these two ways maybe make more sense
但是这个运算符也可以跟一个表达式.
该操作员在什么阶段执行?在编译阶段,类似于sizeof(int)
C?
我有一个关于Netty直接内存管理的问题.
我创建了一个直接缓冲区:
@GetMapping("/new/buffer/netty/unpool")
@Synchronized
public void newBufferNetty() {
UnpooledByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
ByteBuf buffer = allocator.buffer(100 * 1024 * 1024);
_myByteBufList.add(buffer);
log.info("buffer[{}] created", buffer);
}
Run Code Online (Sandbox Code Playgroud)
然后我观察了生成的信息top
,我发现内存没有变化(RES,SWAP和free).我很困惑,因为它是好的(操作系统内存信息会改变),如果我用NIO方式做的话ByteBuffer.allocateDirect(1024*1024*100);
.
在我调查了源代码之后,我发现NIO创建了一个directByteBuffer,new DirectByteBuffer(cap)
而Netty实际上创建了它new DirectByteBuffer(addr, cap)
.后一种方式,Netty没有打电话Bits.reserve(size, cap)
,这就是我认为为什么没有显示出变化的原因top
.
我还发现Netty使用自己的计数器DIRECT_MEMORY_COUNTER来跟踪它分配的直接内存.
我的问题是:
为什么Netty Bits.reserve
在分配直接内存时不会调用?
为什么Netty必须使用自己的计数器来监控直接内存的使用?
(这是让我最困惑的一个)当我创建一个Netty缓冲区时,为什么os内存没有变化(UnpooledUnsafeNoCleanerDirectByteBuf)
非常感谢你提前.