路由器网站 解决端口 80 问题

在中国这个和谐和言论自由的国度, 要在路由器上建网站, 有一个很大的阻碍就是80端口不能用. 幸而443 能用, 所以可以使用https.

可是大部分的网站默认是80端口的, 所以客户直接是访问80端口的. 针对所有通过二级域名访问的, 都可以通过显示/隐身的DNS设置, 转到https 上去. 比如 你的网站是 home.tianxiaohui.com. 那么你可以在路由器设置所有的 *.tianxiaohui.com 都转到 https://home.tianxiaohui.com, 那么所有的二级域名都正常可以访问了.

那么剩下 tianxiaohui.com 这个一级域名了, 因为有非常多的人可能直接访问这个, 并且是默认80端口, 那么就需要一个中转网站, 只要tianxiaohui.com 的 IP 指向这个中转站, 这个中转站在通过301 永久重定向到 https://home.tianxiaohui.com 那么就解决了.

于是今天就找到了一个免费的空间, 只是用它来做重定向, 它就是 http://cpanel.hostinger.com.hk/order/accounts-order.

其实最后只剩下唯一一个了 http://home.tanxiaohui.com, 这个永远连接不上80端口 :(

java util WeakHashMap

  1. WeakHashMap 只是key 是WeakReference 的, 当key 被GC 回收后, value 如果没有其他Reference, 很快也会被回收;
  2. 很多时候, 一定要避免 value 直接或间接的Reference key;
  3. WeakHashMap 的key 和value 都可以是 null;
  4. 如果事前知道Map的大小, 可以设置 initial capacity and load factor 来提高性能;
  5. WeakHashMap 默认不是 synchronized, 若要需要线程安全的WeakHashMap, 需要通过 Collections.synchronizedMap 构建;

java 多线程 并发 之 CyclicBarrier

首先, 这是一篇很好的教程: CyclicBarrier的用法

需要注意的其他点:

  1. 即使你不设置超时时间, 系统默认有个超时时间
  2. 当所有线程到达Barrier之后, 这个CyclicBarrier 可以被下次使用
  3. 并发结果是要么全部成功, 要么全部失败, 所以要对await() 方法捕获异常, 并且尝试恢复;

busybox sendmail 例子

  1. 首先创建一个纯文本, 写入一下内容:

Subject: Restart due to high load
CC:[email protected]
To:[email protected]
From:[email protected]

Restart due to high load on router

  1. 发送email的命令

cat var/test/routerRestartMail.txt | sendmail -S"smtp.163.com" -au"我的163邮箱用户名" -ap"163邮箱密码" -f"发送者邮箱名@163.com"

  1. sendmail 的详细说明文档:

root@home:/opt/var/eric# sendmail
BusyBox v1.18.4 (2013-05-26 18:44:50 CST) multi-call binary.

Usage: sendmail [OPTIONS] [RECIPIENT_EMAIL]...

Read email from stdin and send it

Standard options:

    -t              Read additional recipients from message body
    -f sender       Sender (required)
    -o options      Various options. -oi implied, others are ignored
    -i              -oi synonym. implied and ignored

Busybox specific options:

    -w seconds      Network timeout
    -H 'PROG ARGS'  Run connection helper
                    Examples:
                    -H 'exec openssl s_client -quiet -tls1 -starttls smtp
                            -connect smtp.gmail.com:25' <email.txt
                            [4<username_and_passwd.txt | -au<username> -ap<password>]
                    -H 'exec openssl s_client -quiet -tls1
                            -connect smtp.gmail.com:465' <email.txt
                            [4<username_and_passwd.txt | -au<username> -ap<password>]
    -S server[:port] Server
    -au<username>   Username for AUTH LOGIN
    -ap<password>   Password for AUTH LOGIN
    -am<method>     Authentication method. Ignored. LOGIN is implied

Other options are silently ignored; -oi -t is implied