Java知识点

目录

1、BeanUtils.copyProperties()

2、死锁的4个必要条件

3、项目中如何保证缓存和数据库的一致性?

4、对于“try-catch-finally”,若try语句块中包含“return”语句,finally语句块会执行吗? 


1、BeanUtils.copyProperties()

通过反射将一个对象的值赋给另一个对象(前提是对象中属性的名字相同)。BeanUtils.copyProperties(queryResultPage, pageResultVo);即copyProperties(Object source, Object target)将给定源source bean的属性值复制到目标target bean中。

2、死锁的4个必要条件

资源互斥:资源在同一时刻只能被一个进程使用;

请求保持:一个进程因请求资源而阻塞时,对已获得的资源保持不释放;

不可剥夺:进程已获得的资源,在末使用完之前,不能强行剥夺(只能是主动释放);

循环等待:多个线程相互等待对方释放资源(a拿b的,b拿c的,c拿a的;循环等待)。

互斥条件是资源使用的固有特性,无法改变,不做讨论;

破坏请求与保持条件:

1. 第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源 ,
2. 第二种是动态分配即每个进程在申请所需要的资源时它本身不占用系统资源
破坏不可剥夺条件:

一个进程不能获得所需要的全部资源时便处于等待状态,等待期间它占有的资源将被隐式的释放重新加入到系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行。

破坏循环与等待条件:

采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的
采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小
编号的进程才能申请较大编号的进程。

3、项目中如何保证缓存和数据库的一致性?

只要有引入缓存的地方,都不可能保证强一致性,所以这里的一致性是指最终一致性;最常用的就是延时双删,先删除缓存,再操作数据库,完事儿再删除一次缓存;第二次删除缓存是为了避免 在第一次删除缓存之后,到操作数据库完成之前,这期间有新的查询过来,导致再次把旧数据生成缓存;(a线程过来改数据库,进入方法删掉缓存,进行数据更改,这时候,b线程过来查数据,结果发现缓存中没有,就去查数据库,将还没有update完成的"旧数据"放了一份到缓存中;当a线程改完数据,退出方法之前再删一次缓存;这时候c线程过来查询,发现缓存中没有就去数据库查,这个时候查询到的数据就是被修改后的"新数据")。

4、对于“try-catch-finally”,若try语句块中包含“return”语句,finally语句块会执行吗? 

会!fianlly总是会在return前执行,若fianlly中有return则try中的return不会被执行;只有当try语句块中有System.exit();或JVM“崩溃”了才不会执行finally中的代码;

5、Java中的异常体系 

 我们可以看到Throwable类是异常层级中的基类。Error类表示内部错误,这类错误是我们无法控制的;Exception表示异常,RuntimeException及其子类属于未检查异常,这类异常包括ArrayIndexOutOfBoundsException、NullPointerException等,我们应该通过条件判断等方式语句避免未检查异常的发生。IOException及其子类属于已检查异常,编译器会检查我们是否为所有可能抛出的已检查异常提供了异常处理器,若没有则会报错。对于未检查异常,我们无需捕获(当然Java也允许我们捕获,但我们应该做的事避免未检查异常的发生)

6、生成时间id

    //申请号(订单号)
    public static String createApplyNo(String reportKey){
        //日期时间+报告类型+6为随机数  20201215002273836
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String nowTimeStr = sdf.format(new Date());
        String reportId = ParamContants.ReportKey.getReportNumber(reportKey);
        String sixRandomNumber = RandomUtil.randomNumbers(6);
        String orderNo = nowTimeStr + reportId + sixRandomNumber;
        return orderNo;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值