Java 内存模型
多线程环境下,可以通过happens-before原则来保证操作的有序性,比如通过锁的获取和释放、volatile变量的读写等操作都可以建立happens-before关系。数据依赖性:JMM会对存在数据依赖性的操作进行排序,避免因重排序而导致数据不一致的问题。内存屏障(MemoryBarrier):为了确保某些操作的顺序执行,JMM会在适当的位置插入内存...
这些年背过的面试题——个人项目篇
框架主要有Web框架和RPC框架。其中,Web框架主要用于提供HTTP接口给浏览器访问,所以Web框架的选型在秒杀服务中非常重要。在这里,我推荐Gin,它的性能和易用性都不错,在GitHub上的Star达到了44k。对比性能最好的fasthttp,虽然fasthttp在请求延迟低于10ms时性能优势明显,但其底层使用的对象池...
Java 堆内存是线程共享的!面试官:你确定吗?
在线程初始化时,虚拟机会为每个线程分配一块TLAB空间,只给当前线程使用,当需要分配内存时,就在自己的空间上分配,这样就不存在竞争的情况,可以大大提升分配效率。所以,“堆是线程共享的内存区域”这句话并不完全正确,因为TLAB是堆内存的一部分,他在读取上确实是线程共享的,但是在内存分配上,是线程独享的。TLAB...
字节跳动Java后端面试真题,看完你学会了吗,「附面试福利」
Vector是Java早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。Vector内部是使用对象数组来保存数据,可以根据需要自动的增加容量,当数组以满时,会创建新的数组,并拷贝原有数组数据。ArrayList是应用更加广泛的动态数组实现,它本身不是线程安全的,所以性能要好很多。与Vector近似...
如何优雅的使用 ThreadLocal,请查阅我的这篇文章
维持线程封闭性的一种更规范的方法就是使用ThreadLocal,这个类能使线程中的某个值与保存的值的对象关联起来。ThreadLocal提供get和set等接口或方法,这些方法为每一个使用这个变量的线程都存有一份独立的副本,因此get总是返回由当前线程在调用set时设置的最新值。ThreadLocal有如下方法。
阿里Java资深架构师详解大厂多线程面试题,想进大厂这些不得不知
1)继承Thread类实现多线程2)实现Runnable接口方式实现多线程3)使用ExecutorService、Callable、Future实现有返回结果的多线程4.启动线程方法start()和run()有什么区别?只有调用了start()方法,才会表现出多线程的特性,不同线程的run()方法里面的代码交替执行(www.e993.com)2024年11月8日。如果只是调用run()方法,那么代码还是同...
从1.6W名面试者中收集的Java面试题精选汇总(内附知识脑图)
缓存使用1、Redis有哪些类型2、Redis内部结构3、聊聊Redis使用场景4、Redis持久化机制5、Redis如何实现持久化6、Redis集群方案与实现7、Redis为什么是单线程的8、缓存奔溃9、缓存降级10、使用缓存的合理性问题消息队列1、消息队列的使用场景...
报表工具的二次革命
比如许多报表工具都支持纵向分栏,但很少有报表工具支持横向分栏。而用SPL可以将原数据集变换成横向拼接过的数据集,报表工作只要用普通的模板呈现列数更多的数据集即可。·丨一致的多样性数据源支持现代报表的数据源并不只是数据库,还可能是文本文件或json、XML等。这些非数据库数据源没有再计算能力,但出报表...
当之无愧的影音旗舰 vivo Xplay全面评测
不锈钢外壳两边则为塑料质地,双扬声器的设计保证了良好的外放效果。不锈钢背壳双扬声器不锈钢外壳与上面塑料构件的接合处放置有1300万像素的摄像头,下面为降噪mic和LED闪光灯;vivo的logo被镶嵌到不锈钢外壳上也显得比较有档次。机身左侧只有microSIM卡的针式卡槽,右边为金属按键。阳极氧化铝按键vivoXplay使用...