首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2019年Java面试题基础系列228道(4),快看看哪些还不会?

16、我们创建一个包含可变对象的不可变对象? 17、Java 中应该使用什么数据类型来代表价格? 18、怎么将 byte 转换为 String?...一种实践是用 volatile 修饰 long 和 double 变量,使其按原子类型来读写。...意思就是说,在你写一个 volatile 域时,保证任何线程都能看到你写的值,同时,在写之前,也保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。...伪共享是多线程系统(每个处理器有自己的局部缓存)中一个众所周知的性能问题。伪共享发生在不同处理器的上的线程对变量的修改依赖于相同的缓存行。 8、什么是 Busy spin?我们为什么要使用它?...详情参见答案,一步一步指导在 Java中创建一个不可变的类。 16、我们创建一个包含可变对象的不可变对象

65500

线程的基础回顾

活锁:线程没有出现阻塞,一直处于等待的状态. 2.死锁满足的条件 这四个条件同时满足,就会产生死锁。 互斥,共享资源X和Y只能被一个线程占用。...写入,找到发生冲突的最近的空闲单元。 查找,从发生冲突的位置往后查找。...//volatle缓存行的填充 ->性能问题 7.java中的++操作是线程安全?...不是线程安全的,原子性,有序性,可见性 ++操作无法满足原子性 8.线程什么时候抛出InterruptedException()、 t.interrupt()去中断一个处于阻塞状态下的线程时,(join...java的内存模型是一种抽象的内存模型,他定义了共享内存中多线程程序对于我们共享内存读写规范,规范体现在虚拟机中把共享变量储蓄到内存中,以及获取共享变量的底层细节实现,然后通过一些规则对内存读写的一种约束

32120
您找到你想要的搜索结果了吗?
是的
没有找到

美团一面,看看你能否回答上来?

violate了解?他的原理是什么?violate是线程安全?为什么不是? 9、保证线程安全的解决方法有哪些?说一说读写锁吧,读写锁的读 10、数据库的索引有哪几种?为什么要用B+树来做索引?...考察的是JVM内存模型,通常也是考察JVM运行时数据区,注意,这里千万别把Java内存模型搞进来,Java内存模型叫做JMM。 说到JVM运行时数据区,就会提到线程私有和线程共享。...同时聊到垃圾回收算法有哪些?垃圾收集器有哪些?最新的垃圾收集器是什么?有什么特性? 熟悉哪些JVM调优参数?...这个问题理论性比较强,背背面试题,基本上搞定。 9、保证线程安全的解决方法有哪些?说一说读写锁吧,读写锁的读 这些都是理论性的,背背面试题就能解决,不是一定要使用过。...说说是怎么做的? 这个相当于是MySQL数据库的8连问,8个连环炮回答上来几个?基本上也都是平时多看看面经,背背面试题也应对。 11、Redis了解说说怎么用Redis实现分布式锁?

46230

彻底理解Java内存模型,它为什么引发线程安全问题【吐血总结】

扯好多好多、聊好远好远,但是不要慌,我们整理下问题先: 什么是Java内存模型?...据当事人陈述: 线程在操作数据时,从主内存中拷贝一份数据副本到自己的工作内存,操作完再写回主内存,那如果这个数据超级大,也拷贝到工作内存?...cpu厂商推出了多核处理器,又引出了另一个问题: 线程安全 多核处理器的每个核心都有自己的高速缓存(每个cpu架构都不同,要具体看cpu厂商怎么做,目前市面上的cpu一般都是L1、L2独立,L3共享)...) 所以,现在问题来了,如果不同核心上的线程同时操作同一个数据,会出现什么问题?...、处处运行 又回到最初的起点、记忆中青涩的脸~ 现在公布答案 说到这儿,再扯一嘴cpu更底层的冷知识 指令重排 并发编程中,除了Java内存模型带来的线程安全问题,cpu、虚拟机自身也存在类似问题

30020

如何理解 rust 中的 Sync、Send?

但我又仔细想想,互斥锁和读写锁到底差在哪儿,导致了这种情况呢?—— 读写锁允许并行地读。 所以答案很明了了,如果 T 不 Sync,就不能让多个线程同时拿到 T 类型对象的不可变引用。 并行读?...内存安全? 所以,并行只读导致内存安全?这似乎不符合直觉。那到底是啥原因呢? 这里可以思考一下,rust 的不可变引用真的“只读”?...那既然这个需求不可避免,我们又要怎样保证 rust 的内存安全呢?...Send: 安全共享 关于 Send 和 Sync 的联系,大多数文档都会说 “只要实现了 Sync 的类型,其不可变借用就可以 安全地在线程间共享”。...对于 RwLock, 应该保证 T 是 Sync 的,否则它就和 RefCell 没啥区别。只不过原本因为 RefCell panic 的逻辑现在因为 RwLock 死锁。

2.8K51

C++后台研发工程师2018年BAT华为网易等面经总结

JAVA(不会别问)  数据库用过哪些(没用过别问),数据库的索引介绍一下(。。。) ...修饰的变量如何处理、一个空对象的大小是多少、函数重载时编译器是如何工作的、内存对齐的原则  分布式系统中CAP原则,给出具体的场景  用过哪些分布式的系统,解决了什么问题  B+树和红黑树的特点,为什么红黑树保持较好的平衡性...手写个双向链表,带插入删除等功能  bitmap用过,介绍一下可以使用在什么场景  实习答辩面:  介绍实习做的东西  进程通信-共享内存怎么用  实现无锁循环队列的基础是什么  DDR4 2400MHZ...说说方案性能比内存读写带宽差这么多的原因(被无情diss)  unreal engine如何是进行内存管理的,介绍一下它处理一张贴图的流程? ...缺页中断什么时候会发生  fork时的cow技术介绍一下  说下知道的内核中所有用到内存zero copy的地方  写一个波浪子序列的题  shell脚本怎么写  linux中VFS是什么,和其他具体的文件系统如何配合工作的

1K30

Java 面试问题大全

意思就是说,在你写一个 volatile 域时,保证任何线程都能看到你写的值,同时,在写之前,也保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。...伪共享发生在不同处理器的上的线程对变量的修改依赖于相同的缓存行,如下图所示: 伪共享问题很难被发现,因为线程可能访问完全不同的全局变量,内存中却碰巧在很相近的位置上。...23)Java 中 ++ 操作符是线程安全? 不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。...106)能解释一下里氏替换原则?(答案) 107) 什么情况下违反迪米特法则?为什么会有这个问题?(答案) 迪米特法则建议“只和朋友说话,不要陌生人说话”,以此来减少类之间的耦合。...124)什么时候使用享元模式? 享元模式通过共享对象来避免创建太多的对象。为了使用享元模式,需要确保的对象是不可变的,这样才能安全共享

88740

java大公司后端多线程面试题最强分享

假设有三个操作数:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,才会将内存值修改为B并返回true,否则什么都不做并返回false。...的最大优势,任何情况下,Hashtable同时有两条线程获取Hashtable中的数据?...不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差 40、有哪些多线程开发良好的实践?...如果知道该成员变量会被多个线程访问,如计数器、价格等,最好是将其设置为 volatile。为什么?...意思就是说,在你写一个 volatile 域时,保证任何线程都能看到你写的值,同时,在写之前,也保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。

60310

分享 Java 常见面试题及答案(上)

一种实践是用 volatile 修饰 long 和 double 变量,使其按原子类型来读写。...意思就是说,在你写一个 volatile 域时,保证任何线程都能看到你写的值,同时,在写之前,也保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。...伪共享发生在不同处理器的上的线程对变量的修改依赖于相同的缓存行,如下图所示: ? 有经验程序员的 Java 面试题 8)什么是 Busy spin?我们为什么要使用它?...详情参见答案,一步一步指导在 Java 中创建一个不可变的类。 16)我们创建一个包含可变对象的不可变对象?...23)Java 中 ++ 操作符是线程安全? 不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。

72220

不好奇 CPU 是如何执行任务的?

---- 前言 清楚下面这几个问题? 有了内存,为什么还需要 CPU Cache? CPU 是怎么读写数据的? 如何让 CPU 能读取数据更快一些? CPU 伪共享是如何发生的?又该如何避免?...如果的任务对响应要求很高,希望它总是被先调度,这该怎么办? … 这篇,我们就来回答这些问题。 ? ---- 正文 CPU 如何读写数据的?...可以不用管 NICE_0_LOAD 是什么就认为它是一个常量,那么在「同样的实际运行时间」里,高权重任务的 vruntime 比低权重任务的 vruntime 少,可能奇怪为什么是少的?...还记得 CFS 调度,它是优先选择 vruntime 少的任务进行调度,所以高权重的任务就会被优先调度了,于是高权重的获得的实际运行时间自然就多了。...所谓的 Cache Line 伪共享问题就是,多个线程同时读写同一个 Cache Line 的不同变量时,而导致 CPU Cache 失效的现象。

85930

快问快答!

可能听到 Redis 6.0 版本支持了多线程技术,不过这个并不是指多个线程同时在处理读写命令,而是使用多线程来处理 Socket 的读写,最终执行读写命令的过程还是只在主线程里。...如果采用多线程模型来处理读写命令,虽然提升并发性能,但是它却引入了程序执行顺序的不确定性,带来了并发读写的一系列问题,增加了系统复杂度、同时可能存在线程切换、甚至加锁解锁、死锁造成的性能损耗。...可以看到,当一个内存块 10MB 大小用完后,就会通过 zmalloc() 在申请一个内存块,并将其追加到链表的末尾。 如果遇到系统内存紧张,导致申请内存失败时会发生什么呢?...AOF 重写日志和 bgsave 快照生成都是通过创建子进程来负责的,这里使用子进程而不是线程,是因为如果是使用线程,多线程之间共享内存,那么在修改共享内存数据的时候,需要通过加锁来保证数据的安全,而这样就会降低性能...而使用子进程,创建子进程时,父子进程是共享内存数据的,不过这个共享内存只能以只读的方式,而当父子进程任意一方修改了该共享内存,就会发生「写时复制」,于是父子进程就有了各自独立的数据副本,就不用加锁来保证数据安全

36130

java基础题目总结

1.servlet是单例的,是安全,是多线程 servlet是单例的,根据web.xml实例化一次后,其他访问通过多线程的方式调用servlet实例。...2.什么是线程安全?常用的HashMap,ArrayList是否安全?...线程安全问题的重点还是共享变量的问题,想了解关于共享变量的变化就要了解jmm(java memory model),简单的说就是线程有工作区,变量放在内存堆中。...正是因为线程读和写是分两步进行的,在这之间会发生的其他操作造成最终结果的不准确,这就是不安全的原因:原子性。只有保证读写操作是原子的才能保证变量的准确性,于是就是线程同步,即上锁。...4.volatile有什么用?能否用一句话说明下volatile的应用场景? 详细见volatile。 volatile保证可见性和一定的有序性。

77390

聊聊Linux IO(下)

文件读写遭遇断电时,数据还安全?相信有自己的答案了。使用O_SYNC或者fsync(2)刷新文件就能保证安全?现代磁盘一般都内置了缓存,代码层面上也只能讲数据刷新到磁盘的缓存了。...文件操作与锁 当多个进程/线程对同一个文件发生写操作的时候会发生什么?如果写的是文件的同一个位置呢?这个问题讨论起来有点复杂了。...当多个write(2)操作对一个文件的同一部分发起写操作的时候,情况实际上和多个线程访问共享的变量没有什么区别。按照不同的逻辑执行流,会有很多种可能的结果。...文件游标的移动和调用写操作是原子的,那写操作本身会不会发生改变呢?有的开源软件比如apache写日志就是这样写的,这是可靠安全?...前文提出的几个问题我并没有刻意去解答所有的,但是读到现在,不知道自己回答上几个了?

3.2K11

并发Bug之源有三,请睁大眼睛看清它们

写在前面 生活中一定听说过——能者多劳 作为 Java 程序员,一定听过——这个功能请求慢,加一层缓存或优化一下 SQL ?...小提示 从上图中也可以看出,在 Java 中,所有的实例域,静态域和数组元素都存储在堆内存中,堆内存在线程之间共享,这些在后续文章中都称之为「共享变量」,局部变量,方法定义参数和异常处理器参数不会在线程之间共享...多线程情况下得到我们期盼的 count = 20000 的值?也许有同学会认为,线程调用的 counter 方法只有一个 count++ 操作,是单一操作,所以是原子性的,非也。...,当初看到了什么(CPU 记住线程级别的信息),当让 "同时" 看 10 本甚至更多,切换的开销就很大了吧 综艺节目中有很多游戏,让一边数钱,又要一边做其他的事,最终保证多样事情都做正确,大脑开销大不大...Bug 的源头 本节说明了引发并发 Bug 的三个问题,接下来的文章逐个分析解决以上问题的办法 灵魂追问 为什么用 final 修饰的变量就是线程安全的了呢?

42710

2 万多字,183 道 Java 面试题分析及答案

我确定在自己的面试中见过很多这些问题,很多问题正确回答。 多线程、并发及线程的基础问题 1)Java 中创建 volatile 数组?...意思就是说,在你写一个 volatile 域时,保证任何线程都能看到你写的值,同时,在写之前,也保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。...(答案) 124)什么时候使用享元模式?(答案) 享元模式通过共享对象来避免创建太多的对象。为了使用享元模式,需要确保的对象是不可变的,这样才能安全共享。...Vector是一个线程安全? 如果的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。...40) Swing是线程安全?为什么可以很肯定的给出回答,Swing不是线程安全的,但是应该解释这么回答的原因即便面试官没有问你为什么

1K20

收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~

什么是多线程环境下的伪共享(false sharing)? 线程池如何调优,最大数目如何确认? Java 内存模型? 怎么实现所有线程在等待某个事件的发生才会去执行?...使用无界队列的线程池导致内存飙升? 为什么阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建? Future有缺陷嘛? JVM 篇 什么情况下会发生内存溢出。...ZGC 垃圾收集器,了解过 对象的访问定位有哪两种方式? 说一下 jvm 调优的工具? 对象什么时候进入老年代? 内存泄漏和内存溢出区别? 什么是tomcat类加载机制?...Redis的过期键的删除策略 Redis的内存用完了会发生什么? Redis如何做内存优化? Redis事务的三个阶段 Redis事务相关命令 Redis事务保证原子性,支持回滚?...通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法重载

1.1K20

Linux内核IO技术栈详解

写在前面 在开始正式的讨论前,我先抛出几个问题: 谈到磁盘时,常说的HDD磁盘和SSD磁盘最大的区别是什么?这些差异影响我们的系统设计?...真是这样?为什么少一次拷贝? 如果觉得这些问题都很简单,都能很明确的回答上来。那么很遗憾这篇文章不是为准备的,可以关掉网页去做其他更有意义的事情了。...文件读写遭遇断电时,数据还安全?相信有自己的答案了。使用O_SYNC或者fsync刷新文件就能保证安全?现代磁盘一般都内置了缓存,代码层面上也只能讲数据刷新到磁盘的缓存了。...文件操作与锁 当多个进程/线程对同一个文件发生写操作的时候会发生什么?如果写的是文件的同一个位置呢?这个问题讨论起来有点复杂了。首先write调用不是原子操作。...文件游标的移动和调用写操作是原子的,那写操作本身会不会发生改变呢?有的开源软件比如apache写日志就是这样写的,这是可靠安全

2.3K10

iOS今日头条第3轮面试回忆

4.2 题目: nonatomic是非原子操作符,为什么要这样,atomic为什么不行?有人说atomic耗内存觉得呢?保读写安全保证线程安全?...有的人说atomic并不能保证线程安全觉得他们的出发点是什么认同这个说法?...关于atomic和线程安全 atomic修饰的属性只能说是读/写安全的,但并不是线程安全的,因为别的线程还能进行读写之外的其他操作。线程安全需要开发者自己来保证。...4.7 题目: 分类中添加实例变量和属性分别会发生什么,编译时就报错,还是什么时候会发生问题?为什么 编译的时候,不能添加实例变量,否则报错。...如果不加atomic怎么样呢?当内存长度大于地址总线的时候,例如在64位系统下内存中读取无法像bool等纯量类型原子性完成,可能会在读取的时候发生写入,从造成异常情况。

1.4K20

疯转|最近5年133个Java面试问题列表

我确定在自己的面试中见过很多这些问题,很多问题正确回答。 多线程、并发及线程的基础问题 1)Java 中创建 volatile 数组?...意思就是说,在你写一个 volatile 域时,保证任何线程都能看到你写的值,同时,在写之前,也保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。...伪共享发生在不同处理器的上的线程对变量的修改依赖于相同的缓存行,如下图所示: 有经验程序员的 Java 面试题 伪共享问题很难被发现,因为线程可能访问完全不同的全局变量,内存中却碰巧在很相近的位置上。...106)能解释一下里氏替换原则?(答案) 107) 什么情况下违反迪米特法则?为什么会有这个问题?(答案) 迪米特法则建议“只和朋友说话,不要陌生人说话”,以此来减少类之间的耦合。...(答案) 124)什么时候使用享元模式?(答案) 享元模式通过共享对象来避免创建太多的对象。为了使用享元模式,需要确保的对象是不可变的,这样才能安全共享

2K50

浅墨: 聊聊Linux IO(下)

文件读写遭遇断电时,数据还安全?相信有自己的答案了。使用O_SYNC或者fsync(2)刷新文件就能保证安全?现代磁盘一般都内置了缓存,代码层面上也只能讲数据刷新到磁盘的缓存了。...文件操作与锁 当多个进程/线程对同一个文件发生写操作的时候会发生什么?如果写的是文件的同一个位置呢?这个问题讨论起来有点复杂了。...当多个write(2)操作对一个文件的同一部分发起写操作的时候,情况实际上和多个线程访问共享的变量没有什么区别。按照不同的逻辑执行流,会有很多种可能的结果。...文件游标的移动和调用写操作是原子的,那写操作本身会不会发生改变呢?有的开源软件比如apache写日志就是这样写的,这是可靠安全?...前文提出的几个问题我并没有刻意去解答所有的,但是读到现在,不知道自己回答上几个了?

1.1K20
领券