有时候碰到问题,只知道自己以前解决过。如何解决的,却是一点也想不起来了。故在此记录下,碰到过的问题,以待后续会用到。
Java
- 在java中,对于读取文件乱码,可以通过以下方式来指定文件的编码
new InputStreamReader(new FileInputStream(file), "GBK")
或者Files.newBufferedReader(path, StandardCharsets.UTF_8)
Cookie rejected [...]
对于 Cookie rejected ,可能是机器配置了域名,但是没有使用域名访问机器。- 使用Java转换xslt时,可以通过
TransformerFactory.newInstance("com.self.SelfConfig",com.self.SelfConfig.class.getClassLoader())
,其中com.self.SelfConfig
是继承自TransformerFactoryImpl
,覆盖了其newTemplatesHandlers()
方法的类。 - 在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>
- 引入 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>
- eclipse 不能正确引用jar文件。 在jar文件上右键 -> Build Path -> add to path
- 使用 IDEA 编译时出现
java: 未结束的字符串文字
错误。首先将 file encoding 修改为正确的编码,其次将.idea/encodings.xml
文件中的编码修改正确。
JavaScript
在ipad上通过jquery绑定的click事件不生效,解决方法:
$(document).bind("click touchstart", function(){})
使用java拼接json字符串时,不能用
\n
, 否则JavaScript不会识别。使用 zepto 时,如果 zepto 中压缩了 fx_methods.js,那么使用
show()
或hide()
方法时,会在元素上加上一些动画类的属性,导致样式出问题。在定义一系列变量时,可能会随手如下定义:
var container = $("id"),
isFirst = isFirst === "true"; // isFirst 为已定义的变量
这样会导致 isFirst
永远等于 false
。 因为这相当于:
var isFirst; // undefined
isFirst = isFirst === "true"
- 在计算offsetTop等位置时,元素必须是可见的。
CSS
1.含有画布内容隐藏时,获取画布可能会出现错误。隐藏方式修改为: css3 position: relative; left: 1000px;
通过定位的方式可能会导致页面可以左右滑动或者下方有大片空白。
后来采用的方式是先展示元素,通过js脚本控制元素最后隐藏。
因为js脚本执行可能会有延时或者顺序不可保证,因此使用先展示后隐藏会有问题,因此可以使用设置通过如下方式控制
```css3
height:0;
overflow: hidden;
```
- 如果 HTML 中有
<object>
标签未闭合,那么<object>
标签之后的所有内容都不会展示
linux
/var
目录使用率为100%
- 使用
du -h --max-depth=1 /var
命令查看var下的文件,发现没有占用空间特别大的文件,总量也不够磁盘的100% - 使用
lsof -n | grep delete
命令查看哪些进程使用了已经删除的文件,这些文件虽然已经删除,但是没有释放空间,解决方法是kill
掉进程或者reboot - 可能是
inode
的总量达到磁盘上限,使用df -i
查看inode
使用情况。如果达到100%,可能是小文件过多,需要找到并清理这些文件
- 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
解决。 - 在使用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
在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; }
nginx 不能连接上resin,说resin拒绝连接,浏览器访问出现502错误 解决方案:查看resin配置文件resin.xml或resin.conf,看配置的
host
是否与nginx配置的相同,端口号是否一致<cluster> <srun server-id="" host="localhost" port="8080"/> </cluster>
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
- php脚本中不能将 “+” 通过
urldecode($str)
正确解析,需要通过rawurldecode($str)
解析 - PHP中双引号中的变量会被解析
SQL
- 在MySQL插入操作时,抛出
java.sql.SQLException: Incorrect string value: '\xE4\xB8\xAD\xE5\x9B\xBD...' for column 'request'
异常 该异常是因为数据库表或者字段使用的字符集不支持这种编码,将数据库表或者字段采用的编码集设置成utf8
- MySQL 将
datetime
类型数据插入到date
的列中时,会抛出com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'create_time' at row 1
异常,但是数据会正常插入。
Other
- 换个角度思考问题,往往能更好地解决问题。
- resin 出现
validating indexes due to unclean shutdown.
错误时,可以将resin安装目录下的 resin-data 文件夹整体删除。 - 在从其他地方拷贝代码,重新开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
才能解决 - 在xslt中,如果含有未定义的template,但是未使用,可能会出现千奇百怪的错误。比如说if判断不对,select的元素遍历不对。
JSP
- JSP执行莫名失败,不报错。可能是变量名称定义重复。可以通过在外层加一个大括号,将变量的定义分离开来
- 在使用JSP的
out.write()
返回内容时,需要用out.flush()
将缓存中的内容刷新到返回体中