您的位置:首页 > 职场人生

java 面试问的问题和个人理解(三年)(二)

2017-10-20 10:41 525 查看
昨天写完java 面试问的问题和个人理解(三年)(一)之后,我把阿里巴巴Java开发手册(终极版)(1)看了一遍

今天接着(一)开始:(全部是自己话,肯定没有百度的全,如果需要的话,请baidu)

一。java.util的常用

 java.util包 中常用的:

Collection add addAll clear
contains
containsAllisEmpty

特殊点的就是一个removeIf 方法,我之前没有细看,发现好像是jdk8加的,大家知道jdk8有一个Lambda
表达式,使用的话
[/code]
[/code]
package com.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.function.Predicate;

/**
* @date 2017-10-20
* @author xgf
*
*/
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
String s = "ss";
list.add(s);
boolean removeIf = list.removeIf(new Predicate<String>() {

@Override
public boolean test(String t) {
if (s.equals(t)) {
return true;
}
return false;
}
});
System.out.println(removeIf);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
控制台输出的是一个true


别的就不多说了,网上可以查到,如果有需要了解的可以评论,或者私信我。
[/code]
[/code]
二。订单重复提交怎么解决的
[/code]
我不看答案,我第一想法是订单怎么会重复提交呢,我想到的是执行sql的时候没有加上乐观锁(我这里指的乐观锁是在where语句中没有加入订单是否提交的判断),然后就是并发的情况,我的第一想法是在执行sql的时候加锁,说到这,我又想起来数据库
事物隔离了。
[/code]
[/code]
首先理智的考虑一下原因:
[/code]
1.转发导致的,url没变,如果刷新一下,又发了一次请求,
[/code]
2.后台反应到前台的时间太长,让客户误以为别的原因,重新刷新页面,发送了请求
[/code]

解决方法:
1、下单成功后,重定向到其他页面

这个地方也分是什么架构,如果是前后端分离的Restful
解决方案一:客户端控制客户端控制唯一流水只能提交一次,服务端未返回,不允许重复提交。

解决方案二:服务端控制服务端获取该唯一流水号的锁,如果获取不到锁表明之前已存在提交,事物处理完释放锁,业务级别根据唯一主键自行判断

解决方案三:生成唯一流水号唯一流水号,可以客户端生成,也可以服务端生成。服务端可根据userId+业务主键Id+客户端时间戳+客户端随机数(可以用多个字段,或所有提交内容生成唯一串)

这就要说道幂等性(可以自己baidu)

要做到幂等性,从接口设计上来说不设计任何非幂等的操作即可。

譬如说需求是:
当用户点击赞同时,将答案的赞同数量+1。
改为:
当用户点击赞同时,确保答案赞同表中存在一条记录,用户、答案。
赞同数量由答案赞同表统计出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: