所有由霜月发布的文章

天使综合征的描述 (description for Angelman Syndrome)

Angelman Syndrome又被称作天使综合征,天使人综合征,港台一般称作天使人症候群,是一种复杂的遗传性疾病,主要影响神经系统。这种情况的特征包括发育迟缓,智力残疾,严重的言语障碍以及运动和平衡问题(共济失调)。受影响最大的儿童也有复发性癫痫发作(癫痫)和头部小(小头畸形))。延迟发育在6至12个月时变得明显,其他常见体征和症状通常出现在儿童早期。

患有Angelman综合症的儿童通常具有快乐,兴奋的风度,经常微笑,笑声和手拍动作,所以又被称为快乐玩偶综合征。多动,短暂的注意力和对水的迷恋是常见的。受影响最大的儿童也难以入睡,需要的睡眠时间少于平时。

随着年龄的增长,患有Angelman综合征的人变得不那么兴奋,而且睡眠问题往往会有所改善。然而,受影响的个体在其一生中仍然存在智力残疾,严重的言语障碍和癫痫发作。患有Angelman综合征的成年人具有独特的面部特征,可被描述为“ 粗糙的“其他常见的特征包括异常白皙的皮肤和浅色的头发并且脊柱的侧向弯曲异常(脊柱侧凸)。患有这种疾病的人的预期寿命似乎接近正常。

此病的出现概率为每12,000到20,000人中有1人。

解决邮件javax.mail发送邮件的问题unable to find valid certification path to requested target

问题的根本是:

缺少安全证书时出现的异常。

解决问题方法:

将你要访问的webservice/url….的安全认证证书导入到客户端即可。

以下是获取安全证书的一种方法,通过以下程序获取安全证书

 

/*
* Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* – Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* – Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* – Neither the name of Sun Microsystems nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS
* IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;

public class InstallCert {

public static void main(String[] args) throws Exception {
String host;
int port;
char[] passphrase;
if ((args.length == 1) || (args.length == 2)) {
String[] c = args[0].split(“:”);
host = c[0];
port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
String p = (args.length == 1) ? “changeit” : args[1];
passphrase = p.toCharArray();
} else {
System.out
.println(“Usage: java InstallCert <host>[:port] [passphrase]”);
return;
}

File file = new File(“jssecacerts”);
if (file.isFile() == false) {
char SEP = File.separatorChar;
File dir = new File(System.getProperty(“java.home”) + SEP + “lib”
+ SEP + “security”);
file = new File(dir, “jssecacerts”);
if (file.isFile() == false) {
file = new File(dir, “cacerts”);
}
}
System.out.println(“Loading KeyStore ” + file + “…”);
InputStream in = new FileInputStream(file);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(in, passphrase);
in.close();

SSLContext context = SSLContext.getInstance(“TLS”);
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf
.getTrustManagers()[0];
SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
context.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory factory = context.getSocketFactory();

System.out
.println(“Opening connection to ” + host + “:” + port + “…”);
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
socket.setSoTimeout(10000);
try {
System.out.println(“Starting SSL handshake…”);
socket.startHandshake();
socket.close();
System.out.println();
System.out.println(“No errors, certificate is already trusted”);
} catch (SSLException e) {
System.out.println();
e.printStackTrace(System.out);
}

X509Certificate[] chain = tm.chain;
if (chain == null) {
System.out.println(“Could not obtain server certificate chain”);
return;
}

BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));

System.out.println();
System.out.println(“Server sent ” + chain.length + ” certificate(s):”);
System.out.println();
MessageDigest sha1 = MessageDigest.getInstance(“SHA1”);
MessageDigest md5 = MessageDigest.getInstance(“MD5″);
for (int i = 0; i < chain.length; i++) {
X509Certificate cert = chain[i];
System.out.println(” ” + (i + 1) + ” Subject ”
+ cert.getSubjectDN());
System.out.println(” Issuer ” + cert.getIssuerDN());
sha1.update(cert.getEncoded());
System.out.println(” sha1 ” + toHexString(sha1.digest()));
md5.update(cert.getEncoded());
System.out.println(” md5 ” + toHexString(md5.digest()));
System.out.println();
}

System.out
.println(“Enter certificate to add to trusted keystore or ‘q’ to quit: [1]”);
String line = reader.readLine().trim();
int k;
try {
k = (line.length() == 0) ? 0 : Integer.parseInt(line) – 1;
} catch (NumberFormatException e) {
System.out.println(“KeyStore not changed”);
return;
}

X509Certificate cert = chain[k];
String alias = host + “-” + (k + 1);
ks.setCertificateEntry(alias, cert);

OutputStream out = new FileOutputStream(“jssecacerts”);
ks.store(out, passphrase);
out.close();

System.out.println();
System.out.println(cert);
System.out.println();
System.out
.println(“Added certificate to keystore ‘jssecacerts’ using alias ‘”
+ alias + “‘”);
}

private static final char[] HEXDIGITS = “0123456789abcdef”.toCharArray();

private static String toHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 3);
for (int b : bytes) {
b &= 0xff;
sb.append(HEXDIGITS[b >> 4]);
sb.append(HEXDIGITS[b & 15]);
sb.append(‘ ‘);
}
return sb.toString();
}

private static class SavingTrustManager implements X509TrustManager {

private final X509TrustManager tm;
private X509Certificate[] chain;

SavingTrustManager(X509TrustManager tm) {
this.tm = tm;
}

public X509Certificate[] getAcceptedIssuers() {
throw new UnsupportedOperationException();
}

public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
throw new UnsupportedOperationException();
}

public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
this.chain = chain;
tm.checkServerTrusted(chain, authType);
}
}

}

编译InstallCert.java,然后执行:java InstallCert hostname,比如:
java InstallCert www.twitter.com
会看到如下信息

java InstallCert www.twitter.com
Loading KeyStore /usr/java/jdk1.6.0_16/jre/lib/security/cacerts…
Opening connection to www.twitter.com:443…
Starting SSL handshake…

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1476)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:846)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:815)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1038)
at InstallCert.main(InstallCert.java:63)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:221)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:145)
at sun.security.validator.Validator.validate(Validator.java:203)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:172)
at InstallCert$SavingTrustManager.checkServerTrusted(InstallCert.java:158)
at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl.java:320)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:839)
… 7 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:236)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:194)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:216)
… 13 more

Server sent 2 certificate(s):

1 Subject CN=www.twitter.com, O=example.com, C=US
Issuer CN=Certificate Shack, O=example.com, C=US
sha1 2e 7f 76 9b 52 91 09 2e 5d 8f 6b 61 39 2d 5e 06 e4 d8 e9 c7
md5 dd d1 a8 03 d7 6c 4b 11 a7 3d 74 28 89 d0 67 54

2 Subject CN=Certificate Shack, O=example.com, C=US
Issuer CN=Certificate Shack, O=example.com, C=US
sha1 fb 58 a7 03 c4 4e 3b 0e e3 2c 40 2f 87 64 13 4d df e1 a1 a6
md5 72 a0 95 43 7e 41 88 18 ae 2f 6d 98 01 2c 89 68

Enter certificate to add to trusted keystore or ‘q’ to quit: [1]

输入1,回车,然后会在当前的目录下产生一个名为“ssecacerts”的证书。

 

 

将证书拷贝到$JAVA_HOME/jre/lib/security目录下,或者通过以下方式:

no manifiest section for signature file entry com/microsoft/sqlserver/jdbc/InputStreamGetterArgs.class

Exception in thread “main” java.lang.SecurityException: invalid SHA1 signature file digest for com/microsoft/sqlserver/jdbc/SQLServerException.class
插件打成的jar包运行出现这个异常,异常处理办法

1、把源sqljdbc.jar驱动解压到sqljdbc目录

2、删除 sqljdbc\META-INF\目录中出mainfest.mf,zigbert.rsa 以外的文件。

3、修改 sqljdbc\META-INF\目录中的mainfest.mf ,保留第一行,其余删除

4、重新打包:进入sqljdbc目录,执行:jar cvf sqljdbc.jar . 注意这最后的一个点号不能掉(有空格)

5、将新打包的文件加入项目工程中即可。

重新打包运行,OK

他山之石,常用工具

常用软件

https://bis.lanzouq.com/b0nyin35c密码:6666

chrome:

https://www.google.com/intl/en/chrome/browser/desktop/index.html?standalone=1

Snipaste

https://dl.snipaste.com/win-x64-cn

everything

https://www.voidtools.com/zh-cn/downloads/

 

SwitchyOmega
SQLPROMPT_reg
HWIDGEN
KMS
FineReport7.1.1-CN M4c875J6tR8N

google-access-helper-2.3.0

https://w3techs.com(查询网站信息)

文字内容搜索工具FileLocator Pro

ja-netfilter.zip

wps:https://it.nwpu.edu.cn/xzzq/zbhrjxz.htm

 

IDEA 打包 java 成可执行的jar文件

1,在项目上鼠标右键 –> Open Module Settings

2, Artifacts –> + –> JAR –> From modules with dependencies…

3, Main Class是你这个项目(脚本)的主方法,就是要运行的类,选一个

4,如下图,设置 META-INF/MANIFEST.MF

!!!!!切记,不能用默认的(起码我用默认的是不成功的)!!!!!

6,选中你这个项目的根目录,一定要放在根目录下

7,设置完是这样子的,关于 JAR files from libraries的两个选项:

选中第一个的话,打完包后是一个jar包

选中第二个的话,打完包后是一个jar包,外带你项目所用的jar包,个人推荐第二个

8,设置完后就可以点OK了

9,这个页面, Build on make打上勾,其他的不一样也没事

10,最后一步, Build Artifacts… –> XXX.jar –> Build

11,复制这里的路径去找jar包就行: java -jar XXX.jar

Linux实例带宽和CPU跑满或跑高排查

https://help.aliyun.com/knowledge_detail/52566.html

使用云服务器 ECS 时,若出现服务的速度变慢,或 ECS 实例突然断开,可以考虑服务器带宽和 CPU 是否有跑满或跑高的问题。若您预先创建报警任务,当带宽和 CPU 跑满或跑高时,系统将自动进行报警提醒。Linux 系统下,您可以按如下步骤进行排查:

  1. 定位问题。找到影响带宽和 CPU 跑满或跑高的具体进程。
  2. 分析处理。排查影响带宽和 CPU 跑满或跑高的进程是否正常,并分类进行处理。
    • 对于 正常进程:您需要对程序进行优化或者升级服务器配置。
    • 对于 异常进程:您可以手动对进程进行查杀,也可以使用第三方安全工具去查杀。

本文相关配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试。其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档。

如果云服务器 ECS Linux 系统的 CPU 持续跑高,则会对系统稳定性和业务运行造成影响。本文对 CPU 占用率较高问题的排查分析做简要说明。

CPU 跑满或跑高的问题定位

若云服务器 ECS 的 CPU 持续跑高,会对系统的稳定性和业务运行造成影响。Linux 系统下,查看进程的常用命令如下:

  • ps -aux
  • ps -ef
  • top

Linux 系统中,通常使用 top 命令来查看系统的负载问题,并定位耗用较多 CPU 资源的进程。

操作步骤

  1. 通过控制台管理终端连接到 ECS 实例,参见使用远程连接功能连接 ECS 实例。

    说明:资源负载异常时,通常无法通过 SSH 进行远程连接,建议您通过控制台管理终端进行连接。

  2. 通过 top 命令查看系统当前的运行情况。
    1. top - 17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05
    2. Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie
    3. %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.1 st
    4. KiB Mem: 1016656 total, 946628 used, 70028 free, 169536 buffers
    5. KiB Swap: 0 total, 0 used, 0 free. 448644 cached Mem
    6. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    7. 1 root 20 0 41412 3824 2308 S 0.0 0.4 0:19.01 systemd
    8. 2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd

    针对负载问题,您只需关注回显的第一行和第三行信息,详细说明如下。

    • top 命令的第一行显示的内容 17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05依次为 系统当前时间 、系统到目前为止已运行的时间、当前登录系统的用户数量、系统负载,这与直接执行 uptime 命令查询结果一致。
    • top 命令的第三行会显示当前 CPU 资源的总体使用情况,下方会显示各个进程的资源占用情况。
  3. 通过字母键 P,可以对 CPU 使用率进行倒序排列,进而定位系统中占用 CPU 较高的进程。

    说明:通过字母键 M, 您可以对系统内存使用情况进行排序。如果有多核 CPU,数字键 1 可以显示每核 CPU 的负载状况。

  4. 通过 ll /proc/PID/exe 可以查看每个进程 ID 对应的程序文件。

CPU 跑满或跑高的分析处理

CPU 的跑满或跑高,在确认具体的进程结果后,针对异常的进程,您需要通过 top 命令将其终止;而对于 kswapd0 进程导致的内存不足等问题,您需要对系统进行规格的升级或程序的优化。

使用 top 直接终止 CPU 消耗较大的进程

您可以直接在 top 运行界面快速终止相应的异常进程。操作步骤如下:

  1. 若您想要终止某个进程,只需按下小写的 k 键。
  2. 输入想要终止的进程 PID (top 输出结果的第一列)。例如,若您想要终止 PID 为 86 的进程,输入 86 后按回车即可。
  3. 操作成功后,界面会出现类似 Send pid 86 signal [15/sigterm] 的提示信息。按回车确认即可。

kswapd0 进程占用导致 CPU 较高

操作系统都用分页机制来管理物理内存,系统会把一部分硬盘空间虚拟成内存使用。由于内存的速度要比磁盘快得多,所以系统要按照某种换页机制将不需要的页面换到磁盘中,将需要的页面调到内存中。

kswapd0 是虚拟内存管理中负责换页的进程,当服务器内存不足的时候 kswapd0 会执行换页操作,这个换页操作是十分消耗主机 CPU 资源的。操作步骤如下:

  1. 通过 top 命令查看 kswapd0 进程。
  2. 检查该进程是否持续处于非睡眠状态,且运行时间较长。若是,可以初步判定系统在持续地进行换页操作,kswapd0 进程占用了系统大量 CPU 资源。

    1

  3. 您可以通过 free 、ps 等指令进一步查询系统及系统内进程的内存占用情况,做进一步排查分析。
  4. 针对系统当前内存不足的问题,您可以重启 Apache,释放内存。

    说明:从长远的角度来看,您需要对内存进行升级。

带宽跑满或跑高的分析处理

对于正常进程导致的带宽跑满或跑高的问题,需要对服务器的带宽进行升级。对于异常进程,有可能是由于恶意程序问题,或者是部分 IP 恶意访问导致,也可能是服务遭到了 CC 攻击。

通常情况下,您可以使用 iftop 工具或 nethogs 查看流量的占用情况,进而定位到具体的进程。

使用 iftop 工具排查

  1. 在服务器内部安装 iftop 流量监控工具。
    1. yum install iftop -y

    2

  2. 服务器外网带宽被占满时,如果通过远程无法登陆,可通过阿里云终端管理进入到服务器内部,运行下面命令查看流量占用情况:
    1. iftop -i eth1 -P

    注意:-P 参数将会显示请求端口。执行 iftop -i eth0 -P 命令,可以查看通过服务器哪个端口建立的连接,以及内网流量。举例如下:

    3

    在上图中,您可以查看到流量高耗的是服务器上 53139 端口和 115.205.150.235 地址建立的连接。

  3. 执行 netstat 命令反查 53139 端口对应的进程。
    1. netstat -tunlp |grep 53139

    4

  4. 经反查,服务器上 vsftpd 服务产生大量流量,您可以通过停止服务或使用 iptables 服务来对指定地址进行处理,如屏蔽 IP 地址或限速,以保证服务器带宽能够正常使用。

使用 nethogs 进行排查

  1. 在服务器内部安装 nethogs 流量监控工具。
    1. yum install nethogs -y
  2. 通过 nethogs 工具来查看网卡上进程级的流量信息,若未安装可以通过 yum、apt-get 等方式安装。举例如下:
    1. 若 eth1 网卡跑满,执行命令 nethogs eth1。
    2. 查看每个进程的网络带宽情况以及进程对应的 PID。
    3. 确定导致带宽跑满或跑高的具体进程。

      5

  3. 若进程确定是恶意程序,可以通过执行 kill -TERM <PID> 来终止程序。

    说明: 如果是 Web 服务程序,您可以使用 iftop 等工具来查询具体 IP 来源,然后分析 Web 访问日志是否为正常流量。日志分析可以使用 logwatch 或 awstats 等工具进行。

使用 Web 应用防火墙防御 CC 攻击

若您的服务遭受了 CC 攻击,请在 Web 应用防火墙控制台尽快开启 CC 安全防护。

  1. 登录 Web应用防火墙 控制台。
  2. 在 CC 安全防护中,启动状态按钮,并在模式中选择 正常。

    6

idea jsp mysql IDEA 搭建java web项目以及连接Mysql数据库

准备清单:

  1. IDE(IDEA 2018.2)
  2. JDK
  3. MYSQL
  4. TOMCAT
  5. mysql-connector-java-5.1.46.JAR

开发过程

      1. 新建项目
      2. 在工程项目的web目录下的WEB-INF下建立两个文件夹,一个是classes,用于保存程序运行时编译的文件。另一个是lib文件夹,用于存放程序运行时所要存放的外部类。
      3. 配置项目结构以及tomcat。

        a.output目录选择刚才新建的classes目录。

        b.外部类的引用路径选择刚才建的lib文件夹。(选择完弹出的的选择框选择Jar directory)
      4. 将下载的jdbc驱动包放到刚才建的lib文件夹下。
      5. 在src文件夹下建立DBConfig.properties文件.
      6. 新建类(OpenConnection),获取数据库连接。
        package com.amaker.util;
        
        import java.io.IOException;
        import java.sql.Connection;
        import java.sql.DriverManager;
        import java.sql.SQLException;
        import java.util.Properties;
        
        public class OpenConnection {
            public Connection getConnection(){
        
                String driver = null;
                String url = null;
                String user = null;
                String psd = null;
                Connection conn = null;
        
                Properties pro = new Properties();    //新建一个properties实例,用于从DBConfig中拿到连接参数。
                try {
                    pro.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties")); //加载DBConfig文件。
                    driver = pro.getProperty("driver");
                    url = pro.getProperty("url");
                    user = pro.getProperty("user");
                    psd = pro.getProperty("psd");
                } catch (IOException e) {
                    e.printStackTrace();
                }
        
                try {
                    Class.forName(driver);   //加载jdbc驱动
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
        
                try {
                    conn = DriverManager.getConnection(url,user,psd);  //获取数据库连接
                    conn.setAutoCommit(false);
                    return conn;       //返回一个数据库连接。
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        
                return null;
            }
        }
        

idea 常用快捷键

快捷键 中文说明
Alt + Enter 展示当前当前光标所在代码,可以变化的扩展操作
Alt + Insert 自动生成某个类的
Getters, Setters, Constructors, hashCode/equals, toString 等代码。(常用)
Alt + Q 展示包含当前光标所在代码的父节点信息,比如在
java 方法中调用,就会展示方法签名信息。
Ctrl + / 对单行代码,添加或删除注释。分为两种情况:如果只是光标停留在某行,那么连续使用该快捷键,会不断注释掉下一行的代码;如果选定了某行代码(选定了某行代码一部分也算这种情况),那么连续使用该快捷键,会在添加或删除该行注释之间来回切换。(常用)
Ctrl + Alt + I 按照缩进的设定,自动缩进所选择的代码段。
Ctrl + Alt + L 格式化代码 (常用)
Ctrl + Alt + O 去除没有实际用到的包,这在
java 类中特别有用。(常用)
Ctrl + Alt + T 自动生成具有环绕性质的代码,比如:if..else,try..catch,
for, synchronized 等等,使用前要先选择好需要环绕的代码块。(常用)
Ctrl +
C 或 Ctrl + Insert
拷贝当前代码。 (常用)
Ctrl +
D
复制当前选中的代码。(常用)
Ctrl +
Delete
删除从当前光标所在位置开始,直到这个单词的结尾的内容。
Ctrl +
Enter
当前代码行与下一行代码之间插入一个空行,原来所在的光标不变。(常用)
Ctrl +
F4
关闭当前标签页。
Ctrl +
mouse
跳进到某个类或者方法源代码中进行查看。(常用)
Ctrl +
NumPad(+/-)
展开或收缩代码段。 (常用)
Ctrl +
O
展示该类中所有覆盖或者实现的方法列表,注意这里是字母小写的
O!
Ctrl +
P
在某个方法中,调用该按键后,会展示出这个方法的调用参数列表信息。
Ctrl +
Q
展示某个类或者方法的 API
说明文档
Ctrl +
Shift + /
对代码块,添加或删除注释。它与
Ctrl + / 的区别是,它只会在代码块的开头与结尾添加注释符号!(常用)
Ctrl +
Shift + ]/[
从当前光标所在位置开始,一直选择到当前光标所在代码段起始或者结束位置。
Ctrl +
Shift + Enter
代码补全后,自动在代码末尾添加分号结束符
Ctrl +
Shift + J
把下一行的代码接续到当前的代码行。
Ctrl +
Shift + NumPad(-)
收缩所有代码段。
Ctrl +
Shift + NumPad(+)
展开所有代码段。
Ctrl +
Shift + Space
在列出的可选项中只显示出你所输入的关键字最相关的信息。(常用)
Ctrl +
Shift + U
所选择的内容进行大小写转换。。(常用)
Ctrl +
Shift + V
从之前的剪切或拷贝的代码历史记录中,选择现在需要粘贴的内容。(常用)
Ctrl +
Shift + W
是 Ctrl + W
的反向操作,多次触发,代码块会逐级变小,最小变为光标。
Ctrl +
Space
补全代码,由于经常与操作系统的输入法的切换冲突,所以实际很少用。一般直接在
idea 中开启输入自动补全机制。
Ctrl +
V 或 Shift + Insert
粘贴之前剪切或拷贝的代码。(常用)
Ctrl +
W
选中当前光标所在的代码块,多次触发,代码块会逐级变大。(常用)
Ctrl +
X 或 Shift Delete
剪切当前代码。 (常用)
Ctrl +
Y
删除当前光标所在的代码行。(常用)
Shift
+ Enter
当前代码行与下一行代码之间插入一个空行,原来光标现在处于新加的空行上。(常用)
Shift
+ F6
修改名字。(常用)
Tab /
Shift + Tab
缩进或者不缩进一次所选择的代码段。(常用)
Ctrl +
F
在当前标签页中进行查找,还支持正则表达式哦。(常用)
F3 如果找到了多个查找结果,每调用一次就会跳到下一个结果,很方便哦。
Shift
+ F3
是 F3
的反向操作,即每调用一次就会跳到上一个结果。
Ctrl +
R
在当前标签页中进行替换操作。(常用)
Ctrl +
Shift + F
通过路径查找。(常用)
Ctrl +
Shift + R
通过路径替换。(常用)
Alt +
F7
在当前项目中的使用情况,会打开一个使用情况面板。
Ctrl +
F7
在当前文件中的使用情况,找的内容会低亮显示。
Ctrl +
Shift + F7
在当前文件中的使用情况,找的内容会高亮显示。
Ctrl +
Alt + F7
打开使用情况列表。 (常用)
Ctrl +
F9
编译项目(如果之前有编译过,那么只会编译那些修改的类或者依赖的包)。
Ctrl +
Shift + F9
编译所中的范围(如果在某个类中,那么只会编译当前类)。
Alt +
Shift + F10
会打开一个已经配置的运行列表,让你选择一个后,再运行。
Alt +
Shift + F9
会打开一个已经配置的运行列表,让你选择一个后,再以调试模式运行。
Shift
+ F10
立即运行当前配置的运行实例,这个在单元测试中特别好用。 (常用)
Shift
+ F9
立即以编译模式运行当前配置的运行实例。
Ctrl +
Shift + F10
按照编辑器绑定的文件类型,运行相关的程序。比如一个
html 页面,调用后,会直接打开一个浏览器。
F8 跳到当前代码下一行。 (常用)
F7 跳入到调用的方法内部代码。 (常用)
Shift
+ F7
会打开一个面板,让你选择具体要跳入的类方法,这个在复杂的嵌套代码中特别有用。
Shift
+ F8
跳出当前的类,到上一级。 (常用)
Alt +
F9
让代码运行到当前光标所在处,非常棒的功能。 (常用)
Alt +
F8
打开一个表达式面板,然后进行进一步的计算。
F9 结束当前断点的本轮调试(因为有可能代码会被调用多次,所以调用后只会结束当前的这一次);如果有下一个断点会跳到下一个断点中。(常用)
Ctrl +
F8
在当前光标处,添加或者删除断点。
Ctrl +
Shift + F8
打开当前断点的面板,可以进行条件过滤哦。
Ctrl +
N
打开类查询框。(常用)
Ctrl +
Shift + N
打开文件查询框。(常用)
Ctrl +
Alt + Shift + N
打开文本查询框。
Alt +
右箭头/左箭头
跳到下一个/上一个编辑器标签。
F12 如果当前在编辑窗口,触发后,会跳到之前操作过的工具栏上。
ESC 从工具栏上,再跳回原来的编辑窗口,一般与
F12 配合使用。
Shift
+ ESC
隐藏最后一个处于活跃状态的工具窗口。
Ctrl +
Shift + F4
同时关闭处于活动状态的某些工具栏窗口。
Ctrl +
G
跳转至某一行代码。。(常用)
Ctrl +
E
打开曾经操作过的文件历史列表。
Ctrl +
Alt + 右箭头/左箭头
在曾经浏览过的代码行中来回跳
Ctrl +
Shift + Backspace
跳转到最近的编辑位置(如果曾经编辑过代码)。
Alt +
F1
打开一个类型列表,选择后会导航到当前文件或者内容的具体与类型相关的面板中。
Ctrl +
B 或 Ctrl + 鼠标左键
如果是类,那么会跳转到当前光标所在的类定义或者接口;如果是变量,会打开一个变量被引用的列表。(常用)
Ctrl +
Alt + B
跳转到实现类,而不是接口。(常用)
Ctrl +
Shift + I
打开一个面板,里面包含类代码。
Ctrl +
Shift + B
打开变量的类型所对应的类代码,只对变量有用。
Ctrl +
U
打开方法的超类方法或者类的超类,只对有超类的方法或者类有效。
Alt +
上/下箭头
在某个类中,跳到上一个/下一个方法的签名上。
Ctrl + ]/[ 移动光标到类定义的终止右大括号或者起始左大括号。
Ctrl +
F12
打开类的结构列表。(常用)
Ctrl +
H
打开类的继承关系列表。(常用)
Ctrl +
Shift + H
打开某个类方法的继承关系列表。
Ctrl +
Alt + H
打开所有类的方法列表,这些方法都调用了当前光标所处的某个类方法。(常用)
F2/Shift
+ F2
在编译错误的代码行中来回跳。
F4 打开当前光标所在处的方法或类源码。
Alt +
Home
激活包路径的导航栏。
F11 把光标所处的代码行添加为书签或者从书签中删除。(常用)
Ctrl +
F11
把光标所处的代码行添加为带快捷键的书签或者从快捷键书签中删除。
Ctrl +
[0-9]
跳转到之前定义的快捷键书签。
Shift
+ F11
打开书签列表。(常用)

过桥梯

1.系统增加多联系人支持,以开票抬头为标准,同一开票抬头下所有业务都列在明细中.一采购业务对应一套联系资料,询价,报价,合同时需选择对应的业务.可默认.

2.一开票抬头对应唯一业务员

3.权限关联客户ID,制定转公共策略(订单效力18M,报价效力1M)

对应前面的文章坑区

 

 

一切脱离实际业务的需求都是空谈,就像不谈剂量谈毒性一样

!MESSAGE 从插件调用代码时出现问题:“org.eclipse.core.resources”。

eclipse非正常关闭,再启动时闪退.

查看日志发现空指针错误:!MESSAGE 从插件调用代码时出现问题:“org.eclipse.core.resources”。

 

!ENTRY org.eclipse.core.resources 4 2 2018-07-26 16:29:53.637
!MESSAGE 从插件调用代码时出现问题:“org.eclipse.core.resources”。
!STACK 0
java.lang.NullPointerException
at org.eclipse.ui.activities.WorkbenchActivityHelper.isFiltering(WorkbenchActivityHelper.java:235)
at org.eclipse.ui.internal.ide.IDEWorkbenchActivityHelper$3.resourceChanged(IDEWorkbenchActivityHelper.java:158)
at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:291)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:285)
at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:149)
at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:395)
at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1530)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2353)
at org.eclipse.debug.core.model.Breakpoint.setAttribute(Breakpoint.java:196)
at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.decrementInstallCount(JavaBreakpoint.java:865)
at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.deregisterRequest(JavaBreakpoint.java:275)
at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.removeRequests(JavaBreakpoint.java:779)
at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.removeFromTarget(JavaBreakpoint.java:716)
at org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget.removeAllBreakpoints(JDIDebugTarget.java:1562)
at org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget.cleanup(JDIDebugTarget.java:1518)
at org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget.shutdown(JDIDebugTarget.java:1654)
at org.eclipse.jdt.internal.debug.core.JDIDebugPlugin.stop(JDIDebugPlugin.java:345)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:771)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.stop(BundleContextImpl.java:764)
at org.eclipse.osgi.framework.internal.core.BundleHost.stopWorker(BundleHost.java:510)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.suspend(AbstractBundle.java:566)
at org.eclipse.osgi.framework.internal.core.Framework.suspendBundle(Framework.java:1206)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.decFWSL(StartLevelManager.java:592)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:257)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.shutdown(StartLevelManager.java:215)
at org.eclipse.osgi.framework.internal.core.InternalSystemBundle.suspend(InternalSystemBundle.java:284)
at org.eclipse.osgi.framework.internal.core.Framework.shutdown(Framework.java:692)
at org.eclipse.osgi.framework.internal.core.Framework.close(Framework.java:600)
at org.eclipse.core.runtime.adaptor.EclipseStarter.shutdown(EclipseStarter.java:399)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)

 

解决方案:删除以下文件夹org.eclipse.e4.workbench

\workspace\.metadata\.plugins\org.eclipse.e4.workbench