07 2022 档案
摘要:一、饿汉式 单例设计模式,简单说:一个类只有一个实例对象。 单例设计模式核心:因为内存、所以性能。 饿汉式是指,这个类一旦加载,这个类的实例就被创建。而加载某个类到内存中由调用这个类的静态成员触发。单例模式里面的...
阅读全文
摘要:现在有如下的一条超链接 " target="_blank">${article.title} 这条超链接的特点就是在URL路径中添...
阅读全文
摘要:一、转义 大于号: > 小于号: < 二、CDATA标签 第二种办法就是使用CDATA
阅读全文
摘要:一、使用${ } 不能够防止SQL注入。MySQL与Oracle通用 二、把模糊查询的 %加上引号 就像这样子, "%"#{param}"%" 多个匹配条件可以像这样写 三、使用函数进行拼...
阅读全文
摘要:一、在MySQL数据库中 在mysql数据库中,使用的是foreach标签。 foreach元素的属性主要有 collection,item,index,open,separator,close。 常用的有 it...
阅读全文
摘要:一、在MySQL数据库中的写法 在mysql数据库中,写法比较简单。在Mybatis配置文件中添加 userGeneratedKeys="true" keyProperty="id",这样就能把我们插入的实体的主键id赋值。下次使用的时候,再...
阅读全文
摘要:今天又发现了一个新的问题,Shiro的拦截器不能够拦截ajax请求,需要自定义一个拦截器来拦截ajax请求。 package com.ssi.domains.secutity;import org.apache.shiro.SecurityUt...
阅读全文
摘要:一、关于HashSet的一些结论 HashSet在它的构造函数中,封装的是HashMap,因此理解了HashMap,HashSet就显得非常非常简单。怪不得好多大佬在分析结合框架源码的时候,都没有关于HashSet的文章,自己去看了源码才知道...
阅读全文
摘要:一、HashMap的基本结构 HashMap是Map接口的实现类,是一个双列集合,内部使用的是“键值对”存储数据,允许null做为“键”。这个是以前在上学的时候,可以摇头晃脑的说出来的。今天,我们就来探索一下HashMap的源码,解开HashM...
阅读全文
摘要:一、LinkedList链表的基本结构 链表,可以简单的理解为一个链子。链子的特点就是一环套一环。当我们需要某一环的时候,只要我们拥有链子的任意一环,都能够找到我们想要的那一环。LinkedList可以看成是一个双向的链表。我们知道ArrayL...
阅读全文
摘要:一、ArrayList是什么 ArrayList可以看成是一个动态的数组,它的内部是通过数组实现的。为什么称它为“动态”数组呢?因为ArrayList拥有“扩容”机制。当ArrayList的长度不够的时候,它将会通过Arrays.copyof(...
阅读全文
摘要:一、内部类的定义 将一个类的定义放在另外一个类的内部,这就是内部类。内部类的特点,我们用一个例子来引出。 /** * Created by jay.zhou on 2018/2/23. */public class Outer { pri...
阅读全文
摘要:本系列任务是把以前的所有资源重新维护总结,以便夯实基础。主要目的是把之前的Java代码系统的整理一遍,并且添加上现在在公司里的新理解。主要目的是掌握更牢固的Java基础,并且提升更加深厚的Java内功。主要整理的资源有《Java编程思想》,《毕向...
阅读全文
摘要:一、shiro的标签 首先,你需要知道的是,标签的实质其实是Java代码。你已经知道,JSP实质也是Java代码,更别说用在JSP中的标签了。 稍后你会在源码追踪环节了解到:Shiro标签执行了哪些Java代码。 标签的作用就是...
阅读全文
摘要:前言 与WEB集成想了一下,还是要弄一个例子。至少应该展示一下拦截器的基本用法。如果你有幸看到这里,希望你能继续跟着大宇的思路走下去。我将想你展示我编写代码的流程。与Spring集成先不要着急,我会在后面的小节详细向你讲述。现在,让我们先来搞定...
阅读全文
摘要:一、Shiro框架携带的拦截器 首先来温故一下最常见的shiro拦截器。anon表示不拦截,authc表示需要认证,roles表示需要某种角色,perms就更狠了,直接表明需要某种权限。ssl是https相关的拦截器,上次项目中客户要求以htt...
阅读全文
摘要:前言 本小节仅仅是分析shiro的WEB环境加载的过程。有时候我们在使用框架或者集成其它插件的时候,可能会遇到各种各样启动的问题,这个时候能够去追踪源码,找到问题所在,也是我们开发人员的必备技能之一。 一、与WEB集成的配置 还...
阅读全文
摘要:一、授权流程 在上一小节中,我们通过门面对象Subject.hasRole(String role) 、 Subject.checkPermissions(String permission)等接口,来判断用户是否拥有指定的角色信息或权限信息。...
阅读全文
摘要:一、授权的理解 你是谁,你是谁决定了你的身份是什么,你的身份决定了你能干什么。 这里牵扯出三种对象。 用户对象user:当前操作的用户。 角色对象role :表示一组 "权限操作许可权" 的集合。...
阅读全文
摘要:撤销提交: git reset HEAD fileName https://blog.csdn.net/ligang2585116/article/details/71094887 一、与远程仓库交互 (1)将当前的项目上传到GitHu...
阅读全文
摘要:最新想复习一下以前学过的几种排序,凑合着看吧,说不准哪天又忘了,回头还得指望这篇博客呢 package me.jea.array;import java.util.Arrays;public class MyTest { public static void ...
阅读全文
摘要:一、搭建基本页面 导入页面的依赖并且关闭页面的缓存。 org.springframework.boot spring-boot-starter-thymeleaf spring.thymeleaf.cache=false ...
阅读全文
摘要:常用表达式的例子 每隔5秒执行一次:*/5 * * * * ? 每隔5分钟执行一次:0 */5 * * * ? 每天5点执行一次:0 0 5 * * ? 每月1号凌晨1点执行一次:0 0 1 1 * ? 每月最后一天23点执行一次:0 0 23 L * ?...
阅读全文
摘要:一、使用Redis实现session共享 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时只需要从该...
阅读全文
摘要:一、Redis基本操作 先导入我的Redis储备知识:从头开始学Redis Redis 支持多种数据类型,字符串string、哈希hash、列表list、集合set、有序集合zset。 二、在SpringBoot中集成Redis...
阅读全文
摘要:一、WebSocket第一次使用 首先要掌握的是webSocket的4个事件。 open eventSokcket @OnOpen连接建立时触发message eventSokcket @OnMessage客户端接收服务端数据时触发error...
阅读全文
摘要:一、概述 在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主...
阅读全文
摘要:一、使用foreach 注意点:Java的List需要传 List。 解析后效果: SELECT * from t_article WHERE id in ( 21 , 22 ,23 ) 删除实例与插入实例大同小...
阅读全文
摘要:11.1 字段上移 两个子类拥有相同的字段,将该字段移动到超类。 本重构优势在于:去除重复声明,并去除重复行为。 11.2 函数上移 有些函数,在各个子类中产生完全相同的效果。若函数签名不同, 修改函数签名到...
阅读全文
摘要:10.1 函数改名 当函数的名称未能够揭函数的用途,那么就修改函数的名称。 抽取出来的方法虽然可重用性与可复写性变高,但需要将它们的起一个好名字。否则我将会需要费劲周折来弄清楚这些函数的功能。有一个比较好的办法,先为这个函数增...
阅读全文
摘要:9.1 分解条件表达式 如果有一个非常复杂的条件(if--then--else),可以将 if then else 三个段落中分别提炼出独立的函数。 if 语句若有多个条件,按其意图抽取函数,并按意图命名,则代码可读性将大...
阅读全文
摘要:放低自己的姿态 下面的这一大段话都是武哥的话,原文:同样是程序员,为什么别人比你更优秀? "是在分享还是在吹逼,这点我们一下子就能辨别出来,我也有所谓的朋友经常在我面前吹牛逼,可能这是一个人的本性,每次跟我聊天都要海吹一波,我只...
阅读全文
摘要:7.1 搬移函数 当前类中的某个方法,却与其它类配合的更加紧密,那么应该把原类的方法迁移到其它类中。如果用到了当前类中少许字段或者方法,可用方法参数来传递当前字段或者对象。在迁移方法成功后,将当前类的旧函数变成一个单纯的委托函数,或是将旧函数...
阅读全文
摘要:6.1 提炼函数 将小的功能抽取为函数,并将其方法名作为注释,所以,需要在方法名上下一点功夫。 抽取小的功能的优势在于两点:(1)可复用这个小功能(2)便于重写 函数名应该以其意图而命名,而不是以如何去做命名。...
阅读全文
摘要:14.1 Redis到底是什么? 在上一小节中学习了如何在Java中使用Redis。在Java中使用Redis,只要使用Redis提供的JeRis接口即可。 拨云见日 原来在Java中使用Redis只需要使用Redis提...
阅读全文
摘要:13.1 安装驱动 Redis提供了一个客户端类redis.clients.jedis.Jedis,它能够帮我们在Java中使用Redis缓存。 首先是添加依赖Redis JAR 包。 redis.clients ...
阅读全文
摘要:12.1 备份 语法:SAVE 备份的数据库在 redis 安装目录中创建dump.rdb文件。 SAVE 12.2 恢复 恢复很简单,只需要把dump.rdb文件移动到Redis安装目录下即可。 ...
阅读全文
摘要:11.1 验证密码是否正确 语法:AUTH PASSWORD AUTH “password” #我本机提示我没有设置密码 11.2 查看Redis服务器是否开启 语法:PING 连接正常返...
阅读全文
摘要:10.1 EVAL命令 Redis 脚本使用 Lua 解释器来执行脚本。执行脚本的常用命令为 EVAL。 语法格式: EVAL script numkeys key [key ...] arg [arg ...] sc...
阅读全文
摘要:8.1 开始事务 一个事务从开始到执行会经历以下三个阶段: 开始事务。MULTI命令入队。EXEC执行事务。 Redis的事务有几个特点: (1)单个命令原子性,即单个命令要么执行,要么就不执行,不会执行到一半就...
阅读全文
摘要:8.1 订阅 Redis的发布订阅其实就是一种消息交换模式。用设计模式的角度来理解就是“观察者设计模式”。 订阅语法:SUBSCRIBE ChannelName SUBSCRIBE myChannel #按C...
阅读全文
摘要:7.1 设值 与Set一样,ZSet也是存储的字符串string,并且不能重复,但是它是有序的。 每个元素都会关联一个double类型的分数,称之为权重Score。 设值语法:ZADD ZSetName ...
阅读全文
摘要:6.1 设值 Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 可以将Redis中的Set理解为Java中的HashSet集合。 设值语法:SAD...
阅读全文
摘要:1.设置黑色主题 File -- Settings -- Appearance&Behavior -- Appearance 面板 -- Theme ,选择Darcula 2.设置代码编辑框的字体大小 File -- Settings -- Editor -...
阅读全文
摘要:5.1 设值 LPUSH ListName Value Lpush 命令将一个或多个值插入到列表头部。 LPUSH newList valueA valueB 5.2 取值 L...
阅读全文
摘要:4.1 设值与取值 哈希(hash),又名键值对。是一个string类型的key和value的映射集,hash特别适合用于存储对象。 设值语法:HMSET MapName KeyName Value 取...
阅读全文
摘要:3.1 设值与取值 设值命令SET StrKey StrValue 取值命令GET StrKey SET myString myStringVal GET myString 3.2 设置有时间的Ke...
阅读全文
摘要:常用的命令需要记住。不只是string类型用到,hash类型也有key,好像其它所有类型都有Key。 2.1 删除KEY DEL KeyName 删除Key SET myKey myValue GET myKey...
阅读全文
摘要:1 运行Redis Redis安装步骤:https://www.jianshu.com/p/e16d23e358c0 命令行切换到Redis安装目录,输入 redis-server.exe redis.windows.co...
阅读全文
摘要:1.使用LIKE关键字可能触发不了索引 首先执行下面的SQL,准备一些数据。 DROP TABLE IF EXISTS t_student;CREATE TABLE `t_student` ( `id` int(11) NOT NULL AU...
阅读全文
摘要:存储过程与存储函数的补充 MySQL的存储过程与存储函数有什么区别? 存储函数只能通过return语句返回单个值或者表对象。 存储过程不能用return,但是可以使用多个out参数返回多个值。 存储过程如何修改代码...
阅读全文
摘要:10.2.1 调用存储过程 存储过程必须使用CALL语句来调用。如果要调用其它数据库的存储过程,需要指定数据库名称。例如 CALL dbname.spname DROP TABLE IF EXISTS t_student;CREATE TAB...
阅读全文
摘要:10.1.6 流程控制的使用 (1)IF语句的使用。 DROP PROCEDURE IF EXISTS testIf;DELIMITER //CREATE PROCEDURE testIf(OUT result VARCHAR(255))BE...
阅读全文
摘要:8.1.1 为表的所有字段插入数据 标准的插入语法为:为表中的所有的列插入数据,一 一对应。 使用该语句的时候,字段列和数据值的数量必须相同。 INSERT INTO table_name(COLUMN_L...
阅读全文
摘要:7.6.1 合并查询结果集 如果使用UNION ALL 可以连接多条查询语句,并将它们的结果集组合起来。 语法为 SELECT column ,... FROM table1 UNIO...
阅读全文
摘要:7.5.1 带ANY、SOME、ALL的子查询 子查询是指一个查询语句嵌套在另外一个查询语句中的查询。 在SELECT子句中先计算子查询,子查询结果作为来外外层另外一个查询的过滤条件。即另外一个查询的查询条件就是子查询中返回的...
阅读全文
摘要:7.4.1 内连接 内连接通过比较运算符在不同的表之间操作,并列出不同的表中连接条件相同的数据行,将其拼接成新的记录。也就是说,只有满足条件的记录才能出现在结果关系中。 DROP TABLE IF EXISTS t_student;CREAT...
阅读全文
摘要:有时候并不需要返回实际表中的数据,而知识对数据进行总结。MySQL提供了相关的聚合函数,常见的聚合函数有: AVG()、COUNT()、MAX()、MIN()、SUM() GROUP BY 与 聚合函数一起使用,将会对每...
阅读全文
摘要:7.2.11 对查询结果进行排序 根据字母进行排序,或者根据数字进行排序。默认是升序 ASC SELECT f_name, f_id, s_idFROM fruitsORDER BY f_name; 降序的话,只需要加上 DES...
阅读全文
摘要:7.2.1 查询所有字段 使用通配符 * 来查询所有数据 SELECT * FROM fruits; 优点:当不知道表的列名称的时候,可以节约时间,快速知道列的名称。 缺点:获取不需要的数据可能会降低...
阅读全文
摘要:一、大宇想说的话 大宇大学毕业已经四个月了,这四个月有懒惰的时候,有努力的时候。回首自己走过的路,只有毕业设计最能浓缩我的所学。我早就有这个打算:把自己的毕业设计与大家分享,但一直没有用行动落实。这个周末我下决心,牺牲一些游戏的时间,要把这个事...
阅读全文
摘要:6.3.2 合并字符串 CONCAT(S1,S2,S3) CONCAT_WS(X,S1,S2,S3) WS的全称:With Separator,即带分隔符 CONCAT常用于连接字符串。如果有NULL,则返回NULL。 ...
阅读全文
摘要:5.3.2 算术运算符 保留4位小数。如果除以的是0,那么返回的是NULL。 DROP TABLE IF EXISTS t_operation;CREATE TABLE t_operation( number INT);INSER...
阅读全文
摘要:5.1.4 字符串类型 (1)char与varchar 长度是否可变,具体长度是什么,存的时候,取的时候 char是固定长度的字符串,字符串长度由定义的时候指明。如果插入的字符串没有达到定义的长度,那么就用空格补充。在取...
阅读全文
摘要:5.1.1 整数类型 整数类型 TINYINT SMALLINT MEDIUMINT INT BIGINT 。分别占12348字节。 INT(11)后面的数字11,表示的是这个数据能够显示的宽度。显示宽度只用于显示...
阅读全文
摘要:把数据存放到 Session中,然后在页面 使用 写Java脚本片段。最后再取出Java对象中的数据。 突然觉得自己眼高手低了,以前最最基础的JavaWeb已经忘记,那些最基本的Servlet的生命周期也快忘光,我记得有4个域...
阅读全文
摘要:一、为什么要用ConcurrentHashMap 经典讲解为什么并发不用HashMapHashMap为什么是线程不安全的?_mydreamongo的博客-CSDN博客_hashmap为什么线程不安全 你需要拥有的前置知识...
阅读全文
摘要:注意点提醒: 表结构变化之前要备份,因为数据是无法恢复的。 不是每张表都是需要主键的! 有外键关联的两张表必须使用相同的存储引擎。 自增属性默认从1开始。如果你插入的id是5,那么下次...
阅读全文
摘要:前言:哇,这一章是真的费劲,以前是知其然,这次探索了如此多的同步组件的源码,终于是知其所以然了。 下一步也能开发自己的同步组件了,嘎嘎。 - - - - - - - - - - - - - - - - - - - - - -...
阅读全文
摘要:4.1.2 为什么要使用多线程? 一个线程在同一时刻只能运行在一个处理器核心上。如果程序使用多线程,那么程序就会被分配到多个处理器核心上,这样就会显著减少程序的处理时间,并且随着更多处理器核心的加入,程序的执行会变得更有效率。P...
阅读全文
摘要:3.1 原文:Java线程之间的通信由Java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入何时对另外一个线程可见。P22 Java内存模型JMM定义了写到本地内存中的数据何时刷新到主存中。 原文:线...
阅读全文
摘要:1.1 原文:时间片是CPU分配给各个线程的时间。P1 时间片是CPU分配给各个线程的时间,一般是几十毫秒。 原文:上下文切换P1 任务从保存到再加载的过程是一次上下文切换。一个任务可能没有执行完...
阅读全文
摘要:一、读写锁基本特性 我们知道,对锁性能的优化其中有一条:如果操作互不影响,那么锁就可以被分离。这就是锁分离的思想。 ReentrantReadWriteLock可重入的读写锁。读写锁在同一时刻允许多个读线程访问,但是在写线程...
阅读全文
摘要:参考文章:https://blog.csdn.net/tlk20071/article/details/75729675 一、自增:不加锁线程不安全 public class AtomicDemo { //定义一个共享变量 private int ...
阅读全文
摘要:早上心态崩了,为什么这些东西这么难,这些东西到底有什么用? 好吧,我又一次怀疑人生了,但是脑海中一直有一个声音反驳那个问题:“学这些有什么用?又用不到!”。 我好像把"不会"与"不用"因果关系弄颠倒了,我是因为 ...
阅读全文
摘要:一、volatile 与 synchronized 关键字 的原理 Java代码首先会被编译成字节码文件。字节码文件被加载到JVM中,JVM将字节码翻译成汇编指令,从而在CPU中执行。 谈到volatile关键字,就会想到两...
阅读全文
摘要:一、ThreadLocal的基本定义 官方定义:当使用 ThreadLocal 维护(set)变量时,ThreadLocal 为每个使用该变量的线程提供(get)独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应...
阅读全文
摘要:一、Future模式的基本思想 如果某个方法的执行过程非常耗时,并且我们又不着急要这个方法的返回结果。 假设在单线程情况下,我们就必须要等待。 这个时候,可以修改此耗时的方法,让其立即返回客户端一个伪造的数据。 ...
阅读全文
摘要:一、CountDownLatch类语法要点 (1)构造函数接收计数器的值。 (2)被计数的任务线程执行完毕后,记得调用一次 latch.countDown()方法,提示CountDownLatch对象,当前线程已经执行完毕。...
阅读全文
摘要:在 java.lang.Thread.State类中,定义了线程的状态。 线程的状态 NewNew状态是线程实例化后还没有执行start()方法的状态。new Thread().getState();RUNNABLE ...
阅读全文
摘要:一、Oracle 在Oracle数据库中批量更新。需要传递一个List集合,然户进行循环执行SQL语句。 参考网站:https://www.cnblogs.com/feixian/p/5960111.html 如...
阅读全文
摘要:5.1 原:Timer类的主要作用就是设置任务,TimerTask类用于封装任务。P241 Timer开启一个线程,可以通过构造器接收true将其作为守护线程。new Timer(true); 如果Timer t...
阅读全文
摘要:4.1.1 原:调用ReentrantLock对象的lock()方法获取锁,调用unlock()方法释放锁。P201 Lock lock = new ReentrantLock(); 如果不调用lock.unlo...
阅读全文
摘要:3.1.3 调用wait()或notify()等方法的对象,必须是同步锁对象,否则抛出IllegalMonitorStateException. 比如同步方法中只能是 this.lock()。 wait()使当前...
阅读全文
摘要:2.1.1 方法里面的变量是临时变量,在栈内创建。 多次调用某个方法,则多次创建临时变量,线程安全。 2.1.2 多个线程通过某方法同时操作同一个对象的属性,可能是线程不安全的,需要把操作的方法加上同步锁 2....
阅读全文
摘要:1.1 进程:正在执行的程序。进程是OS分配资源的最小单位。 线程:正在执行的程序的子任务。线程是程序执行的最小单位。 原:使用多线程的优点:可在同一时间运行更多不同的任务。 P3 原:使用多线...
阅读全文
摘要:本文作者是阿里大神级别程序员,这篇文章记录了他成长的一些经历,对我这样的才入职的小白帮助很大。 原文地址:http://www.cnblogs.com/xrq730/p/5260294.html 作者:五月的仓颉 前言 因为和同事有约定再加上LZ自己也喜欢做...
阅读全文
摘要:原文地址:给Java程序猿们推荐一些值得一看的好书 最近ThinkInJava读的差不多了,读到了并发章节,感觉想找一本专门是讲并发的书籍来看。但是发现网上所谓的必读书籍并不怎么理想,原因是因为老外写的书,多少看起来有点羞涩难懂,于是在找的过程中找到了这篇文章...
阅读全文
摘要:参考地址:工作流Activiti5流程变量 任务变量 setVariables 和 setVariablesLocal区别 在刚开始学习的时候,当时我就发现,使用setVariablesLocal设置的流程变量,在下一个任务节点处...
阅读全文
摘要:在提交表单数据的过程中,我发现提交的表单内容数据,以其name属性为基准。当然了,我习惯把name与id属性统一起来,这样就能姑且认为是通过name属性提交的数据。实际结果也是以name属性为基准的。 比如,我在下面的这个表单中提...
阅读全文
摘要:在部署了一个Zip包后,流程部署表act_re_deployment与流程定义表act_re_procdef均会插入一条新的记录。 这个在之前已经讨论过了。今天要开启流程定义操作,将流程定义启动。 要准备的操作是:先...
阅读全文
摘要:流程定义查询的Service与流程部署的Service一样,是RepositoryService接口实现。 核心知识点如下: //开启流程之前先寻找最新版本的请假流程定义 Process...
阅读全文
摘要:开发工具 Idea 先创建一个项目,File - New - Project 选择Spring Initalizr ,然后点击Next 选择默认就好...
阅读全文
摘要:查询部署信息表act_re_deployment,主要就是通过 RepositoryService来操作。 核心代码就是创建查询对象,repositoryService.createDeploymentQuery(); 然后为这...
阅读全文
摘要:一、定义 用一个中介者对象封装一系列的对象交互,中介者使各对象之间不需要显示地相互作用,各对象之间只要跟中介者对象关联,从而使各对象之间的耦合降低,并且能独立地改变它们之间的交互。中介者设计模式属于行为设计模式。为了防止一个类会涉及修改其他类的...
阅读全文
摘要:/*var rowArray = [];//用于存放操作后的快捷键实体的数组*//*rowArray.push(row);*/ $.ajax({ url: url, type: "POST", ...
阅读全文
摘要:一、定义 官方定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类,(State Pattern)是设计模式的一种,属于行为模式。 我的理解:当一个对象具有多种状态的时候,将这些状态抽取出来。每一种状态对...
阅读全文
摘要:一、定义 定义:记录一个关键对象的关键属性,当关键属性发生变化的时或者出错时,有办法将对象恢复到以前的状态。 角色: 发起人Originator:这个角色是需要被记录的关键对象。一般来说,它有几...
阅读全文
摘要:一、定义 将一个请求(命令)封装为一个对象。这个请求(命令)定义了“谁去做”与“做什么”。 命令模式的例子牢牢记住“电视机遥控器”就可以了。 Invoker通过Command,最终让Receiver接受者执行。 Invok...
阅读全文
摘要:一、定义 责任链是每一个对象持有其下家的引用而形成的一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 ...
阅读全文
摘要:select stuId ,teacherId from T_Table 比如上述的SQL语句中,查询出来的数据是stuId和teacherId 。stuId对应的那条数据在 T_SYS_PARAM 中,teacherId也在T_SYS_P...
阅读全文
摘要:一、定义 观察者模式又称订阅发布模式。它定义了一种一对多的依赖关系,即一个类向多个类发送消息。多个观察者对象同时观察一个主题对象。当主题对象状态发生变化的时候,主题对象会向所有观察者对象发送消息,使他们更新自己。 此模式应用极其...
阅读全文
摘要:一、定义 抽象模板类定义一个流程,将一些步骤的实现推迟到子类中。 模版方法中的两个角色: 抽象父类:定义模版方法,在模版方法的流程中调用了抽象方法。 具体子类:继承抽象父类,实现抽象方法。 ...
阅读全文
摘要:一、定义 官方定义:桥接模式属于结构型设计模式,将抽象部分与实现部分分离,使它们都可以独立的变化。 定义:一个抽象类中持有多个接口或抽象类的引用 将两种可以独立变化的抽象分离开来,让它们独立的变化。再通过组...
阅读全文
摘要:一、定义 门面模式又称为外观模式,该模式把一个模块中的多个类的公共接口封装到一个“统一接口”中,而门面类拥有一个或多个这样的“统一接口”。再简单一点理解就是封装“流程”,简化调用。 为多个复杂的子系统提供一个统一的访问入口 ...
阅读全文
摘要:一、 为什么写这篇文章 学习代理模式,横向学习了JDK动态代理,Cglib动态代理。然后学习代理模式在实际工作中的使用。现在工作中用来保存日志,使用cglib动态代理一个Controller类中的每一个方法。关于注解,我之前没有深入研究过,...
阅读全文
摘要:代理模式归根结底,就是在操作真实对象的前后加入新的操作。通常的,在项目中,把业务逻辑代码与公共的事务进行分离。Spring中采用AOP来操作。下面开始介绍如何代理一个Controller类,为Controller加入额外的操作。 ...
阅读全文
摘要:一、定义 代理模式:为目标对象提供一种代理以控制对目标对象的访问。在某些情况下,一个对象不适合或者不能直接引用目标对象(比如包访问权限的类),而代理对象可以在客户端和目标对象之间起到中介的作用。 代理类就像秘书一样,为老板代理一...
阅读全文
摘要:oracle中char与varchar2的区别 char的长度是固定的,比如char(20),存储”abc”,剩下用17字节用空格表示 VARCHAR2的长度是可以变化的,varchar2(20)存储”abc”,只占用了3个长...
阅读全文
摘要:一、定义 原型模式又名克隆模式,可以理解为【对象的复制】。 二、实现过程 1.实现Cloneable接口。 2.重写clone()方法,将clone()方法的修饰符修改为public,为了让别人包的环境...
阅读全文
摘要:一、定义 将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。产品的组成部分是不变的,但每一部分是可以灵活选择的。 二、建造者需要的几个角色 1.Product产品类。这个产品类比较复杂,内部有许多其它类的对象的引...
阅读全文
摘要:一、定义 创建一个包装类来动态的扩展一个类的功能。 1.首先看被增强的对象继承或者实现了哪些接口,我们的包装类就继承或者实现这个接口。 2.在包装类中创建一个被增强的对象的引用。 3.使用构造方法...
阅读全文
摘要:一、定义 将一个已有的接口转换成客户希望的另外一个接口。 我的理解:让一个实现了A接口的类,可以用到接收B接口的方法上,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 下面类图是对象适配与类的适配。...
阅读全文
摘要:一、简单工厂模式 定义:简单工厂就是用来创建其它类的实例。 简单工厂模式代码三个主体:1.工厂类 2.抽象产品 3.具体产品 从上述代码来看,简单工厂也就是说,有一个生产特定接口实现...
阅读全文
摘要:因为这个问题,我恐怕累计已经浪费了我七八个小时。真的好烦,这次终于把步骤完全弄会了。现在就来记录怎么使用Idea来提交新创建的项目到GitHub上。参考地址:git上传本地Idea项目1.创建本地Git仓库 点击下面的红色按钮后,将项目名添加到本...
阅读全文
摘要:一、基本定义 策略设计模式:“针对”一组算法,“将”每一个算法封装到具有相同接口的独立的类中,“从而”使它们可以相互替换。 核心:策略实现相同接口,可以相互替换。即封装的各个算法地位平等,它们具有相同的接口,可以相互进行...
阅读全文
摘要:一、基本原理 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。浏览器第一次访问服务器,服务器会创建一个Session,并将SessionId通过Cookie的形式传递给浏览器。下次浏览器再次向服务器请求数据的时候,会带...
阅读全文
摘要:一、过滤器Filter 创建过滤器的方法很简单,也传统的WEB项目一样,实现 Filter接口即可 package com.zhoutianyu.learnspringboot.filter;import org.slf4j.Logger;im...
阅读全文
摘要:为什么要关掉防火墙。喵的,在Linux上发布的项目,不关闭防火墙,从其他机器上的浏览器访问不到。这就很难受了。之前排查了半天,都不知道是什么原因,最后确定是防火墙的缘故。因此,记录下关闭防护墙的命令。 查看防火墙状态命令: systemct...
阅读全文
摘要:一、Docker安装MySQL # 查看镜像 $ sudo docker images # 搜索一下mysql有哪些镜像 $ sudo docker search mysql #搜索到某个镜像:centos/mysql-57-centos7 # Li...
阅读全文
摘要:一、安装Docker #Linux系统的ROOT权限下 # 1、yum 包更新到最新 yum update # 2、作用:安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依...
阅读全文
摘要:9.1.1 索引是什么 索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据库表里所有记录的引用指针。使用索引用于快速找出在某个或者多个列中有一特定值的行。对相关列使用索引是提高查询操作速度的最佳途径。 如果有2...
阅读全文
摘要:更新后代码不见了,心急如焚。原来是合并的时候冲突, Git把代码先保存起来了。(┬_┬),我谢谢你啊,git。 上命令: 存档:$ git stash 读最新存档:$ git stash pop 查看存档列表:$ git stash list ...
阅读全文
摘要:Linux服务器地址: (1)文件--站点管理器 点击新站点。输入Linux系统IP地址。协议为SFTP。 登录类型:正常。输入用户名与密码 (2)信任它。 (3)可以自由的拖拽文件。左边是我Windows的文件目录,...
阅读全文
摘要:Linux服务器地址: (1)打开SecureCRT6工具。 文件--快速连接 输入Linux的IP,勾选启动时显示快速连接和保存会话。 (2)输入密码 root 账号密码 (3)登录成功。输入几个命令查看状态。 ...
阅读全文
摘要:一、EditPlus+链接Linux系统 (1)打开EditPlus+,菜单栏中打开 文件----FTP,得到FTP设置。 (2)输入Linux系统的相关账号密码 (...
阅读全文
摘要:一、卸载OpenJDK (1)首先进入root权限。 su root 输入Linux安装的系统密码即可。 (2)查看原来的JAVA版本,这是OpenJDK的版本,需要卸载掉。 (3)得到原来Ope...
阅读全文
摘要:一、基本步骤 现阶段,我只掌握了打成JAR包的方式。 (1)我们的SpringBoot项目打包。在pom.xml中增加打包方式。由packaging指明。 ---packaging ...
阅读全文
摘要:Redis系列博客 跟着大宇学Redis 一、集成Redis Redis安装与基本操做,可以参考这篇文章:第一次使用Redis Redis是非常优秀的缓存中间件,我的Redis使用经验主要集中在 1)解...
阅读全文
摘要:一、问题现象 前端小姐姐对我说过,需要后台限制重复表单提交。前端小姐姐把form表单数据提交到后台,但是在推送的时候,可能因为网络延迟,多点了两下提交按钮。怎么才能解决表单重复提交的问题呢? 根据以前的老经验,一般在数据库表中为...
阅读全文
摘要:一、使用上传技术 (1)在yml中添加上传配置。限制单个文件上传以及多个文件总大小限制。如果超出限制,页面将出现报错页面。 spring: #上传文件使用 servlet: multipart: #单个文件最大上传大小 ...
阅读全文
摘要:一、Flyway解决的问题 Flyway用于解决线上数据库的结构问题。一般项目都会分期,一期二期三期。 随着项目的推进,上线后的数据库结构也可能也会有所变动。因此,需要使用Flyway来解决数据库变动的问题。 修...
阅读全文
摘要:一、使用定时任务 SpringBoot Starter包中已经内置了定时任务的方法。 org.springframework.boot spring-boot-starter ...
阅读全文
摘要:前置 在我参加工作的早期,分页查询都是通过手动编写SQL来控制,效率相对较差。Mysql数据库分页使用LIMIT关键字,Oracle的分页很难写,既复杂又难以记忆。后来公司的大佬提出这类分页可以使用分页插件来做。 一、配置分页插件 ...
阅读全文
摘要:一、集成MyBatis Mybatis现在应该在当前的市场上占据了大半壁江山,至少我任职过的公司都用mybatis。 最近项目组引入了MyBatis的增强版----MyBatisPlus。 (1)首先导入MyBatis...
阅读全文
摘要:一、使用Druid数据库连接池 数据库连接池只有手动配置,才知道具体的过程。以前都是搭建好的项目,现在自己手动搭建一次。还遇到了不少坑。首先是,阿里巴巴的数据库连接池版本与SpringBoot版本会有一定的关系。好了,废话不多说。 ...
阅读全文
摘要:一、使用yml配置文件 第一种方式就是把自定义参数配置在yml配置文件中。 例如,在application.yml中加入如下配置。 #自定义参数define: userinfo: username: zhoutianyu...
阅读全文
摘要:一、封装单元测试 (1)SpringBoot的单元测试不依赖网络环境,可以直接在测试文件中指明当前激活的分支。 先搭建了一个基本的SpringBoot环境。可以访问到当前项目中的任意Controller层接口。 基本...
阅读全文
摘要:一、基础响应 前后端分离一定会设计到数据传输。因此,每个项目必定都有一个基础的响应类。 我就以我个人的经验编写这个类吧。定义基础:响应码code、响应信息message、传输的数据data、总记录数。 定义两个基...
阅读全文
摘要:一、基本异常 我常常自己问自己,如果为某个系统设计一套异常体系,我应该怎么开始我的工作。 (1) 首先就是基本异常响应。前端们希望得到的异常响应肯定是有 响应码code 、错误信息message。在JAVA异常体系中,错误原因m...
阅读全文
摘要:一、参数校验 常见的用于校验的注解有 @NotNull 用于校验数字类型 javax.validation.constraints.NotNull; @Max 用于校验数字最大值 ...
阅读全文
摘要:一、使用日志 SpringBoot中默认集成了Slf4j日志。 配置非常的简单。在application.yml中添加如下配置。 常见的对于日志的配置(1)配置日志输出位置file(2)配置日志输出格式patte...
阅读全文
摘要:一、配置文件格式基本选择 新建好的SpringBoot项目起初的目录如下。我个人不喜欢applicaiton.properties这种风格,所以准备切换成yml这种风格。 新建四个文件,application....
阅读全文
摘要:前言:虽然常见的Mysql函数,在平时的开发里面已经用的很多。但是还是会多多少少遇到一些不会的,或者好想会了,也好想不会的函数。 经常用函数,总会有书到用时方恨少的感觉。比如给我一个需求,用户传递一个时间,查询这个时间前后八小时...
阅读全文
摘要:一、需要掌握的虚拟机参数 堆内存命令 -Xms 设置堆最小内存,默认机器内存的 1/64 -Xmx 设置堆最大内存,默认机器内存的 1/4 栈内存命令 -Xss 设置每个线程的栈内存 GC ...
阅读全文
摘要:一、类加载 在加载阶段,虚拟机需要完成三件事。 (1)通过类全限定名,获取此类的二进制字节流。 (2)将此字节流加载进方法区。 (3)在Java堆中生成一个此类的java.lang.Class对象,作为方法区这些数据的访问入口。 二、...
阅读全文
摘要:一、新生代,老年代,永久代 新生代:主要是用来存放新生的对象。如果出现频繁创建对象,那么这些对象会放入新生代。 新生代主要分别为 Eden区与Survivor区 老年代:主要存放应用程...
阅读全文
摘要:一、基本内存分布 堆内存:堆内存是所有线程共享的一块内存区域,由虚拟机在启动的时候创建。唯一目的就是存放对象实例,几乎所有对象实例都在堆里分配内存。数组也在这里分配内存。这里也是垃圾回收器工作的主要区域。 栈内存:栈内存存储...
阅读全文
摘要:先展示当前项目的效果 RabbitMQ一般不会单独使用。今天分享的是如何在基于SpringBoot的SSM框架中 集成RabbitMQ。 点击下方图片,可以查看清晰效果图 核心配置 (1)队列、Exchanger...
阅读全文
摘要:安装RabbitMQ 参考链接:windows下 安装 rabbitMQ 及操作常用命令 RabbitMQ入门(一)——RabbitMQ的安装以及使用(Windows环境下) 一、导入依赖...
阅读全文
摘要:一、基本模型 P是生产者,是发消息的人。 X是topic类型的交换机。它会把消息的路由键取出来,与绑定它的队列做路由键匹配。如果队列关心的路由键能匹配上消息的路由键,则将这个消息投递到这个队列中。 Q1是一个队列...
阅读全文
摘要:一、基本模型 P是生产者,是消息的发出者。 X是direct类型的交换机,它负责接收生产者的消息,并根据路由键分发消息到指定的队列。 Q1和Q2是队列。Q1队列只会接收:消息路由键为orange的消息,Q2队列只会接收...
阅读全文
摘要:一、基本模型 P代表生产者,就是发消息的一方。 X代表的是路由器交换机,它负责接收发送者发送的消息并将消息转发到订阅它的所有队列上。 红色部分是队列。它如果对某个交换机感兴趣的话,那么就可以把自己绑定到这个交换机...
阅读全文
摘要:一、基本模型 P是就是生产者,就是生产出消息的一方。 队列就是传输媒介,可理解为传输的管道。可理解为邮递员,邮递员会把把消息投递给收信人。 C是消费者,用于接收消息,可理解为收信人。 这就是最简单...
阅读全文
摘要:一、持有其它对象 package com.tyzhou.stu.model;import lombok.Data;@Datapublic class ClassRoom { /** * 班级编号 */ private Long id...
阅读全文
摘要:一、概述 Nginx是一个反向代理服务器。什么是反向代理? 反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 i...
阅读全文
摘要:4月1日 为什么要使用 hibernate? 使用Hibernate很大程度上取决于2点优势。 (1)Hibernate对jdbc进行了封装,简化了我们操作Dao层的编码工作。 ...
阅读全文
摘要:SpringBoot一般使用的是Thymeleaf模版。而静态资源一般放在了static目录下面。 现在的系统的目录是这样的。 在页面中这样导入即可。导入的时候,使用 th:href 的 @{ ...
阅读全文
摘要:3月12日 JDK包含了JRE。如果要运行JAVA程序,需要JRE,如果要编写JAVA程序,需要JDK。 ==与equals的区别。对于基本数据类型来说,不能使用equals方法。==方法比较的是它们的值是否相等。对于引用数据...
阅读全文
摘要:一、运行时数据区包含哪几部分 堆内存 使用NEW关键字创建的对象,都保存在堆内存中。这块内存不需要我们关心,会由垃圾回收器进行控制。 堆内存被所有线程共享,并且在JVM中只有一个。 另外,数组也存放在堆内存中。 Ja...
阅读全文
摘要:版本信息 当前开放源码版本 v1.2,在IDEA官方插件库可搜索插件名: Patient 公司内部版本已升级到v1.4 一、Generate Template 当你接到一个新的模块任务,例如"角色Role"模块。...
阅读全文
摘要:Cookie的基本理解(购物卡) Session与Cookie都是一种记录客户状态的机制。 当一个用户访问服务器的时候,服务器会把一些键值对返回给客户端浏览器,并加上一些限制条件。在这个条件限制下,当用户符合条件并且在下次访问服...
阅读全文
摘要:1月29日 说说你对static关键字的理解 如果与其它技术人员交流关于static关键字的理解的话,思路要清晰,从字段到类,再说说static的功能性作用。 (1)static 修饰字段 ...
阅读全文
摘要:一、安装RabbitMQ 参考链接:windows下 安装 rabbitMQ 及操作常用命令 RabbitMQ入门(一)——RabbitMQ的安装以及使用(Windows环境下) 二、基本...
阅读全文
摘要:一、基本架构 读了方老师的文章:第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本),确实很有收获,特别是架构图可以一目了然。上一篇只是单纯的让某个配置中心从GIT上获取配置文件,然后有一个客户端C...
阅读全文
摘要:一、项目准备 为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。SpringCloudConfig组件的作用就是从GIT上加载配置文件。然后有一个Client,使用刚才读取到的配置文件。这样的话,就可以避免因为某个配置文件更新...
阅读全文
摘要:前言 尽量从我们平时开发中的环境找例子。 有时候SQL语句运行的速度令我抓狂,我也迫切的想弄明白如何才能写出更高效的SQL。 1.模糊查询 使用LIKE关键字可能不会触发索引,因此,只有"%"不在第一个位置,索...
阅读全文
摘要:一、Zuul功能 Zuul的主要功能是路由转发和过滤器。这个时候,我们需要统一的入口,接口地址全部由该入口进入。比如用/api同一接口,/api/user 发给user服务器,/api/shop 发给shop服务器。 二、搭建Zuul网关 ...
阅读全文
摘要:一、Hystrix熔断器 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC)。如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服...
阅读全文
摘要:一、原理 Shiro使用的是Token来封装用户登录的信息,另外一边,从数据库中查询出来的数据存放在"AuthenticationInfo"中,然后将token与info进行对比,对比一致的话说明用户登录成功。在登录成功后,为了缓解数据库的压力...
阅读全文
摘要:一、缓存 缓存的工作机制是:先从缓存中读取数据,如果没有再从数据库读取实际数据,并把读取的数据存入缓存,下次再访问相同资源的时候,直接从缓存中获取,这样就可以缓解一些数据库的压力。 缓存有两个比较常用的概念: TTL(Tim...
阅读全文
摘要:一、Shiro Session 的基本功能 在Shiro里面可以发现所有的用户的会话信息都会由Shiro来进行控制,那么也就是说只要是与用户有关的一切的处理信息操作都可以通过Shiro取得,实际上Shiro的会话能够获取到HttpSession...
阅读全文
摘要:第一步:git clone git地址 第二步:在克隆下来的文件夹里面使用git客户端,添加文件后 git add . git commit -m "first commit" git push -u origin mast...
阅读全文
摘要:一、Remember Me能解决什么问题 (1)当用户没有退出且关闭了浏览器,再次打开网站则不需要再次登录。 (2)当用户在登陆时勾选"记住我",退出登录后,下次登录的时候,登录表单会记住上次的登录名。 我已经...
阅读全文
摘要:一、面临问题 当前项目的开发全部是基于MySQL5.7。最近项目需要技术支持另外一所高校,学校使用的生产数据库是Oracle11。因此,昨天我使用Docker安装了Oracle11。项目组里的另外一位大佬引进了一项技术,并且讲述了原理。这里我也...
阅读全文
摘要:docker search oracle docker pull jaspeen/oracle-11g docker run --name oracle -p 1521:1521 -d registry.cn-hangzhou....
阅读全文
摘要:文章目录 技术手法(1)SimpleSession 技术手法 (1)SimpleSession public class Sim...
阅读全文
摘要:文章目录 技术手法(1)String、char[]、byte[]数组三者互转 技术手法 (1)String、char[]、byt...
阅读全文
摘要:文章目录 技术手法(1)多个方法重载设计思路(2)AuthenticationInfo设计思路 技术手法 (1)多个方法重载设计...
阅读全文
摘要:一、心法 Zset或者说是SortedSet,是Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序...
阅读全文
摘要:一、Set典型应用场景 Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。从实际业务角度来考虑其应用场景。首先,Set它是一个集合,自然能够存放多个对象。多个对象之间各不相同,另外存...
阅读全文
摘要:一、基本依据 Redis的List是一个队列。对于队列这种数据结构来说,有两个非常重要的特性。可左进右出,亦可右进左出。那么,基于这种特点,就能够通过Redis的List实现基本的消息中间件。 从具体的代码上来看,可以先把一些数...
阅读全文
摘要:一、心法 Redis列表是简单的字符串列表,按照插入顺序排序。 可以从Redis的List类型的数据结构来考虑其实际业务场景。Redis的List这种数据结构与Java中的List集合大致不离其宗。实际上就是一个...
阅读全文
摘要:一、心法 可以从Redis的String类型的数据结构来考虑其实际业务场景。重点需要记住的是,String类型它是一个变量对应一个值,说白了,就是一对一的场景。这种场景比较多,比如用于缓存当前登陆人的用户信息,缓存某篇文章的访问量。我自己的公司...
阅读全文
摘要:前言 以前在实习的时候,去Redis官网学了不少命令。不过现在看来,当初只是学到了一些简单的命令。等到实际工作中,在SpringBoot中也快速的集成了Redis。但是到底Redis应用在哪些实际场景中,我之前一直没有深入研究过。现在,我想好好...
阅读全文
摘要:启动时指定SQL脚本 之前介绍过一种方案,用flyway进行数据库的管理。 今天发现公司的大佬又用了别的方案解决数据库初始化脚本问题。 在application.yml中加入下述配置。 spring.data...
阅读全文
摘要:一、查看文件 cat命令可以查看文档内容。先使用 > ,清除原来的数据,使用标准输入流写入 test.sh。 下面的例子,演示了 清除文档,写入文档,追加文档,查看文档。 二、数组 ...
阅读全文
摘要:一、数字计算 (1)整数:使用let的话,变量就不再需要$了。 再写一个简单的 shell脚本,上传到/opt目录下,取名为test.sh。 #!/bin/bashno1=3no2=4let result=no1+no2ec...
阅读全文
摘要:一、基础知识 $代表普通用户。#代表root用户。 普通用户使用sudo 命令开头,执行的命令效果与root用户相同。推荐使用普通用户登录。 shell脚本以 # !/bin/bash 开头。 执...
阅读全文
摘要:文章目录 技术手法(1)AuthorizingRealm设计思路 重点研究类 技术手法 (1)AuthorizingRealm设...
阅读全文
摘要:文章目录 技术手法(1)AuthenticationRealm设计思路 重点研究源码 技术手法 (1)Authenticatio...
阅读全文
摘要:文章目录 技术手法(1)究竟什么是缓存(2)用Map作为缓存实现(3)如何管理缓存生命周期(4)AOP解析方法上的注解思路 重点...
阅读全文
摘要:文章目录 技术手法(1)接口的代理(2)接口作为方法参数(3)生命周期的使用工具 重点研究类 技术手法 (1)接口的代理 Shi...
阅读全文
摘要:文章目录 技术手法(1)工厂返回单例与多例(2)备忘录:如何保住旧对象状态?(3)集合如何懒加载 重点研究类 技术手法 (1)工...
阅读全文
摘要:今天第一次用markdown编辑器,希望用的顺手。不是,目录在哪里生成呢,我擦。。。 文章目录 技术手法(1)组合手法(2)集合框...
阅读全文
摘要:一、启动 不中断的启动,使用 nohup 命令 例如 nohup java -jar XXX.jar --spring.profiles.active=dev 二、关闭 ps -ef | grep java k...
阅读全文
摘要:一、使用Docker安装Redis docker search redis docker pull centos/redis-32-centos7 #创建守护式容器,容器起名为redis,Linux端口6379映射容器6379端口。运行r...
阅读全文
摘要:一、共享资源问题 我们知道,在如果希望多个线程获取同一个共享资源,在Java里面一般使用Synchronized锁ReentrantLock锁来解决。对于单节点的项目,所有的线程都在同一个JVM进程里面,使用Java语言提供的锁机制可以起到对共...
阅读全文
摘要:一、缓存穿透概念 缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。 ...
阅读全文
摘要:一、业务场景 用户添加了一个订单。将订单通过订单编号存储到Redis中,形成 【订单号----未支付订单】 这种缓存。 存放在Redis中的订单,有过期时间。如果超过指定的缓存时间,则从Redis中删除此缓存。 ...
阅读全文