我们使用GSLB进行地理分布和负载平衡.为每项服务分配一个固定的域名.通过一些DNS魔术,域名被解析为最接近服务器且负载最小的IP.为了使负载平衡起作用,应用程序服务器需要遵守DNS响应中的TTL,并在缓存超时时再次解析域名.但是,我无法想出用Java做到这一点的方法.
该应用程序使用Java 5,在Linux(Centos 5)上运行.
显而易见的答案是使用,Charset.defaultCharset()但我们最近发现这可能不是正确的答案.有人告诉我,结果与java.io类在多个场合使用的真正的默认字符集不同.看起来Java保留了2套默认字符集.有没有人对这个问题有任何见解?
我们能够重现一个失败案例.这是一种用户错误,但它仍然可能暴露所有其他问题的根本原因.这是代码,
public class CharSetTest {
public static void main(String[] args) {
System.out.println("Default Charset=" + Charset.defaultCharset());
System.setProperty("file.encoding", "Latin-1");
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Default Charset=" + Charset.defaultCharset());
System.out.println("Default Charset in Use=" + getDefaultCharSet());
}
private static String getDefaultCharSet() {
OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream());
String enc = writer.getEncoding();
return enc;
}
}
Run Code Online (Sandbox Code Playgroud)
我们的服务器需要Latin-1中的默认字符集来处理传统协议中的一些混合编码(ANSI/Latin-1/UTF-8).所以我们所有的服务器都运行这个JVM参数,
-Dfile.encoding=ISO-8859-1
Run Code Online (Sandbox Code Playgroud)
这是Java 5的结果,
Default Charset=ISO-8859-1
file.encoding=Latin-1
Default Charset=UTF-8
Default Charset in Use=ISO8859_1
Run Code Online (Sandbox Code Playgroud)
有人试图通过在代码中设置file.encoding来更改编码运行时.我们都知道这不起作用.但是,这显然抛弃了defaultCharset(),但它不会影响OutputStreamWriter使用的实际默认字符集.
这是一个错误或功能吗?
编辑:接受的答案显示了问题的根本原因.基本上,您不能信任Java 5中的defaultCharset(),它不是I/O类使用的默认编码.看起来Java 6纠正了这个问题.
我有一个在Apache上运行的PHP服务器,我得到了很多这样的请求,
10.1.1.211 - - [02/Sep/2010:16:14:31 -0400] "GET /request?_=1283458471913&action=get_list HTTP/1.1" 200 547 0 "http://www.example.com/request" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)" 28632 15602
Run Code Online (Sandbox Code Playgroud)
_参数被神秘地添加到请求中.我试图找出谁在做那件事.
在Apache前面运行一个NetScaler.
我看到这样的选择器,
.class1 .class2 .class3 {
}
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
我使用了多个没有空格的类选择器.空间意味着后代,但它对课程没有意义.
我正在编写一个OutputStream,只是在OutputStream接口中注意到了这一点,
public abstract void write(int b) throws IOException;
Run Code Online (Sandbox Code Playgroud)
这个调用会向流写一个字节,但为什么它将整数作为参数?
这与以下问题有关,
在大多数平台上,有几个人提到int总是32位.如果这是真的,我很好奇.
你知道任何具有不同大小的int的现代平台吗?忽略具有8位或16位架构的恐龙平台.
注意: 我已经知道如何从另一个问题声明一个32位整数.这个更像是一个调查,以找出哪些平台(CPU/OS /编译器)支持其他大小的整数.
如何查明子类是否覆盖了某个方法?
例如,
public class Test {
static public class B {
public String m() {return "From B";};
}
static public class B1 extends B {
}
static public class B2 extends B {
public String m() {return "from B2";};
}
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) {
B b1 = new B1();
System.out.println("b1 = " + b1.m());
B b2 = new B2();
System.out.println("b1 = " + b2.m());
}
}
Run Code Online (Sandbox Code Playgroud)
给定B的一个实例,我怎么知道任何派生类是否有像B2这样的重写方法m()?
更新:我的问题不明确.实际上,我试图在不诉诸反思的情况下询问是否可行.这种检查是在一个紧凑的循环中完成的,它用于性能破解以节省一些CPU周期.
我们需要通过串联在数据库中组合3列.但是,3列可能包含重叠部分,不应复制部分.例如,
"a" + "b" + "c" => "abc"
"abcde" + "defgh" + "ghlmn" => "abcdefghlmn"
"abcdede" + "dedefgh" + "" => "abcdedefgh"
"abcde" + "d" + "ghlmn" => "abcdedghlmn"
"abcdef" + "" + "defghl" => "abcdefghl"
Run Code Online (Sandbox Code Playgroud)
我们当前的算法非常慢,因为它使用强力来识别2个字符串之间的重叠部分.有没有人知道这样做的有效算法?
假设我们有2个字符串A和B.算法需要找到最长的公共子串S,这样A以S结尾,B以S开头.
我们目前在Java中使用的强力实现作为参考,
public static String concat(String s1, String s2) {
if (s1 == null)
return s2;
if (s2 == null)
return s1;
int len = Math.min(s1.length(), s2.length());
// Find the index for the end of overlapping part
int index = -1;
for (int …Run Code Online (Sandbox Code Playgroud) 使用Apache 2.2和PHP 5,在没有.php扩展名的情况下运行PHP的最佳方法是什么.例如,我有一个名为app.php的脚本,我喜欢将其作为调用
请注意,我仍然希望保留.php扩展名到文件,我没有mod_rewrite.不要使用index.php,因为它需要太多目录.
我确实找到了一种方法,将其添加到我的.htaccess中,
AddHandler server-parsed .php
SetHandler application/x-httpd-php
AddHandler application/x-httpd-php .php
Run Code Online (Sandbox Code Playgroud)
使用此页面,页面运行速度稍慢.我怀疑它在每个PHP页面上调用SSI.不知道有没有更好的方法来实现这一目标.
java ×4
apache ×2
c ×2
php ×2
ajax ×1
algorithm ×1
css ×1
dns ×1
encoding ×1
gslb ×1
http ×1
inheritance ×1
int ×1
io ×1
javascript ×1
methods ×1
mod-rewrite ×1
outputstream ×1
overriding ×1
portability ×1
string ×1