是否可以在SimpleDateFormat模式字符串中包含字母字符?
我正在尝试创建一个格式字符串,其中字母"T"包含在时间之前,例如:
2003-11-15 T 09:30:47-05:00
我目前正在使用yyyy-MM-ddhh:mm:ssZ模式字符串.
如果我将其更改为yyyy-MM-ddThh:mm:ssZ它将抛出一个例外,'A'为'Z','a'为'z'保留.
是否有任何解决方案不涉及使用两个DateFormats?
我需要测试一个函数,其结果将取决于当前时间(使用Joda时间isBeforeNow()).
public boolean isAvailable() {
return (this.someDate.isBeforeNow());
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用Mockito存根/模拟系统时间,以便我可以可靠地测试功能?
在时间(缓存性能)方面,嵌套循环在迭代2D阵列中的哪一个排序更有效?为什么?
int a[100][100];
for(i=0; i<100; i++)
{
for(j=0; j<100; j++)
{
a[i][j] = 10;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
for(i=0; i<100; i++)
{
for(j=0; j<100; j++)
{
a[j][i] = 10;
}
}
Run Code Online (Sandbox Code Playgroud) 这是一个通用的问题,以帮助有程序问题的新程序员,但不知道如何使用调试器来诊断问题的原因.
这个问题涉及两类更具体的问题:
[What is a debugger and how can it help me diagnose problems?](https://stackoverflow.com/q/25385173)
当我运行我的(C++)程序时,它会因此错误而崩溃.
*glibc检测到* ./load:双重免费或损坏(!prev):0x0000000000c6ed50***
如何追踪错误?
我尝试使用print(std::cout)语句,没有成功.可以gdb让这更容易吗?
许多Unix程序接受像USR1和的信号USR2.例如,要动态升级Nginx的可执行文件,请发送kill -USR2.
我知道这USR1是一个"用户定义"信号,这意味着创建程序的人可以用它来表示"关闭"或"转储你的日志"或"打印foo一千次"或其他什么.但我不明白为什么他们必须使用这个任意名称.为什么不kill -UPGRADE,或kill -GRACEFUL_SHUTDOWN?Unix只允许特定信号吗?
当我们参与其中时,Nginx还使用以下信号(参见文档):
HUP?绞车?这些名字的原因是什么?我在哪里可以了解更多相关信息?
从Head First设计模式书中,具有双重检查锁定的单例模式已实现如下:
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么volatile被使用.volatile使用不会 破坏使用双重检查锁定的目的,即性能?
java singleton design-patterns locking double-checked-locking
我一直在使用Java的ConcurrentMap作为可以从多个线程使用的地图.putIfAbsent是一个很好的方法,比使用标准的map操作更容易读/写.我有一些看起来像这样的代码:
ConcurrentMap<String, Set<X>> map = new ConcurrentHashMap<String, Set<X>>();
// ...
map.putIfAbsent(name, new HashSet<X>());
map.get(name).add(Y);
Run Code Online (Sandbox Code Playgroud)
可读性明智这很好,但它确实需要每次创建一个新的HashSet,即使它已经在地图中.我可以这样写:
if (!map.containsKey(name)) {
map.putIfAbsent(name, new HashSet<X>());
}
map.get(name).add(Y);
Run Code Online (Sandbox Code Playgroud)
通过此更改,它会失去一点可读性,但不需要每次都创建HashSet.在这种情况下哪个更好?我倾向于支持第一个,因为它更具可读性.第二个会表现得更好,也可能更正确.也许有比这两种方法更好的方法.
以这种方式使用putIfAbsent的最佳做法是什么?
我正在使用log4j和tomcat.当我在JSP中记录异常时,servlet:
private Logger _log = Logger.getLogger(this.getClass());
...
try{...} catch (Exception e) {
_log.error("Error refreshing all prices", e);
}
Run Code Online (Sandbox Code Playgroud)
我只得到异常的第一行,没有堆栈跟踪.
17-Feb 17:37:45 ERROR AutoContrib:175 - 发布csv文件时出现异常:java.lang.ArrayIndexOutOfBoundsException
根本没有帮助!
我的log4j.properties文件(/tomcat/common/classes/log4j.properties)如下所示:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{dd-MMM HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.stdout.threshold=info
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=5000KB
log4j.appender.file.maxBackupIndex=10
log4j.appender.file.File=${catalina.home}/logs/web.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{dd-MMM HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.file.threshold=info
log4j.rootLogger=debug, stdout, file
Run Code Online (Sandbox Code Playgroud) 如果多个线程在没有同步的情况下调用System.out.println(String),输出是否可以交错?或者每行写入原子?该API只字不提同步的,所以这似乎是可能的,或者是由缓冲和/或虚拟机存储器模型等防止交织输出?
编辑:
例如,如果每个线程包含:
System.out.println("ABC");
Run Code Online (Sandbox Code Playgroud)
输出保证是:
ABC
ABC
Run Code Online (Sandbox Code Playgroud)
或者它可能是:
AABC
BC
Run Code Online (Sandbox Code Playgroud) java ×6
c ×2
debugging ×2
performance ×2
c++ ×1
concurrency ×1
cpu-cache ×1
datetime ×1
for-loop ×1
formatting ×1
free ×1
junit ×1
locking ×1
log4j ×1
logging ×1
printstream ×1
signals ×1
singleton ×1
tomcat ×1
unix ×1