class A {
public synchronized void myOneMethod() {
// ...
}
}
class B extends A {
public synchronized void myOtherMethod() {
// ...
}
}
// ...
B myObject;
// ...
myObject.myOneMethod(); // acquires lock
myObject.myOtherMethod(); // same lock?
Run Code Online (Sandbox Code Playgroud)
我如何理解同步模型,我会说是的,确实如此,因为锁/监视器与实例myObject相关联,并且定义方法的位置并不重要.但我是对的吗?如果没有,为什么?如果是的话,你为什么确定,我不是?:-)
我在过去几年中做了很多PHP编程,让我讨厌的一件事就是对Unicode和多字节字符串的弱支持(当然,原则上没有).例如,"htmlentities"似乎是PHP世界中一个常用的函数,我发现当你努力保持每个字符串可以本地化时,它只会在你的数据库中存储UTF-8,只提供UTF -8 webpages等突然间,在你的数据库和浏览器之间的某个地方,这个绝望的天真函数假装每个字节都是一个字符并且混乱了一切.
我只是喜欢,只是倾倒这种功能,他们似乎完全是多余的.这几天仍然需要写'ä' 代替'?至少我的Firefox似乎非常高兴能够显示最奇怪的亚洲字形,只要它们以适当的编码方式提供.
更新:更准确:除了显示HTML标记之外,其他任何东西都是必需的实体(如"<"表示"<")
@Konrad:你是说,不,不需要命名实体吗?
@Ross:但是在输入时清理用户输入是不是更好,以保持我的输出逻辑免受这些问题的影响?(当然,假设可以对输入进行可靠的消毒 - 但是,如果不是,那么它可以输出吗?)
最近,我开始将一些应用程序更改为支持MS SQL Server作为替代后端.
我遇到的一个兼容性问题是使用MySQL的CREATE TEMPORARY TABLE来创建内存表,这些表在会话期间保存数据以实现非常快速的访问,而无需永久存储.
MS SQL中的等价物是什么?
一个要求是我需要能够像使用其他临时表一样使用临时表,尤其是JOIN永久表.
Flash影片中无法访问HTTP Cookie,但我现在已经反复阅读过,Flash Player应该自动处理会话cookie.但是,我没有找到任何关于此的文档,并且它肯定不适用于使用默认JSESSIONID cookie运行Struts后端的Flex客户端.
那么,Flash Player是否处理会话cookie或不处理会话cookie,如果是,我该如何设置?
我的Java应用程序已开始定期崩溃,包括SIGSEGV和堆栈数据转储以及文本文件中的大量信息.
我在gdb中调试了C程序,并且已经从IDE调试了Java代码.我不确定如何在正在运行的Java程序中处理类似C的崩溃.
我假设我不是在看这里的JVM错误.其他Java程序运行得很好,Sun的JVM可能比我的代码更稳定.但是,我不知道如何使用Java代码导致段错误.肯定有足够的可用内存,当我上次检查分析器时,堆使用率约为50%,偶尔会出现80%左右的峰值.我可以调查任何启动参数吗?在接近像这样的bug时,什么是好的清单?
虽然我不能够可靠地再现事件,但它似乎也不是完全随机发生的,所以测试并非完全不可能.
ETA:一些血腥的细节
(我正在寻找一种通用方法,因为实际问题可能非常具体.但是,我已经收集了一些信息并且可能有一些价值.)
不久之前,升级我的CI服务器之后遇到了类似的问题(详见此处),但是这次修复(设置-XX:MaxPermSize)没有帮助.
进一步的调查显示,在崩溃日志文件中,标记为"当前线程"的线程永远不是我的,但任何一个称为"VMThread"或称为"GCTaskThread" - 我是后者,它还标有注释"(已退出)",如果是前者,则GCTaskThread不在列表中.这让我想到问题可能是在GC操作结束时.
给定以下代码,ixAdd会执行您期望的操作,即在增量之前返回ix的值,但在离开函数之前增加类成员吗?
class myCounter {
private int _ix = 1;
public int ixAdd()
{
return _ix++;
}
}
Run Code Online (Sandbox Code Playgroud)
当程序离开函数的堆栈帧(或Java中的任何内容)时,我不太确定post/pre increment的通常规则是否也适用于return语句.
无论是我遗漏了一些明显的东西,还是Maven书和Maven Assembly Plugin的主页,在描述如何编写自定义程序集描述符时,都没有说明该文件的去向.这是我项目的一部分吗?它是否进入某个中央Maven配置目录?我必须在某处指定它的位置吗?
在MyBatis中,您可以在SQL中标记应插入参数的位置,如下所示:
SELECT*FROM Person WHERE id = #{id}
此语法激活正确的转义等,以避免SQL注入攻击等.如果您有可信输入并希望跳过转义,则可以逐字插入参数:
SELECT*FROM {tableName} WHERE id =#{id}
现在,我想对不安全的输入进行LIKE搜索,所以我想做的是:
SELECT*FROM Person WHERE name LIKE #{beginningOfName} || '%'
但遗憾的是,重要的数据库服务器不支持||串联语法:
MSSQL - 使用'+'运算符而不是'||'来打破标准.
...
MySQL - 通过重新定义||严重打破了标准 表示OR.
所以,我也可以
SELECT*FROM Person WHERE name LIKE CONCAT(#{beginningOfName},'%')
在这种情况下,只限于MySQL,或者我可以做到
SELECT*FROM Person WHERE name LIKE '{beginningOfName}%'
并且必须自己清理输入.
有更优雅的解决方案吗?
假设Java对象只占用对象引用的8个字节是正确的,只要它的所有成员都被设置为null或者成员的定义是否因为某种原因已经占用了实例中的空间?
换句话说,如果我有一大堆我希望节省空间的对象,我可以指望将未使用的成员设置null为减少内存占用吗?
java ×4
algorithm ×1
concurrency ×1
cookies ×1
flash ×1
graph-theory ×1
html ×1
maven-2 ×1
memory ×1
mybatis ×1
mysql ×1
operators ×1
optimization ×1
php ×1
portability ×1
rdbms ×1
session ×1
sql ×1
sql-server ×1
unicode ×1