碰到过的问题
other 

有时候碰到问题,只知道自己以前解决过。如何解决的,却是一点也想不起来了。故在此记录下,碰到过的问题,以待后续会用到。

Java

  1. 在java中,对于读取文件乱码,可以通过以下方式来指定文件的编码new InputStreamReader(new FileInputStream(file), "GBK") 或者 Files.newBufferedReader(path, StandardCharsets.UTF_8)
  2. Cookie rejected [...] 对于 Cookie rejected ,可能是机器配置了域名,但是没有使用域名访问机器。
  3. 使用Java转换xslt时,可以通过 TransformerFactory.newInstance("com.self.SelfConfig",com.self.SelfConfig.class.getClassLoader()),其中 com.self.SelfConfig 是继承自 TransformerFactoryImpl,覆盖了其 newTemplatesHandlers() 方法的类。
  4. 在maven中使用java编译时,出现 Compilation failed:internal java compiler error,信息中有Information:java:javacTask:源发行版1.8需要目标发行版1.8。这是因为maven默认的编译版本不是1.8,修改pom.xml:
  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <configuration>
                  <source>1.8</source>
                  <target>1.8</target>
              </configuration>
          </plugin>
      </plugins>
  </build>
  1. 引入 slf4j jar 包时,出现: java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory 可能的原因是其他jar包中包含的 slf4j-api.jar 的版本比较低,解决方案是查找引入的jar包文件,哪一个包使用的 slf4j-api 版本比较低,如果是 maven,可以使用如下方式去掉低版本的jar:
     <exclusions>
       <exclusion>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
       </exclusion>
    
  1. eclipse 不能正确引用jar文件。 在jar文件上右键 -> Build Path -> add to path
  2. 使用 IDEA 编译时出现 java: 未结束的字符串文字 错误。首先将 file encoding 修改为正确的编码,其次将 .idea/encodings.xml 文件中的编码修改正确。

JavaScript

  1. 在ipad上通过jquery绑定的click事件不生效,解决方法:

    $(document).bind("click touchstart", function(){})
    
  2. 使用java拼接json字符串时,不能用\n, 否则JavaScript不会识别。

  3. 使用 zepto 时,如果 zepto 中压缩了 fx_methods.js,那么使用 show()hide() 方法时,会在元素上加上一些动画类的属性,导致样式出问题。

  4. 在定义一系列变量时,可能会随手如下定义:

var container = $("id"),
  isFirst = isFirst === "true"; // isFirst 为已定义的变量

这样会导致 isFirst 永远等于 false。 因为这相当于:

var isFirst;  // undefined
isFirst = isFirst === "true"
  1. 在计算offsetTop等位置时,元素必须是可见的。

CSS

1.含有画布内容隐藏时,获取画布可能会出现错误。隐藏方式修改为: css3 position: relative; left: 1000px;

通过定位的方式可能会导致页面可以左右滑动或者下方有大片空白。
后来采用的方式是先展示元素,通过js脚本控制元素最后隐藏。
因为js脚本执行可能会有延时或者顺序不可保证,因此使用先展示后隐藏会有问题,因此可以使用设置通过如下方式控制
```css3
height:0;
overflow: hidden;
```
  1. 如果 HTML 中有 <object> 标签未闭合,那么 <object> 标签之后的所有内容都不会展示

linux

  1. /var 目录使用率为100%
  • 使用 du -h --max-depth=1 /var命令查看var下的文件,发现没有占用空间特别大的文件,总量也不够磁盘的100%
  • 使用lsof -n | grep delete 命令查看哪些进程使用了已经删除的文件,这些文件虽然已经删除,但是没有释放空间,解决方法是kill掉进程或者reboot
  • 可能是inode的总量达到磁盘上限,使用df -i查看inode使用情况。如果达到100%,可能是小文件过多,需要找到并清理这些文件
  1. linux 的 shell 脚本。如果是手动使用sh shell.sh执行没有问题,但是使用 crontab 或者 java 等程序调用时,执行错误或者与sh shell.sh 执行不一致。那么可能是环境变量不同所导致的,比如 PATH, 可以通过export PATH=$PATH:... 来解决。但是碰到过一次比较奇怪的问题,使用 sh shell.sh 执行数据查询没问题,但是使用 crontab 执行却总是没有结果。经过一段时间的调试,找问题,终于定位到是编码的问题。在sh shell.sh执行时,$LANG=zh_CN.UTF-8,但是在 crontab 执行时却是 $LANG=en_US,导致查询失败。在代码开头加入 export LANG=zh_CN.UTF-8 解决。
  2. 在使用linux时出现中文乱码,可以修改 /etc/profile 文件,将系统编码更改为 UTF8。
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

修改完成之后执行 . profile 生效 4. 远程连接一个linux机器时,出现

 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
 Someone could be eavesdropping on you right now (man-in-the-middle attack)!
 It is also possible that the RSA host key has just been changed.
 The fingerprint for the RSA key sent by the remote host is 
 ...

这是因为第一次SSH连接时,会生成一个认证,存储在客户端的 known_hosts 中,但是如果服务器重装,认证信息也会更改,就会出现如上错误。可以用如下方式将客户端的认证咨询删除即可:

ssh-keygen -R [服务器IP]

nginx resin

  1. 在nginx+resin的配置中,nginx总是报错:upstream timed out (110: Connection timed out) while reading response header from upstream。 一般情况下是因为resin处理时间过长,没有返回结果。通过配置 nginx的 location 的超时时间来解决

    location / {
         hmux_read_timeout 180;
         # 若为proxy,则改为  proxy_read_timeout 180;
         hmux_pass hmux://resin_add;
    }
    
  2. nginx 不能连接上resin,说resin拒绝连接,浏览器访问出现502错误 解决方案:查看resin配置文件resin.xml或resin.conf,看配置的host是否与nginx配置的相同,端口号是否一致

      <cluster>
        <srun server-id="" host="localhost" port="8080"/>
      </cluster>
    
  3. resin启动失败,查看日志,有java.net.UnknownHostException,编辑/etc/hosts文件,配置相应的host即可

tomcat

tomcat 的 catalina.out 日志不会自动切分,可以使用 cronolog 进行切分。

安装:yum install cronolog 修改 tomcat/bin/catalina.sh 文件:

if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out

修改为

if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.log

注释掉

touch "$CATALINA_OUT"

两处都要修改

org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"

修改为

org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
|/usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &

重启 tomcat 查看日志是否成功切分

PHP

  1. php脚本中不能将 “+” 通过urldecode($str)正确解析,需要通过rawurldecode($str)解析
  2. PHP中双引号中的变量会被解析

SQL

  1. 在MySQL插入操作时,抛出java.sql.SQLException: Incorrect string value: '\xE4\xB8\xAD\xE5\x9B\xBD...' for column 'request'异常 该异常是因为数据库表或者字段使用的字符集不支持这种编码,将数据库表或者字段采用的编码集设置成utf8
  2. MySQL 将 datetime 类型数据插入到 date 的列中时,会抛出 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'create_time' at row 1 异常,但是数据会正常插入。

Other

  1. 换个角度思考问题,往往能更好地解决问题。
  2. resin 出现validating indexes due to unclean shutdown.错误时,可以将resin安装目录下的 resin-data 文件夹整体删除。
  3. 在从其他地方拷贝代码,重新开trunk时,碰到The working copy at '...' is too old (format 10) to work with client version '...'. You need to upgrade the working copy first。这是因为拷贝的代码中含有 .svn 目录,导致版本的问题,删除目录下的 .svn 才能解决
  4. 在xslt中,如果含有未定义的template,但是未使用,可能会出现千奇百怪的错误。比如说if判断不对,select的元素遍历不对。

JSP

  1. JSP执行莫名失败,不报错。可能是变量名称定义重复。可以通过在外层加一个大括号,将变量的定义分离开来
  2. 在使用JSP的out.write()返回内容时,需要用out.flush()将缓存中的内容刷新到返回体中
local_offer #other