2020年7月记录

1.PrintWriter使用

PrintWriter printWriter=new PrintWriter("F://ttt.txt")替代BufferedWriter out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("F://ttt.txt")));;

2.获取函数的反射对象。

public class Demo1 {
    public static void main(String[] args) throws Exception {
        Method f1 = Demo1.class.getDeclaredMethod("f4", Object.class);
        AnnotatedType returnType1 = f1.getAnnotatedReturnType();
        System.out.println(returnType1.getType());
//        Annotation[] declaredAnnotations = returnType1.getDeclaredAnnotations();
        if (returnType1 instanceof ParameterizedType) { // 判断获取的类型是否是参数类型
            Type[] typesto = ((ParameterizedType) returnType1).getActualTypeArguments();// 强制转型为带参数的泛型类型,
            // getActualTypeArguments()方法获取类型中的实际类型,如map<String,Integer>中的
            // String,integer因为可能是多个,所以使用数组
            for (Type type2 : typesto) {
                System.out.println("泛型类型" + type2);
            }
        }
        Method[] methods = Demo1.class.getDeclaredMethods();
        for(Method method:methods){
            System.out.println(method.toGenericString());
        }
    }

    void f1(){
        System.out.println("f1 run");
    }
    String f2(){
        System.out.println("f2 run");
        return "f222";
    }
    <T> List<T> f3(){
        System.out.println("f3 run");
        return new ArrayList<>();
    }
    <T> T f4(T t){
        System.out.println("f4 run");
        return t;
    }


}

 

3.postgresql数据库字段后面有回车,navicat显示不出,但是查询的时候不能匹配。

3.ftp简单工具类 

package com.example.demo76.utils;

import com.jcraft.jsch.*;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.util.Properties;
//sftp.get(targetPath, outputStream);
//sftp.mkdir(dir);
//sftp.put(inputStream, fileName);
//sftp.cd(config.getRoot());
//sftp.rm(targetPath);
/**
 * sftp连接工具类
 */
//并发多条连接
@Component
@Scope("prototype")
public class SftpUtil {

    private ChannelSftp sftp = null;
    private Session session = null;

    // 登录
    public  ChannelSftp login(String username, String password, String host, int port) throws JSchException, SftpException {
        JSch jSch = new JSch();
        // 设置用户名和主机,端口号一般都是22
        session = jSch.getSession(username, host, port);
        // 设置密码
        session.setPassword(password);
        Properties config = new Properties();
        //严格主机密钥检查
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        //开启sshSession链接,控制端口
        session.connect();
        //获取sftp通道,数据端口
        Channel channel = session.openChannel("sftp");
        channel.connect();
        sftp = (ChannelSftp) channel;
        return sftp;
    }

    // 退出登录
    public void logout() {
        if (sftp != null) {
            if (sftp.isConnected()) {
                sftp.disconnect();
            }
        }
        if (session != null) {
            if (session.isConnected()) {
                session.disconnect();
            }
        }
    }


}

 

4.linux 的.pid文件

PID全称是Process Identification。

PID是进程的代号,每个进程有唯一的PID编号。它是进程运行时系统随机分配的,并不代表专门的进程。在运行时PID是不会改变标识符的,但是你终止程序后再运行PID标识符就会被系统回收,就可能会被继续分配给新运行的程序。

(1) pid文件的内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID。 用cat命令可以看到。 

(2) pid文件的作用:防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。 

 

5.shiro创建不同的AuthenticationToken对象,其中getPrincipal()获得主要信息。getCredentials()用于认证,与

SimpleAuthenticationInfo(Object principal, Object hashedCredentials, ByteSource credentialsSalt, String realmName)

中的hashedCredentials就行比较。

 

6.不挂断运行jar包,重定向。

https://www.jb51.net/article/169783.htm

nohup java -jar demo.jar >1.txt &

7.cap

一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)

 一致性:数据一致

可用性:服务器能处理请求。

分区容错性:部分节点失效,服务器集群能继续服务。

 

AP:系统放弃一致性以保证分区容忍性和可用性的这种做法称为,最终一致性,能接受系统在未来的某个时刻达到一致

 

8.springboot启动动态修改配置。

1.将配置文件设置为启动参数

有以下两种设置启动参数的方法。

1.命令行参数

java -jar spring-boot-application-properties-sample-1.0.0.jar --spring.profiles.active=dev1

2.java系统参数

java -jar -Dspring.profiles.active=dev1 spring-boot-application-properties-sample-1.0.0.jar

 

9.二种动态代理类

package com.example.demo76.controller;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyTest {
    static class Zi implements Fu{
        @Override
        public void ff1() {
            System.out.println("Zi run!!");
        }
    }
    interface Fu {
        void ff1();
    }
    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(Fu.class);
        enhancer.setCallback(new MethodInterceptor(){
            @Override
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                System.out.println(method.getName());
                System.out.println("接口CGLIB动态代理类!!!!");
                return null;
            }
        });
        Fu fu = (Fu)enhancer.create();
        fu.ff1();
    }

    //JDK原生动态代理
    private static void proxy1() {
        Zi zi = new Zi();
        Fu o = (Fu) Proxy.newProxyInstance(zi.getClass().getClassLoader(), zi.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                method.invoke(zi,args);
                System.out.println(232);
                return null;
            }
        });
        o.ff1();
    }
}

 

 

10.类加载中的解析步骤,就是把字节码常量池的数据转换为  方法区中的实际数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值