以下是我最近与知名网络软件公司的面试经历.我被问到有关互连TCP级别和Web请求的问题,这让我很困惑.我真的很想知道答案的专家意见.它不仅涉及面试,还涉及对网络如何工作的基本理解(或者应用层和传输层如何交叉,如果他们这样做的话).
采访者:告诉我打开浏览器并输入内容后幕后发生的过程google.com.
我:首先发生的是创建一个套接字,由...标识{SRC-IP, SRC-PORT, DEST-IP, DEST-PORT, PROTOCOL}.该
SRC-PORT数字是浏览器给出的随机数.通常是TCP/IP连接协议(建立三次握手).现在,客户端(我的浏览器)和服务器(Google)都准备好处理请求.(建立TCP连接).
采访者:等一下,名称解析何时发生?
我:是的,对不起.它应该在创建套接字之前发生.DNS名称解析首先发生以获取Google的IP地址.
访问者:是否为DNS名称解析创建了一个套接字?
我:嗯,我实际上不知道.但我所知道的DNS名称解析是无连接的.也就是说,它不是TCP而是UDP.只发生一个请求 - 响应周期.(因此,为DNS名称解析创建了一个新的套接字).
采访者:google.com对其他客户的其他请求开放.那么与谷歌建立联系阻止其他用户呢?
我:我不确定谷歌如何处理这个问题.但在典型的套接字通信中,它在最小程度上是阻塞的.
采访者:您认为如何处理?
我:我猜这个过程会分叉一个新线程并创建一个套接字来处理我的请求.从现在开始,我与Google通信的套接字端点就是这个子套接字.
采访者:如果是这种情况,这个子套接字的端口号是否与父套接字不同?
我:父套接字在80处侦听来自客户端的新请求.孩子必须在不同的端口号上听.
采访者:由于您的目标端口号已更改,您的TCP连接如何维护.(这是在Google的数据包上发送的src-port号码)?
我: 我看到作为客户端的目标端口始终为80.当回复响应时,它也来自端口80.我猜操作系统/父进程将源端口设置回80,然后再发回帖子.
采访者:你的套接字连接与谷歌有多长时间了?
我:如果我在一段时间内没有提出任何请求,主线程会关闭它的子套接字,来自我的任何后续请求都将像我是一个新客户端.
采访者:不,Google不会为您保留专用的子插座.它处理您的请求并立即丢弃/回收插座.
采访者:虽然谷歌可能有很多服务器来处理请求,但每个服务器只能在端口80打开一个父插槽.访问谷歌网页的客户端数量必须大于他们拥有的服务器数量.这通常如何处理?
我:我不确定如何处理.我看到它可以工作的唯一方法是为它收到的每个请求生成一个线程.
采访者:您认为Google处理此问题的方式与任何银行网站不同吗?
我:在TCP-IP套接字级别,它应该是类似的.在请求级别,略有不同,因为维护会话以保持银行网站请求之间的状态.
如果有人可以对每个要点给出解释,那么对于许多网络初学者来说这将是非常有帮助的.
我正在阅读有关Cassandra中读取操作和一致性级别的这篇文章.根据这篇文章:
例如,在复制因子为3且读取一致性级别为QUORUM的群集中,将联系给定行的3个副本中的2个以完成读取请求.假设联系的副本具有不同版本的行,具有最新版本的副本将返回所请求的数据.在后台,检查第三个副本与前两个副本的一致性,如果需要,最新副本会向过期副本发出写入.
因此,即使使用Quorum的一致性级别,也不能保证您没有得到过时的读取.根据上面的段落,如果第三个副本具有最新的时间戳,则协同协调器已经返回了它所询问的两个副本的最新时间戳.但它不是最新的,因为第三个副本有最新的时间戳.
我有以下代码.
class Foo(object):
def __init__(self):
self.__baz = 40
def foo(self):
print self.__baz
class Bar(Foo):
def __init__(self):
#super(Bar, self).__init__()
self.__baz = 21
def bar(self):
print self.__baz
x = Bar()
x.foo()
x.bar()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Traceback (most recent call last):
File "classes.py", line 15, in <module>
x.foo()
File "classes.py", line 5, in foo
print self.__baz
AttributeError: 'Bar' object has no attribute '_Foo__baz'
Run Code Online (Sandbox Code Playgroud)
为什么这个foo方法没有继承Bar.
编辑:它工作正常,如果你打电话给超级评论.
我正在阅读CDIJavaEE 7中的注入,特别是使用@Qualifier和@Produces注入custom Data typebean.
我从JBoss文档中获取了以下代码,用于页面的末尾.
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface HttpParam {
@Nonbinding public String value();
}
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
class HttpParams {
@Produces @HttpParam("")
String getParamValue(InjectionPoint ip) {
ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
return request.getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
}
}
Run Code Online (Sandbox Code Playgroud)
此限定符可以通过以下方式使用:
@HttpParam("username") @Inject String username;
@HttpParam("password") @Inject String password;
Run Code Online (Sandbox Code Playgroud)
我的问题是:
@Nonbinding注释是什么意思?为什么需要呢?
方法签名应该总是这样吗@Nonbindng public String value();?我问这个的原因是我看过几个不同的例子,但它们都有相同的签名.这是允许的:
public @interface HttpParam {
@Nonbinding public int value();
}
我有一个spring boot应用程序,我想application.properties在commandLine我的时候传入文件start-up.
即我跑的时候 mvn spring-boot:run --application.properties
我将有一个默认的application.properties src/main/resources.但这只是出于testing目的.在production运行,我想通过property file在commandLine.
我知道传递单个参数,如
mvn spring-boot:run --server.port=9001.
但是我有很多这样的属性,如果可能的话,我更愿意传递一个属性文件.
我昨天成功地成立了zookeeper和一名kafka经纪人.一切都按预期工作.我关闭了kafka(ctrl + c)然后关闭了zookeeper.
今天我开始使用zookeeper,当我启动kafka(bin/kafka-server-start.sh config/server0.properties)时,我收到以下错误.我尝试了各种补救措施(完全删除我的kafka安装并从头开始再做).我仍然得到同样的错误.
[2016-09-28 16:15:55,895] FATAL Fatal error during KafkaServerStartable startup. Prepare to shutdown (kafka.server.KafkaServerStartable)
java.lang.RuntimeException: A broker is already registered on the path /brokers/ids/0. This probably indicates that you either have configured a brokerid that is already in use, or else you have shutdown this broker and restarted it faster than the zookeeper timeout so it appears to be re-registering.
at kafka.utils.ZkUtils.registerBrokerInZk(ZkUtils.scala:305)
at kafka.utils.ZkUtils.registerBrokerInZk(ZkUtils.scala:291)
at kafka.server.KafkaHealthcheck.register(KafkaHealthcheck.scala:70)
at kafka.server.KafkaHealthcheck.startup(KafkaHealthcheck.scala:51)
at kafka.server.KafkaServer.startup(KafkaServer.scala:244)
at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:37)
at kafka.Kafka$.main(Kafka.scala:67)
at …Run Code Online (Sandbox Code Playgroud) 我已经读过哈希表是线程安全的,因为它是同步的.考虑这段代码
if(!hashtable.contains(key)){
hashtable.put(key,value);
}
Run Code Online (Sandbox Code Playgroud)
哈希表上的操作可能无法同步.例如,如果Thread t1访问hastable并检查密钥并同时Thread t2检查密钥,则在t1执行put之前.现在,两个线程都在if块内,并且会覆盖键值.
所以同步块是必要的.
synchronized {
if(!hashtable.contains(key)){
hashtable.put(key,value);
}
}
Run Code Online (Sandbox Code Playgroud)
这种理解是否正确?或者hastables对在hastables上执行的操作是安全的.我在阅读这篇关于竞争条件的帖子时遇到了这个疑问
python2.6中的以下代码抛出语法错误
>>> def f(a,*args,c):
File "<stdin>", line 1
def f(a,*args,c):
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
但是这种语法在python3.0中是有效的.我想知道我应该在我的解释器中导入什么才能使它工作.即.from import __future__ ????
对于print function3.0的导入,我会这样做from __future__ import print_function
同样,这种定义在2.6中无效
def f(a,*b,c=5,**kwargs):
Run Code Online (Sandbox Code Playgroud)
虽然它在3.0中是合法的
我希望有两个字段对应于下一个旁边的复选框(不是其他一个),就像我在图像中显示的那样.
我的表格继承自models.Form并有其他领域,我在这里留下了.是否有可能使用香脆形式?对于其他领域,
我使用self.helper.form_class='form-horizontal',我想保持其他表单字段完整
谢谢

我为我的文件设置了复制因子,如下所示:
hadoop fs -D dfs.replication=5 -copyFromLocal file.txt /user/xxxx
Run Code Online (Sandbox Code Playgroud)
当NameNode重新启动时,它确保在复制的块复制.因此,存储(可能在nameNode)文件的复制信息.我怎样才能获得这些信息?
python ×2
apache-kafka ×1
cdi ×1
django ×1
hadoop ×1
hadoop2 ×1
hashtable ×1
inheritance ×1
inject ×1
java ×1
java-ee-7 ×1
networking ×1
oop ×1
port ×1
python-3.x ×1
replication ×1
request ×1
sockets ×1
spring-4 ×1
spring-boot ×1
tcp ×1