总结秋招和实习面试的时候碰到的几个手撕的多线程代码题:

问题一:三个线程循环打印ABC,线程一打印A,线程二打印B,线程三打印C,打印10遍即可。这个问题主要是考察怎么使用线程同步的问题,通常情况下我们有多种解法,可以使用Condition,Synchronize,semaphore等等,我们用可重入锁来解答这个问题。(美团实习)

package com.test;import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** @author 红字V* Created on 2021-08-19* @description:多线程面试题*/
public class PrintABC {private int flag = 1;Lock lock = new ReentrantLock();Condition conditionA = lock.newCondition();Condition conditionB = lock.newCondition();Condition conditionC = lock.newCondition();public void printA(){lock.lock();try {while(flag != 1){conditionA.await();}System.out.print("A");conditionB.signal();flag = 2;} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public void printB(){lock.lock();try {while(flag != 2){conditionB.await();}System.out.print("B");conditionC.signal();flag = 3;} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public void printC(){lock.lock();try {while(flag != 3){conditionC.await();}System.out.println("C");conditionA.signal();flag = 1;} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public static void main(String[] args) {PrintABC printABC = new PrintABC();Thread thread1 = new Thread(()->{for(int i = 0; i<10;i++) printABC.printA();});Thread thread2 = new Thread(()->{for(int i = 0; i<10;i++) printABC.printB();});Thread thread3 = new Thread(()->{for(int i = 0; i<10;i++) printABC.printC();});thread1.start();thread2.start();thread3.start();}
}

问题二:两个线程循环打印1-100,线程1打印奇数,线程2打印偶数(拼多多实习面试),其实我们解决了上面那个问题,这个问题易如反掌,只是稍微变形一下,你不妨自己尝试先写写然后再看答案。

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** @author 红字V* Created on 2021-08-19* @description:print odd and even via two threads*/
public class PrintOddAndEven {private static int flag = 1;Lock lock = new ReentrantLock();Condition conditionEven = lock.newCondition();Condition conditionOdd = lock.newCondition();public void printEven(){lock.lock();try {while(flag % 2 != 0){conditionEven.await();}System.out.print(flag+" ");conditionOdd.signal();flag ++;} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public void printOdd(){lock.lock();try {while(flag % 2 != 1){conditionOdd.await();}System.out.print(flag+" ");conditionEven.signal();flag ++;} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public static void main(String[] args) {PrintOddAndEven printOddAndEven = new PrintOddAndEven();Thread thread1 = new Thread(()->{while (flag < 100) printOddAndEven.printEven();});Thread thread2 = new Thread(()->{while (flag < 100) printOddAndEven.printOdd();});thread1.start();thread2.start();}
}

问题三:阻塞队列,线程池的实现(滴滴实习),见我的这篇文章。

阻塞队列和线程池的实现

关于面试时碰到的几个多线程手撕代码题相关推荐

  1. 手撕代码 多线程手撕代码题

    天天乐学 面试直接让我手撕代码 完全不会呀 那不完蛋~ 两个线程,线程1打印A,线程2打印B,两个线程同时并发,要求保证先打印A,后打印B 使用synchronized+ wait.notify pu ...

  2. 蛇形打印数组(某宝典公司面试手撕代码题)

    背景杂谈 不知道为什么,可能脑袋一下放空了,一不小心就想到了大约2年前,在某个知名的宝典公司面试中,遇到了一道手撕代码题,和多年前的google的那道螺旋遍历数据有异曲同工之妙.现脑洞大开,想写下与大 ...

  3. 华为手撕代码c语言题目,想去面试?这10道最高频的手撕代码题都会了吗?

    原标题:想去面试?这10道最高频的手撕代码题都会了吗? 来源:Python与算法之美 ID:Python_Ai_Road 作者:梁云1991 想去看机会?下面这10道最高频的手撕代码面试题都会了吗? ...

  4. 2023华为OD面试手撕代码真题

    很多小伙伴后台私信我,让我出一些面试中的手撕代码题. 一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解.不可能会再出阅读理解一样的机试题的.但是这些题目也非常注 ...

  5. Interview:算法岗位面试—11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码、项目考察、比赛考察、图像算法的考察等

    Interview:算法岗位面试-11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码.项目考察.比赛考察.图像算法的考察等 导读:该公司是在同济某次大型招聘会上投的,当时和HR聊了半个多 ...

  6. 2020年前端面试之JS手写代码题合集

    2020年前端面试之JS手写代码题合集 预计会有上千道题,后续慢慢补! 1.  写一个把字符串大小写切换的方法 function caseConvert(str){return str.replace ...

  7. 前端date format_前端面试-手撕代码篇

    前言 在前端面试有一个非常重要的环节,也是面试者最担心的一个环节.对"手撕代码"的考察需要面试者平时总结和积累(临时抱佛脚是不好使的),在这里笔者就自己如何攻破"手撕代码 ...

  8. 【2023校招刷题】笔试及面试中常考知识点、手撕代码总结

    文章目录 一.笔试/面试常考知识点 二.面试常考手撕代码 2.1.基本电路设计 2.2.复杂电路设计 2.3.跨时钟域设计 一.笔试/面试常考知识点 奇.偶.小数分频 [Verilog基础]分频器实现 ...

  9. 2023华为OD面试手撕代码经验分享

    我们先来看下这个同学的面试经历吧,非常有借鉴的意义. [22届考研渣渣的od求职之旅,推荐一下两个人,德科hr和牛客的老哥] "*********",hr给了机会吧,一开始我都没想 ...

最新文章

  1. 泛型推断类型不符合上限
  2. 10分钟认识RAID磁盘阵列技术!!!
  3. Epic苹果诉讼案,却把索尼微软Steam都拉下水,网友忙吃瓜
  4. python自学入门教程-Python基础教程,Python入门教程(非常详细)
  5. css画三角形和提示框
  6. 成功解决NameError: name 'apply' is not defined
  7. 地理数据库 (geodatabase) 的架构
  8. python调用linux命令输出结果,Python-运行shell命令并捕获输出
  9. OpenCV探索之路(十):图像修复技术
  10. 优达学城深度学习之六——TensorFlow卷积神经网络
  11. Java知多少(9) import及Java类的搜索路径
  12. rabbitmq接收不到消息_SpringBoot2.x系列教程63--SpringBoot整合消息队列之RabbitMQ详解
  13. docker java镜像_Docker容器引擎与架构
  14. JAVA面试总结(初版)
  15. 国际人工智能领域著名科学家,受聘同济大学名誉教授
  16. Python实现求矩阵的伴随矩阵
  17. crt、cer类型证书转换成bks
  18. 求过圆心直线与圆的两个交点
  19. 处理亚马逊差评的几个方法
  20. APP遇到大量的真实手机号刷注册用户该如何应对?

热门文章

  1. 设置linux的console为串口【转】
  2. spring boot几个初始配置文件
  3. android启动效果
  4. linux C 编译时手动链接遇到的问题(未解决)
  5. 一位 女生在第一次应聘软件开发工作时成功被淘汰的例子
  6. C#中全角转半角以及半角转全角
  7. 卷影副本--给你后悔的机会,文件误删除,误更改,能够找到以前的版本。
  8. PostgreSQL代码分析,查询优化部分,canonicalize_qual
  9. NTLDR is missing Press any key to restart
  10. easyui和My97DatePicker结合使用报“权限错误”的问题