伙计们,这是我的问题:我有一些课程在我的项目中的很多地方使用过.而且我必须用提供的jar替换另一个类.有没有办法重构这个?我想这是一个简单的问题,但我不知道如何解决它.
它不是要替换源代码 - 我想要的是从我的库中替换所有类的用法,并能够完全删除我自己的类.想象一下,我已经创建了自己的StringUtils,并发现有一个apache.common StringUtils库,现在我想在我的代码中到处使用它.类方法的签名不是问题:它们是一致的.
?
我试图了解什么是HTTP流水线和HTTP保持活动连接,并尝试在这两个主题和Server Sent事件技术之间建立连接.
据我所知,当建立的一次TCP连接用于逐个发送多个HTTP请求时, HTTP保持连接是HTTP 1.1使用TCP的默认方式. HTTP流水线操作是客户端向服务器发送请求的功能,而使用相同的TCP连接尚未收到对先前请求的响应,通常不会在浏览器中用作默认方式.
我的问题:
1)如果可以使用一个TCP连接一个接一个地向服务器发送多个请求 - 客户端如何区分响应?我猜客户端正在使用FIFO顺序发送服务器的响应?
2)为什么非幂等请求(如POST请求)不应该被流水线化(根据维基百科)?
3)Web服务器的局限性是什么:可能的开放TCP连接数量是多少?如果是,那么如果某些客户端持有保持活动连接,则其他客户端无法建立连接,这可能会导致问题,对吧?
4)Server Sent Events正在使用keep-alive连接,但据我所知,SSE没有使用流水线技术.相反,他们设法处理对一个请求的多个响应,或者他们只是在下一个事件响应到达时发送另一个请求.哪种猜测是正确的?
5)一个TCP连接意味着一个插座?一个套接字意味着一个TCP连接?关闭/打开套接字意味着关闭/打开TCP连接?
我想处理客户端请求流.每个请求都有其特殊类型.首先,我需要为该类型初始化一些数据,然后我可以开始处理请求.当客户端类型第一次出现时,我只是初始化相应的数据.在此之后,使用该数据处理该类型的所有以下请求.
我需要以线程安全的方式执行此操作.
这是我写的代码.它是线程安全的吗?
public class Test {
private static Map<Integer, Object> clientTypesInitiated = new ConcurrentHashMap<Integer, Object>();
/* to process client request we need to
create corresponding client type data.
on the first signal we create that data,
on the second - we process the request*/
void onClientRequestReceived(int clientTypeIndex) {
if (clientTypesInitiated.put(clientTypeIndex, "") == null) {
//new client type index arrived, this type was never processed
//process data for that client type and put it into the map of types
Object …Run Code Online (Sandbox Code Playgroud) 我知道要更改浏览器打开网站的选项卡的名称,我需要更改html文件中的标题标签.
但是在GWT中,情况有所不同:每个新地点使用相同的html文件,因此浏览器选项卡的名称对于所有地方都是相同的.
我有一个简单的GWT设置用于测试:
<g:HTMLPanel ui:field="container" width="500px" height="300px">
<g:Label ui:field="inner" text="hello"></g:Label>
</g:HTMLPanel>
Run Code Online (Sandbox Code Playgroud)
添加处理程序:
container.addDomHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
Window.alert("click on container");
}
}, ClickEvent.getType());
inner.addDomHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
Window.alert("click on inner");
}
}, ClickEvent.getType());
Run Code Online (Sandbox Code Playgroud)
正如我们从消息来源所知,这些addHandler调用中的每一个都是
DOM.sinkEvents(Element elem,int eventBits)
根据文档,内部和后者"设置由给定元素沉没的当前事件集.这些事件将被触发到在任何元素的父元素上指定的最近的{@link EventListener}."
但事实上,如果你点击内部div,点击将以3种方式中的任何一种方式触发到其父div:
如果我没有在child上设置任何ClickHandlers
如果我在孩子身上设置了处理程序
如果我已设置处理程序,但清除了ClickEvent的下沉
DOM.sinkEvents(inner.getElement(),DOM.getEventsSunk(getElement())&~Event.getTypeInt(ClickEvent.getType().getName()));
为什么会发生这种情况以及下沉事件的真正作用是什么?为什么添加Handler与下沉事件有关,即将同一事件发送给给定元素的父元素?是否可以阻止添加到给定小部件中的所有处理程序进行调用而不会明确地删除它们?即有没有办法停止处理某些小部件上的所有事件?
基于这个主题,我提出了一个有趣的Singleton模式版本,该实现基于AtomicIntegers.
问题是:
volatile实例变量的修饰符吗?public class StrangeSingleton
{
private StrangeSingleton() {};
private static volatile Object instance;
private static AtomicInteger initCounter = new AtomicInteger();
private static AtomicInteger readyCounter = new AtomicInteger();
static Object getInstance()
{
if (initCounter.incrementAndGet() == 1)
{
instance = new Object();
readyCounter.incrementAndGet();
return instance;
}
else if (readyCounter.get() == 1)
{
return instance;
}
else
{
//initialization not complete yet.
//write here some logic you want:
//sleep for 5s and try one more …Run Code Online (Sandbox Code Playgroud) 我想要的是了解我为GWT所做的DOM操作支付的性能价格.我想知道哪些操作"昂贵"而哪些操作不是,以及如何测量它.我想知道如何描述这些操作,或者根本不值得关注这些问题.
更确切地说,这是我遇到的用例列表.
1)用例#1:如果某个事件发生,你有一个小部件可以改变它的外观.如果我要移除旧窗口小部件并创建新窗口小部件,或者更好地更改现有窗口小部件的样式,是否有任何区别?换句话说,在GWT应用程序中创建和插入新小部件的价格有多大?是否有任何类型的垃圾收集器用于删除DOM元素?
2)用例#2:您需要从服务器端获取或保存一些数据.数据可能非常大.有没有意义创建一个特殊的Servlet,它将以非常简单的方式进行此操作:只接受或打印一些String而不是对标准GWT servlet进行RPC调用?这是提高绩效的好方法吗?您自编的Servlet非常简单.
3)用例#3:你有一个小部件是一个很长的其他小部件列表.如何估计哪些小部件可以安全地显示客户端性能?我的意思是,如果过去5年我们会显示500万条聊天消息,可能客户端会变慢,即使我们会逐个加载项目,从而限制了服务器端的压力.
4)用例#4:dom操作的性能价格如何找出某个容器内部的元素数量,或者找出元素的样式?例如,您需要计算聊天中的消息数.这个计算聊天容器的DOM子项的操作是否昂贵,以至于更好地实现单独的计数器并在新消息到达时增加它(就像Java Collections一样)?
我的申请由几个部分组成。我想通过更改我所有应用程序中的 URL 来防止用户更改区域设置,除了一个小的 GWT 位置。我需要在 URL 中为该位置提供语言环境,以确保该位置以正确的语言加载。
我能做什么?
我看到以下选项:
1) 从那个地方创建单独的模块,并允许在该模块的 xml 设置文件中使用 queryparam 作为语言环境的来源。据我所知,我需要放下一些东西,比如 <set-configuration-property name="locale.searchorder" value="queryparam,cookie"/>
可能会起作用,但对于这么小的任务来说有点困难。
2) 另一种选择是手动实现所需的功能。我编写了以下代码:
String languageCode = Window.Location.getParameter("lang");
Cookies.setCookie(COOKIE_NAME, languageCode, new Date(System.currentTimeMillis() * 1000 * 3600 * 24 * 365 * 100));
Scheduler.get().scheduleDeferred(new ScheduledCommand()
{
@Override
public void execute()
{
Window.Location.reload();
}
});
Run Code Online (Sandbox Code Playgroud)
它可以工作,但问题在于延迟调用:如果我使用它,页面会加载,然后重新加载信号出现并在页面显示后重新加载。用户观察到奇怪的闪烁。如果我不使用延迟调用,则不会设置 cookie,我不知道为什么(您能解释一下吗?)。
那么你将如何解决这个任务呢?
CREATE TABLE index_test
(
id int PRIMARY KEY NOT NULL,
text varchar(2048) NOT NULL,
value int NOT NULL
);
CREATE INDEX idx_index_value ON index_test ( value );
CREATE INDEX idx_index_value_and_text ON index_test ( value, text );
CREATE INDEX idx_index_text_and_value ON index_test ( text, value );
CREATE INDEX idx_index_text ON index_test ( text );
Run Code Online (Sandbox Code Playgroud)
该表填充有 10000 个随机行,“值”列具有从 0 到 100 的整数,“文本”列具有随机 128 位 md5 哈希值。抱歉使用了错误的列名。
我的搜索是:
select * from index_test r where r.value=56;
select * from index_test r where r.value=56 and …Run Code Online (Sandbox Code Playgroud) 我需要一个具有以下功能的信号量:
我写了以下代码:
public class SimpleSemaphore
{
private int permits;
private AtomicLong counter = new AtomicLong();
SimpleSemaphore(int permits)
{
this.permits = permits;
}
boolean acquire()
{
if (counter.incrementAndGet() < permits)
{
return true;
}
else
{
counter.decrementAndGet();
return false;
}
}
void release()
{
counter.decrementAndGet();
}
}
Run Code Online (Sandbox Code Playgroud)
另一个选择是这个信号量:
public class EasySemaphore
{
private int permits;
private AtomicLong counter = new AtomicLong();
EasySemaphore(int permits)
{
this.permits = permits;
}
boolean acquire()
{
long index = counter.get();
if (index < permits) …Run Code Online (Sandbox Code Playgroud) java ×7
gwt ×4
concurrency ×3
atomicity ×1
browser ×1
dom ×1
events ×1
html ×1
http ×1
javascript ×1
keep-alive ×1
locale ×1
nonblocking ×1
performance ×1
postgresql ×1
refactoring ×1
semaphore ×1
singleton ×1
sql ×1