2019年第二季度笔记整理

 

2019-05-17 坑

  • like '%:loginId%' 单引号中无法使用变量进行绑定 * like '%:loginId%' 单引号中无法使用变量进行绑定
  • nc 老版本监听需要添加-p参数 nc -l -p 9999 * nc 老版本监听需要添加-p参数 nc -l -p 9999

2019-05-17 hibernate代理类

package a;


import org.apache.log4j.Logger;
import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.proxy.LazyInitializer;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

public class HibernateProxyUtil {
    private static Logger log = Logger.getLogger(HibernateProxyUtil.class);
    private final HashMap<Object,Object> map=new HashMap<>();
    private static final Set<String> TYPES;
    static {
        TYPES = new HashSet<>();
        TYPES.addAll(Arrays.asList("java.lang.Integer",
                "java.lang.Double",
                "java.lang.Float",
                "java.lang.Long",
                "java.lang.Short",
                "java.lang.Byte",
                "java.lang.Boolean",
                "java.lang.Character",
                "java.lang.String"));
    }

    public Object getOwnClass(Object object){
        if(object==null)return object;
        forall(object);
        return object;
    }

    public void forall(Object object){
        if(object==null)return;
        if(map.containsKey(object)) {
            return;
        }

        map.put(object,object);

        Class t =object.getClass();
        Field[] fields=t.getDeclaredFields();
        for (Field field1 :fields){
            //设置字段可访问
            field1.setAccessible(true);
            try {
                //得到字段对应的值
                Object  obj = field1.get(object);

                if(obj==null)continue;
                //如果是基本类型
                if(obj.getClass().isPrimitive())continue;
                //如果是基本类型的包装类型
                if(TYPES.contains(obj.getClass().getName()))continue;

                if (obj instanceof HibernateProxy) {
                    //如果已经见过这个地址(循环引用)
                    if(map.containsKey(obj)){
                        field1.set(object,map.get(obj));
                    }else {
                        LazyInitializer initializer = ((HibernateProxy) obj).getHibernateLazyInitializer();
                        Object real = initializer.getImplementation();
                        map.put(obj,real);
                        field1.set(object,real);
                    }
                } else if (obj instanceof PersistentCollection) {
                    //这种情况还未解决
                    PersistentCollection collection = (PersistentCollection) obj;

                    //TODO
                    field1.set(object,null);
//                    if (!collection.wasInitialized())
//                        return null;
//                    Object val = collection.getValue();
//                    if (val == null)
//                        return null;
//                    o=val;
                }
                //递归当前对象的子属性
                forall(field1.get(object));


            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}

2019-05-17 链接

前端

通知

2019-06-02 log4j配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >

    <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] (%c:%L) - %m%n" />
        </layout>
    </appender>

    <appender name="myFile" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="im.log" /><!-- 设置日志输出文件名 -->
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
        <param name="Append" value="true" />
        <param name="MaxBackupIndex" value="10" />
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
        </layout>
    </appender>

    <logger name="org.hibernate">
        <level value="warn" />
    </logger>

    <logger name="org.springframework">
        <level value="warn" />
    </logger>

    <!-- 根logger的设置-->
    <root>
        <priority value ="debug"/>
        <appender-ref ref="myConsole"/>
    </root>

</log4j:configuration>

2019-05-26 DBUtil

package util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.util.Properties;
import org.apache.log4j.Logger;
import java.sql.Connection;
public class DBUtil {
	private static Logger log = Logger.getLogger(DBUtil.class);
	private static String driverClassName;
	private static String url;
	private static String username;
	private static String password;
	
	
	
	public static void syso(){
		System.out.println(driverClassName+"\r"
				+ url+"\r"
				+username+"\r"
				+password);
	}
	
	public static void init(){
		/*path 不以’/'开头时默认是从此类所在的包下取资源,
    	 * 以’/'开头则是从ClassPath根下获取。
    	 * 其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。
    	 */
    	InputStream fiss = DBUtil.class.getResourceAsStream("/jdbc.properties");
		Properties prop = new Properties();  
		try {
			prop.load(fiss);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		driverClassName=prop.getProperty("driverClassName");
		url=prop.getProperty("url");
		username=prop.getProperty("username");
		password=prop.getProperty("password");
	}
	public static void main(String[] args) {
		Connection con=DBUtil.getConnection();
		System.out.println(con);
	}
	public static Connection getConnection() {
		DBUtil.init();
		Connection conn=null;
		try{
			Class.forName(driverClassName);
			conn=(Connection) DriverManager.getConnection(url,username,password);
			
		}catch(Exception e){
			e.printStackTrace();
			try {
				throw e;
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}return conn;
	}
	public static void closeConnection(Connection conn) throws Exception{
		DBUtil.init();
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}
}

2019-05-28 BookModel

package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
/**
 * * @author ZhangLiang
 */
public class BookModel {
    public static void main(String[] args) {
        getTestJTable("select * from UserDoc");
    }
    public static void getTestJTable(String strSql) {
        JFrame f = new JFrame("Sql结果放入JTable");
        try {
            Connection conn = getConn();
            PreparedStatement ps = conn.prepareStatement(strSql);
            ResultSet rs = ps.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            int rsmdCount = rsmd.getColumnCount();
            JTable table = new JTable(0, rsmdCount); //这里应该是根据那个列数定义,或者是,普及后,然后宽度定义。
            table.getTableHeader().setResizingAllowed(true);
            DefaultTableModel dataModel = (DefaultTableModel) table.getModel();
            DefaultTableCellRenderer r = new DefaultTableCellRenderer();
            r.setHorizontalAlignment(JLabel.CENTER);
            table.setDefaultRenderer(Object.class, r);
            int count = dataModel.getRowCount(); //这里的count是个0
            while (count > 0) {
                dataModel.removeRow(0);
            }
            while (rs.next()) {
                Vector<String> v = new Vector<String>();
                for (int i = 1; i <= rsmdCount; i++) {
                    v.add(rs.getString(i));
                }
                dataModel.addRow(v);
            }
            table.setModel(dataModel); //就差那个设置滚动条了。 //开始吧jtable放到那个jscroll中。
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); //自动设置宽度
            table.setEnabled(false);
            JScrollPane scrollPane2 = new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            scrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            scrollPane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            f.add(scrollPane2);
            f.setSize(1024, 500);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
        } catch (SQLException e) {
        }
    }
    public static Connection getConn() {
        String url = "jdbc:sqlserver://192.168.1.237:1433;DatabaseName=kh";
        String username = "sa";
        String password = "zl1110";
        Connection conn = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException | SQLException ex) {
            System.out.println("ERROR:" + ex.getMessage());
        }
        return conn;
    }
}

2019-06-07 git stash

git stash
git checkout dev
git stash apply stash@{0}

2019-06-25 一些知识

  • Linux下的SVN服务器搭建
  • SCP 协议已经过时,不灵活且不易修复,OpenSSH 官方建议使用更现代的协议进行文件传输,如 sftp 和 rsync。
  • CompletableFuture
  • 深度系统清空回收站rm -rf ~/.local/share/Trash/files/*
  • 启动ss-localsystemctl start shadowsocks-libev-local@client.service
  • 启动mysql容器docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7 --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • 将oracle驱动包上传到私库和本地库
    mvn deploy:deploy-file -DgroupId=com.oracle \
     -DartifactId=ojdbc8 -Dversion=18.3.0.0.0 -Dpackaging=jar \
     -Dfile=ojdbc8.jar \
     -Durl=http://ip:9010/nexus/content/repositories/thirdparty/ \
     -DrepositoryId=snapshots
    
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=18.3.0.0.0 -Dpackaging=jar -Dfile=ojdbc8.jar
  • curl添加自定义header ```bash curl http://127.0.0.1:8085/system/callCommon/queryCollect.sp -H ‘signature_name: 119’ -H ‘signature_value: WnOG3OH0v7N5GIFy1VT5cA==’ -v

curl http://127.0.0.1:8080/callcenter/welcome.do -H ‘signature_name: 119’ -H ‘signature_value: WnOG3OH0v7N5GIFy1VT5cA==’ -v


* spring boot 强制使用外部配置文件 `java -jar myproject.jar --spring.config.location=config/application.yml`

```bash
qq@hello:/etc/shadowsocks-libev$ curl -X OPTIONS http://127.0.0.1:8085 -I
HTTP/1.1 200 OK
Date: Tue, 14 May 2019 01:22:24 GMT
Allow: GET,HEAD,POST,OPTIONS
Content-Length: 0
Server: Jetty(9.4.18.v20190429)
w4G-in5u3SH75RoB3VZIX8htiZgw4ELilwvPcHAIQWfwfXv5n0IHDp5hv
1BM3+H1XygMtiE0-JBgacjE9tz33sIh542EmsGs1yg638UxVfmWqNLqu-
Zw91XxNEiZF7DC7-iV1XbSfsgxI8Tvqr-ZMTxlGCJU+2YLveAc-YXs8ci
RTtssts7leEbJ979H5v+G0sw-FwP9bjvE4GCJ8oj+jtlp7wFmpVdzovEh
v5Vg3dMqhqTiQHKfmHjYbb0o5OUxq0jOWxg5NKim9dhCVF+avO6mDeRNc
OYpl7BatIcd6tsiwdhHKRnyGshyVEjSgRCRY11IgyvdRPnbW8UOVULuTE

Beyond Compare4 key
#删除本地及远程的master分支. 
git branch -D master //删除本地master分支 
git push origin :master //删除远程master分支

#切换到saas_1.0.0分支,然后再新建本地master分支 
git checkout saas_1.0.0 
git checkout -b master

#把本地master分支推送到远程 
git push origin master:master

#放弃本地修改
git reset --hard 
  • 将文件夹打包成zip zip -r xxx.zip foldername
  • ssh免密登录 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.9.110
  • centos7防火墙
systemctl status firewalld.service
systemctl stop firewalld.service
#开机禁用防火墙自启命令 
systemctl disable firewalld.service
#启动:
systemctl start firewalld.service
#防火墙随系统开启启动
systemctl enable firewalld.service
  • nodejs启动webserer
var http = require('http');  
  
http.createServer(function (request, response) {  
  
    if(request.url == "/json"){  
        response.writeHead(200, {'Content-Type': 'application/json'});  
        var data = {  
            "name":"nodejs",  
            "value":"stone"  
        };  
        response.end(JSON.stringify(data));  
    }else{  
	console.log(request.ServerRequest);
        response.writeHead(200, {'Content-Type': 'text/plain'});  
  
        response.end('Hello World\n');  
    }  
      
}).listen(9010,'0.0.0.0');  
  
// 终端打印如下信息  
console.log('Server running at http://127.0.0.1:8888/');
  • nc网络测试脚本 window bat文件
rem 网络测试 使用netcat
nc -v -n -w 10 -z 132.90.153.197 80
nc -v -n -w 10 -z 132.90.153.19 81
nc -v -n -w 10 -z 132.90.153.7 8082
nc -v -n -w 10 -z 132.90.153.7 8081
pause
  • nc网络测试脚本 linux
    #!/usr/bin/env bash
    # 生产环境对数据库的测试 包括实例和scan   使用Ncat 非 netcat
    nc -n -w 3 132.77.255.88 1526 < /dev/null && echo "132.77.255.88 1526 tcp port ok"
    nc -n -w 3 132.77.255.85 1526 < /dev/null && echo "132.77.255.85 1526 tcp port ok"
    nc -n -w 3 132.77.255.87 1526 < /dev/null && echo "132.77.255.87 1526 tcp port ok"
    
  • mysql指定socket启动/home/mysql/mysql-5.7.23/bin/mysql -uroot -p --socket=/home/mysql/mysql-5.7.23_data/mysql.sock
  • Git强制拉取覆盖本地 Pull force
git fetch --all  
git reset --hard origin/master 
git pull
单条执行
git fetch --all && git reset --hard origin/master && git pull
  • 检测 MySQL 是否宕掉,如果宕掉则启动
#!/bin/bash
 
result=`/usr/bin/mysqladmin ping`
expected='mysqld is alive'
 
if [[ "$result" != "$expected" ]]
then
echo "It's dead - restart mysql"
 
# email subject
SUBJECT="[MYSQL ERROR] - Attempting to restart service"
 
# Email To ?
EMAIL="info@endyourif.com"
 
# Email text/message
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "$result was received"> $EMAILMESSAGE
echo "when we were expected $expected" >>$EMAILMESSAGE
# send an email using /bin/mail
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
 
sudo /etc/init.d/mysql restart
fi
  • 第一条:对于存量能力(含AOP。全业务),通过改造火重构等方式逐步下沉微服务,由B域能力开放平台纳管,并由B域能力开放平台对外开放,现有AOP、全业务平台,不再新增,改造接口。
  • 管理节点,整合B、E、M、O、D全域、省分子公司等各类网关能力,实现全联通一点看全,形成统一标准、统一运营的联通一级能力商店,具备能力注册,订购,计量,分析等相关管理功能。

  • ftp备份
[admin@localhost sh]$ cat back.sh 
remote_ip=127.0.0.1
remote_user=admin
remote_password="000000"
remote_port=21

file_name=data_backup_`date "+%Y-%m-%d"`

lftp  $remote_user:$remote_password@$remote_ip:$remote_port <<EOF
    mkdir $file_name
    cd $file_name
    put   /home/mysql/data/mysql_backup/dbfullbak_`date "+%Y-%m-%d"`.sql.gz
    exit

by
EOF

cd /home/mongodb/backup/data`date "+%Y-%m-%d"`/monitor
mongodb_files=`find *`
for file in $mongodb_files
do 
   lftp  $remote_user:$remote_password@$remote_ip:$remote_port <<EOF
   cd $file_name
   put $file
   exit
by
EOF

done

/etc/init.d/nscd restart

https://chromereleases.googleblog.com/search/label/Stable%20updates?updated-max=2015-07-30T08:42:00-07:00&max-results=20&start=255&by-date=false

44.0.2403.157 44.0.2403.125 44.0.2403.107 44.0.2403.89

firefox esr安装java 的npapi链接

/usr/lib/mozilla/plugins
/home/qiaowh/qiao_opt/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so

proxy_set_header Referer $http_referer;