自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 SpringBoot —— 复习

SpringBoot复习1.微服务架构思想把每个功能元素独立出来,把独立出来的功能元素动态组合,需要的功能元素才去拿来组合,需要多一些时间可以整合多个功能元素,所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制好处是:节省了调用资源每个功能元素的服务都是一个可替换的、可独立升级的软件代码2.自动配置原理pom.xml spring-boot-dependencies核心依赖在父工程中启动器:就是SpringBoot的启动场景,比如spring-boot-starter-web

2022-02-10 12:52:29 496

原创 SpringMVC —— 复习

SpringMVC复习1.Spring MVC特点轻量级、简单易学高效、基于请求响应的MVC框架与Spring兼容性好,无缝结合约定优于配置功能强大:RestFul简洁灵活2.ModelAndView携带数据和视图3.RestFul风格就是一个资源定位及资源操作的风格,不是标准也不是协议,就是一个风格。基于这个风格设计的软件可以更简洁、更有层次、更易于实现缓存等机制功能:资源:互联网所有的事物都可以被抽象为资源资源操作:使用POST、DELETE、PUT、GET,对应添加、

2022-02-10 12:00:51 372

原创 Spring —— 复习

Spring复习1.Spring优点是一款开源的免费的框架轻量级的、非入侵式的框架控制反转(IOC)、依赖注入(AOP)支持事务的处理,对框架整合的支持总结一句话:Spring就是一个轻量级的控制反转和面向切面编程的框架2.IOC之前,程序是主动创建对象,控制权在程序员手中使用了set注入后,程序不再具有主动性,而是变成了被动的接受对象这种思想,从本质上解决了问题,我们程序员不用再去管理对象的创建了,系统的耦合性大大降低,可以更加专注的在业务的实现上(IOC原型)IOC是一种设

2022-02-10 10:46:14 853

原创 MyBatis —— 复习

MyBatisMyBatis是一款优秀的持久层框架它支持定制化SQL、存储过程以及高级映射MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,MyBatis可以使用简单的XML或注解来映射原生类型。持久化数据持久化:持久化就是将程序的数据在持久状态和瞬间状态转化的过程内存:断电及时数据库、io文件持久化为什么要使用持久化?有一些对象不能让它丢掉内存太贵了持久层Dao层、Service层、Controller层…完成持久化工作的代码块层界限十分明

2022-02-09 13:14:34 530

原创 网络编程 —— 了解

计算机网络是指地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程的目的无线电台…传播交流信息,数据交换,通信网络通信的要素通信双方地址规则:网络通信的协议网络模型:网络编程中有两个主要的问题:如何准确的定位到网络上的一台或者多态主机找到主机之后如何进行通信网络编程中的要素:ip和端口号网络通信协议ipip地址:InteAddress12

2022-02-09 12:49:09 1945

原创 JUC —— 各种锁的理解

公平锁、非公平锁公平锁:非常公平,不能插队,必须先来后到非公平锁:可以插队可重入锁可重入锁(递归锁)拿到了最外层的锁,就自动获得了里面的锁public class 可重入锁 { public static void main(String[] args) { Phone phone = new Phone(); new Thread(()->{ phone.call(); },"A").start();

2022-02-09 12:09:24 484

原创 JUC —— 深入理解CAS

CAScompareAndSet 比较并交换public class CASTest { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(2020); //期望、更新 // public final boolean compareAndSet(int expect, int update) //如果我的期

2022-02-09 11:21:46 136

原创 JUC —— Volatile

VolatileVolatile是java虚拟机提供的轻量级的同步机制保证可见性不保证原子性禁止指令重排序什么是JMMJMM:java内存模型,不存在的东西,是一个概念、一个约定关于JMM的一些同步的约定:线程解锁前,必须把共享变量立刻刷会主存线程加锁前,必须读取主存中的最新值到工作内存中加锁和解锁是同一把锁线程 工作内存 主内存JMM八种操作关于主内存与工作内存之间的交互协议,即一个变量如何从主内存拷贝到工作内存。如何从工作内存同步到主内存中的实现细节。java内存模型

2022-02-09 10:25:48 1043

原创 JUC —— 异步回调

没有返回值的异步调用/** * 异步调用:CompletableFuture * 异步执行 * 成功回调 * 失败回调 */public class Test { public static void main(String[] args) throws Exception { runAsync(); } public static void runAsync()throws Exception{ // 没有返回值的runAsync异步回

2022-02-09 09:08:07 276

原创 JUC —— ForkJoin

ForkJoinForkJoin(分之合并)在JDK1.7出现的,并行执行任务,提高效率,大数据量!大数据:M安排Reduce(把大任务拆分为小人物)特点:工作窃取:有两个线程池在执行任务,A线程池执行完任务后发现B线程池还没执行完,A线程池就会将B线程池中等待的线程任务拿到自己的池中执行操作/** * 求和计算 * 使用ForkJoin * 1.forkJoinPool 通过它来执行 * 2.计算任务 forkJoinPool.execute(ForkJoinTask task) *

2022-02-08 21:09:30 835

原创 新时代的程序员需要掌握的

函数式接口只有一个方法的接口,Runnable接口就是一个典型的函数式接口@FunctionalInterfacepublic interface Runnable { public abstract void run();}函数式接口,简化编程模型,在新版本的框架底层大量应用四大原生函数式接口ConsumerFunctionPredicateSupplierFunction 函数型接口源码:@FunctionalInterfacepublic interface

2022-02-08 20:35:43 7918

原创 JUC —— 线程池

池化技术程序的运行,本质:占用系统的资源,优化资源的使用 =>池化技术线程池、连接池、内存池、对象池… 创建和销毁十分浪费资源池化技术:事先准备好一些资源,有人要用就来这里拿,用完了在还回来线程池线程池的好处: 线程复用、可以控制最大并发数、管理线程降低资源的消耗提高响应的效率方便管理三大方法、七大参数、四种拒绝策略三大方法 Executors.newSingleThreadExecutor(); //单个线程的线程池 Executors.newFixed

2022-02-08 19:35:18 717

原创 JUC —— 阻塞队列

队列:FIFO 写入:如果队列满了,就必须阻塞等待 取:如果队列是空的,就必须阻塞等待生产四组API抛出异常不会抛出异常,有返回值阻塞等待超时等待方式抛出异常不会抛出异常,有返回值阻塞等待超时等待添加add()offer ()put()offer(时间,单位)移除remove()poll()take()poll(时间,单位)检测队列首element()peek()ArrayBlockingQueue使用场景:多线程并发

2022-02-08 18:22:56 152

原创 JUC —— 读写锁

ReadWriteLockReadWriteLock维护一对关联的licks,一个用于只读操作,一个用于写入,read lock可以由多个阅读线程同时进行,write lock是独家的(可以被多个线程同时读,只能被一个线程写)public class ReadWriteLockTest { public static void main(String[] args) { Data data = new Data(); for (int i = 1; i <=

2022-02-08 17:33:27 103

原创 JUC —— 常用辅助类

CountDownLatch允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助(减法计数器)//计数器public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { //计数器总数是6,必须要执行任务的时候再使用 CountDownLatch countDownLatch = new CountDownLa

2022-02-08 17:12:20 194

原创 JUC —— 深入理解Callable

Callable可以有返回值可以抛出异常方法不同,run() / call()public class CallableTest { public static void main(String[] args) throws ExecutionException, InterruptedException { MyThread myThread = new MyThread(); FutureTask futureTask = new FutureTask

2022-02-08 16:36:57 116

原创 JUC —— 集合类不安全

List不安全public class ListTest { public static void main(String[] args) { List<String> list = new ArrayList<>(); for(int i=1;i<=10;i++){ new Thread(()->{ list.add(UUID.randomUUID().toString()

2022-02-08 16:17:04 357

原创 JUC —— Lock锁

真正的多线程(公司)开发,不会去创建一个类,用该类去继承Thread类或实现Runnable接口,线程就是一个单独的资源类,没有任何附属的操作!Synchronized传统锁public class SynchronizedTest { public static void main(String[] args) { //创建资源类 Ticket ticket = new Ticket(); //函数式接口使用lambda表达式 n

2022-02-07 13:42:19 428

原创 JUC —— 入门

什么是JUC?java.util工具包业务:普通的线程代码 ThreadRunnable 没有返回值,效率相比于Callable相对较低线程和进程进程: 一个程序,如QQ.exe等,程序的集合一个进程往往可以包含多个线程,至少包含一个线程: 一个进程中的一些功能是通过线程来实现的注意:java默认有几个线程? 2个,一个main线程,一个GC线程;java真的可以开启线程吗? 不可以,Thread的start方法调用了本地方法private native void start0();,

2022-02-07 12:05:19 145

原创 Redis —— 缓存穿透、击穿和雪崩

Redis缓存的使用,极大的提升了应用程序爹性能和效率,特别是数据查询方面,但同时,它也带来了一些问题。其中。最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。另外的一些典型问题就是,缓存穿透、缓存雪崩和缓存击穿,目前,业界也有比较流行的解决方案缓存穿透缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询,发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都

2022-02-06 19:53:03 238

原创 Redis —— 哨兵模式

哨兵模式主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换到主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用,这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式,Redis从2.8开始正是提供了哨兵架构来解决这个问题。哨兵模式属于层层链路(谋朝篡位)自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行,其原理是 哨兵通过发送命令,等待redis

2022-02-06 19:12:23 207

原创 Redis —— 主从复制

Redis主从复制概念主从复制,是指将一台redis服务器的数据,复制到其他的redis服务器,前者称为主节点(master/leader),后者称为从节点(slave/follower); 数据的复制是单向的,只能由主节点到从节点 ,master以写为主,Slave以读为主默认情况下,每台redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点主从复制的作用主要包括:数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式故障恢复:

2022-02-06 18:41:46 381

原创 Redis —— 发布订阅

发布订阅Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息Redis客户端可以订阅任意数量的频道重要角色:消息发送者频道消息订阅者命令描述psubscribe pattern []pattern…订阅一个或多个符合给定模式的频道pubsub subcommand [argument [argument…]]查看订阅与发布系统状态publish channel message将消息发送到指定

2022-02-06 15:03:22 113

原创 Redis —— 持久化

Redis持久化Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失,所以redis提供了持久化功能RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数

2022-02-06 13:10:46 222

原创 Redis —— redis.config配置文件

Redis启动的时候就是通过redis.config启动的#配置文件对大小写不敏感#单位 unit#包含 include 可以包含其他文件#网络 networkbind 127.0.0.1 00 --绑定ipprotected-mode yes --保护模式port 6379 --端口#通用 generaldeamonize yes --以守护进程方式开启,默认是nopidfile /var/run/redis_6379.pid --如果以守护进程方式运行,需要制定一个pid文件

2022-02-06 12:23:02 616

原创 Redis —— jedis,SpringBoot整合redis

Jedis使用java来操作RedisJedis是Redis官方推荐的连接开发工具,使用java操作Redis中间件,如果要使用java操作redis,那么一定要对redis十分的熟悉使用Jedis1.在pom.xml中导入对应的依赖<!-- jedis依赖 --><dependency> <groupId>redis.clients</groupId> <artifactId>jedis<artifactId> &l

2022-02-06 11:56:25 671

原创 Redis —— 事务

事务Redis单条命令保证原子性的,但是事务是不保证原子性的Redis事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行

2022-02-06 10:37:31 363

原创 Redis —— 入门

概述什么是RedisRedis(Remote Dictionary Server)远程字典服务是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-value数据库,并提供多种语言的API。免费和开源,是当下最热门的NoSQL技术之一,也被人们称之为结构化数据库Redis能干嘛内存存储、持久化、内存中是断电即失的,所以说持久化很重要(rdb、aof)效率高,可以用于高速缓存发布订阅地图信息分析计时器、计数器(浏览量)…特性多样的数据类型持

2022-02-05 19:06:21 313

原创 Linux —— 学习

关机关机指令:shutdownsync:将数据由内存同步到硬盘中shutdown -h 10:将于10分钟后关机shutdown -h now:马上关机halt:关机,等于shutdown -h nowshutdown -r 10:将于10分钟后重启shutdown -r now:马上重启reboot:重启,等于shutdown -r now注意: 不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中;linux中没有输出错误,就代表成功系统目录结构在linu

2022-02-03 16:20:00 241 1

原创 MySQL —— 优化

概念在应用的开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的SQL语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化MySQL优化方式有很多,大致可以从以下几点来优化MySQL:从设计上优化从查询上优化从索引上优化从存储上优化查看SQL执行频率MySQL客户端连接成功后,通过show [session|global] statu

2022-02-02 14:34:55 781

原创 MySQL —— 索引

概念索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不适用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。可以理解为索引类似一本书的目录,比如要查找‘student’这个单词,可以先找到s开头的页,然后向后查找,这个就类似索引索引分类索引是存储引擎用来快速查找记录的一种数据结构,按照实现的方式分类

2022-02-02 12:12:42 511

原创 MySQL —— 日志

概念在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件,MySQL也不例外。日志分类错误日志二进制日志查询日志慢查询日志错误日志错误日志是MySQL中最重要的日志之一,它记录了当MySQL启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关数据,当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。该日志是默认开启的,默认存档目录为MySQL的数据目录,默认日志文件名为hostname.err(hostn

2022-02-02 09:58:09 607

原创 MySQL —— 锁机制

概念锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)在数据库中,除传统的计算机资源(如cpu、i/o等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性和有效性,是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤为重要,也更加复杂。分类从对数据操作的粒度分:表锁:操作时,会锁住整张表行锁:操作时,会锁住当前操作行从对数据操作的类型分:读锁(共享锁):针对同一份数据,多个读操作可以同

2022-02-02 09:15:05 416

原创 MySQL —— 事务

概念在MySQL中的事务,是由存储引擎实现的,只有InnoDB存储引擎支持事务事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行事务用来管理DDL、DML、DCL操作,比如insert、update、delete语句,默认是自动提交的事务操作MySQL的事务操作主要有以下三种:开启事务:任何一条DML语句(insert、update、delete)执行,标志事务的开启提交事务:成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步回滚事务:

2022-02-01 23:26:11 660

原创 MySQL —— 存储引擎

概念数据库存储引擎是数据库底层软件组织,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,现在许多不同的数据库管理系统都支持多种不同的数据引擎,MySQL的核心就是存储引擎用户可以根据不同的需求为数据库表选择不同的存储引擎可以使用show engines命令查看MySQL的所有存储引擎,可以看到默认的存储引擎是innoDB,它支持事务、行级锁和外键分类MyISAM:MySQL5.5之前的默认数据库引擎,最为常用,拥有较高的插

2022-02-01 16:42:15 152

原创 MySQL —— 触发器

概念触发器,就是一种特殊的存储过程,触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用在M有SQL中,只有执行insert、delete、update操作时,才能触发触发器的执行触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作使用别名OLD和NEW来引用触发器来发生变化的记录内容,这与其他的数据库是相似的,现在触发器还只支持行级触发,不支持语

2022-02-01 16:23:12 301

原创 MySQL —— 存储函数

在MySQL中,创建存储函数使用create function关键字:#语法create function func_name([param_name type[,...]])returns type[characteristic...]begin routine_bodyend;说明:func_name:存储函数的名称param_name type:可选项,指定存储函数的参数,type值类型returns type:指定返回值的类型characteristic:可选项,指定存储

2022-02-01 15:57:19 267

原创 MySQL —— 存储过程

概念MySQL5.0版本开始支持存储过程简单的说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似java语言中的方法存储过程就是数据库SQL语言层面的代码封装与重用特性有输入输出参数,可以声明变量,有if/else、case、while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能函数的普遍特性:模块化、封装、代码复用速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤入门案例语法:delimiter 自定义结束符号

2022-02-01 15:43:43 597

原创 MySQL —— 视图

介绍视图(view)是一个虚拟表、非真实存在,其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需要使用视图名称即可获取结果集,并可以将其当做表来使用数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中使用视图查询数据时,数据库系统会从原来的表中取出对应的数据,因此,视图中的数据是依赖于原来的表中的数据的,一旦表中的数据发生改变,显示在视图中的数据也会发生改变作用简化代码,可以把重复使用的查询封装成视图重复使用,同时可以使复杂的查询易于理解和使用安全

2022-02-01 13:35:19 516

原创 MySQL —— 函数

概述在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数,函数可以理解为别人封装好的模板代码分类在MySQL中,函数非常多,主要可以分为以下几类:聚合函数数学函数字符串函数日期函数控制流函数窗口函数聚合函数在MySQL中聚合函数主要是:count、sum、min、max、avg…在前面的学习中都有学习过,还有一个特殊的函数,是没有学习过的 —— group_concat(),该函数用于实现行的合并,group_concat()函数首先根据 group by指定

2022-02-01 12:38:00 2450

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除