1、上下文切换

上下文定义

cpu发生进程或者线程切换时,所依赖的数据集合,比如一个函数有外部变量,函数运行时,必须获取外部变量,这些变量值的集合就是上下文。

引发问题

对于CPU密集型任务,多线程处理会发生上下文切换,会影响到执行速度,如果时IO密集型,多线程技术优点尽显。

如何减少上下文切换

  • 无锁并发编程,锁的获取与释放会发生上下文切换,多线程时会影响效率。无锁并发编程就是将数据分块,每个线程处理各自模块。比如LongAdder中部分代码。
  • CAS算法,并发编程时通过CAS算法更新数据,而不必加锁。如Java的atomic包下的工具类。
  • 使用最少线程,减少不必要的线程创建,自定义线程池。
  • 使用协程,在单线程中维护多任务调度,处理任务间切换,Golang对于协程的使用很强大。

2、死锁

死锁定义

死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。
系统发生死锁现象不仅浪费大量的系统资源,甚至导致整个系统崩溃,带来灾难性后果。

产生死锁原因

  • 系统资源不足
  • 进程推进顺序不当
  • 资源分配不合理

死锁产生的必要条件

  • 互斥条件:一个资源只能被一个进程或者线程使用。
  • 请求和保持条件:一个进程或者线程,请求资源的时候发生阻塞,对已经获取的资源保持不放。
  • 不可剥夺条件:进程或者线程以获得的资源,在未使用完成时,不能强行剥夺。
  • 循环等待条件:若干进程或者线程形成一种头尾相接的循环等待的资源关系。

这四分条件是死锁产生的必要条件,只要发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

如何避免死锁

  1. 以确定的顺序获得锁
  2. 加锁时限

Lock接口提供了boolean tryLock(long time, TimeUnit unit) throws InterruptedException方法,该方法可以按照固定时长等待锁,因此线程可以在获取锁超时以后,主动释放之前已经获得的所有的锁。

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图),有需要的可以戳这里免费领取

最新整理电子书

[外链图片转存中…(img-7iOtNfLv-1624947253361)]

最新整理电子书

java开发实战经典答案百度云,含面试题+答案相关推荐

  1. 李兴华java视频在线观看_李兴华Java开发实战经典视频教程_IT教程网

    资源名称:李兴华Java开发实战经典视频教程 资源目录: [IT教程网]010201_[第2章:简单Java程序]_简单Java程序 [IT教程网]010301_[第3章:Java基础程序设计]_Ja ...

  2. 李兴华java实战经典视频_李兴华Java开发实战经典视频教程

    资源名称:李兴华Java开发实战经典视频教程 资源目录:[一品资源网]010201_[第2章:简单Java程序]_简单Java程序[一品资源网]010301_[第3章:Java基础程序设计]_Java ...

  3. 吃一堑长一智!java开发实战经典答案百度云

    第一个:Alibaba[搜索推荐] 一面:算法题:长度为n的数组里放了n+1个大小在[1,n]的数,必然至少有一个重复的数,找出来 二面:概率题:求一根绳子被切两刀能组成一个三角形的概率. 三面主管面 ...

  4. Java开发实战经典 目录

    目录 第1部分  Java基础程序设计 第1章  Java概述及开发环境搭建 2 视频讲解:35分钟 1.1  认识Java 2 1.1.1  什么是Java 2 1.1.2  Java语言的特点 3 ...

  5. GitHub上标星75k+超牛的《Java面试突击版》,java开发实战经典第二版答案

    运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试: 1.自我介绍.(你可千万这样介绍: "我叫某某,性别,来自哪里,学校是哪个,自己爱干什么" ...

  6. Java开发实战经典第二版,小白也能看明白

    数据库 2.1 池化技术:如何减少频繁创建数据库连接的性能损耗? 2.2 数据库优化方案(一):查询请求增加时,如何做主从分离? 2.3 数据库优化方案(二):写入数据量增加时,如何实现分库分表? 2 ...

  7. java开发实战经典第二版网课,成功收获美团,小米offer

    一.公务员都不要35岁以上的,何况大公司 这让很多人感到惶恐,现在职场上有一种现象:很多用人单位会在招聘信息上明确标注,年龄需在35岁以下.为什么有经验.有人脉的职场中年人会如此遭"嫌弃&q ...

  8. java开发实战经典学习笔记第2部分

    18. 面向对象的三大特征:继承,封装,多态. 19. 多态分方法重载和对象多态. 20. 对象使用前必须实例化,堆栈内存空间的开辟(new关键字),一个栈内存只能指向一个堆内存. 21. 构造方法: ...

  9. java开发实战经典(第二版)P452 12-3

    12.3   从键盘传入多个字符串到程序中,并将他们按逆序输出在屏幕上. package book;import java.util.Scanner;public class JiOu {public ...

最新文章

  1. 太狠!33岁年薪50万:“复工第一天,谢谢裁掉我!” 网友:有底气!
  2. 京东AI一把手周伯文被曝离职创业,曾任技术委员会主席,毕业于中科大少年班...
  3. “计量确认”与“检定”之区别
  4. mysql新增阵列df_DF学Mysql(二)——数据表的基本操作
  5. mysql as_mysql AS子句
  6. Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
  7. Codeforces Round #686 (Div. 3) E. Number of Simple Paths 基环树 + 容斥
  8. i/o timeout , 希望你不要踩到这个net/http包的坑
  9. C#热血传奇游戏服务端再次开源更新
  10. svm手写数字识别python_SVM之Mnist手写数字识别
  11. “真功夫”与“花拳绣腿”
  12. wifidog 整体分析
  13. pip安装的依赖不在虚拟环境中
  14. 基于Android的火灾报警
  15. linux如何批量操作,linux批量操作命令锦集
  16. 如何用开源飞控PIXHAWK进行二次开发?
  17. Android Telephony纲要
  18. XILINX FPGA 7K325T 烧录MCS文件后无法自启动的问题
  19. DHTML中重要的属性方法 (献给DHTML初学者)
  20. HBuilder开发词典app(一)--基本页面布局

热门文章

  1. Java中的异常栈轨迹和异常链
  2. c#获取系统时间的方法
  3. oracle数据库swap占用率高,物理内存空余很多,swap被持续占用的问题
  4. jenkins pipeline api获取stage的详细信息_Jenkins + Docker 助力 Serverless 应用构建与部署...
  5. uniapp弹出框_uniApp上拉刷新,下拉加载,以及筛选功能
  6. java string对象创建对象_Java String 创建了几个对象
  7. 电子科大专科c语言作业1,电子科大15春《C语言(专科)》在线作业试卷.docx
  8. php绘制一个三角形,如何利用css或html5画出一个三角形?两种不同的制作三角形方法(代码实例)...
  9. mysql启动时执行sql server_常见 mysql 启动、运行.sql 文件错误处理
  10. 字符串连接“+”int、char、string