f*****u 发帖数: 308 | 1 —|1 3|——|1 3|— ...
—|2 4|——|2 4|— ...
如上图所示(这个bbs的编辑器竟然所见非所得,这个图太难画了。),有若干台机器
以上图所示的已知方式链接,但是不知道总共有多少台机器这样连起来了,每台机器4
个连接端口,每个端口两种可能:跟其他机器的某个端口连接,不跟任何其他机器连接
。现在提供三个API:
1. boolean isConnected(port portID)
2. void sendMsg(port portID, Msg msg)
3. Msg receiveMsg(port portID)
要求写一个程序,在这个网络里面的每台机器上都放一个copy,每个copy单独在自己的
机器上运行,每个程序运行结束都要最终返回网络里面连接的总机器数目。 | w***g 发帖数: 5958 | 2 我靠,不会是以面试之名找人解决难题吧。
如果是Linux机器的话用命令netstat -tp, 可以显示类似如下内容。
本地哪个端口连了远程哪个端口都有了。都不用手工每台机器上放一个程序。
直接pdsh netstat -tp, 然后分析输出的数据就行了。
牛人用几行脚本搞定的事情外行往往需要花一个星期写很多行程序才能勉强弄出来。
再不济的自己搞不定还要以面试之名找人来搞,并且给出一个暴露自己水平的面试题。
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 1 0 localhost:41180 localhost:37383 CLOSE_
WAIT -
tcp 0 0 washtenaw:19000 localhost:60272
ESTABLISHED 7588/java
tcp 0 0 washtenaw:58086 111.221.74.12:40030
ESTABLISHED 10260/skype
tcp 0 0 washtenaw:55899 157.56.53.40:12350
ESTABLISHED 10260/skype
tcp 0 0 washtenaw:47280 64.4.44.48:https
ESTABLISHED 10260/skype
tcp 0 0 washtenaw:50827 ord30s22-in-f0.1e:https
ESTABLISHED 413/firefox
tcp 0 0 localhost:60272 washtenaw:19000
ESTABLISHED 7748/java
注意第四列如果是不同机器的连接则不可能是localhost,直接用grep -v localhost都
过滤掉就行。第七列是program name。所以上面pdsh的输出用grep 程序名| grep -v
localhost过滤,或者你知道端口的话再用端口过滤,剩下的就是你关心的那些链接了
。所有数据都合起来以后,第四列和第五列的数据其实就是一样的,因为每台连接的机
器都会在第四列出现一次再在第五列出现一次。所以再选一列统计下数就行。
最后命令写出来是
pdsh netstat -tp | grep ESTABLISHED | grep -v localhost | grep 端口号或者命
令名 | awk '{print $5}' | cut -f 1 -d : | sort | uniq
就打印出所有有连接的机器了。注意pdsh会在输出前加一列,所以awk里面是$5而不是$
4。根本用不着什么API。
4
【在 f*****u 的大作中提到】 : —|1 3|——|1 3|— ... : —|2 4|——|2 4|— ... : 如上图所示(这个bbs的编辑器竟然所见非所得,这个图太难画了。),有若干台机器 : 以上图所示的已知方式链接,但是不知道总共有多少台机器这样连起来了,每台机器4 : 个连接端口,每个端口两种可能:跟其他机器的某个端口连接,不跟任何其他机器连接 : 。现在提供三个API: : 1. boolean isConnected(port portID) : 2. void sendMsg(port portID, Msg msg) : 3. Msg receiveMsg(port portID) : 要求写一个程序,在这个网络里面的每台机器上都放一个copy,每个copy单独在自己的
| f*****u 发帖数: 308 | 3 多谢大牛的脚本解法,收藏了。这是几周前去Oracle onsite时被问的。
【在 w***g 的大作中提到】 : 我靠,不会是以面试之名找人解决难题吧。 : 如果是Linux机器的话用命令netstat -tp, 可以显示类似如下内容。 : 本地哪个端口连了远程哪个端口都有了。都不用手工每台机器上放一个程序。 : 直接pdsh netstat -tp, 然后分析输出的数据就行了。 : 牛人用几行脚本搞定的事情外行往往需要花一个星期写很多行程序才能勉强弄出来。 : 再不济的自己搞不定还要以面试之名找人来搞,并且给出一个暴露自己水平的面试题。 : (Not all processes could be identified, non-owned process info : will not be shown, you would have to be root to see it all.) : Active Internet connections (w/o servers) : Proto Recv-Q Send-Q Local Address Foreign Address State
|
|