java面试

JVM

jstat命令

1:jps获取java的pid;
2:jstat -gc <java进程pid>
此命令可以查看,当前java程序的内存分布
image

文档注释

语法:# 后是方法名,()里是参数类型

@see

可以加在类,属性、方法;

示例:

/**
* 商品实付金额(渠道支付分摊金额 + 余额分摊金额)
* @see #channelPayPrice
* @see #balanceSharePrice
*/
private BigDecimal payPrice;

image

BigDecimal

  • 保留2位小数,并四舍五入

BigDecimal bd = new BigDecimal("3.1415926");
bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);

  • 保留2位小数,直接截取

BigDecimal n = decimal.setScale(2, BigDecimal.ROUND_DOWN);

  • 保留2位小数, 后面有任一一位不为0,第二位小数就会+1,可自己验证

BigDecimal n = decimal.setScale(2, BigDecimal.ROUND_UP);

switch用枚举注意点

语法

image

枚举

点击查看代码
package com.cdjdgm.pdms.enums;

/**
 * 供电调度系统操作相关角色枚举类型
 * @author LW
 */
public enum RoleEnum {
    AAA("hdsla","name","哪里控制的参数"),

	/** 计划调度员 */
    JHDDY("JHDDY","计划调度员"),
    /** 工区要令员 */
    WGQYLY("WGQYLY","工区要令员"),
    /** 工区值班员 */
//    WGQZBY("WGQZBY","工区值班员"),
    /** 变电所值班员 */
    BDSZBY("BDSZBY","变电所值班员"),
    /** 供电调度员 */
    GDDDY("GDDDY","供电调度员"),
    /** 段调度员 */
    DDDY("DDDY","段调度员"),
    /** 电力工区值班员 */
    DLGQZBY("DLGQZBY","电力工区值班员"),

    /**
     * 角色编号
     */
    private String code;
    /**
     * 角色名称
     */
    private String name;

    private  RoleEnum(String code, String name){
        this.code = code;
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static RoleEnum getCode(String code){
		for(RoleEnum role :RoleEnum.values()){
			if(code.equals(role.getCode())){
				return role;
			}
		}
		return null;
	}
}

泛型

参数传泛型语法:

public static <T> void requestParamUnderline2UpperCase(
HttpServletRequest req, T obj){
}
public static T requestParamUnderline2UpperCase(
HttpServletRequest req, T obj) {
return null;
}

用反射动态给对象的某个属性赋值

点击查看代码

导包带*有什么影响

用*号导包时会降低编译速度,但是不会降级运行速度。但只会编译一次,影响不是很大。

idea 如何取消自动导包为*

image

BIO和NIO和AIO

NIO及New IO,jdk1.4引入的。NIO效率比BIO高,java提供了两套NIO,一个针对标准输入输出,一个针对网络编程。

BIO NIO
面向流 面向缓冲
阻塞 非阻塞
选择器
  • BIO是面向流的,NIO是面向缓冲区的

BIO意味者从流中读取按字节为单位,直至所有字节,没有缓存在任何地方。

NIO则能前后移动流中数据,面向缓冲区。

  • BIO是阻塞的,NIO是不阻塞

BIO是阻塞,意味者一个线程调用read()或write()时,线程会阻塞,直到读或写操作完成(这期间此线程不能执行其它操作)。

NIO的非阻塞模式,针对上面的读写操做,此线程可以执行其它操作。一个线程从某通道发送请求读取数据,但它仅能得到目前可用数据,没可用数据,就什么都不获取,nio可以一个或多个线程管理多个通道(网络连接或文件),代价是代码更复杂,比bio读取数据复杂。

  • 选择器

nio的选择器允许一个单独线程监视多个输入通道,可以注册多个通道使用一个选则器,然后使用一个单独的线程来“选择”通道:通道里有已经可以处理的输入,或选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易管理多个通道。

posted @ 2022-12-05 15:00  jf666new  阅读(37)  评论(0)    收藏  举报