快手商业化实习二面凉经

1.项目介绍
2.你是怎么学习一项技术的
3.对Spring的理解
4.为什么选择Dubbo,和SpringCloud有什么区别(卒)
5.Dubbo项目怎么调试的
6.服务与各服务之间是怎么协调的
7.如果没有注册中心各服务怎么调用
8.rpc调用的流程
9. 项目中使用的分布式事务
10.Seata
11.场景题,一个停车场,要对所停车辆进行收费。
写了两个类,一个Car,一个Park,Park里有个Set存Car表示停车场停了哪些车,一个最大容量。车一进停车场就记录时间,然后出停车场计算时间差进行收费。
Car{
    Date date;
}

Park{
    Set<Car> set;
    int capacity;
    boolean in(Car car) {
        if (set.size() >= capacity) return false;
        set.add(car);
        return true;
    }
    
    BigDecimal out(Car car) {
        if (!set.contains(car)) return 0;
        set.remove(car);
        BigdDecimal money = (CurrentDate - car.date) * 一个小时多少钱;
        return money;
    }
}
大概是这样,如果没有记错的话。
追问:线程安全的场景呢
答:加lock或者在方法上加synchronized
追问:这样就是线程安全了吗
答:是(卒)
ps这里也是懵,方法加了synchronized,线程不都排队进入方法吗?实在想不通为什么会有线程安全问题,希望有大佬能不吝赐教。

面试时间是12月21日,然后隔了一天就挂了。

#实习##面经##快手##Java工程师#
全部评论
绝了!!问我估计一道题都不会
1 回复 分享
发布于 2021-01-01 22:25
我感觉是让用semaphore写?
1 回复 分享
发布于 2021-01-01 22:32
线程安全有两个条件,一个是thread execution control,另一个是memory visibility。 我觉得可能是你只说了加sync没说体现memory visibility的地方,就是用volatile
1 回复 分享
发布于 2021-01-02 00:43
我感觉可能是synchronize效率不高?
点赞 回复 分享
发布于 2021-01-01 21:50
加sync虽然很安全 但是程序是有编译序列化的 需要在共享变量加个volatile 希望对你有帮助
点赞 回复 分享
发布于 2021-01-01 22:42
应该是park里面有个set,一个线程修改了另一个线程是无法感知的。比如a线程加了一个car进去,b线程里的set是无法感知的,即便a线程执行完了b的set里还是没有这个car
点赞 回复 分享
发布于 2021-01-01 23:41
有一说一这是实习面试吗,感觉不简单
点赞 回复 分享
发布于 2021-01-02 00:44
这道题的场景,就是让你使用semaphore,给定了最大容量,所谓的线程安全也就是防止停的车超过最大容量,用semaphore控制就可以
点赞 回复 分享
发布于 2021-01-02 10:01

相关推荐

人生一梦:24年我投暑期实习,它以我不是女的为理由拒绝了我查看图片
点赞 评论 收藏
分享
评论
10
40
分享

创作者周榜

更多
牛客网
牛客企业服务