据我所知,netty通过覆盖方法exceptionCaught()来处理异常.但我想要的是一个可以处理所有异常的处理程序.所以,管道应该是这样的:
InboundExceptionHandler - inboundHandler1 - inboundHandler2 - outboundHandler1 - outboundHandler2 - OutboundExceptionHandler
这意味着我应该在头部和尾部分开的管道中放置2个异常处理程序.但我觉得它看起来很难看.任何更好的主意?
我注意到ctx与处理程序不同,即使这些处理程序位于同一个管道中,例如
p.addLast("myHandler1", new MyHandler1());
p.addLast("myHandler2", new MyHandler2());
Run Code Online (Sandbox Code Playgroud)
在MyHander1
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.err.println("My 1 ctx: " + ctx + " channel: " + ctx.channel());
super.channelRead(ctx, msg);
}
Run Code Online (Sandbox Code Playgroud)
在MyHandler2中
@Override
protected void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.err.println("My 2 ctx: " + ctx + " channel: " + ctx.channel());
}
Run Code Online (Sandbox Code Playgroud)
和输出:
My 1 ctx: io.netty.channel.DefaultChannelHandlerContext@ba9340 channel: [id: 0xdfad3a16, /127.0.0.1:60887 => /127.0.0.1:8090]
My 2 ctx: io.netty.channel.DefaultChannelHandlerContext@1551d7f channel: [id: 0xdfad3a16, /127.0.0.1:60887 => /127.0.0.1:8090]
Run Code Online (Sandbox Code Playgroud)
我注意到ctx是不同的,但通道是相同的
那么调用ctx.write()和ctx.channel().write()之间有什么区别吗?
我最近正在研究Java NIO的MappedByteBuffer.我已经阅读了一些关于它的帖子,所有人都提到"mmap()比read()更快"
在我的结论中:
我对待MappedByteBuffer == Memory Mapped File == mmap()
read()必须通过以下方式读取数据:磁盘文件 - >内核 - >应用程序,因此它具有上下文切换和缓冲区复制
他们都说mmap()比read()具有更少的复制或系统调用,但据我所知,它还需要在您第一次访问文件数据时从磁盘文件中读取.所以第一次读它:虚拟地址 - >内存 - >页面错误 - >磁盘文件 - >内核 - >内存.除了你可以随机访问它,最后3个步骤(磁盘文件 - >内核 - >内存)与read()完全相同,那么mmap()如何比read()更少复制或系统调用?
mmap()和交换文件之间的关系是什么,os是否会将最少使用的内存文件数据放入交换(LRU)?因此,当您第二次访问这些数据时,操作系统会从交换但不是磁盘文件中检索它们(不需要复制到内核缓冲区),这就是为什么mmap()具有较少的复制和系统调用?
在java中,MappedByteBuffer是从堆中分配的(它是一个直接缓冲区).所以当你从MappedByteBuffer中读取时,是否意味着它需要从Java堆外部再添加一个额外的内存副本到java堆中?
谁能回答我的问题?谢谢 :)
我收到此错误:
The import com.google.api.client cannot be resolved
我的配置如下:
项目属性 - Android:

Java构建路径:

重新启动Eclipse后,我仍然会收到以下错误.

有人可以帮忙吗?谢谢:D
据我所知,squid会504 gateway timeout在发出请求超时时发送.但是,如果客户端已经收到响应头,该怎么办200 ok?我的意思是响应数据以分块编码的形式发回.
例如:头部"200 ok"身体部位"a"身体部位"b"身体部位"c".收到"200 ok"并且"a",请求超时发生后,这次鱿鱼会做什么,它会504 gateway timeout回发给客户端吗?如果是这样,客户端是否可以收到此标头,"504 gateway timeout"因为它已收到标头"200 ok"
自上周以来,我的命令行git无法正常工作,我记得的是我将一个本地文件夹初始化为git版本控制,并为其添加一个远程git参考.然后我的git无法推或拉.表明:
git clone git@gitlab.xxx.com:xxx/myproj.git myproj
Cloning into 'myproj'...
Received disconnect from 192.168.xxx.xxx: 2: Too many authentication failures for git
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)
有点奇怪的是,我在JetBrain Idea中的版本控制工作正常,它仍然可以拉动或推动那个无法拉入命令行的项目.
我之前已经将id_rsa.pub添加到gitlab,现在我再次重新添加它,但它不起作用.
我的ssh调试信息
ssh -v git@gitlab.xxx.com
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to gitlab.xxx.com [192.168.xxx.xxx] port 22.
debug1: Connection established.
debug1: identity file /Users/abc/.ssh/id_rsa type …Run Code Online (Sandbox Code Playgroud) 我在Hive txt表中执行了"group by"查询
select day,count(*) from mts_order where source="MTS_REG_ORDER" group by day;
Run Code Online (Sandbox Code Playgroud)
但它显示:
Error: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex re-running, vertexName=Map 1, vertexId=vertex_1496722904961_13822_1_00Vertex re-running, vertexName=Map 1, vertexId=vertex_1496722904961_13822_1_00Vertex failed, vertexName=Reducer 2, vertexId=vertex_1496722904961_13822_1_01, diagnostics=[Task failed, taskId=task_1496722904961_13822_1_01_000222, diagnostics=[TaskAttempt 0 failed, info=[Error: Error while running task ( failure ) : org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$ShuffleError: error in shuffle in Fetcher_O {Map_1} #0
at org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$RunShuffleCallable.callInternal(Shuffle.java:303)
at org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$RunShuffleCallable.callInternal(Shuffle.java:285)
at org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Map_1: …Run Code Online (Sandbox Code Playgroud) 在番石榴CharMatcher中有2个内部类BREAKING_WHITESPACE和WHITESPACE,BREAKING_WHITESPACE的定义是:一个空格,可以解释为单词之间的中断以进行格式化
这是什么意思?
谁能回答这个问题?
如果你能为diff提供一个例子,那就太好了
Thx提前
我知道袜子代理是一个代理,它仅将流量中继到dst ip:port和一个支持CONNECT请求的HTTP代理,它也仅将流量中继到http请求标头中的dest主机。 (例如效率)?
我构建了一个hadoop和hive集群并尝试进行一些测试.但它真的很慢.
表
table value_count
+--------------------------------------------------------------+--+
| createtab_stmt |
+--------------------------------------------------------------+--+
| CREATE TABLE `value_count`( |
| `key` int, |
| `count` int, |
| `create_date` date COMMENT '????') |
| COMMENT 'This is a group table' |
| ROW FORMAT SERDE |
| 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' |
| STORED AS INPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' |
| OUTPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' |
| LOCATION |
| 'hdfs://avatarcluster/hive/warehouse/test.db/value_count' |
| TBLPROPERTIES ( |
| 'COLUMN_STATS_ACCURATE'='{\"BASIC_STATS\":\"true\"}', |
| 'numFiles'='7', |
| 'numRows'='7', |
| 'rawDataSize'='448', | …Run Code Online (Sandbox Code Playgroud) 我使用netty 4编写了一个简单的http客户端。据我所知,如果我使用HeapBuffer,当我在ChannelInboundHandler中获取ByteBuffer时
@Override
public void channelRead(ChannelHandlerContext ctx, final ByteBuf msg) throws Exception {
// do nothing with the msg
}
Run Code Online (Sandbox Code Playgroud)
来自网站的字节应该是一个类似的过程(即使我不调用 ByteBuf.read)
socket -> kernel space -> user space
Run Code Online (Sandbox Code Playgroud)
这些字节应该在java堆中,对吧?
我想知道如果我使用DirectBuffer,当“channelRead”触发时,如果我不调用ByteBuf.read,来自网站的字节在哪里,它们是在内核空间还是在用户空间?它是否比我使用 HeapBuffer 少了一次内存复制(因为它不会复制到用户空间)?
众所周知,我们不能在迭代它时修改非线程安全的集合,因为它会抛出一个ConcurrentModificationException
但我想知道的是,如果它不会抛出异常并让迭代和修改同时发生会发生什么.
例如,在迭代时从HashMap中删除一个元素.
去掉.由于删除操作不会改变HashMap中底层表的长度,我认为这不是迭代的问题.
放.也许问题只发生在Put触发器调整大小()时,因为基础表将被洗牌.
我的分析是否正确?