- 博客(36)
- 收藏
- 关注
原创 JDK自带和CGLib动态代理模式实现和分析
文章目录动态代理模式Java提供的动态代理JDK自带动态代理CGLib代理动态代理模式动态代理模式就是借助一个代理类实现创建委托类的对象,以及实现方法。通过代理的第三者来实现间接访问Subject类 定义了Proxy和RealSubject类的公共接口,这样就可以在任何使用RralSubject的地方使用到Proxy。委托类RealSubject:实现真正业务的类代理类Proxy:通过调用委托类对象的相关方法提供服务,可以在该服务的基础上提供一些其他服务。客户端需要的服务是通过代理类来获取
2021-07-27 20:04:46
206
原创 Mybatis动态sql
文章目录mybatis的动态SQL动态sql存在的意义标签ifwhere标签set标签trim标签foreach标签mybatis的动态SQL要学习mysql的动态sql,如果你对mybatis还没有了解以及配置,请参考[Mybatis]((11条消息) mybatis介绍及相关配置_昂的博客-CSDN博客)在配置好后再来学习动态sql会更好动态sql存在的意义采用OGNL表达式来进行SQL,淘汰不需要的元素,根据不同的添加进行动态SQL的组装和拼接OGNL是Object-Graph Naviga
2021-07-26 20:50:48
210
原创 mybatis介绍及相关配置
文章目录mybatis简介JDBC存在的问题引入mybatis特征xml配置引入依赖全局配置文件POJO类Mapper接口文件(StudentMapper.java)创建StudentMapper.xml+修改全局配置文件执行查询操作基于注解配置mybatis简介MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 J
2021-07-25 21:04:13
308
原创 面向对象复习1
面向对象面向对象三大特征 OOP可重用 可扩展 可管理封装封装就是将代码是实现部份以及处理的数据进行绑定的机制,保证程序和数据都不收外部的干扰和不被无用。它的优点有:保护类中的信息:它可以组织外部定义的代码随意的访问内部的代码和数据隐藏细节信息:隐藏一些不需要程序员修改和使用的信息。比如取款机中的键盘,用户只需要知道哪个键可以实现那个操作即可,内部实现不需要知道。提高软件的复用性,降低成本,每个系统都是一个相对独立的整体有助于建立各个系统之间的松耦合关系,提高系统的独立性封装需要用
2021-07-24 20:21:46
67
原创 Atomic分析以及自增问题解决
AtimicXXXi++简介在多线程的情况下,i++不是线程安全的,那么为什么不是线程安全的呢?i++在底层会分为三步内存到寄存器 – 寄存器自增 – 写回内存取值++操作 i+1;赋值 i = i+1当线程A执行到取值,或者++操作时,线程突然切换到线程B,B修改了值,当线程A再次拿到执行权的时候,值就会改变了。线程安全:在并发的环境下,拿到的结果和预想的结果不一样就是线程不安全。实例public class Test { //设置线程数 privat
2021-06-26 11:08:28
526
原创 悲观锁和乐观锁
文章目录悲观锁悲观锁的含义悲观锁存在的问题乐观锁CASCAS:比较并修改含义CAS存在的问题CAS中的ABA问题循环时间长开销大只能保证一个共享变量的原子操作只能保证一个共享变量的原子操作悲观锁悲观锁的含义总是假设是最坏的情况,每次去拿数据的时候都会认为会被别人改变,所以每次操作时都会加锁,这样别人拿这个数据就会阻塞直到它拿到锁。在Java中的具体实现就是**synchronized****,**它就是悲观锁悲观锁存在的问题在多线程竞争下,加锁,释放锁会导致悲观锁锁的上下文切换和调度延时引起的性
2021-06-26 01:01:34
118
原创 Redis缓存穿透/缓存击穿/缓存雪崩
文章目录缓存穿透布隆过滤器 Bloom Filter缓存空对象缓存击穿描述解决缓存雪崩描述解决缓存穿透描述缓存穿透是指缓存和数据库中都没有的数据,当高并发时,比如秒杀项目,大量请求请求缓存,缓存中没有数据,就会进入数据库中查找数据,当数据库中也没有数据,大量的请求就会使数据库宕机,也可能用户是攻击者,攻击导致数据库压力过大,导致宕机。解决布隆过滤器 Bloom Filter布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进性校验,不符合则丢弃,从而避免了对底
2021-06-23 15:01:27
55
原创 Redis哨兵模式
文章目录哨兵模式简介流程安装哨兵优点缺点哨兵模式简介在主从复制的基础上,增加了哨兵(Sentinel)服务器,其核心功能是实现了自动化的故障恢复,能够后台监控主机是否故障,如果故障了根据投票数自动将库设置为主库。单个哨兵,但是也会存在一个问题,但是存在哨兵模式存在宕机的可能,所以一般情况下都会部署3个以上的哨兵服务器。流程流程:假设主服务器宕机,从服务器主管下线后不会进行故障转移等操作每个哨兵节点维护了3个定时任务:通过主节点发送info命令获取最新的主从结构通过发布订阅
2021-06-23 15:00:25
151
原创 Redis主从复制
文章目录主从复制全量复制和增量复制优点缺点主从复制是什么在往往高并发的情况下,往往只是查询数据,而不是修改数据,用于主从机来缓解读写压力所以采用主从复制机制,redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。以下为级联结构在一个主机下连接三个从机,而从机下再关联两个从机,主机负责写,而从机负责读,而主服务器将写的内容的快照同步到从机上,从而主从数据一致这里分为两种全量复制和增量复制全量复制:发生再从机slave的初始化阶段
2021-06-23 14:50:39
85
原创 Redis持久化操作
文章目录持久化操作RDBAOF持久化操作redis是在内存中处理数据,内存是断电即失的,所以持久化是很有必要的,reids提供了两种redis RDB和AOFRDB在指定时间间隔内,生成数据集的时间点快照,将内存中的数据集快照写入磁盘,他恢复时是将快照文件直接读到内存中,来达到恢复数据的。那么如何持久化的呢?Redis会单独创建一个fork(分支)的子进程来进行持久化,会先将数据写入一个临时文件中,等到持久化过程结束了,再用这个临时文件替换上次持久化的文件,在这个过程中,只有子进程来负责IO操
2021-06-23 14:48:39
75
原创 Redis简介
Redisredis是什么Redis是一个高性能的key-value数据库Redis是非关系型数据库继续内存开发的数据库,并且实现持久化Redis的优点丰富的数据结构性能极高 读的速度是110000次/s 写的速度是81000次/s所有操作都是原子性的支持发布订阅,通知,过期key特性redis能干嘛缓存,提升服务器性能,中间件排行榜 sortset数据功能好友关系 交集并集差集方便搞定一些共同好友共同爱好计算机/限速器 利用原子性的自增操作,统
2021-06-23 14:46:46
54
原创 Jedis远程连接阿里云redis
远程连接redis首先需要加入安全组需要解放6379端口,直接快速添加那里面有 hhh远程登录服务器,进入中断,如果你有宝塔界面更好没有 就终端操作 进入www/server/redis/中vim redis-conf 注释掉bind 重新bind 0.0.0.0修改redis保护 改为no这里我测试没有设置密码也可正常运行防火墙开启redis端口终端中//检查6379端口是否打开firewall-cmd --list-ports//没有就
2021-06-15 22:23:36
273
原创 线程间通信知识
线程间通信三种方法notify notifyAll wait 都是由object类中的方法,来提供线程通信wait()调用一个对象的wait方法时会造成当前持有对象锁的线程等待(阻塞)直到该对象锁的另一个线程调用notify/notifyall方法来唤醒。notify()调用一个对象的notify方法,会导致当前持有该对象锁的所有线程中的随机一个线程被唤醒。notifyAll()调用一个对象的notifyAll方法,会使持有该对象锁的所有线程被唤醒。使用注意的是:notify n
2021-05-12 21:05:53
59
原创 详细图解----AVL树的插入和旋转
文章目录AVL树的插入和旋转AVLTree是什么?AVLTree构造AVLTreeInsertAVL旋转左旋右旋双旋维护平衡因子AVL树的插入和旋转AVLTree是什么?AVLTree叫平衡二叉搜索树,不同于普通的二叉搜索树,重点在于平衡,它具有:他是一棵空树或该树非叶子节点的节点的左右子树的高度差的绝对值不超过1,所以会有个平衡因子进行维护,平衡因子的范围是(-1、0、1)。这里有二叉搜索树的基础会明白的更好,没有了解的建议先去了解。AVLTree构造AVLTreepublic class
2021-04-22 22:47:16
556
原创 HashMap put/resize源码分析
文章目录HashMap简介源码分析继承和实现属性节点类型Node内部类红黑树的节点构造方法构造器1构造器2构造器3构造器4putgetresize基于JDK1.7的优化底层实现hashput扩容HashMap简介HashMap 底层采用哈希表结构 数组加链表加红黑树实现,允许储存null键和null值数组优点:通过数组下标可以快速实现对数组元素的访问,效率高链表优点:插入或删除数据不需要移动元素,只需要修改节点引用效率高源码分析继承和实现public class HashMap<K,V
2021-04-20 22:37:24
362
1
原创 spring-mybatis整合步骤
spring-mybatis整合步骤为什么要整合如果没有整合?在mybatis种,操作数据库需要获取SQLSession对象,而此对象是用过SQLSessionFactoryBuilder读取全局配置文件来实例化一个SQLSessionFactory,通过SQLSessionFactory来获取到SQLSession对象。而用到整合,可以通过单例的形式来管理SQLSessionFactory对象,mybatis-spring中提供了一个SQLSessionFactoryBean类来实例化SQLSes
2021-04-09 23:38:14
271
原创 SSM整合步骤
文章目录SSM整合SSM整合思路SSM整合整合思路整合步骤1.创建web项目,并引入依赖2.Dao层处理(mybatis)1.mybatis的全局配置文件(spring-mybatis)2.创建pojo类3.创建Dao层StudentMapper4.创建资源文件3.Service层处理4.创建Controller层5.spring配置处理1.spring配置文件6.springmvc配置spring-mvc配置页面jspweb.xmlpom.xml7.开始运行8.执行结果SSM整合SSMspring+
2021-04-09 19:15:33
544
1
原创 IOC和DI
IOC和DIIOC(inversion of Control) 控制反转容器如何理解控制反转?将对象的创建,配置和维护交给第三方管理,解决了依赖的耦合度,大大降低。由容器来进行创建,配置和维护等工作,用户需要调用对象,就可以在IOC容器中获取。对象于对象之间的依赖关系在spring中如何解决Spring中对象在创建之后,需要依赖其他对象时,就需要依赖注入DI(Dependecy injection)控制反转是将对象交给外部管理,依赖注入问题也可以交给IOC容器进行管理IOC核心在于:对象不由
2021-04-09 19:01:54
423
3
原创 Java对象访问
对象访问在Java语言中,对象访问是如何进行的?涉及到 Java栈,Java堆,方法区三个重要的内存区域当你new一个对象时,假设这句在返回体中Object o = new Object();当你new一个对象时, 首先这个对象引用将储存在Java栈的方法表中,而它指向的new 出来的对象实例,储存在Java堆中,继而形成一块Object类型的所有实例数据值的结构化内存,其中还储存这(对象类型,父类,实现的接口,方法等)的地址,而这些则储存在方法区中。具体实现怎么定位的呢?不同的虚拟机实现对象
2021-04-09 00:21:44
185
原创 初期写的简单控制台操作实现五子棋游戏
五子棋项目文章目录五子棋项目1.棋盘类(Five-Stone)2. 棋子类(Chess)1. 建立属性2.构造方法3.get方法4.set方法3.源码1.棋盘类(Five-Stone)用棋子类chess类型定义二维数组 board 储存chess对象private Chess[][]board; // 用二维数组定义棋盘定义棋盘大小 ,获胜条件和 棋子数 用静态static final 修饰为常量 private static final int BOARDSIZE = 10;
2021-04-08 10:09:45
266
4
原创 Java内存分区
Java内存区域文章目录Java内存区域运行时数据区域1. 程序计数器2.Java虚拟机栈2.1 特点2.2局部变量表2.3操作数栈2.4动态链接2.5方法出口2.6两种异常情况3.本地方法栈4.Java堆新生代年老代5.方法区(永久代)5.1类型信息5.2常量池5.3字段信息5.4方法信息5.5类变量 static变量5.6对类加载器的引用5.7对class的引用5.8方法表运行时数据区域----《深入理解Java虚拟机》主要分为5个区域,1. 程序计数器它是一块较小的内存空间,主要作用是:
2021-04-08 00:48:19
178
1
原创 Java网络课程概述
Java网络课程概述课程大纲网络概括部份socket编程I/O模型操作系统中linux操作系统IO模型BIO模型同步阻塞模型NIO同步非阻塞模型AIO*异步非阻塞网络概述计算机网络:通过传输介质,通信设施和网络通信协议,将不同地点的计算机互联起来,实现资源共享和数据的传输。网络编程就是编写程序将网络中两个或两个以上的设备进行数据传输。OSI网络模型将网络划分为7层从上到下:应用层,表示层,会话层,TCP/IP协议族模型划分为4层对OSI的简化应
2021-04-04 15:09:22
134
原创 linux简单简介
LinuxLinux简介linux属于操作系统软件,而软件分为操作系统软件和应用软件。操作系统软件具有以下功能(mac,windows,Linux)控制硬件资源提供计算机运作所需要的功能提供给程序员系统调用的接口。操作系统之间的差别Linux和WindowsLinux 主要使用命令行操作系统,Windows 图形化界面Linux 是多用户系统 ,Windows 是单用户系统Linux 属于开源项目,而 Windows 不开源Linux 主要应用于服务器,Windows 是个人操
2021-02-21 13:49:31
157
2
原创 Hashmap和Hashtable区别和联系
文章目录Hashmap和Hashtable的区别和联系Hashtable区别和联系1.继承和实现2.属性3.构造器默认初始容量上:3.方法hash()方法迭代器扩容key和value是否可以为nullHashmap和Hashtable的区别和联系Hashtable出现于 JDK1.0,是线程安全的集合,底层使用哈希表实现区别和联系1.继承和实现Hashtablepublic class Hashtable<K,V> extends Dictionary<K,V>
2021-02-20 21:27:01
575
1
原创 Java多线程六种状态以及生命周期
文章目录1. 守护线程Daemon什么是守护进程?守护线程的生命周期为什么会有守护线程?什么时候需要守护线程?2. 线程的生命周期new:新建状态Runable:就绪状态/运行状态1.Runable: 就绪状态2.Running:运行状态Blocked:阻塞状态Waiting:等待状态Timed_Waiting:超时等待Terminated:终止状态线程状态转化图状态转化的方法start() 启动新线程run():子线程执行体yiled():线程让步sleep():线程休眠Join(): 线程合并Inter
2021-02-17 21:23:55
180
原创 Synchronized关键字
文章目录synchronzied关键字简介Synchronzied的使用修饰代码块修饰普通方法修饰静态方法synchronized特点原理修饰代码块修饰普通方法修饰静态方法使用场景*场景一*:两个线程同时访问同一个对象的同步方法。***场景二:***两个线程同时访问两个对象的同步方法。*场景三:*两个线程同时访问**一个或两个**对象的静态同步方法。*场景四:*两个线程分别同时访问(一个或者两个)对象的同步方法(synchronized修饰)和非同步方法。*场景五:*两个线程访问同一个对象中的同步方法,同步
2021-02-17 21:16:05
403
1
原创 Java并发知识以及volatile关键字
文章目录Java并发知识以及volatile关键字临界资源和临界区临界资源临界区空闲让进忙则等待有限等待让权等待线程安全并发特性原子性可见性有序性Volatile关键字JMM-Java内存模型volatile工作原理1.**保证内存可见性**2.**禁止指令重排序**happen-before注意:volatile满足原子性吗:volatile修饰对象是否起作用:主内存和工作内存是如何交互的?Java并发知识以及volatile关键字Java并发的重要性在于最大限度提高计算资源的效率。并发是多线程中交
2021-02-17 21:12:11
358
3
原创 进程和线程以及线程的创建
文章目录继承和线程以及线程的创建JVM内存结构进程和线程线程创建实现Runable接口直接继承Thread类实现Callable接口内部匿名类创建Callable Runable 的区别实现Runable 和继承thread类的区别继承和线程以及线程的创建JVM内存结构虚拟机栈:用于存放方法的基本信息, 局部变量,操作数,Java的内存模型:站在内存模型上理解堆和方法去时是线程共享区域,虚拟机栈,本地方法栈,程序计数器是线程私有的,当线程处于New状态时仅仅在堆空间分配了内存,运行中的线程会
2021-02-17 21:08:02
453
1
原创 安装linux中遇到的问题二进制/无法安装tools/共享文件不出现/文件不能拖拽
在安装中我遇到的问题是安装VNware完成后,无法打开虚拟机,提示二进制转换与此平台长模式不兼容因为我已经安装成功,没有保存图片,此图片为网上找出。原因:要在电脑中运行虚拟机,需要将虚拟化打开,我不知道别的系统默认会不会开启,我的电脑win10联想,默认时关闭的。解决办法:重启电脑进入BIOS,以联想为例,重启电脑,在电脑logo出现时 fn+F2进入。选择Configuration,将Intel Virtual Technology 状态从Disabled改为Enabled,然后F10保
2021-01-10 23:01:49
1686
7
原创 【剑指Offer】最大子数组的最大和Day2
题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).示例1输入[1,-2,3,10,-4,7,2,-5]返回值18说明输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。 此题的意思是,所给数组的所有子集 求出和最大的值。拿到这道题后我首先想到的是 使用双重for循环,将每个位置的和全部算出来,在求最大值最后发现
2021-01-08 20:03:34
117
原创 【剑指Offer】数组中出现次数超过一半的数字Day2
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。示例1输入[1,2,3,2,2,2,5,4,2]返回值2我的思路: 首先 我首先想到的是进行排序,那么中间位置的数即为所求值这里我使用的是快速排序,当然也可以使用其他几种排序 我只是想复习一哈快排????。以下为代码 public static int MoreTha
2021-01-08 20:02:43
61
原创 【剑指Offer】变态跳台阶Day1
剑指OfferDay1题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。示例1输入3返回值4找规律, 2^ n-1代码 public int JumpFloorII(int target) { if(targer == 0 || targer == 1) return 1; return 1<<(target-1); }时间复杂度O(n)空间复杂度O(1)
2021-01-07 19:10:58
63
原创 Priorityquque源码分析
Priorityqueue 1.5优先级队列 底层基于小根堆数组实现PriorityQueue也是Queue的一个继承者,相比于一般的列表,它的特点便如它的名字一样,出队的时候可以按照优先级进行出队,所以不像LinkedList那样只能按照插入的顺序出队,PriorityQueue是可以根据给定的优先级顺序进行出队的。这里说的给定优先级顺序既可以是内部比较器,也可以是外部比较器。PriorityQueue内部是根据小顶堆的结构进行存储的,所谓小顶堆的意思,便是最小的元素总是在最上面,每次出队总是将堆顶元
2020-12-19 20:08:14
120
3
原创 Arraydeque源码分析
ArrayDeque1.6ArrayDeque是JDK容器中的一个双端队列实现,内部使用数组进行元素存储,不允许存储null值,可以高效的进行元素查找和尾部插入取出,是用作队列、双端队列、栈的绝佳选择,性能比LinkedList还要好,1.6引入问题:为什么要用循环数组 ? 由于一般的数组实现的队列结构在频繁出队的情况下,会产生假溢出现象,导致数组使用效率降低,所以引入循环队列这种结构。假溢出:在顺序队中,当尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置。因为尾指针总会
2020-12-19 20:05:22
109
1
原创 LinkedList源码分析
LinkedList源码分析继承和实现public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable继承AbstractSequentialList,而AbstractSequentialList继承AbstractList,AbstractSequent
2020-12-19 19:50:35
67
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人