首页 > 编程语言 >程序员面试阿里、腾讯、百度等大厂,面试经典问题你知道吗?

程序员面试阿里、腾讯、百度等大厂,面试经典问题你知道吗?

时间:2023-01-12 13:31:51浏览次数:47  
标签:状态 Java 程序员 创建 工作 面试 死锁 线程 大厂


1. 并行和并发有什么区别?
并行(Parallel):指两个或者多个事件在同一时刻发生,即同时做不同事的能力。例如垃圾回收时,多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
并发(Concurrent):指两个或多个事件在同一时间间隔内发生,即交替做不同事的能力,多线程是并发的一种形式。例如垃圾回收时,用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。

2. 线程和进程的基本概念、线程的基本状态以及状态之间的关系?
一个线程是进程的一个顺序执行流程。一个进程中的全部线程共享同一个堆空间。线程本身有一个供程序执行时的栈,一个进程中可以包含多个线程。
线程的基本状态:新建、就绪、运行状态、阻塞状态、死亡状态
新建状态:利用NEW运算创建了线程对象,此时线程状态为新建状态,调用了新建状态线程的start方法,将线程提交给操作系统,准备执行,线程将进入到就绪状态。
就绪状态:由操作系统调度的一个线程,没有被系统分配到处理器上执行,一旦处理器有空闲,操作系统会将它放入处理器中执行,此时线程从就绪状态切换到运行时状态。
运行状态:线程正在运行的过程中,碰到调用Sleep方法,或者等待IO完成,或等待其他同步方法完成时,线程将会从运行状态,进入到阻塞状态。
死亡状态:线程一旦脱离阻塞状态时,将重新回到就绪状态,重新向下执行,最终进入到死亡状态。一旦线程对象是死亡状态,就只能被GC回收,不能再被调用。

3. 守护线程是什么?
守护线程又称为后台线程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件
正常创建的线程都是普通线程,或称为前台线程,守护线程与普通线程在使用上没有什么区别,但是他们有一个最主要的区别是在于进程的结束中。当一个进程中所有普通线程都结束时,那么进程就会结束。如果进程结束时还有守护线程在运行,那么这些守护线程就会被强制结束
在 Java 中垃圾回收线程就是特殊的守护线程

4. 创建线程有哪几种方式?
继承Thread类(真正意义上的线程类),是Runnable接口的实现。
实现Runnable接口,并重写里面的run方法。
使用Executor框架创建线程池。Executor框架是juc里提供的线程池的实现。

5. sleep 和 wait 有什么区别?
类的不同:sleep 来自 Thread,wait 来自 Object。
释放锁:sleep 不释放锁;wait 释放锁。
用法不同:sleep 时间到会自动恢复;wait 可以使用 notify/notifyAll直接唤醒。

6. 线程的 run 和 start 有什么区别?
start 方法用于启动线程,run 方法用于执行线程的运行时代码。
run 可以重复调用,而 start 只能调用一次。
第二次调用start 必然会抛出运行时异常

7. 创建线程池有哪几种方式?
newSingleThreadExecutor:它的特点在于工作线程数目被限制为 1,操作一个无界的工作队列,所以它保证了所有任务的都是被顺序执行,最多会有一个任务处于活动状态,并且不允许使用者改动线程池实例,因此可以避免其改变线程数目;
newCachedThreadPool:它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程;如果线程闲置的时间超过 60 秒,则被终止并移出缓存;长时间闲置时,这种线程池,不会消耗什么资源。其内部使用 SynchronousQueue 作为工作队列;
newFixedThreadPool(int nThreads):重用指定数目(nThreads)的线程,其背后使用的是无界的工作队列,任何时候最多有 nThreads 个工作线程是活动的。这意味着,如果任务数量超过了活动队列数目,将在工作队列中等待空闲线程出现;如果有工作线程退出,将会有新的工作线程被创建,以补足指定的数目 nThreads;
newSingleThreadScheduledExecutor:创建单线程池,返回 ScheduledExecutorService,可以进行定时或周期性的工作调度;
newScheduledThreadPool(int corePoolSize):和newSingleThreadScheduledExecutor类似,创建的是个 ScheduledExecutorService,可以进行定时或周期性的工作调度,区别在于单一工作线程还是多个工作线程;
newWorkStealingPool(int parallelism):这是一个经常被人忽略的线程池,Java 8 才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行地处理任务,不保证处理顺序;
ThreadPoolExecutor:是最原始的线程池创建,上面1-3创建方式都是对ThreadPoolExecutor的封装。

8. 在 Java 程序中怎么保证多线程的运行安全?
使用安全类,比如 Java. util. concurrent 下的类。
使用自动锁 synchronized。
使用手动锁 Lock。

9. 什么是死锁?怎么防止死锁?
当线程 A 持有独占锁a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。
防止死锁方法:
尽量使用 tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退出防止死锁。
尽量使用 Java. util. concurrent 并发类代替自己手写锁。
尽量降低锁的使用粒度,尽量不要几个功能用同一把锁。
尽量减少同步的代码块。

10. synchronized 和 volatile 的区别是什么?
volatile 是变量修饰符;synchronized 是修饰类、方法、代码段。
volatile 仅能实现变量的修改可见性,不能保证原子性;而 synchronized 则可以保证变量的修改可见性和原子性。
volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。

标签:状态,Java,程序员,创建,工作,面试,死锁,线程,大厂
From: https://blog.51cto.com/u_8238263/6004060

相关文章

  • 一个妹子写给程序员男友的情书
    从2008年到2015年,我们一起走过了八年的时光曾经那个因为我一句“很委屈”就躲着偷偷哭的大男孩竟会成为陪伴我从豆蔻到白首的那个人你常常说,遇见我,是你最好的福气而我常常想......
  • 程序员的5个级别,看看你到几级?
    程序员这个“物种”自诞生以来,便有了森严的等级制度,划分标准十分复杂却又有规律可循。经常在网上的论坛里看到大家讨论程序员的级别,由于级别不同,薪水也是有着天壤之别。 “......
  • 当你面试软件测试遇到这些问题,务必这样回答!
    如果你想面试软件测试相关的岗位,这些面试点你不得不知道,内容较多,可先收藏再看!文末还有超级福利哦~  项目的测试流程1.拿到需求文档后,写测试用例2.审核测试用例3.等待开发......
  • 不写代码就实现了自动化测试,面试官都惊呆了!Apipost的自动化测试功能强烈推荐
    本人在今年互联网大环境如此严峻的情况下,作为一个刚毕业不到一年的初级测试,赶在“金九银十”的时候依然拿到了一些面试机会,并且成功拿下4家公司的offer,其中不乏互联网大厂......
  • 面试题2022
    【岗位职责】1、负责项目前端部分正常迭代开发和维护2、优化产品质量、性能、用户体验3、参与新的前端开发技术进行研究和应用推广【岗位要求】1、熟悉W3C规范,熟悉HTM......
  • 作为一个程序员,需要学习多少技能?
    作为一个程序员,需要学习多少技能?1、学好"物理"。2、学好“化学”。3、学好“生物”。4、学好“历史”。5、学好“文学”。6、学好“建筑”。7、学好“艺术”。8、学好“经济......
  • 高频前端面试题:什么是回调函数?
    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回......
  • 前端面试题
    javascript1、请问截至目前JS中的基本数据类型有几种?A、5B、6C、7D、82、document对象模型中,节点类型一共有几种?A、4种......
  • 程序员一周花多少时间编程?
    来来来!和播妞一起算算账账。。。我们一般每天工作8小时,那么一周就是40小时。在极端的条件下(当然也不现实),如果一个程序员整整一周不吃不喝也不睡觉,所有时间全部用来写代......
  • 软件测试面试题及答案,不给答案的面试题都是耍流氓
    面试指导软件测试理论刷题篇mysql数据库刷题库linux操作系统刷题篇软件测试工程师面试篇一.软件测试理论刷题篇1.软件测试的意义是什么?思路:什么是软件......