个人开发知识点收集
个人开发知识点收集
1.java
- tomcat远程调试
set CATALINA_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9527
或者 ./catalina.sh jpda start
- 打包class jar -cvf xxx.jar xxx文件名
- 查询任务管理器命令行信息
wmic process where caption="java.exe" get caption,commandline,ProcessId /value
- 比较字符串内容是否相等,需要使用方法 boolean java.lang.String.equals(Object arg0),直接使用 == 判断的是两个串的地址是否相等。
- jvm加载jar是按照文件名排序后加载的,加载一次后不会重复加载。也就是说程序目录lib中同时存在 TestJar1.jar 和 TestJar2.jar,运行时加载的是TestJar1.jar
- ojdbc 与 Oracle 版本 https://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#01_01
-
Oracle Database version JDBC Jar files specific to the release 18.3 ojdbc8.jar with JDK8, JDK9, JDK10, JDK11 12.2 or 12cR2 ojdbc8.jar with JDK 8 12.1 or 12cR1 ojdbc7.jar with JDK 7 and JDK 8
ojdbc6.jar with JDK 611.2 or 11gR2 ojdbc6.jar with JDK 6, JDK 7, and JDK 8
(Note: JDK7 and JDK8 are supported in 11.2.0.3 and 11.2.0.4 only)
ojdbc5.jar with JDK 5 - Chrome Source 面板中找不到js代码, 在<script> //@ sourceURL=xxx.js </script> xxx.js是在调试时显示的文件名,可以随意取名。
2.javaScript
- ''==0 返回为true ,用全等返回false,对于喜欢用if(xxx){}这种方式,或者喜欢使用三目运算符,需要考虑这些特殊情况。
- replace 是一个很好用的方法,并且支持正则
如果替换内容是一个正则表达式,函数中每一个分组会生成一个参数
dom offsetWidth clientWidth 区别是后者不包含 border
- 鼠标对象 MouseEvent 中 clientX,offsetx,pagex,screenx区别 https://blog.csdn.net/lzding/article/details/45437707
浏览器录屏代码
async function beginRecord() { var stream = await navigator.mediaDevices.getDisplayMedia({ video: true }); var mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9") ? "video/webm; codecs=vp9" : "video/webm"; var mediaRecorder = new MediaRecorder(stream,{ mimeType: mime }); //录制 var chunks = []; mediaRecorder.addEventListener('dataavailable', function(e) { chunks.push(e.data) }) //停止 mediaRecorder.addEventListener('stop', function() { var blob = new Blob(chunks,{ type: chunks[0].type }); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = 'video.webm'; a.click(); }) //手动启动 mediaRecorder.start() }
在开发者工具console调用
3.C#
- linq是一个很好的语法模式,不过语法有时很难记住,如果通过linq查询一个DataTable,下边是一个Linq的分组查询
4.PL/SQL
- 数字类型千分位 格式 'FM999,999,999,999,999,990.00'
- 树形抽数
SELECT f_Parentnodeid, f_externalunitid, LEVEL lvl FROM tb_base_externalunit START WITH f_externalunitid = v_F_EXTERNALUNITID CONNECT BY PRIOR f_Parentnodeid = f_externalunitid
查询oralce字符集
SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET'
防止Select INTO出现找不到数据异常
select count(*) ,max(id) into a, b from xx ;
然后通过 a =0 判断是否有数据,省去找不到数据的异常捕获
substr拆分字符
select substr('abc',level,1) from dual connect by level <= 3
特殊字符分隔拆分
select regexp_substr('0,0,3,4,5,0,7,8,9,10,11,12','[^,]+',1,level)
from dual connect by level<= 12;
查找对象锁sessionId
-- 判断是否存在锁
select * from V$DB_OBJECT_CACHE where name='BUDGET_CONTROL' and locks!='0';
-- 得到SID
select /*+ rule*/ SID from V$ACCESS WHERE object='BUDGET_CONTROL';
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='723';
select a.SID,a.SERIAL#,b.SPID,a.STATUS from v$session a,v$process b where a.SID=723 and a.PADDR=b.ADDR;
alter system kill session '723';
使用listagg 替换wm_concat
select min(m.f_status),
listagg(m.f_planeno, '或') WITHIN group(order by m.f_planetype)
into mStatus, mMoudleName
from tb_production_reportmain m
where m.f_year = mMainData.f_Year
and (m.f_planeno = '飞机参数表' or m.f_planeno = '运力投入计划表');
PLSQL 导入脚本包含&,会认为是变量,可以在sql脚本执行之前执行
set define off;
PLSQL导入脚本,插入数据是日期格式,且值为字符串类型,此时导入脚本要求使用to_date转换为日期类型,可以在sql脚本执行之前执行
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
ORACE 闪回查询
select * from agent as of timestamp sysdate-1
5.BASH
- %~dp0,%cd% 都表示当前bat运行目录
- 0 表示标准输入 1 表示标准输出 2 表示标准错误输出,若bat中出现 2>&1,表示将运行命令中的错误信息,显示到控制台中。符号 < 表示输入,如,cat<1.txt 表示读取1.txt中的内容。 符号 > 表示输出,如: ls>1.txt 表示把ls中数据的内容保存到1.txt中,符号 >> 表示追加,如 ls>>1.txt 表示向文件1.txt中追加本次ls输出内容。
- %0 表示bat文件路径,%~nx0,表示去bat文件名和文件后缀
- 复制文件保持目录结构
- echo F|xcopy ".\old\apps_res\wewe\bbfkdcxtjb.html" ".\new\apps_res\wewe\bbfkdcxtjb.html" /C /Y /Q
- 查找文件占用进程
- 资源监视器,cpu页签,通过关联句柄查询占用文件名,获取到PID,改PID可能是一个子进程,需要查找父进程
- 通过命名 wmic process where processid=上一步得到的PID get parentprocessid
4.SqlServer
- 树形结构查询
with TreeDisplay([ObjectID] ,[JobCode],[SuperiorPostID],[CategoryID],Name,level) as (select ObjectID,[JobCode],[SuperiorPostID],[CategoryID],Name,0 as level from [dbo].[OT_OrgPost] where ObjectID= 'dcd2dee1-c861-474b-9b2c-cc2882f4a858'--开始查询条件 union all --递归条件 select a.ObjectID ,a.[JobCode],a.[SuperiorPostID],a.[CategoryID],a.Name,b.level+1 from [dbo].[OT_OrgPost] a inner join TreeDisplay b on (a.ObjectID=b.[SuperiorPostID])) select * from cte_child;
5.JSON 特殊字符
\n \b \r \t / \,遇到以上字符需要做转义替换处理。
6.XML特殊字符
< > & ' ",遇到以上字符,需要依次转换为 < > & ' "
7.CSS兼容性
IE浏览器都可以识别符号 \9 ,IE6和IE7可识别 * ,IE6还可以是识别 _ ,CSS从上往下,由此可以为不同的浏览器设置不同的样式;
.className{
background:blue; /*非IE浏览器背景变蓝色*/
background:red \9; /*IE8 背景变红色*/
*background:black; /*IE7 背景变黑色*/
_background:orange; /*IE6 背景变橘色*/
}
8.SVN 合并两个仓库
1. 使用vsrsionServer 导出项目dump
2. 建立新仓库,并规划目录
3. 使用命令svnadmin导入到子目录 svnadmin load --parent-dir 新仓库子目录 新仓库 < 备份dump
VsrsionServer 3.9 以后突破15人限制,直接找到 Repositories\htpasswd 文件,用记事本打开,添加一行数据,再修改密码即可
9.完整复制eclipse主题
找到被复制项目空间,将目录中 .metadata\.plugins\org.eclipse.core.runtime\.settings 所有文件复制到目标空间相同位置
10.excel生成字母序列
使用公式 CHAR(ROW(A1)+64) ,然后使用鼠标拖动填充
11.Java乱码处理方案
11. 一个数字存储table行和列
int row=3,col=2,rowNum=5; int temp = row*rowNum+col; row = temp/rowNum; // int 类型相除是不会得到小数的,获取准确值,需要转换成 浮点数 col = remp%rowNum;
12.请求伪造ip
x-forwarded-for: 127.0.0.1
x-remote-IP: 127.0.0.1
x-remote-ip: 127.0.0.1
x-client-ip: 127.0.0.1
x-client-IP: 127.0.0.1
X-Real-IP: 127.0.0.1
client-IP:127.0.0.1
x-originating-IP:127.0.0.1
x-remote-addr:127.0.0.1
RFC3986 保留关键字符 空格 " # < > \ ^ ` { | }
if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i == 35 || i == 60 || i == 62 || i == 92 || i == 94 || i == 96 || i == 123 || i == 124 || i == 125) { IS_NOT_REQUEST_TARGET[i] = true; }
- 转载请注明来源
- 作者:杨瀚博
- QQ:464884492