Stella981 Stella981
3年前
40 道 Java 并发编程高频面试题解析
1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:1)发挥多核CPU的优势随着工业的进步,现在的
Wesley13 Wesley13
3年前
Java原子类操作原理剖析
◆CAS的概念◆对于并发控制来说,使用锁是一种悲观的策略。它总是假设每次请求都会产生冲突,如果多个线程请求同一个资源,则使用锁宁可牺牲性能也要保证线程安全。而无锁则是比较乐观的看待这个问题,它会假设每次访问都没有冲突,这样就提高了效率。但是事实难料、这个冲突是避免不了的,无锁也考虑到了肯定会遇到冲突,对于冲突的解决无锁就使用一种比较交换(CA
Wesley13 Wesley13
3年前
mongo数据库的迁移遇到的坑
  由于公司项目原因需要把大量图片导入到mongo中,于是乎用java写了个小脚本,遍历图片文件夹,把所有的图片导入mongo中,图片数量庞大100多万张。最开始单线程跑,跑了一会发现很慢,十多分钟传了几千张,一合计这得跑到猴年马月啊。分析了一下mongo服务器在本地测试环境,网络传输不是问题。那大部分时间应该消耗磁盘IO上了。于是乎启动了8个线程跑
Wesley13 Wesley13
3年前
Java 并发底层知识,锁获取超时机制知多少?
当我们在使用Java进行网络编程时经常会遇到很多超时的概念,比如一个浏览器请求过程就可能会产生很多超时的地方,当我们在浏览器发起一个请求后,网络socket读写可能会超时,web服务器响应可能会超时,数据库查询可能会超时。而对于Java并发来说,与超时相关的内容主要是线程等待超时和获取锁超时,比如调用Object.wait(long)就会使线程进入等待状并在
Stella981 Stella981
3年前
Netty之粘包问题解决
最近接到一项新的任务,其中涉及到用netty解决粘包问题,该问题解决得很顺利。下面是一些心得体会。我们知道,netty当中有boss线程和worker线程,通常是1对多的关系,可以理解为boss接到客户的请求之后,分配给其中一个worker去处理,如果客户过多,可能会出现一个worker服务多个客户的情况。这是背景。按照我的理解,粘包问题解决的关键在
Stella981 Stella981
3年前
Node.js软肋之CPU密集型任务
  Node.js在官网上是这样定义的:“一个搭建在Chrome JavaScript运行时上的平台,用于构建高速、可伸缩的网络程序。Node.js采用的事件驱动、非阻塞I/O模型使它既轻量又高效,是构建运行在分布式设备上的数据密集型实时程序的完美选择。”Web站点早已不仅限于内容的呈现,很多交互性和协作型环境也逐渐被搬到了网站上,而且这种需求还在不断地增长
Wesley13 Wesley13
3年前
Java 虚拟机垃圾收集机制详解
本文摘自深入理解Java虚拟机第三版垃圾收集发生的区域之前我们介绍过Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程共存亡。栈中的每一个栈帧分配多少内存基本上在类结构确定下来时就已知,因此这几个区域的内存分配和回收都具有确定性,不需要考虑如何回收的问题,当方法结束或线程结
Stella981 Stella981
3年前
Atomikos事务恢复流程源码解析
AtomikosXA事务恢复说事务恢复流程之前,我们来讨论下,会啥会出现事务恢复?XA二阶段提交协议不是强一致性的吗?要解答这个问题,我们就要来看看XA二阶段协议有什么问题?问题一:单点故障由于协调者的重要性,一旦协调者TM发生故障。参与者RM会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事
Stella981 Stella981
3年前
360移动端性能监控实践QDAS
一、背景360是一家注重用户体验的公司,公司的口号是用户至上。在这么一个注重用户体验的氛围里,app的性能问题无疑是被重点关注的,同样也是造成用户流失的罪魁祸首之一。性能问题主要包含:崩溃、网络请求错误或者超时、UI响应速度慢、主线程卡顿、CPU和内存使用高、耗电量大等等。大多问题的原因在于开发者错误地使用了线程、锁、系统函数、编程规范问题、数
Wesley13 Wesley13
3年前
Java 基础夺命连环16问(面试硬核敲门砖 )
说说进程和线程的区别?进程是程序的一次执行,是系统进行资源分配和调度的独立单位,他的作用是是程序能够并发执行提高资源利用率和吞吐率。由于进程是资源分配和调度的基本单位,因为进程的创建、销毁、切换产生大量的时间和空间的开销,进程的数量不能太多,而线程是比进程更小的能独立运行的基本单位,他是进程的一个实体,可以减少程序并发执行时的时间和空间开销,