1、上下文切换

上下文定义

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

引发问题

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

如何减少上下文切换

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

2、死锁

死锁定义

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

产生死锁原因

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

死锁产生的必要条件

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

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

如何避免死锁

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

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

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

需要面试题以及项目大纲的朋友点赞+收藏后,点击这里免费获取!诚意满满!!

Java面试精选题、架构实战文档:传送门

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

.com/vip204888/java-p7)**

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

flutter中文网!开课吧java全栈相关推荐

  1. java 前端工作内容_java前端、java后端、java全栈工作主要内容是什么?哪个薪资高?...

    摘要 最近,听了一场关于java全栈工程师职位的简介说明,里面很清楚的说明了一下前端,后端,全栈都是做什么工作的.其实,想做这个行业,就应该了解职能以及技能需求,这样学习才能更高效.我知道一些刚刚入行 ...

  2. 全栈工程师薪水_2020 Java 全栈工程师进阶路线图,不可错过

    技术更新日新月异,对于初入职场或者刚开始学习的同学来说,经常会困惑该往那个方向发展,这一点所有刚开始学习的人基本都有这个体会的. 刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺 ...

  3. Java全栈学习路线-拭去心尘

    一.JavaSE(熟练使用IDEA(私下学习可以,但进公司做项目不要使用破解版)和Eclipse) 辅助语言:C++(面向对象语言,偏向底层,语法和Java类似,我个人偏好C++为辅助语言)+pyth ...

  4. 2019 Java 全栈工程师进阶路线图,一定要收藏

    技术更新日新月异,对于初入职场的同学来说,经常会困惑该往那个方向发展,这一点松哥是深有体会的. 我刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺序,我相信这也是很多初学者经常面 ...

  5. Java全栈工程师学习

    Java全栈看似内容庞杂,只要掌握方法成功离我们很近,话不多说,上硬货! Web后端架构 后端进阶第一步,先把Web架构相关的技术学好吧,因为之前大家都做过Java Web项目,想必对这块内容还是比较 ...

  6. java全栈系列之JavaSE--冒泡排序028

    冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...

  7. 开课吧WEB全栈架构师【6期,9-12期】

    课程目标 帮助那些追求卓越的初级前端工程师(至少-年以上经验)系统提升研发实力,达到一线互联网企业中高级前端工程师的技能水平.( 技能水平对标:百度T6-T7 ) 适合人群 1-3三年经验前端开发工程 ...

  8. 各大互联网公司面经分享:Java全栈知识+1500道大厂面试真题

    这篇文章给大家分享一下我遇到的一些质量较高的面试经历,具体经过就不多说了,就把面试题打出来供各位读者老哥参考如有不全的地方,各位海涵. 猿辅导 八皇后问题 求二叉树的最长距离(任意两个节点的路径 中最 ...

  9. 各大厂面经分享:Java全栈知识+1500道大厂面试真题

    这篇文章给大家分享一下我遇到的一些质量较高的面试经历,具体经过就不多说了,就把面试题打出来供各位读者老哥参考如有不全的地方,各位海涵. 猿辅导 八皇后问题 求二叉树的最长距离(任意两个节点的路径 中最 ...

最新文章

  1. 面试官:谈谈分布式锁的实现
  2. mxnet安装及NDArray初体验
  3. Java与Unicode
  4. Boost:bimap双图项目的测试程序
  5. WIF(Windows Identity Foundation) 被动联合身份验证过程详解
  6. openssh登陆时提示服务器拒绝了密码
  7. SQL中使用DISTINCT显示多个字段的方法(不使用DISTINCT了)
  8. 教你怎样做个有“钱”途的測试project师
  9. java 线程亲缘性_第7章 线程调度、优先级和亲缘性(1)
  10. eclipse项目如何变成web项目_IntelliJ IDEA 部署 Web 项目,终于搞懂了!
  11. Atitit. servlet 与 IHttpHandler  ashx  listen 和HttpModule的区别与联系 原理理论 架构设计   实现机制    java php c#.net j
  12. 前端开发必须知道的JS(二) 闭包及应用
  13. springcloud搭建实战<十一>【config配置中心】
  14. 工具 · GIF录屏licecap for Mac
  15. 人工神经网络的训练步骤,神经网络训练过程图解
  16. ir2113错误电路
  17. 华为Atlas 500智能小站如何使能边缘计算?
  18. 遗传算法求解3D打印中零件二维排布问题(MATLAB实现)
  19. c语言curses小游戏,基于curses库实现弹球游戏
  20. [设计] 香港地铁站点主题色的配色

热门文章

  1. 3D建模教程:3DMAX插件示例!
  2. spark Error initializing SparkContext System memory 466092032 must be at least 471859200.
  3. 【Linux】linux中你不得不爱的命令集(上)
  4. 网络教室服务器维护,学校校园因特网网络维护制度方案范文
  5. Python题目:学生信息管理系统
  6. seo(网站优化)-网站改版的处理方法
  7. 全网最硬核 Java 新内存模型解析与实验 - 2. 原子访问与字分裂
  8. Java 当前时间转农历
  9. 腾讯也有今天,这款软件被指抄袭“微信”,腾讯提起上诉
  10. 焊盘、封装、电路板的创建