顺丰科技终试面经
第一次在牛客网发帖,就说说刚结束得顺丰终面吧,热乎的凉经。
岗位投的Java开发工程师。
注:答案是我面试时候说出来的,不一定全面和正确
1.我实习项目有用到ElasticSearch,就问了我倒排索引。
答:这个我感觉我没答到点子上0.0,就不说了
接下来全都是并发和多线程问题了
2.说一下线程得创建方式:
- 继承 Thread 类,重写 run 方法
- 实现 Runnable 接口,实现 run 方法
- 实现 Callable 接口,实现 call 方法
- 线程池ThreadPoolExecutor
答:首先我说了线程池的7个参数:①线程池中的核心线程数;②线程池中最大线程数;③闲置超时时间;④超时时间的单位;⑤线程池中的任务队列;⑥线程工厂;⑦拒绝策略
流程是:当前活跃线程数是否大于核心线程数,是则直接创建,不是则加入队列等待,直到核心线程数用完并且队列已满,判断最大线程数是否剩余,有则创建新线程,没有则看队列是否存满,没存满则入队,反之抛出异常执行拒绝策略。
4.那你说一下线程池参数的队列具体是什么。
答:我答的阻塞队列,具体没有答出来(面完以后查了资料是有4个:①ArrayBlockingQueue;②LinkedBlockingQuene;③SynchronousQuene;④PriorityBlockingQueue)
5.LinkedBlockingQuene这个具体实现说说,什么时候阻塞。
答:回答错了,回答成AQS的原理😂。
6.i++操作线程安全吗?具体怎么改成线程安全。
答:不安全,AutomicInteger。
7.AutomicInteger底层用了什么原理.
答:CAS。
8.CAS会造成什么问题,怎么解决。
答:ABA问题,并让我举例描述一下。使用AtomicStampedReference类(这里忘记提加版本号这个解决办法了)
9.锁都了解哪些。使用ReentrantLock应该注意什么。
答:Synchronized,ReentrantLock,Semaphore,Atomic。注意啥我倒是没答上来,后面查资料说是必须在finally调用unlock方法释放锁。
10.算法题:比较简单,两个栈实现队列。
答:不是直接手写,是让我口述出来。刚开始没表达清楚,后面组织语言了几分钟缓缓才回过头来,也不知道面试官懂没懂我的表述😂。
面试刚好30分钟,因为面试官还要进行下一个面试,所以就结束啦0.0。
中间还点错了退出了网页,还好及时点回来了,吓死我了。
问的挺细,没准备好是我太菜了😔。