跳到主要内容

收获

### 2021/12/17

HTTP 413 FULL head 错误
两种解决方法,第一种方法无效时,可以采用第二种方法
1)有可能是请求头中 Cookie 太大,清除本站点的 Cookie 即可。
2)不要对大参数使用 HEAD 或者 GET 请求,应该改为 POST 请求。

#### 2021/10/14

使用 notepad++ 的替换功能将文件中的 2021-10-14 格式的字符串转为 2021/10/14 格式
CTRL + F 快捷键
查找目标: ([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) 匹配 2021-10-14 的正则表达式
替换为: \1\/\2\/\3 \1 表示匹配到的第一个分组 \2 \3 ... 依次类推 \/ 转移 斜杠字符。

#### 2021/09/22

项目上在进行保存数据的时候界面卡住了,应该如何定位问题?
1. 打开浏览器 "开发者工具",查看控制台是否有异常堆栈, 前台 js 出现异常,就不会继续往下执行,表现为界面卡住了。
2. 查看哪个请求卡住了,查看后台代码。
3. 输出 JVM 的堆栈信息,判断卡在了哪一步。输出 JVM 堆栈信息的工具有:jstack、jmap 等。
4. 如果该请求进行了数据库操作,排查下数据库是否进行了死锁。

#### 2021/09/17

linux 查看当前用户的计划任务 $ crontab -l
linux 上的 cron 表达式和 java 中的不同
* * * * * command
分钟(0-59) 小时(0-23) 天(1-31) 月(1-12) 星期(0-6,0 表示星期天) 命令

#### 2021/09/13

卫生项目上提了个 oracle 问题
The Network Adapter could not establish the connection...
http://blog.itpub.net/29734436/viewspace-1710661/
http://blog.itpub.net/40239/viewspace-707008/
数据库版本 64-bit Windows:Version 11.2.0.1.0
启动 tnslsnr 时报错:
TNS-12532: TNS : 无效的参数
TNS-12560: TNS: 协议适配器错误
TNS-00502: 参数无效
64-bit Windows Erroe:22:Invalid argument
解决方案
重启数据库所在的机器

#### 2021/08/27

IE 不支持带参数的 setTimout方法 即 setTimoe(funcName,1000,funcParams...);
可以通过 setTimeout(function(){funcName(funcParams...)},1000); 来实现这个效果

#### 2021/07/29

在日常开发中,我们总会碰到生产环境的代码以开发环境的不一致,怎么找出两个文件的不同之处呢?
我们可以使用 jd-gui.exe 将生产环境的 .class 文件反编译成 java 文件,如果我们这时使用 eclipse
的 Compare With > each other 的话,就会发现有很多处差异,这是因为开发环境的代码会有注释换行等
这时候我们可以将开发环境的代码编译之后再反编译,并且格式化(ctrl+shift+F),再使用
Compare With > each other 就可以很明显的比较出两个文件的差异了。

#### 2021/07/23

##### SimpleDateFormat

format、parse 方法都是线程不安全的,因此需要注意下。
对一些全局静态私有化的对象,应该注意他是否为线程安全的。不然在多并发下会出现问题。

#### 2021/07/20

##### GIT

- 查看安装路径

> 1、cmd 中输入 where git
> 2、gitbash 中输入 where git

#### 2021/07/19

##### 数据库中的空字符串"" 与 null

在 ORACLE 中,空字符串''与 null 是等同的。
在 oracle 中,null 只能用 is 或 is not 来进行判断,使用 =、<>、!= 来判断的话都会返回 false
可以使用下面的SQL来进行校验
SELECT 1 FROM DUAL WHERE '' = NULL;
SELECT 1 FROM DUAL WHERE '' != NULL;
SELECT 1 FROM DUAL WHERE '' <> NULL;

###### chrome 控制台 preview 乱码,但是 console.log() 打印出来信息却是正常的。

原因:chrome 是根据 response 的 ContentType 字段来判断编码格式的。
解决:在后台添加 resp.setContentType("text/html;charset=UTF-8");

###### 编码格式(请求带中文)

###### POST

1、 req.setCharacterEncoding("UTF-8"); 只对 post 请求有效,且需要在所有getParameter方法调用之前调用。

为什么需要在所有getParameter方法调用之前调用呢?
因为 org.apache.catalina.connector.Request.getParameter() 方法中会根据 parametersParsed(参数是否被解析过)来判断是否继续解析。
public String getParameter(String name) {
if (!parametersParsed) {
parseParameters();
}
return coyoteRequest.getParameters().getParameter(name);
}

2、 在 spring 中可以使用 org.springframework.web.filter.CharacterEncodingFilter 来设置请求体的编码格式。

forceEncoding=false 时(默认为false),req没有指定 Content-type 或 Content-type 没有指定编码格式时,filter 就会将这个请求的编码格式设置为encoding的值
forceEncoding=false 时,filter 就会将这个请求的编码格式设置为encoding的值。

###### GET

1、 String para_utf8=new String(para.getByte("ISO-8859-1"),"UTF-8");
2、 在 tomcat 的 server 中配置 URIEncoding="UTF-8"。tomcat7以前默认编码为 ISO8859-1, 从tomcat8开始默认为 UTF-8

URIEncoding:
useBodyEncodingForURI:

#### 2021/07/02

mklink 命令 (需要管理员权限)
- 硬链接 (只能用于文件,在用于文件夹时会提示无法访问)
mklink [/h] 'link' 'target'
cmd /c mklink 'b.txt' 'a.txt'
相当于给文件多加一个入口,a.txt b.txt指向的是硬盘中的同一块区域,
因此这两个文件的内容是完全一样的,
编辑任何一个文件都会影响到另一文件,
当删除其中一个文件,只是删除这个文件其中一个“入口”,
要两个文件都删除,文件系统才会标志这块硬盘区域上的文件被删除。

- 符号链接
文件 cmd /c mklink 'link文件' 'target文件'
文件夹 cmd /c mklink /d 'link文件夹' 'target文件夹'

符号链接是在文件系统上实现的链接,
对操作系统上大多数软件来说是透明的,
也就是说,当软件访问符号链接时,
其实际上是在访问该符号链接所指向的文件(夹)

#### 2021/06/30

.gitignore 的配置问题(看实例即可)
/logs
/target
/workdir_IS_UNDEFINED
#排除所有.svn目录包括子目录
.svn/
#以bat的形式link其他工程的代码
/src*
!/src
!/src-overwrite
/src/com/esen/i/calc
/test*
!/test
#open目录只忽略es包和Event.java
/open/com/esen/open/events/es
/open/com/esen/open/events/Event.java
pom-build.xml
readme.txt
/pages/WEB-INF/classes
/pages/WEB-INF/spring
/pages/WEB-INF/xui-taglibs
/pages/ebi
/pages/esmain
/pages/xui
/pages/test
*.jsgz
*.cssgz

#### 2021/06/28

SQL语言分为四大类:数据查询语言(DSL)、数据操纵语言(DML)、数据定义语言(DDL)、数据控制语言(DCL)
DQL
SELECT
FORM
WHERE
DML
INSERT
UPDATE
DELETE
DDL
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
DCL
GRANT
ROLLBACL [WORK] TO [SAVEPOINT] 回退到某一点
COMMIT [WORK] 提交

在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。
在事务提交前,只有操作数据库的这个人才有权看到所做的事情,别人只有在最后
提交完成后才可以看到。
提交数据有三种类型:显示提交、隐式提交和自动提交
1)显示提交
COMMIT;
2)隐式提交:用SQL命令间接完成的提交为隐式提交
ALTER,AUDIT,COMMENT,CONNECT,CREATE,
DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,
QUIT,REVOKE,RENAME
3)自动提交
SET AUTOCOMMIT ON;

https://blog.csdn.net/crazy_mayi12345/article/details/100489275
ORA-01555:snapshot too old

项目上出现这个问题的原因:
delete from WT4_JBZY_XXB d where exists
(select 1 from WSBIRPT52.WT4_JBZY_XXB4_tmp t
WHERE t.BBQ_=d.BBQ_ and t.USERID_=d.USERID_ and t.BTYPE_=d.BTYPE_)

解决方案:增大 undo 表空间

#### 2021/06/22

Cookie 的 HttpOnly 和 secure 属性
HttpOnly:不能被 js 读取,无法使用 document.cookie 打印出 cookie 信息。
secure:如果一个 cookie 被设置了 secure=true,那么这个cookie只能使用HTTPS协议发送给服务器。

在chrome 80版本发布后,对 samesite属性做了如下更下
1、没有设置samesite属性的默认 SameSite=Lax;
2、SameSite=None的cookie则必须设置为Secure,即安全链接。

SSL
采用非对称加密和对称加密
1、客户端向服务端发送请求(443端口),服务端响应公钥
2、客户端接收公钥(会对这个公钥进行校验),生成一个随机数(Client key),用服务端公钥进下加密,发送给服务端
3、服务端用私钥解密,获取 Client key.
4、客户端用 Client Key 加密数据,发送给服务端
5、服务端用 Client Key 解密数据。

#### 2021/06/09

JavaScript
1) // 可以将类数组对象,转换成一个真正的数组对象
var arr = Array.prototype.slice.call(arrayLike);

#### 2021/06/04

注释
1) git 提交代码注释
(BUG、CHG、NEW、IMP、ISSUE) + : + [模块名称] + 简要描述
2) 功能变更或者 BUG 修改注释
1、修改对应的 JIRA 贴时,要注明帖子号 ISSUE:ABI-12345
2、代码有 wiki 说明的,要注明 wiki 号 pageId=12345678
3、修改他人代码的要添加注释
a、添加代码:add by xxxx yyyy.mm.dd
b、注释代码:del by xxxx yyyy.mm.dd
c、修改代码:edit by xxxx yyyy.mm.dd

3) JIRA 关贴的备注
问题原因:
影响范围:
解决时间:
解决版本:

#### 2021/06/01

Node.js
1)node -v // 查看版本
2)npm config ls // 查看配置
NPM (node package manager) 与 Maven 类似

3)package.json package-lock.json
package.json 类比 pom.xml (只锁定大版本号)
package-lock.json 是执行 npm install 之后,自动生成的文件(只会生成一次)
目的是锁定安装时的包的版本号

JavaScript
1)let、const 关键字
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。

#### 2021/05/31

问题:部里说便民的 SQXXXXX 接口请求超时,但是 XT 接口请求正常
原因:部里在请求中附带了一个文件(3M左右),便民系统会对请求解析并输出。
经过测试,记录一个 3M 的字符串需要 20 s.
解决:注释非必要的输出。

#### 2021/05/28

报错:PreparedStatement.setObject(int i,Object obj) 无效的列类型
原因:传入了java.util.Date类型
解决:将 java.util.Date类型 手动转为 java.sql.Date 类型
可以通过 value.getClass().getName() 来判断 Object 的类型
java.sql.Date sqlDate = new java.sql.Date(((java.util.Date)value).getTime());

#### 2021/05/18 卫生

IE 不支持 "?." 语法

#### 2021/05/17 卫生

情况:请求某个页面,提示连接已重置。
客户环境发现不能请求”报表期页面“。经过远程测试发现,连续请求,偶尔会出现请求成功的情况。
原因:请求被拦截