深入理解并发和并行
并发是逻辑上的同时发生,而并行是物理上的同时发生。并发可以跑在一个处理器上通过时间片进行切换,而并行需要两个或两个以上的线程跑在不同的处理器上。如果同一个任务的多个线程始终运行在不变的CPU核心上,那就不是并行。
并发是逻辑上的同时发生,而并行是物理上的同时发生。并发可以跑在一个处理器上通过时间片进行切换,而并行需要两个或两个以上的线程跑在不同的处理器上。如果同一个任务的多个线程始终运行在不变的CPU核心上,那就不是并行。
许多业务场景中都会到线程池,比如微服务接收外部调用、异步发送邮件、离线统计报表等等。线程池有三个优点:降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗;提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行;提高线程的可管理性,对线程进行统一的分配,调优和监控。老话说,请神容易送神难,使用了线程池就要承受它带来的问题。线程池的运行机制比较复杂,使用线程池的参数并不好配置。线程池执行的情况与任务类型相关,IO密集型和CPU密集型的任务运行起来的情况差异很大,配置合理依赖开发人员的经验和知识。如果配置不当,反而降低系统效率。另外,还一个问题,如何优雅关闭线程池,避免任务或者数据丢失呢?
整理一些Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:说说如何保证线程安全;如何实现一个线程安全的数据结构;volatile关键字的作用是什么;Java并发包提供了哪些并发类;HashMap在多线程环境下使用需要注意什么,为什么;ThreadLocal的作用与实现原理是什么;ThreadPoolExecutor的实现原理是什么;什么是死锁,如何避免死锁;Atomiclnteger的实现原理是什么。
整理一些Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:说说有几种方法创建线程,各自的优缺点是什么;启动一个线程是用run还是start;说说线程和进程的差别是什么;说说守护线程有什么用;如何实现两个线程串行执行;一个线程调用Start()两次会怎么样;谈谈线程的生命周期和状态转移;线程的sleep和wait方法有什么区别;线程的notify和notifyAll有什么区别;上下文切换是什么含义。
技术面试中,一定会被问到性能优化有关的问题。这一类问题大多数都是开放性的,考察求职者的知识储备和逻辑思维。我们的脑洞可以开大一点,多说一些解决方案,充分展示自己的能力。比如这个题:一个接口耗时10秒,如何优化为1秒?这个问题脱离实际生产情况,属于八股文。如果生产环境中出现性能低下的接口,通常怎么应对?
线程池的使用场景有哪些;说说创建线程池的重要参数;这些参数怎么设置,线程池调优怎么做
Java实现一个线程有几种方法;Callable和Runnable接口有什么区别;了解Java线程的底层实现吗
友金所是一家位于深圳南山科技园的P2P网贷公司,用友集团控股。该公司采用渐进式的问答面试,没有笔试题。比如面试者说熟悉多线程,面试官就问哪些方式解决并发;面试者说采用Synchronized或者ReentrantLock,面试官便会追问Synchronized的实现原理,以及两种方式运用的场景和优劣,逐渐靠近底层原理,直至面试者答不上来才转换话题,阿里的面试官也通常采用这种方式。