
Java能力提升
文章平均质量分 69
1.设计模式
2.面试算法
3.Java并发编程
4.JVM虚拟机学习
5.Java重构技巧
左撇子帕布
彼时剑未配妥,出门已是江湖,望终有一日扬名天下
展开
-
IDEA代码重构技巧--目录页
随着项目的演进,人员的更替,代码腐化会成为我们不得不面临的一个情况,这时候就需要重构代码,在以前重归代码就是不断的修改,替换,并将引用的地方也做相应的更改,费时费力且容易出错,但是现在IDEA工具给我们提供了自带的重构插件,以下是我总结的几种IDEA可以支持的重构场景。原创 2022-08-24 23:06:16 · 848 阅读 · 1 评论 -
IDEA代码重构技巧--拆分类
方法会腐化,同样,对象类也会腐化,不同人对业务理解的不同导致一个对象类可能被添加了很多不属于他的属性,这时就产生了代码的坏味道,此时我们需要将对象类拆分。原创 2022-08-23 23:56:40 · 2107 阅读 · 0 评论 -
IDEA代码重构技巧--抽取类和接口
重构和检视代码过程中,我们有时会碰到由于项目交接或者人员替换导致的代码腐化,比较常见的是类的职责不单一,此时比较好的重构技巧就是按照职责抽取函数或者类,进而还要分析一下是不是可以抽象一下,提取接口。原创 2022-08-21 23:40:16 · 5209 阅读 · 0 评论 -
IDEA代码重构技巧--迁移
在代码重构和检视过程中,比较常见的是一个类或者方法职责不单一,导致代码有坏味道,这种情况就需要基于函数抽取,迁移来做代码重构,而迁移意味着调用点也需要同步修改,仅靠手动拷贝工作量大且易出错,此时就可以借助IDEA的重构能力。原创 2022-08-20 18:42:07 · 7575 阅读 · 0 评论 -
JVM虚拟机学习(1)---Jvm内存区域
目录页:https://mp.youkuaiyun.com/postedit/959371561.小声哔哔 本文主要基于JDK1.8,网上已有许多大神对JVM内存区域划分做了详解,本文目的主要是对自己学习心得的记录,如有错误请指正。2.运行时数据区 JVM在运行过程中会把它所管理的内存划分为若干不同数据区域线程私有:程序计数器、本地方法栈、虚拟机栈 线程共享:堆、方法区如下...原创 2019-07-15 00:25:13 · 214 阅读 · 0 评论 -
JVM虚拟机学习(5)---JDK常用工具(二)
目录页:https://mp.youkuaiyun.com/postedit/959371561. 常用的命令行工具 1.1.jinfo jinfo常用于查看或设置JVM参数,执行jinfo -help查看命令格式。参数:pid:进程号 executable core 产生core dump文件 [server-id@]remote server IP or hostna...原创 2019-10-21 00:33:29 · 202 阅读 · 0 评论 -
JVM虚拟机学习(2)---Jvm对象
目录页:https://mp.youkuaiyun.com/postedit/959371561. 小声哔哔 作为一个程序员找不到对象很正常,但是我们写的代码要是找不到对象就出大问题,所以了解Jvm对象的相关知识作为我的第二部分开始学习,下面有记录的不对的地方请指正。2.Jvm对象分配 国家不分配对象,但是Jvm分配对象。 我们在不适用spring等框架的时候,创建...原创 2019-07-21 22:18:55 · 153 阅读 · 0 评论 -
JVM虚拟机学习目录页
使用Java已经多年,但是对JVM底层还是一直没有系统学习过,现在开始爬这座高山,以此博客记录。 学习源码:https://gitee.com/Coline/JVM JVM虚拟机学习(1)---Jvm内存区域:https://blog.youkuaiyun.com/u011294519/article/details/95937162 JVM虚拟机学习(2)---JVM对...原创 2019-07-15 00:18:50 · 288 阅读 · 0 评论 -
JVM虚拟机学习(3)---JVM垃圾回收
目录页:https://mp.youkuaiyun.com/postedit/959371561. 小声哔哔 作为一个Java程序员,我们不需要像C程序员那样对内存释放有过多的关心,但是我觉得还是有必要了解一下JVM的垃圾回收机制。我们知道,GC主要有两种,分别是新生代满的时候触发的Minor GC和老年代满的时候触发的Full GC。2. GC算法2.1. 标记-清除算法 见...原创 2019-08-07 00:17:22 · 231 阅读 · 0 评论 -
JVM虚拟机学习(4)---JDK常用工具(一)
目录页:https://mp.youkuaiyun.com/postedit/959371561.jps 1.1. jps -l 输出应用程序主类完整package名称或jar完整名称. 1.2. jps -v 列出jvm参数,2. jstat 使用jstat -help查看参数格式如下:-t:可以在打印的列加上Timestamp列,用于...原创 2019-10-19 22:51:03 · 206 阅读 · 0 评论 -
Java并发编程学习(11)---线程池
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081.类层级关系及主要方法1.1.类层级关系Executor:顶层接口 ExecutorService:继承Executor接口,定义管理方法 AbstractExecutorService:抽象类,实现ExecutorService接口作为骨架类 Thread...原创 2019-07-10 23:38:18 · 146 阅读 · 0 评论 -
探访ConcurrentHashMap在JDK1.7和1.8的区别
1. 小声哔哔 在并发场景下,HashMap存在并发安全的情况(并发扩容重新散列时因为链表是使用的头插法,会出现环形链表导致get时异常,CPU标高到100%),所以ConcurrentHashMap是并发编程中比较重要的一个工具,本博文将竭力介绍1.7和1.8版本中的ConcurrentHashMap,所以会比较长,建议收藏再看。2. JDK1.7版本实现 相较于Hash...原创 2020-03-19 23:33:47 · 582 阅读 · 0 评论 -
Java并发编程学习(8)---ReentrantLock学习
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081. ReentrantLock1.1.小声哔哔 年轻的时候,说到锁想到的就是synchronized关键字,而且那时候项目要求不高,已经完全能满足需求,但是深入了解synchronized以后发现自己真的是年轻(貌似说synchronized已经被优化的与L...原创 2019-03-17 23:33:57 · 238 阅读 · 0 评论 -
Java并发编程学习(5)---并发编程工具类(二)
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081.CountDownLatch 作用:一个线程等待其他线程执行完成后再执行,算是一个加版的join, 运用场景:说个我理解的运用场景,用户购买商品,修改订单状态为已支付作为一个等待线程,需要等待用户支付完成,商品库存扣除无异常这两个线程完成才会去修改订...原创 2019-03-09 23:57:24 · 260 阅读 · 0 评论 -
Java并发编程学习(9)---ReentrantReadWriteLock
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081. ReentrantReadWriteLock1.1. 小声哔哔 见名知意,这是一种读写锁,其实在很多情况下,我们对数据的读取次数远远大于更新修改的次数(比如缓存),而其实在多个线程只是读取数据的时候我们完全没必要加锁。读写锁在写线程访问的时候,所有的读和...原创 2019-03-25 23:08:41 · 176 阅读 · 0 评论 -
Java并发编程学习(6)---并发编程工具类(三)
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081.Semaphore 当一个线程想要访问一个由semaphore保护的共享资源时,首先,它必须获取semaphore。如果semaphore的内部计数器大于0,则semaphore对计数器进行递减,并允许访问共享资源。如果semaphore的计数器为0,则sem...原创 2019-03-10 23:54:27 · 242 阅读 · 0 评论 -
Java并发编程学习(7)---原子操作CAS
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081. Compare and Swap [CAS]1.1. 小声哔哔 之前学习的synchronized本质上是一种悲观锁,虽然的确安全有效,但是却牺牲了性能,原因大家也能想明白,等待锁的线程啥也干不了,直到获取锁。这也是HashTable不被待见的原因...原创 2019-03-13 00:09:58 · 238 阅读 · 0 评论 -
Java并发编程学习(10)---AbstractQueuedSynchronizer学习
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081.大声哔哔 前面在学习并发工具类的时候总有一个绕不开的类AbstractQueuedSynchronizer,怀着崇敬的心情,我决定开始爬这座山峰,首先看到的是@author Doug Lea,向大师致敬。 说到AbstractQueuedSynchr...原创 2019-03-31 23:30:15 · 198 阅读 · 0 评论 -
Java并发编程学习(1)---线程基础
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081.简单的基础知识(PS:网上很多很全,写在这里只是显得有章法(o´罒`o)哼):进程和线程的区别:进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源 线程:CPU调度的最小单位并行和并发的区别:并行:同一时刻可以处理事务的能力...原创 2019-03-09 16:24:29 · 289 阅读 · 1 评论 -
Java并发编程学习(4)---并发编程工具类(一)
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081.Fork/Join1.1.有返回值示例 Fork/Join是将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。 下面我参照大神:说好不能打脸的写法使用归并算法对一个无序数组排序来做一个比对。 ...原创 2019-03-09 16:47:19 · 299 阅读 · 0 评论 -
Java并发编程学习目录页
本人已有多年的java开发经验,但是至今仍对java并发编程相关一知半解,甚为羞愧,决定一边写博客一边学习,作为一个学习记录和分享。如有大神路过请多指教。代码:https://gitee.com/Coline/concurrent-programming博客目录:Java并发编程学习(1)---线程基础:https://blog.youkuaiyun.com/u011294519/arti...原创 2019-03-09 16:30:11 · 558 阅读 · 0 评论 -
Java并发编程学习(3)---线程间协作
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081.join方法 t.join()方法阻塞调用此方法的线程(calling thread),直到线程t完成,此线程再继续;直接上代码。package com.concurrent.coline.part3.join;/** * 类说明:join方法的使...原创 2019-03-09 16:43:45 · 243 阅读 · 0 评论 -
Java并发编程学习(2)---线程之间的共享
目录页:https://blog.youkuaiyun.com/u011294519/article/details/883678081.synchronized关键字对象锁:synchronized修饰方法或代码块 当一个对象中有synchronized method 或synchronized block 的时候,调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。 如果...原创 2019-03-09 16:41:37 · 256 阅读 · 0 评论 -
layui使用layui-icon出现默认图标问题
layui使用layui-icon出现默认图标问题 最近在学习使用layui的时候碰到了一个巨诡异的问题,使用layui-icon时出现了默认图标问题,先上图:后台代码:正常情况下应该在箭头指示处有一段unicode编码才会显示图标,百度了很久发现没人碰到过这个问题,当我把这段代码复制到txt文件中时发现了一个问题。 这货中间有个空格,当我把...原创 2018-03-20 10:37:04 · 16004 阅读 · 3 评论 -
git rebase分支合并
1.小声哔哔 日常开发中,如果我们在pull主分支代码后再push代码会出现别人的mrege信息在我们的commit记录中,这样无疑会导致我们的commit会有一种混乱的感觉,下面我们使用git rebase来处理这种情况。2. 正餐开始 首先checkout到代码主分支或需要pull代码的分支 git checkout master 拉取远端分支代...原创 2019-09-04 00:22:31 · 350 阅读 · 0 评论 -
使用git rebase合并commit
1. 小声哔哔 在复杂的功能开发中,我们可能需要不断的commit部署到测试环境进行测试,如果不适用git commit -amend命令会导致我们在最终的代码合入时有许多的commit记录,一旦后续需要review合入的代码,将带来许多的工作量,下面我们使用git rebase来合并我们的commit记录2. 正餐开始 使用git log命令查看commit日志...原创 2019-09-03 00:23:20 · 513 阅读 · 0 评论 -
面向面试学习,一起来玩工厂设计模式
1. 小声哔哔 工厂设计模式算是经常在项目中使用的设计模式,属于创建型模式,可以理解为创建对象的设计模式。 应用场景:根据业务情况需创建不同类型的对象,且对象又存在相似的业务逻辑,此时需要将创建对象的责任交由工厂类,工厂类会基于输入创建对象。(该场景是根据自己的理解) 在查阅资料时看到有人讲工厂设计模式分为三类,简单工厂,工厂方法,抽象工厂,结合开发经验而言,简单工厂...原创 2020-02-02 23:19:19 · 270 阅读 · 0 评论 -
面向面试学习,一起来玩策略模式
1. 小声哔哔 策略模式在23种设计模式中属于行为型模式,策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户,使用场景如下:如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 一个系统需要动态地在几种算法中选择一种。 如果一个对象有很多的行为,如果不用恰当...原创 2020-02-08 22:01:11 · 200 阅读 · 0 评论 -
面试算法-使用JAVA实现快速排序算法
1. 快排步骤首先设定一个基准值,通过该基准值将数组分成左右两部分。 将大于或等于基准值的数据集中到数组右边,小于基准值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于基准值,而右边部分中各元素都大于或等于基准值。 对左右两边的区域按照1和2做相同处理,最终达到排序效果,该过程使用递归实现2. 步骤演示原始数组array5 6 4 7 3 7...原创 2020-01-07 20:04:38 · 304 阅读 · 0 评论 -
面试算法-求数组最大子序列和
1. 题目有一个数组,如-2, 3, 6, 2, -4, 15, -8,查找其中最大子序列和。在本例中,最大值为3+6+2+-4+15=22,假设数组中必有正数.2.思路假设我们已知结果,和为最大的最大子序列为i到j之间可以将i-1做为分界点,即该点之前的子序列和为负数,因为若该子序列不为负数则可于后续序列相加,与假设相悖由思路1和2可进行操作:从数组由左至右相加,若为负数则可理解为...原创 2020-02-01 00:08:42 · 507 阅读 · 0 评论 -
IDEA代码重构技巧--抽取+内联
IDEA代码重构技巧--抽取+内联原创 2022-08-20 12:37:49 · 5424 阅读 · 1 评论