java 面试问的问题和个人理解(三年)(二)
2017-10-20 10:41
525 查看
昨天写完java 面试问的问题和个人理解(三年)(一)之后,我把阿里巴巴Java开发手册(终极版)(1)看了一遍
今天接着(一)开始:(全部是自己话,肯定没有百度的全,如果需要的话,请baidu)
一。java.util的常用
java.util包 中常用的:
Collection add addAll clear
解决方法:
1、下单成功后,重定向到其他页面
这个地方也分是什么架构,如果是前后端分离的Restful
解决方案一:客户端控制客户端控制唯一流水只能提交一次,服务端未返回,不允许重复提交。
解决方案二:服务端控制服务端获取该唯一流水号的锁,如果获取不到锁表明之前已存在提交,事物处理完释放锁,业务级别根据唯一主键自行判断
解决方案三:生成唯一流水号唯一流水号,可以客户端生成,也可以服务端生成。服务端可根据userId+业务主键Id+客户端时间戳+客户端随机数(可以用多个字段,或所有提交内容生成唯一串)
这就要说道幂等性(可以自己baidu)
要做到幂等性,从接口设计上来说不设计任何非幂等的操作即可。
譬如说需求是:
当用户点击赞同时,将答案的赞同数量+1。
改为:
当用户点击赞同时,确保答案赞同表中存在一条记录,用户、答案。
赞同数量由答案赞同表统计出来。
今天接着(一)开始:(全部是自己话,肯定没有百度的全,如果需要的话,请baidu)
一。java.util的常用
java.util包 中常用的:
Collection add addAll clear containscontainsAllisEmpty
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。
改为:
当用户点击赞同时,确保答案赞同表中存在一条记录,用户、答案。
赞同数量由答案赞同表统计出来。
相关文章推荐
- Java多线程面试问题汇总(深入理解篇)
- Java中线程安全问题个人理解
- Java中线程安全问题个人理解
- JAVA编码问题的一些理解
- JAVA常见面试问题(收藏)
- java程序员面试所被问到的问题?
- Java的面试问题:
- Java 面试常见问题!
- Java初学者都必须理解的六大问题
- 在MSF中怎么区分易混淆的工作项类型:Bug、风险和问题(我个人的理解)
- java面试常见问题集
- [转] java技术面试基本问题小结
- java技术面试基本问题小结
- Java初学者都必须理解的六大问题
- java面试时的30个问题
- Java面试常问的几个问题
- 大家晚上好,小弟刚刚接触java。有些问题不是很理解,希望大家给予帮助。
- Java面试常问的几个问题
- Java初学者都必须理解的问题
- java中的对象引用问题的再次理解。