- 博客(23)
- 资源 (29)
- 问答 (8)
- 收藏
- 关注
原创 设计模式 -- 模板方法模式
模板方法模式原文介绍 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。 这原文乍一看是不是特抽象?这特么说的都是啥玩意,这也太抽象了吧,我相信只要是一个正常受过九年义务教育的人都看不懂这说的啥,不过呢,今天这篇文章就是帮助大家彻底理解这个东东的;模板方法通俗地讲,其实就是先定义一个抽象方法,将相同的逻辑放在抽象类里面,将不同的逻辑由子类实现,模板方法使用场景实现一些操作时,整体...
2021-04-29 22:09:12 529
原创 设计模式 -- 建造者模式
建造者模式原话:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;其实就是将一个对象详细化,比如把人分为美国人、日本人、中国人、韩国人、非洲人,每一种人都有不同的肤色、身高、头部特征;其实仔细看,建造者模式和工厂模式很像,很多人将这2者傻傻分不清楚,其实,工厂模式创建的是单个类,而建造者模式是将一个类型的东西集中起来进行管理,比如人类,它的里面会有很多分类: 1、黑皮肤、大高个、做事拖拉懒散,将这三者结合起来就成为一个类型:黑人; 2、黄皮肤、...
2021-04-27 22:18:19 593 1
原创 设计模式 -- 代理模式 静态代理和动态代理
代理模式的定义: 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,可以理解为是托管的作用,就像手机里的欢乐斗地主一样,我可以自己决定打什么牌,也可以用托管的方式让电脑帮我决定打什么牌,这时候电脑就帮我做了很多事情,我只需要像葛优一样躺在那静静地看着就好了,这种托管的形式就叫做代理模式; 在电脑程序中,一个对象创建后交给代理模式去管理,除了程序原有的逻辑,代理类还会为这个对象增加额外的逻辑处理,简单地说就是在不改变原代码的情况下来达到扩展功能的目的,一...
2021-04-27 21:28:26 616
原创 idea每次创建项目JDK版本都是1.5的解决方法
因为版本不同,每次运行main方法进行测试的时候都会报以下错误: Error:java: Compilation failed: internal java compiler error所以每次都得去 设置里面改回来,用起来很是麻烦但是现在有一种非常好用的方法,就是直接修改maven 的配置文件,我们先看看使用的maven 是哪个版本的,版本下会直接显示出maven 的目录地址,先进入maven3目录下的conf目录,settings.xml文件就...
2021-04-25 23:12:30 3149 4
原创 Future模式
什么是Future模式想象这样一个场景: 我去饭店里面吃饭,点好菜后,厨师在厨房做菜,而我在店里面等着上菜,如果只是干巴巴地等,那这段 “等上菜” 的时间就会浪费掉,如果说我在等的同时做一些其他的事,比如看会书、刷刷小视频、或者敲敲代码、和隔壁桌也在等上菜的客人聊聊人生谈谈理想,那么这段 “等” 的时间我就不只是在等, 我还做了一些有意义的事情;也充分利用了时间,不至于浪费! 这种不浪费,我们就可以称之为Future模式;Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间.
2021-04-24 23:31:43 654
原创 JAVA队列( Queue ) 详解
什么是队列? 队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除;比如我们常用的 LinkedList 集合,它实现了Queue 接口,因此,我们可以理解为LinkedList 就是一个队列;java队列特性队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分;阻塞和非阻塞阻塞队列 入列(删除元素)时,如果元素数量超过队列总数......
2021-04-24 17:43:13 87747 9
原创 java线程池底层运行过程以及参数详解
相信线程池这个东东只要只要是做过开发的童鞋们都熟悉,用起来那是相当地简单啊,而且功能强劲,优化的又好,使用还去除了冗余的代码层级,提高了代码的可读性,创建线程池只需要用到四种newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定...
2021-04-24 15:31:04 770
原创 JAVA 127和128分别用== 号判断,竟然一个为true一个为false
先看代码 public static void main(String[] args) { Integer one = 127; Integer two = 127; System.out.println(one == two); Integer one_1 = 128; Integer two_1 = 128; System.out.println(one_1 == two_...
2021-04-22 23:08:10 949 1
原创 JSQLParser 解析sql语句框架详解
因公司有需求,需要根据用户输入的sql中获取到表名,网上查询到有个框架很实用,于是就小试牛刀,此框架是githup团队研发的一款sql解析框架,也是公认最好用的,不单可以解析sql,还可以用来拼接sql;使用前先导入maven,目前最新版本已经更新到4.0了,童鞋们根据自己实际情况来选择相应版本 <dependency> <groupId>com.github.jsqlparser</groupId> .
2021-04-22 18:24:20 3719
原创 设计模式 -- 工厂模式
工厂的指责就是制作产品,那么产品就可以理解为是我们的对象,而工厂就是为了实例化对象而对象的,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。1、简单工厂模式简单工厂模式:也叫静态工厂模式,简单工厂模式相当于试试一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品的参数即可,相当于所有的汽车都是由一个厂里面生产出来的的,这个厂既能生产宝马,又能生产奔驰,还能生产其他的品牌的汽车,但是工厂的职责过重,而且当类型过多时.
2021-04-21 17:10:58 565
原创 设计模式 -- 单例模式
单例模式的特点 1、保证在jvm 中只有一个实例; 2、应用场景:servlet 、springioc(默认单例)、连接池、线程池、枚举、常量; 3、优点: 节省内存,重复使用,方便管理 4、缺点:有线程安全问题;单例模式的分类 1、懒汉式:将单例对象设为静态属性并加上final修饰符,初始化单例类时就立即创建对象实例,天生线程安全;调用率高 2、饿汉式:将单例对象设为静态属性并加上final修饰符,初始化单例类时不会立即创建对象...
2021-04-20 18:57:28 640 2
原创 java 动态字节码技术和类加载
字节码有什么用?1、对类的基本信息进行操作 ,可以新增、删除、修改类、属性和方法;2、应用场景:Lombok 插件、AOP、动态修改class文件、网页上的在线执行java代码也是字节码实现的;2、Lombok 插件就是用字节码实现,只用Data注解就可以给属性自动加上get和set方法4、常见的字节码操作类库: BCEL: 深入汇编底层语言进行类库操作; ASM: 轻量级字节码操作框架,直接涉及到jVM底层的操作和指令;高性能、高质量 CGLB: 生成类...
2021-04-19 23:53:39 1296 3
原创 静态代码块执行顺序
虽然说不管是静态变量还是静态方法,这些都是java基础的知识了,但我发现还是有很多人不懂静态的原理,静态的属性遵循以下规则:静态方法会在构造方法之前执行 静态属性从上到下按顺序执行 静态属性不需要初始化即可直接使用;1、静态属性会在构造方法之前执行,举个例子就知道啦;我们看看下面的代码public class Main { static{ System.out.println("1:静态代码块"); } public Main(){ ...
2021-04-18 13:33:54 1690 1
原创 jvm 性能调优 参数配置
jvm性能调优的最基本条件 就是要减少垃圾回收机制的回收次数,因为每次回收的时候,其他工作线程都会停顿一段时间,gc需要集中清理垃圾内存就必须暂停个工作线程,但是我们人为是看不出区别的;调优注意项堆初始值(Xms)一定要和堆的最大值(Xmx)设置成一样的,如果不相等的话,会造成垃圾回收机制一直不停地在回收,因为空间太小了,不停地去申请内存并进行回收,大大降低了系统性能,因为垃圾回收机制和设置的最大堆内存(Xmx)无关,只和初始堆内存(Xms)有关; 垃圾回收机制的回收次数,跟初始...
2021-04-18 10:49:45 776
原创 jvm可视化 工具
jdk可视化工具的作用 用来监控堆内存使用情况(新生代、老年代、方法区)、cpu使用情况,线程数量、类的数量、并且可以检测死锁;1、jsoncole 可视化工具jsoncole 是java内置的一款性能分析器,使用方法非常简单,直接在cmd控制台输入jconsole即可打开窗口,前提是配置了jdk环境变量,否则就得去 jdk的安装目录下的bin文件夹里面,界面如下2、jvisualVM也是java内置性能分析器,...
2021-04-18 10:13:07 806
原创 java虚拟机内存结构和垃圾回收机制算法详解
java是目前全球最火的语言,热度也是最高的,相信做开发的你肯定用过,那我就要问问,你仅仅是用过还是了解它的底层机制和执行原理呢?那么今天我们就揭开它神秘的面纱,看看jvm在我们开发的时候帮我们做了哪些事情;说到这里,有个小兄弟要问了:“我会用不就行了吗?了解它干啥呢?难不成我要自己写一个jvm出来?if 和 for 语句我用得可顺手,了解它的底层机制有卵用?”; 唉~ ,这位小兄弟,你先别急啊,首先呢,用只是基础,就像开发一样,增删改查就是一个开发人员的基础,难不成你想一辈子都干增删改查吗? 学习...
2021-04-15 15:13:50 732
原创 mac使用 git 将本地磁盘中的项目或文件夹上传到码云
上传步骤:1、码云上新建一个项目 XXXX(项目名)2、本地创建一个文件夹E:/XXXX,然后使用git bash (windows 步骤,mac电脑不需要此操作)3、cd 到本地文件夹中 cd /XXXX/xxxx //如果是在创建的文件中git bash则此步骤可省略4、使用 git init 命令//初始化一个git 本地仓库此时会在本地创建一个 .git 的文件夹5、使用git remote add origin https:/...
2021-04-10 23:03:47 1060
原创 HashMap底层原理以及 LinkedHashMap、HashTable 、HashSet 四者区别
为了搞懂HashMap,作者经常夜不能寐,熬夜刷文章、看源码、撸代码、做测试,终于在今天下午的1点30分55秒搞HashMap究竟是何方神圣,我想,这也许就是代码的魅力吧,为了这玩意我可真是煞费苦心,虽然辛苦,但是也很开心,又研究透了一样东西,这种快乐简直让人流连忘返,不多说,开始表演!HashMap在各JDK 版本的区别 在JDK1.7以前,HashMap 是用 【数组 + 单向链表】 实现的, 而在JDK 1.8 是使用 【数组 + 红黑树】实现的,本文主要具体讲讲数组+单向...
2021-04-10 01:29:33 816 2
原创 try-with-resource 不调用close()方法也能回收垃圾
传统的try catch finally 方式是这样的 public static void main(String[] args) throws IOException { FileInputStream fileInputStream = null; try{ // 捕获异常 fileInputStream = new FileInputStream(new File("/Users/mac/Documen...
2021-04-08 16:49:53 847
原创 CAS 自旋锁/无锁机制算法
CAS无锁机制是乐观锁的一种,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做;Atomic 类就是使用CAS无锁机制实现的类CAS操作依赖底层硬件的CAS指令,CAS指令有两个步骤:冲突检测和更新操作,但是这两个步骤合起来成为一个原子性操作。CAS指令需要3个操作数:内存位置(V)(主内存) 旧的预期值(A)(本地内存) 新值(B)CAS指令执行时,...
2021-04-05 15:51:04 1212
原创 二叉树、B树、红黑树
在数据结构中,树这个概念用的非常多,特别是在Map 存储中其实就是一个树的概念, 这种结构也叫树结构,跟线性结构不同,线性结构就是链表,就是一条线就可以表示完了,但是树状结构的分支会有无限多,我们本章就是只要理清楚红黑树的概念,但是要想理清楚红黑树就必须得先知道普通的树和B树的结构,理清楚这两个树可以帮助我们更好地理解红黑树,因为红黑树和B树是可以互相转化的!树树没什么好说的,一个图你们就明白了树是怎么回事了!我们入场生活中的树的根是在下面的,但是在数据结构中,树的根节点一般是在上面的...
2021-04-05 15:25:41 839
原创 volatile 执行原理图
synchronized重量级锁,synchronized是非公平锁,拥有可重入性 非公平锁:意思是多个线程按照抢占的方式获得锁,并非按照顺序执行,未抢占到运行权的线程有可能出现饥饿现象, 公平锁: 多个线程按照申请的顺序获得锁;ReentrantLock / synchronized 可重入锁 / 递归锁重入锁指的是在同一线程,在外层函数获得锁之后,内层递归函数仍然有获得锁的代码,但执行时不受影响,ReentrantLock 属于轻量级的锁synchroniz...
2021-04-05 00:20:47 582
原创 ArrayList 、 LinkedList、Vector的区别
ArrayList 、 LinkedList、Vector的区别如下: 结构 是否线程安全 效率 ArrayList 动态数组 否 遍历查找快,插入删除慢 LinkedList 双向链表 否 插入删除快,遍历查找慢 Vector 动态数组 是 遍历查找快,插入删除慢 ArrayList ArrayList 是动态数组,动态的意思是可以随时增加数组长度,众所周知,普通数组的长度是定死的,想要增加长度,就必须...
2021-04-02 23:21:35 1501 2
Jenkins2.215安装包和常用插件包.zip
2020-01-20
nodejs-webpack进阶教程-逐步加入vue、HtmlWebpackPlugin、css压缩、热部署
2018-11-30
Mybatis-Generator自动生成Dao、Model、Mapping相关文件,不依赖maven,直接生成
2018-10-24
nginx利用redis实现session会话共享-tomcat8版本专用
2018-09-11
cas-server-webapp-4.0.0.war--cas server去掉https验证
2018-07-24
mybatis-generator-core-1.3.2(含有源码--生成注释、自定义sql)第二版本
2018-07-23
mybatis-generator-core-1.3.2(含有源码--生成注释、自定义sql)
2018-07-23
自定义注释的mybatis-generator-core-1.3.6.jar
2018-07-22
mysql-connector-java-5.0.8-bin 连接mysql数据库的驱动jar包
2018-07-20
redis服务端以及java程序和教程
2018-04-28
c语言 *(char **) 是啥意思?
2023-10-22
c/c++ 如何判断一个指针是否已分配内存空间?
2023-05-30
c/c++ 宏定义的问题
2023-05-18
c++直接返回指针有问题吗?
2023-05-10
c++子类继承父类时为啥析构函数执行了2次
2023-04-12
const在函数的前、中、后有什么区别?
2023-03-21
clion写c++头文件提示找不到函数实现
2023-03-19
c++对指针运算++和+=1是一样的吗?
2023-03-18
C++未赋值的变量为啥是个随机数?
2023-03-14
c++ int i 和new int有什么区别?
2023-03-14
c++野指针是什么?
2023-03-14
c++这样写为什么会报错?
2023-03-13
高并发情况下,要保证数据库一致性,除了加锁,还有哪些方式?
2022-05-24
熔断和降级的区别是什么
2021-08-30
微服务高并发情况下会产生哪些问题
2021-08-24
服务熔断和降级的区别是什么?
2021-08-17
面试题:mysql海量数据如何将A表的数据更新到B表
2021-08-04
myisam写数据的时候会把表锁住吗?
2021-07-27
请问原力计划的表情是怎么加上去的?
2021-07-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人