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

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

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

一。java.util的常用

 java.util包 中常用的:

Collection add addAll clear containscontainsAllisEmpty

特殊点的就是一个removeIf 方法,我之前没有细看,发现好像是jdk8加的,大家知道jdk8有一个Lambda 表达式,使用的话
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 list = new ArrayList<>();
		String s = "ss";
		list.add(s);
		boolean removeIf = list.removeIf(new Predicate() {

			@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

别的就不多说了,网上可以查到,如果有需要了解的可以评论,或者私信我。

二。订单重复提交怎么解决的
我不看答案,我第一想法是订单怎么会重复提交呢,我想到的是执行sql的时候没有加上乐观锁(我这里指的乐观锁是在where语句中没有加入订单是否提交的判断),然后就是并发的情况,我的第一想法是在执行sql的时候加锁,说到这,我又想起来数据库 事物隔离了。

首先理智的考虑一下原因:
1.转发导致的,url没变,如果刷新一下,又发了一次请求,
2.后台反应到前台的时间太长,让客户误以为别的原因,重新刷新页面,发送了请求

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

这个地方也分是什么架构,如果是前后端分离的Restful
解决方案一:客户端控制客户端控制唯一流水只能提交一次,服务端未返回,不允许重复提交。
解决方案二:服务端控制服务端获取该唯一流水号的锁,如果获取不到锁表明之前已存在提交,事物处理完释放锁,业务级别根据唯一主键自行判断
解决方案三:生成唯一流水号唯一流水号,可以客户端生成,也可以服务端生成。服务端可根据userId+业务主键Id+客户端时间戳+客户端随机数(可以用多个字段,或所有提交内容生成唯一串)

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

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


譬如说需求是:
当用户点击赞同时,将答案的赞同数量+1。
改为:
当用户点击赞同时,确保答案赞同表中存在一条记录,用户、答案。
赞同数量由答案赞同表统计出来。



你可能感兴趣的:(java 面试问的问题和个人理解(三年)(二))