当前位置: 首页 > news >正文

网站建设公司业务员cf网站编程

网站建设公司业务员,cf网站编程,商城 静态网站模板,电商网站模板建站前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!引用类型有哪些?有什么区别?说说你对JMM内存模型的理解?为什么需要JMM?多线程有什么用?似乎有点模糊了,那…

前言

本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!引用类型有哪些?有什么区别?说说你对JMM内存模型的理解?为什么需要JMM?多线程有什么用?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘

*** 12万字的java面试题整理 ***
*** java核心面试知识整理 ***
*** Java高频面试讲解视频(知识涵盖齐全) ***

说说你对JMM内存模型的理解?为什么需要JMM?

随着CPU和内存的发展速度差异的问题,导致CPU的速度远快于内存,所以现在的CPU加入了高速缓存,高速缓存一般可以分为L1、L2、L3三级缓存。基于上面的例子我们知道了这导致了缓存一致性的问题,所以加入了缓存一致性协议,同时导致了内存可见性的问题,而编译器和CPU的重排序导致了原子性和有序性的问题,JMM内存模型正是对多线程操作下的一系列规范约束,因为不可能让陈雇员的代码去兼容所有的CPU,通过JMM我们才屏蔽了不同硬件和操作系统内存的访问差异,这样保证了Java程序在不同的平台下达到一致的内存访问效果,同时也是保证在高效并发的时候程序能够正确执行。
在这里插入图片描述

  • 原子性:Java内存模型通过read、load、assign、use、store、write来保证原子性操作,此外还有lock和unlock,直接对应着synchronized关键字的monitorenter和monitorexit字节码指令。
  • 可见性:可见性的问题在上面的回答已经说过,Java保证可见性可以认为通过volatile、synchronized、final来实现。
  • 有序性:由于处理器和编译器的重排序导致的有序性问题,Java通过volatile、synchronized来保证。
happen-before规则

虽然指令重排提高了并发的性能,但是Java虚拟机会对指令重排做出一些规则限制,并不能让所有的指令都随意的改变执行位置,主要有以下几点:

  1. 单线程每个操作,happen-before于该线程中任意后续操作
  2. volatile写happen-before与后续对这个变量的读
  3. synchronized解锁happen-before后续对这个锁的加锁
  4. final变量的写happen-before于final域对象的读,happen-before后续对final变量的读
  5. 传递性规则,A先于B,B先于C,那么A一定先于C发生
说了半天,到底工作内存和主内存是什么?

主内存可以认为就是物理内存,Java内存模型中实际就是虚拟机内存的一部分。而工作内存就是CPU缓存,他有可能是寄存器也有可能是L1\L2\L3缓存,都是有可能的。

多线程有什么用?

一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然",“会用"只是"知其然”,“为什么用"才是"知其所以然”,只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:
(1)发挥多核CPU的优势
随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。
(2)防止阻塞
从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。
(3)便于建模
这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。

http://www.yayakq.cn/news/215175/

相关文章:

  • 遵义制作网站网络维护电话
  • 学院网站建设进度情况说明景德镇seo
  • 上海建设工程招投标网站在线html编辑
  • 新华书店网站建设做网站需要具备什么
  • 网站开发的上市公司有哪些为什么大公司开发网站
  • 郑州网站建设+论坛餐饮企业网站模板
  • 网站目录文件网站用绝对路径好还是相对路径seo
  • 网站建设的人性分析济南微信网站
  • 云南昆明做网站win7 iis 默认网站
  • 重庆网站建设学习搜索引擎优化教材答案
  • 做网站备案要多久建立无上气运皇朝
  • google网站管理员中心宁夏网页制作公司
  • flash素材网站有哪些展示型网站制作
  • 短网址网站用户界面设计模板
  • 在别人网站挂黑链数据分析网站怎么做
  • cms做视频网站松江品划网络做网站
  • 搭建网站 软件wordpress添加微信扫码支付宝
  • 在哪里建网站好设计网站的公司名称
  • 邢台seo一站式国家企业信用信息没有网站怎么做
  • 中国城乡住房和建设部网站首页使用代理服务器后看什么网站
  • 广州域名企业网站建站哪家好广州网站开发哪家公司好
  • 昆山做网站公司哪家好wordpress媒体库的目录错误
  • 彩票网站建设哪里高端建材项目
  • 教育培训网站设计怎么制作自己的二维码
  • 网站建设行业赚钱么上海学校网站建设
  • 深圳建模板网站一个前端页面多少钱
  • 微网站免费模板跨境电商平台有哪些可以加盟
  • 一个考试网站怎么做搜索网站内容
  • 一起做英语作业网站黄石手机网站建设
  • 中信建设有限责任公司官方网站跨境电商erp软件排名