link的地址以斜线开头完全没有道理啊

在内部搭一个类stackoverflow的系统,选了个基于django的开源的osqa,部署的时候陆陆续续发现源码里有点小问题,比如用户相关的很多link是这样写的:


<a href="/users/{{ user.id }}/{{ user.username|slugify }}/">{% gravatar user 32 %}</a>

这么搞的话link就指向了服务器的documentRoot,但是我不会把osqa这个应用直接挂在根域名下,这样的hard code我觉得挺愚蠢的。

其实同样的问题也存在我们的jsp里面,这个编程习惯不好,要改正其实也不难,手工做的话可以取得app的rootPath就行了,或者用url标签来帮我们自动搞定。(django&jsp都有的)

另一个Note:osqa第一次装的时候会把配置信息写到forum_keyvalue表里面,后面修改上传路径等的配置没有用,必须到数据库修改。


mysql> update forum_keyvalue set value="S'/upfiles/logo.png'
    "> p0
    "> ." where id=26;

	mysql> update forum_keyvalue set value="S'/var/lib/osqa/forum/upfiles'
    "> p0
    "> ." where id=33;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from forum_keyvalue where id=33;
+----+----------------+-------------------------------------+
| id | key            | value                               |
+----+----------------+-------------------------------------+
| 33 | UPFILES_FOLDER | S'/var/lib/osqa/forum/upfiles'
p0
. |
+----+----------------+-------------------------------------+

Something more:
Larry wrote 2 useful CSS related posts:
CSS – small tips (设置图像最大宽度,打印分页)

CSS – sprites, manage images (图像合并切割)

END

久疏战阵

语言这玩意是熟能生巧的,久疏战阵必然导致一些遗忘,虽说我常写些小玩意玩玩,但也扛不住关于java语言细节的拷问,感觉中国人面试就喜欢的问这样的问题,抗议

昨天被问到的问题是这样的,父类A有一个方法申明抛出异常ExceptionA,继承自A的子类B能不能覆盖这个方法,且声明抛出ExceptionA和ExceptionB?

回答这个问题的时候我不是非常确定,认为可以,因为印象中看到过类似的代码。

面试官却说这个是不可以的,相信他这么说的原因肯定是因为众多java编程书里面都有这么一点,方法覆盖的时候,子类方法不能抛出比父类方法更多的异常

然而这句话对么?结束之后,抱着怀疑的态度,我就在eclipse试了一下,其实这句话不完全对。

第一种情况:子类抛出的是父类声明异常的子类,这句话不适用


class A
{
 public void method() throws Exception{}
}
class B extends A
{
 public void method() throws ClassNotFoundException, IOException{}
}
class C extends A
{
 public void method() throws Exception, IOException{}
}

第二种情况:子类声明多出来的异常是unchecked Exception,这句话不适用


class A2Exception extends RuntimeException
{
}
class B2Exception extends RuntimeException
{
}
class A2
{
 void method1() throws A2Exception{}
}
class B2 extends A2
{
 @Override
 void method1() throws A2Exception,B2Exception{}
}

第三种情况:唯有这种情况下,编译不能通过,这句话能够适用


class AException extends Exception
{
}
class BException extends Exception
{
}
class A1
{
 void method1() throws AException{}
}
class B1 extends A1
{
 @Override
 void method1() throws AException,BException{}
}