- 博客(38)
- 收藏
- 关注
原创 Spring MVC
Spring MVCSpring MVC介绍Spring MVC框架Spring MVC的运行原理Spring MVC 中各组件的介绍前端控制器(DispatchServlet)处理器映射器(HandlerMapping)处理器适配器(HandlerAdapter)处理器(Handler)视图解析器(View Resolver)视图(View)Spring MVC介绍JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Sprin
2021-01-11 10:43:38 290
原创 Spring DI
Spring DIDI 依赖注入DI 关键点依赖注入方式基于xml配置文件注入基于有参构造函数注入基于set()方法注入当存在自定义类型属性时,set()方法其他类型的数据注入基于注解注入实现Demo@Resource和@Autowired的区别?依赖的解析过程DI 依赖注入DI(Dependency Injection)依赖注入,指容器复制创建和维护对象之间的依赖关系,而不是通过对象本身复制自己的创建和解决自己的依赖。控制反转是通过依赖注入实现的。其实Ioc和DI在Spring中是一个等同的概念。如
2021-01-10 18:05:15 522 2
原创 Spring IOC 详解
Spring IOCIOC什么是IOCIOC容器介绍BeanFactory和ApplicationContext的区别Spring容器管理对象Spring依赖(pom.xml)Spring的配置文件Bean类的实例化方式(demo)创建实例类基于xml配置文件实现Bean基于无参构造函数实例化静态工厂方式实例化基于普通工厂方法实例化基于注解的方式装配Beanspring配置文件引入context约束实例类上添加注解IOC什么是IOCIoc—Inversion of Control,即“控制反转”,不是
2021-01-09 19:01:14 336
原创 Redis 持久化
redis 持久化持久化RDB优点:缺点:RDB底层操作AOF配置AOF的fsync策略AOF产生的问题:RDB和AOF如何选择冷备份持久化如果我们将数据存放于内存:高效、断电(关机)内存数据会丢失,但是如果将数据存放于硬盘:读写速度慢于内存,断电数据不会丢失。Redis一共提供了两种能将数据从内存存放到磁盘的方法——RDB、AOF。RDBRDB是redis的默认持久化机制。 RDB相当于照快照,保存的是一种状态。 几十G数据经过转二进制和压缩的过程转换伪几KB快照快照是默认的持久化方式。这种方式是
2020-11-10 12:07:23 169
原创 Redis 内存维护
redis 内存维护产生原因内存维护解决方案LRULFULRU与LFU不同点:产生原因redis作为中间缓存件,时常会存储大量的数据,即使采取了集群部署来动态扩容,也应该及时的整理内存,维持系统性能。Redis官方也给出警告,当内存不足时,Redis会根据配置的缓存策略淘汰大部分keys,以保证写入成功。当无淘汰策略时或没有找到合适的key时,Redis直接返回out of memory错误。内存维护解决方案最大缓存大小maxmemory : 512G一是为数据设置超时时间,二是采用LRU
2020-11-10 11:37:51 156
原创 Redis基本操作
RedisRedis 简介非关系型数据库(NOSQL)非关系型数据库的产生背景非关系型数据库的种类键值(Key-Value)存储数据库文档型数据库图形(Graph)数据库Redis特点/优势Redis缺点Redis与Mysql比较Redis 基本操作String类型赋值语法:取值语法:删除语法:自增/自减:应用场景:字典类型赋值语法:取值语法:删除语法:其它语法:应用场景:List类型赋值语法取值语法删除语法修改语法高级语法应用场景Set类型赋值语法:删除语法差集语法交集语法并集语法应用场景有序集合(Sor
2020-11-09 21:56:40 409
原创 Linux详解
Linux初始LinuxLinux简介Linux 和 Windows 的区别什么是 open-vm-tools开机与重启runlevel用户管理添加新用户切换用户修改用户密码删除用户用户信息/etc/passwd 存储用户基本信息/etc/shadow 存储用户的密码/etc/group 存储用户组的信息/etc/gshadow 存储组密码信息Linux目录结构常见目录说明路径当前路径绝对路径与相对路径绝对路径相对路径路径切换Linux 系统下的文件类型与文件权限文件类型文件权限修改文件权限文字设定法数字
2020-10-22 13:17:07 2080
原创 MySQL入门很简单
MySQL特殊数据类型插入,更新,删除数据1.插入数据:2.将查询结果插入到表中:3.更新数据:4.删除数据:创建,修改,删除表设置表的主键:设置表的外键:删除表的外键约束:修改表名:修改字段的数据类型:修改字段名和字段数据类型:增加字段:删除字段:删除字段约束条件:修改字段的排列位置:更改表的存储引擎:改动字符集:视图在单表上创建视图:在多表上创建视图:查看视图:修改视图语句:更新视图:删除视图:触发器创建一个由insert出发的触发器:创建多个执行语句的触发器:查看触发器:删除触发器:查询语句带in关键
2020-08-18 13:57:36 441
原创 HashMap详解
HashMap详解1.HashMap的使用:2.HashMap迭代器的使用:1)Key的遍历:2)value的遍历:3)Entry的遍历:4)Interator遍历:3.HashMap的底层源码实现:3.1.HashMap中put()方法:3.2.HashMap之resize()方法3.3.HashMap之get(Object key)方法3.4.HashMap之remove(Object key)方法4.HashMap迭代器实现:5.HashMap与HashTable之间的区别与联系:1.HashMap
2020-08-14 09:58:28 303
原创 HashMap 与 Hashtable 的区别
\HashtableHashMap继承父类不同继承 Dictionary继承AbstractMap默认容量1116Table的初始化时间构造函数中初始化第一次使用put方法并发操作使用同步机制,实际应用程序中,仅仅是Hashtable本身的同步并不能保证程序在并发操作下的正确性,需要高层次的并发保护。下面的代码试图在key所对应的value值等于x的情况下修改value为x+1{value = hashTable.get(key); if(value.i...
2020-08-14 09:40:59 147
原创 mysql无法连接到服务解决方法
MySQL已安装,因长时间不用,不在服务列表中,无法启动,解决办法:1、以管理员身份执行cmd;2、切换到mysql安装目录下的bin目录,执行mysqld.exe --install命令,看到service successfully installed.表示安装服务成功。3、重新执行cmd,输入net start mysql 启动服务...
2020-08-14 09:05:04 1541
原创 ConcurrentHashMap底层分析
ConcurrentHashMap相关概念类的继承关系成员变量构造函数put方法分析第一个判断第二个判断第三个判断jdk1.8之前,通过segments实现,segments继承ReentrantLock,segments充当锁的角色,每一个table(桶)都有自己的锁,因此jdk1.8之前ConcurrentHashMap采用分段锁的机制来实现并发的更新操作,提高并发效率。table相当于HashMap中的数组(桶),桶里每一个节点包含键,值,Hash值,称之为HashEntry,用来封装键值对(k
2020-07-22 18:12:20 195
原创 synchronized使用情况
synchronized未加static关键字1)一对象两线程一方法2)两对象两线程一方法3)一对象两线程两方法4)一对象两线程两方法(有一非synchronized方法)加static关键字5)一类一对象两线程两方法(一个方法static修饰,一个没有)6)一类两线程两方法未加static关键字1)一对象两线程一方法两个并发的线程访问同一个类Object中的synchronized同步代码块或者同步方法时,同一时间只能执行一个线程,另一个线程必须等待当前线程执行完才能执行。(等待执行)import
2020-07-20 21:55:20 257
原创 线程间通信及生产者消费者模型
线程通信线程通信是什么wait()/notify()/notifyAll()await/signal/signalAll生产者消费者模型await/signal/signalAll实现wait/notify/notifyAll实现线程通信是什么线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。例如,线程B可以等待线程A的一个信号,这个信号会通知线程B数据已经准备好了。wait()/notify()/notifyAll()必须在synchronized同步代码
2020-07-20 20:36:21 226
原创 ReentrantLock详解
ReentrantLockReentrantLock使用格式底层实现获取锁释放锁公平锁与非公平锁公平锁非公平锁可重入锁与不可重入锁synchronizedReentrantLock可定时性ReentrantLock实现单例ReentrantLock与synchronized的比较相似点区别ReentrantLock提供了无条件的,可轮询的,定时的以及可中断的锁获取操作加锁和解锁都是显式的ReentrantLock使用格式 Lock lock = new ReentrantLock();
2020-07-19 22:10:12 18882 3
原创 银行家算法
银行家算法安全序列原理代码实现安全序列原理需要分配的资源(MAX)已经分配的资源(Allocation)还需要分配的资源(Need)可分配的资源(Available)线程(T)只有当全部线程都满足分配,才是安全序列;如图:可分配的资源(2,3,3)T4还需资源(2,2,1),(2,2,1)<(2,3,3)进行分配,T4满足后,可分配资源=T4已经分配的资源+上一次可分配的资源=(2,0,4)+(2,3,3)=(4,3,7);同理,T5还需资源(1,1,0),进行分配,可分配资源=
2020-07-18 21:44:38 1213
原创 死锁详解
死锁什么是死锁死锁的必要条件常见死锁1)交叉锁2)内存不足3)一问一答的数据交换4)死循环引起的死锁如何避免死锁死锁的预防死锁的避免解决哲学家就餐的死锁问题什么是死锁死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁的必要条件1)互斥条件:某个资源某一时刻只能由一个线程占用2)不可抢占条件:资源申请者不能从资源占有者手中抢夺资源3)占
2020-07-18 21:04:45 502
原创 synchronized详解
synchronized详解synchronized关键字synchronized理解Java中对象头monitorsynchronized用法同步方法的底层原理同步代码块的底层原理单例模式synchronized锁升级分析偏向锁轻量级锁重量级锁synchronized关键字防止线程干扰和内存一致性错误,如果一个对象对多个线程是可见的,那么对该对象的所有读/写都可以通过同步的方式来进行Synchronized关键字提供了锁机制,能够去保证共享资源的互斥访问,解决数据不一致的问题synchroni
2020-07-14 22:07:26 213
原创 Volatile详解
文章目录内存模型概念程序计数器虚拟机栈/本地方法栈堆方法区并发编程的三大特性原子性可见性可序性缓存一致性问题解决方法Java内存模型Volatile 内存屏障Volatile关键字原理及实现机制Volatile可见性Volatile 不可保证原子性Volatile 可序性使用场景及作用内存模型概念内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节,对象最终是存储在内存里面的,但是编译器、运行库、处理器或者系统缓存可以
2020-07-12 22:12:11 344
原创 多线程详解
@[TOC] 多线程并发与并行并发并发:多个线程操作同一个资源,不是同时执行,而是交替执行,单核CPU交替执行时间间隔特别短,并行并行:并行指的是同时执行,多核CPU,每一个线程使用一个单独CPU,并发编程并发编程:指多个任务在一个时间段重复执行的结构并发编程的三特性并发编程的三个特性:1.原子性原子操作:不可分割的操作,中间不会被其他线程打断,不需要同步操作多个原子操作合起来就需要使用到同步原子性指的是一次操作或者多个操作,要么全部执行,要么全部都不执行例如:int a =
2020-07-04 20:02:30 235
原创 Callable和Runnable接口之间的区别和start 方法和run方法的区别
Callable和Runnable接口之间的区别1.Callable的任务执行可以返回值,而Runnable不能有返回值2.Callable重写call()方法,call可以抛出异常,Runnable重写run()方法,run不可以抛出异常3.Callable可以返回一个Future对象,Future表示任务的计算结果,可以通过结构了解任务的任务执行情况start 方法和run方法的区别1.start方法用来启动相应的线程;2.run方法是一个普通方法,不会启动新的线程;3.需要并行处理.
2020-05-10 19:35:40 565
原创 多线程的创建方式
文章目录多线程的创建方式继承Thread类创建实现Runnable接口创建实现Callable接口创建匿名创建多线程的创建方式继承Thread类创建1】定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体。2】创建Thread子类的实例,也就是创建了线程对象3】启动线程,即调用线程的start()方法通过继承Thread实现的线程类,多个线程间无法共享线程类的实例变量;(因为是创建不同的Thread对象)class MyTh
2020-05-10 19:32:45 167
原创 测试JDBC操作事务的基本方法
一.建立连接并开启事务与设置事务隔离级别: SET AUTOCOMMIT = 0; connection.setAutoCommit(false); private String url = "jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&characterEncoding=utf8&...
2020-04-20 20:30:02 197
原创 使用JDBC,以及执行SQL语句
文章目录一.通过Java代码如何操作Mysql二.使用JDBC的步骤:<1>导入jdbc的Mysql实现依赖<2>参数配置<3>加载驱动<4>建立连接<5>创建操作数据库对象<6>使用statement /PreparedStatement对象,执行sql语句(1)使用statement对象,执行sql语句(2)使用Prepa...
2020-04-20 20:06:38 1838
原创 WeakHashMap
1.WeakHashMap继承了AbstractMap,实现了Map接口public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>2. (01) 新建WeakHashMap,将“键值对”添加到WeakHashMap中。WeakHashMap是通过数...
2020-04-11 15:26:31 160
原创 PriorityQueue的使用与底层源码
一.PriorityQueue的使用PriorityQueue —— 优先级队列,基于优先对实现的无界队列Java默认实现基于小根堆实现;常用方法: PriorityQueue<Integer> que = new PriorityQueue<>(); que.add(1); que.add(2); ...
2020-04-04 14:23:44 194
原创 Java中的四种引用
1.强引用 这类引用存在,GC永远不会回收掉被引用的对象2.弱引用 Java对象的高速缓存 ,描述 一些有用但是非必须的对象GC在内存充足时不会回收掉软引用对象,在内存不充足时会回收掉软引用对象默认内存空间为5兆 -Xms5m -Xmx5mclass MyArray{ byte[] bytes = new byte[3 * 1024 * 1024]; ...
2020-04-04 12:36:53 175
原创 HashMap
1.HashMap的使用:(1)插入键值对数据publicVput(Kkey,Vvalue)(2)根据键值获取键值对值数据publicVget(Objectkey)(3)获取Map中键值对的个数publicintsize()(4)判断Map集合中是否包含键为key的键值对publicbooleancontainsKey(Objectkey)(5)判断...
2020-04-02 23:32:58 258
原创 自定义ArrayList和LinkedList
ArrayList的属性及构造函数:class MyArrayList<T>{ private T[] elements; private int size; public MyArrayList(){ this(5); } public MyArrayList(int capacity){ elements...
2020-03-31 22:35:45 237
原创 Mysql基础知识点
一、命令登录数据库:mysql-uroot-p123456退出数据库:quit或者exit创建数据库:createdatabase数据库名;使用数据库:use数据库名;删除数据库:dropdatabase数据库名;创建表:createtable表名(字段名字段类型约束,...);修改表-添加字段:altertable表名add...
2020-03-01 21:51:47 233
原创 选择排序及其优化
1,从待排序列中选择最小值与第一个值进行交换2,3,空间复杂度 (O(1)) 时间复杂度(O(N^2)) 稳定性->稳定 public static void selectSort(int array[]){ if (array == null || array.length == 0) return; for (int i = 0;...
2020-02-22 19:50:09 149
原创 冒泡排序
1,原理:比较两个相邻的数,值大的向后移动;2,N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环实现3,空间复杂度(O(1)) 时间复杂度(O(n^2)) 稳定性->稳定4,冒泡排序及其优化:public class Test25 { //冒泡排序: public static void bubbleS...
2020-02-22 19:04:07 103
原创 try catch finally
1.如果没有异常,先执行try代码块,再执行finally代码块; try{ System.out.println(111); }catch(Exception e){ System.out.println(222); }finally{ System.out.println(...
2019-12-15 13:21:45 136
原创 异常
Java的异常体系exception:ArrayIndexOutofBounds 数组越界 InputMismathchException 输入错误NullPointerException 空指针异常 引用变量 没有指向有效的对象ClassCastException 类型转换错误error:OutOfMemory(OOM)堆内存耗尽 ,没有可用的堆内存S...
2019-12-15 12:25:52 152
原创 接口
接口 关键词 interface特征: 接口不能直接使用new操作符创建一个接口对象 接口可以看作一个特殊的类 接口只能有方法声明 实现接口;implement关键字 接口中的功能和实体是“有”的关系;接口中的变量:public abstract final; 接口可以有多个实现,接口与接口之间也是可以相互继承的; jdk1.8之后 接口可以提供默认方法:defaul...
2019-12-15 12:19:25 163
原创 类和对象
--------------------类和对象----------------------- 1、没有定义构造函数却可以使用? 在用户没有定义任何构造函数的情况下,JVM会自动生成一个无参的默认构造函数 2、在同一个类中要去调用属性或者方法使用this引用 java中的this引用:每一个类都有一个this引用,this引用指的当前对象本身。 3、构造函数可以有多个,多个...
2019-11-24 12:56:00 100
原创 字符串 数组知识点
/***JVM内存*栈内存 stack*int a=10; a在栈内存*定义出开辟栈空间,处了函数的右括号;*堆内存 head*Integer b=new Integer(10); new...在堆 ;b在栈内存*栈内存出了函数右括号,内存就被回收*堆内存都靠GC来回收*eg;*int a=10;*Integer b=new Integer(10);*in...
2019-11-08 18:09:08 344
原创 万年历
代码:package com.sebase;/* * 万年历: * 显示某一年某一月的日历 * 显示今年生肖是什么 * (以1990年为基准,马年, 1990.01.01是星期一) * 马、羊、猴、鸡、狗、猪、鼠、牛、虎、兔、龙、蛇 * 显示是闰年还是平年 * 星期日 星期一 星期二 星期三 星期四 星期五 星期六 * 1 2 3 ...
2019-11-08 17:48:15 1209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人