java杂谈

特别mess(极度混乱)的java知识

  1. restful面试题,
    什么是restful?简单地说,在restful简化之前,将参数使用/的方式进行分割,减少了url参数传递的字节信息.
    restful规定,可以通过一个url请求的地址,通过不同的请求类型,控制业务逻辑;要求路径种不能出现动词,一般都是无状态的.
  2. springboot
    SpringBoot实现了自动化配置,SpringBoot作用是框架的框架,在Spring SpringMVC Mybatis上的一个高级API简化了框架的调用.核心思想就是开箱即用,立足于Spring.SpringBoot内部与Spring无缝衔接,
  3. 关于lombok的面试题
    项目将来要部署在Linux中,是否需要安装lombok在Linux系统中?
    不需要,因为lombok只在编译期有效,也就是只在xxxx.java文件中有效,在.class文件中无效.打包到Linux中的文件是以jar包形式打包上去,里面包含的都是xxx.class文件.
  4. Mybatis
    Mybatis通过@mapper注解管理接口对象,接口是不能直接new出来的,通过反射机制创建出一个实现类对象.核心的原理就是反射,动态代理,在不修改源码的情况下,扩充方法,动态代理的方法.
    动态代理的两种方法

1.jdk代理方式

jdk代理要求被代理者必须实现接口,
代理对象根据接口的类型,
通过反射机制创建出来一个实现类对象.
(jdk源码底层实现的),spring容器一般面对接口注入时候,
默认条件下采用JDK动态代理的方式实例化对象
java.util.reflect.proxy包

2.CGLIB的动态代理方式

是JDK代理的一种补充,不管被代理者是否实现接口,
都可以为其创建代理对象,代理的对象是被代理者
的子类
org.springframework.cglib.proxy  Enhancer
  1. spring
    spring容器就是一个Hashmap集合实例化后的数据就存到了Hashmap中<K,V>结构;
    什么是Bean?只要被Spring容器管理的对象就叫做Bean.
    1.spring内部数据结构:Map理解为容器
    key-value结构 key:一般都是类名的首字母小写:hellocontroller
    value:一般存储的是经过反射等机制实例化的对象.
    Map<hellocontroller,controller对象>
    单例:容器中只保存一个对象,由容器管理对象的生命周期,和容器一块消亡.(spring容器默认单例模式)
    多例:如果用户需要使用,则 “创建” 一个对象交给用户使用,由用户管理对象的生命周期

  2. 拦截器和过滤器的区别
    1.拦截器只能拦截action请求,过滤器能拦截所有请求;
    2.拦截器是spring支持的,过滤器则是依赖于servlet;
    3.拦截器基于java反射机制的,过滤器是基于函数的回调;
    4.拦截器可以访问action上下文,堆,栈里的对象,但是过滤器不行;
    5.在action的生命周期里面,拦截器可以被调用很多次,但是过滤器只能在容器初始化时被调用一次;
    6.拦截器可以获取IOC中的Bean,但是过滤器不行,在拦截器注入一个service,可以调用业务逻辑;

  3. servlet生命周期
    servlet生命周期主要分成四个阶段:实例化,初始化,服务,销毁;
    当用户请求servlet时候,首先判断有没有servlet对象,若不存在则有web容器创建一个对象,然后调用init()方法对其进行初始化,这个初始化方法在servlet生命周期中只会调用一次,完成servlet对象的实例和初始化之后,web容器会调用servlet对象的service()方法来处理请求;当web容器关闭或者Servlet对象要从web容器中被删除的时候,则会调用destory()方法;

  4. 创建对象有几种方式
    <1>通过new创建新的对象
    <2>通过反射机制创建对象
    <3>采用clone()克隆对象
    <4>通过反序列化机制进行创建对象;

public class MyIoc {
    //因为提高查询效率,所以用 Arraylist
        List<Bean> beans=new ArrayList<>();
        Map<String,Object> a=new ConcurrentHashMap<>();
        //对象初始化
        public MyIoc() throws Exception {
            Bean b1 = new Bean("user","cn.tedu.myIoc.User");
            Collections.addAll(beans,b1);
            init();

        }
        public void init() throws Exception {
            for (Bean b:beans) {
             String key=b.getId();
             Object value =Class.forName(b.getName()).newInstance();
            //比hashmap安全一些
             a.put(key,value);
            }
            }
            public Object getBean(String leiming){
                return a.get(leiming);
            }
            }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Java对GPIB接口控制,可以使用NI-VISA库来进行控制。NI-VISA(National Instruments Virtual Instrument Software Architecture)是一种通用的VISA编程接口,可以用来控制各种类型的仪器和设备,包括GPIB、USB、以太网、串口等等。 以下是一个使用NI-VISA库来进行GPIB通信的Java示例代码: ```java import java.util.concurrent.TimeUnit; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import visa32.*; public class GPIBControl { private static final int GPIB_ADDRESS = 4; // GPIB地址 private static final int BUFFER_SIZE = 1024; // 缓冲区大小 public static void main(String[] args) { // 初始化NI-VISA库 VisaLibrary visaLibrary = (VisaLibrary) Native.loadLibrary("visa32", VisaLibrary.class); visaLibrary.viOpenDefaultRM(); // 打开GPIB设备 String deviceName = "GPIB0::" + GPIB_ADDRESS + "::INSTR"; Pointer instrument = new Memory(GpibLibrary.ViUInt32.SIZE); visaLibrary.viOpen(visaLibrary.getResourceManager(), deviceName, new GpibLibrary.ViAccessMode(GpibLibrary.VI_NO_LOCK), new GpibLibrary.ViUInt32(0), instrument); Pointer session = instrument.getPointer(0); // 设置超时时间 visaLibrary.viSetAttribute(new GpibLibrary.ViSession(session), new GpibLibrary.ViAttrState(GpibLibrary.VI_TMO_VALUE), new GpibLibrary.ViUInt32(5000)); // 写入命令 String command = "*IDN?"; visaLibrary.viWrite(new GpibLibrary.ViSession(session), command.getBytes(), new GpibLibrary.ViUInt32(command.length()), new IntByReference()); // 读取响应 byte[] buffer = new byte[BUFFER_SIZE]; visaLibrary.viRead(new GpibLibrary.ViSession(session), buffer, new GpibLibrary.ViUInt32(BUFFER_SIZE), new IntByReference()); String response = new String(buffer).trim(); System.out.println("Instrument response: " + response); // 关闭设备 visaLibrary.viClose(new GpibLibrary.ViSession(session)); visaLibrary.viClose(visaLibrary.getResourceManager()); } } ``` 在这个示例中,我们使用NI-VISA库来打开GPIB设备,设置超时时间,写入命令并读取响应。需要注意的是,GPIB_ADDRESS变量需要设置为实际的GPIB地址,BUFFER_SIZE变量可以根据需要进行调整。 希望这个示例代码能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值