ConfigParser读取properties

ConfigParser读取properties文件时,properties文件必须有默认的头,例如[default],如果没有会报错。

因为ConfigParser默认是读取ini格式文件,ini文件必须有section header。properties虽然也是key=value格式,但是不强制section header。

解决方式是读取内容后手动加上header,然后交给ConfigParser解析。

1
2
3
4
content = "[default]\n" + open(bathPath + "\\" + file).read()
config = ConfigParser(allow_no_value=True)
config.read_string(content)
value = config.get('default', key)

英文键盘日语布局解决方案

问题描述

英文的键盘,在日文输入法下,布局是按照日文的布局。这导致很多符号与常用的不一样,比如@。

解决方法

final无法阻止数组值变换

final是引用不可变,值还是可以改变的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class App {

public static final String[] array = {"1", "2"};

public static void main(String[] args) throws Exception {

for (int i = 0; i < array.length; i ++) {
System.out.print(array[i] + " ");
}
System.out.print("\n");
array[0] = "3";
for (int i = 0; i < array.length; i ++) {
System.out.print(array[i] + " ");
}

}
}
// 输出结果
// 1 2
// 3 2

web.xml中load-on-startup的作用

  1. load-on-startup 元素标记容器是否应该在web应用程序启动的时候就加载这个servlet,(实例化并调用其init()方法)。
  2. 它的值必须是一个整数,表示servlet被加载的先后顺序。
  3. 如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
  4. 如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。

TortoiseGit中known changes与unknown changes区别

示意图

官方介绍

known changes - This allows remote repository to accept a safer non-fast-forward push. This can cause the remote repository to lose commits; use it with care. This can prevent from losing unknown changes from other people on the remote. It checks if the server branch points to the same commit as the remote-tracking branch (known changes). If yes, a force push will be performed. Otherwise it will be rejected. Since git does not have remote-tracking tags, tags cannot be overwritten using this option. This passes –force-with-lease option of git push command.

unknown changes - This allows remote repository to accept an unsafe non-fast-forward push. This can cause the remote repository to lose commits; use it with care. This does not check any server commits, so it is possible to lose unknown changes on the remote. Use this option with Include Tags to overwrite tags. This passes the traditional –force option of git push command.

简单理解

unknown changes 等价于--force,强行提交时,可能覆盖团队成员在此期间推送的所有更改。

known changes 等价于--force-with-lease,使用此参数推送,如果远端有其他人推送了新的提交,那么推送将被拒绝。该命令解决的是本地仓库不够新时,依然覆盖了远端新仓库的问题,如果执意想要覆盖远端提交,只需要先 fetch 再push,它也不会拒绝的。

Python报错UnicodeDecodeError

背景

Python IO读取文件时报错UnicodeDecodeError: ‘gbk’ codec can’t decode byte...

错误原因

如同报错信息,Unicode解码失败。根本原因是文件中有汉字/日文等其他文字不能用gbk打开。

解决方法

利用utf-8格式打开

1
file = open(filename, encoding="utf8")

git stash误删除后找回

背景

stash list在脑子不清醒的时候误删除了,要找回内容。

解决步骤

git fsck –lost-found

(列出删除的commit)

git show + <sha>

逐个commit查看,直到找到误删的commit。

3 git merge + <sha>

找回误删除的代码。

4 git reset

如果不打算提交,还原索引至上一版本。