总结
以上是字节二面的一些问题,面完之后其实挺后悔的,没有提前把各个知识点都复习到位。现在重新好好复习手上的面试大全资料(含JAVA、MySQL、算法、Redis、JVM、架构、中间件、RabbitMQ、设计模式、Spring等),现在起闭关修炼半个月,争取早日上岸!!!
下面给大家分享下我的面试大全资料
- 第一份是我的后端JAVA面试大全
后端JAVA面试大全
- 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
- 第三份是Spring全家桶资料
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
在我们日常项目开发工作中,对于并发场景中经常出现的神奇的Bug
大都是由于并发编程中的三个核心问题的不深入理解导致的,即如何进行高效的线程任务分配,如何有效的进行线程之间的相互协作以及如何保证在同一时刻只有一个线程进行共享变量的访问。那我们该如何解决并发编程这三座大山呢,这就需要我们对于Java
的内存模型有着深入的理解。本文主要从以下几个方面来阐述Java
的内存模型,希望对于学习并发编程的童鞋有所裨益。
-
并发编程三大特性说明
-
volatile关键字说明
-
Java内存模型
-
总结
1、原子性
所谓原子性操作,就是类似数据库的事务操作,对应的一个操作或者多个操作,要么全部完成,要么全都失败。所有的操作不会被外界因素打断。
2、可见性
所谓可见性特性,就是当多个线程访问同一个变量时,如果一个线程修改了该值。其他线程也可以立马看到被修改后的变量的值。Java
中volatile
关键字保证了变量的可见性。当变量被volatile
关键字修饰后,只要有线程修改了该变量值时,修改后的值会被立即刷新到主存中。其他线程进行共享变量读取时,会从主存中进行数据读取。如下图所示:
3、有序性
所谓有序性,是指在操作系统中程序的执行顺序和编写的代码的顺序是一致的。但是在Java
内存模型中,为了提升运行效率是允许编译器和处理器对指令进行重排序的,但是不影响单线程运行的最终结果。
总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来
目录:
部分内容截图:
e56a57acb)收录**