
博客
文章平均质量分 83
叫练
毕业北京理工大学,精通数据库,多线程,虚拟机
展开
-
CMS前世今生
目录垃圾回收器为什么要分区分代?单线程垃圾收集器:Serial+ Serial Old多线程垃圾收集器:PS+PO为啥蹦出来个CMS+ParNew介绍CMS阶段总结CMS一直是面试中的常考点,今天我们用通俗易懂的语言简单介绍下。垃圾回收器为什么要分区分代?如上图:JVM虚拟机将堆内存区域分代了,先生代是朝生夕死的区域,老年代是老不死的区域,不同的年代对象有不同特性,因此需要不同的垃圾收集器去处理。如下图,黑竖线左边的区域都是分代垃圾收集器,G1之后内存就不分代..原创 2021-04-01 22:57:56 · 1049 阅读 · 0 评论 -
ThreadLocal 慌不慌?
目录JVM引用ThreadLocal解析总结现在稍微大点的公司面试,可能会问到ThreadLocal源码实现,不过在介绍它之前,我们先介绍JVM中引用的概念。所谓这些概念就是我所说的基础了。引用强弱关系到内存垃圾回收时机,用好引用可以减轻内存压力。JVM引用一共分为4种,分别是强引用,软引用,弱引用和虚引用。JVM引用强引用:如上图:根引用list指向堆,一直向list添加512K的字节数组,程序几秒后会出现堆溢出,代码中list引用称为强引用。强引用内存一直不会被释放,.原创 2021-03-22 11:02:31 · 2196 阅读 · 0 评论 -
图解垃圾算法,No,捡垃圾算法
目录对象生与死引用计数法标记-清除法复制算法标记整理法总结对象生与死今天不是给大家介绍对象的,给大家介绍下垃圾,因为垃圾会霸占内存,需清理之,今天我们聊聊JVM用什么方式回收垃圾的!先上图吧,我们看看对象的生命周期。先解释几个名词:新生代:快速生长,存放年纪比较小的对象。 老生代:存放年纪比较大的对象。 Surviror:回收新生代内存后容纳其余存活的对象,分为From区和to内存区。新生的对象都在eden区,当eden区满时容纳不了大的对象,会..原创 2021-03-18 16:36:25 · 2147 阅读 · 1 评论 -
叫练手把手教你读JVM之GC信息
目录案例GC详细分析总结案例众所周知,GC主要回收的是堆内存,堆内存中包含年轻代和老年代,年轻代分为Eden和Surivor,如下图所示。我们用案例分析下堆的GC信息【版本:HotSpot JDK1.8】。/** * @author :jiaolian * @date :Created in 2021-03-15 15:02 * @description:新生代内存测试 * @modified By: * 公众号:叫练 */public class NewG.原创 2021-03-15 20:48:30 · 3078 阅读 · 1 评论 -
原来我还有网络天赋
目录问题思考分享问题如下图,之前公司有10多台服务器,都设置成了静态IP,因为现在更换成了类似IP为192.168.1.X 的1网段,看着下面的服务器,修改IP简单,但想想服务器里面还有许多配置需要随着IP一起修改加测试,想想头大还是算了。咋办?也不能耽误大家工作太久啊,于是在原有的路由器上增加虚拟网段(60段),分配IP来减轻原来服务器修改IP工作!公司没有网络管理员,于是我硬着头发干了!说实话,没有抱怨,我是朝学习态度去的。思考梳理下公司网络拓扑...原创 2021-03-12 22:22:37 · 4041 阅读 · 0 评论 -
最简单的JVM内存结构图
目录JVM内存结构图方法区堆栈程序计数器本地方法栈直接内存内存分配性能优化-逃逸分析总结JVM内存结构图大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样,案例先行,方便大家理解记忆。/** * @author :jiaolian * @date :Created in 2021-03-10 21:28 * @description:helloworld测试jvm内存区域 * @modified By.原创 2021-03-11 20:48:28 · 4455 阅读 · 0 评论 -
Semaphore实战
目录简介实战实现原理总结简介Semaphore信号量计数器。和CountDownLatch,CyclicBarrier类似,是多线程协作的工具类,相对于join,wait,notify方法使用起来简单高效。下面我们主要看看它的用法吧!实战限流。限制线程的并发数。比如在一个系统中同时只能保证5个用户同时在线。import java.util.concurrent.Semaphore;/** * @author :jiaolian * @date :C..原创 2021-03-04 16:52:21 · 6969 阅读 · 2 评论 -
||运算你真的了解吗?
目录或运算介绍总结或运算介绍或运算:只要有一个条件为true,即为true。通过如上逻辑关系图,还有另外一层隐含的意思:如果A条件是true,B条件不执行!如果A条件是false,B条件要执行!下面我们来看一个案例:如果A条件是true,B条件不执行!/** * @author :jiaolian * @date :Created in 2021-03-02 11:32 * @description:或条件判断 * @modified By: ..原创 2021-03-03 20:56:19 · 7590 阅读 · 1 评论 -
图解CyclicBarrier运动员接力赛
目录图解游戏规则案例说明比较CountDownLatch总结图解游戏规则大家都知道运动员短跑接力赛,今天我们并不是讲接力赛,我们讲“接力协作赛”,需要我们重新定义下游戏规则:如下图所示现在有运动员A,B,先定义游戏规则:赛道目前是300米,每个运动员在跑完第一个100米时,需要等待其他运动员跑完第一个100米,比如运动员A先跑完100米,而此时运动员B只跑了95米,那运动员A必须要等待运动员B跑完剩余的5米,然后再一起接着跑第2个100米,第三个100米,规则也和第1个.原创 2021-03-01 16:55:35 · 8094 阅读 · 3 评论 -
join为啥会阻塞主线程?
join使用上篇我们介绍了CountDownLatch,顺便说到了Thread中的join方法!import java.util.concurrent.TimeUnit;/** * @author :jiaolian * @date :Created in 2021-02-28 21:43 * @description:join测试 * @modified By: * 公众号:叫练 */public class JoinTest { public s.原创 2021-02-28 22:32:55 · 10034 阅读 · 5 评论 -
正月十五吃汤圆CountDownLatch
CountDownLatch实际应用今天是正月十五,给大家拜个晚年啦!元宵节是中国传统节日,吃汤圆不能少啊,今天我们统计下“叫练”吃汤圆时间,并用代码模拟下叫练吃汤圆!其中用到我们的CountDownLatch了!import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;/** * @author :jiaolian * @date :Created in 2021-02-26原创 2021-02-26 17:03:46 · 8577 阅读 · 1 评论 -
图解定时任务线程池
目录线程池概念定时任务延时原理scheduleWithFixedDelay和scheduleAtFixedRate区别FutureTask获取返回值Timer比较总结线程池概念我们上篇文章分析了ThreadPoolExecutor,如果要用一句话说明它的主要优势,就是线程置换。还有Executors工具类,极大的简化了研发人员工作。我用一个图重复描述下线程池概念。多生产-多消费模型。生产者将线程任务丢进线程池中,生产者就就结束了。 线程池控制消费者消..原创 2021-02-25 14:41:58 · 10077 阅读 · 0 评论 -
线程池面试必考
目录为什么要用线程池?你说下线程池核心参数?execute任务添加流程?饱和策略知道吗?你平时线程池怎么用的?源码中线程池是怎么复用线程的?总结你对Java线程池了解吗?你有用过线程池吗?那先说下线程池核心参数吧。。。对不起,我回去再看看吧。为了一丝体面,我们今天来整理几个面试中常考线程池面试问题吧!为什么要用线程池?线程复用。线程的重复使用是线程池设计的重点,如果需要开启1000个线程执行程序,系统会创建1000个线程,如果用线程池来执行1000个任务.原创 2021-02-23 10:25:08 · 8149 阅读 · 1 评论 -
并发队列:ArrayBlockingQueue实际运用场景和原理
目录ArrayBlockingQueue实际应用场景ArrayBlockingQueue简化类图结构并发队列阻塞和非阻塞概念非阻塞阻塞ArrayBlockingQueue实现原理浅析完全非阻塞队列ConcurrentLinkedQueueList 多线程安全方案:LinkedBlockingQueue总结ArrayBlockingQueue实际应用场景之前在某公司做过一款情绪识别的系统,这套系统通过调用摄像头接口采集人脸信息,将采集的人脸信息做人脸识别和情绪.原创 2021-02-03 10:13:59 · 10026 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁简单原理案例证明
目录ReentrantReadWriteLock存在原因?独占获取锁简单流程共享获取锁简单流程写锁降级总结ReentrantReadWriteLock存在原因?我们知道List的实现类ArrayList,LinkedList都是非线程安全的,Vector类通过用synchronized修饰方法保证了List的多线程非安全问题,但是有个缺点:读写同步,效率低下。于是就出现了CopyOnWriteArrayList,它通过写时复制数组实现了读写分离,提高了多线程对List读的效.原创 2021-01-31 20:08:08 · 7867 阅读 · 0 评论 -
CopyOnWriteArrayList 读写分离,弱一致性
目录为什么会有CopyOnWriteArrayList?什么是弱一致性fail-safe特性总结为什么会有CopyOnWriteArrayList?我们知道ArrayList和LinkedList实现的List都是非线程安全的,于是就有了Vector,它是基于ArrayList的线程安全集合,但Vector无论是add方法还是get方法都加上了synchronized修饰,当多线程读写List必须排队执行,很显然这样效率比较是低下的,那有没有一种办法让效率提升,让当读Li..原创 2021-01-18 17:45:37 · 4153 阅读 · 4 评论 -
Java中多线程安全问题实例分析
案例package com.duyang.thread.basic.basethread;/** * @author :jiaolian * @date :Created in 2020-12-16 14:02 * @description:线程不安全分析 * @modified By: * 公众号:叫练 */public class ThreadUnsafe { public static void main(String[] args) { Thread原创 2020-12-16 17:23:34 · 724 阅读 · 0 评论 -
Java中CAS原理分析(volatile和synchronized浅析)
CAS是什么?CAS英文解释是比较和交换,是cpu底层的源语,是解决共享变量原子性实现方案,它定义了三个变量,内存地址值对应V,期待值E和要修改的值U,如下图所示,这些变量都是在高速缓存中的,如果两个线程A,B分别通过cas方式同时修改共享变量,假设当A线程先获取时间片,如果发现V的值和E相等就将主内存值更新为U,如果不相等说明线程B在线程A更新之前已经成功更新过,线程A会失败重试,此时根据缓存一致性协议,线程A的本地副本会失效,需要从主内存再同步最新的变量到本地内存副本,在Java中通过调用UnSaf原创 2020-12-14 15:56:48 · 6249 阅读 · 0 评论 -
default-servlet-handler不生效原因,springmvc静态资源拦截方案比较
springmvc为什么要拦截静态资源? 简单来说,为了请求的url不带类似*.action,*.do,比如http://localhost:8080/system/index.action,spring团队统一风格,而web项目配置的web.xml中,所有请求都必须走过DispatcherServlet,当然就包括了静态资源,比如http://localhost:8080/html/index.html,为了解决这个问题,spring给了两种方案,下面我们一起来讨论下两种方案的使用和区别,给...原创 2020-12-07 21:20:33 · 2056 阅读 · 1 评论 -
indexOf原理,Java,javascript,python实现
简介最近做项目的时候,发现无论是前端还是后端,indexOf出现的概率都非常频繁,今天我们来看下他的实现原理吧!indexOf的含义:给定一个字符串去匹配另一个字符串的下标,如果匹配到,返回下标,如果匹配不到则返回-1,其实原理还是比较简单的,如果需要你实现,那么应该怎么做呢?原理现在给定匹配的字符串A,原始字符串B,比如匹配字符串A等于“叫练”,原始字符串B等于“边叫边练,我喜欢叫练”,你可能一眼就发现“叫练”是最后两个字符,我们以B做循环,一个一个单词去匹配,先找“叫”,找到...原创 2020-09-08 18:45:11 · 807 阅读 · 0 评论 -
我们一起学程序-五指棋
前言目录前言体验效果关键技术简介从无到有思路代码实现过程1.棋盘实现2.计算棋子是否获胜3.网络聊天室实现4.查看复盘实现遇到问题源码下载地址及注意事项总结小时候很喜欢玩电视上自带的积木游戏,那时候电子产品也不少,小学就认识了low和high两个单词,因此攒了零花钱搞到了高级版的游戏--小霸王学习机,说错了,是“游戏机”,特别是一放暑假,插个小霸王游戏机卡就能开始撸几把魂斗罗,坦克大战,比夏天吃根冰棍可香多了,那时候没有空调,不惧严寒酷暑的..原创 2020-09-03 17:31:20 · 1371 阅读 · 0 评论