- 博客(56)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 聊聊BIO,NIO,AIO的区别
网络编程知识笔记聊聊BIO、NIO、AIO的区别举例说明海底捞很好吃,但是经常要排队。我们就以生活中的这个例子进行讲解。A顾客去吃海底捞,就这样干坐着等了一小时,然后才开始吃火锅。(BIO)B顾客去吃海底捞,他一看要等挺久,于是去逛商场,每次逛一会就跑回来看有没有排到他。于是他最后既购了物,又吃上海底捞了。(NIO)C顾客去吃海底捞,由于他是高级会员,所以店长说,你去商场随便玩吧,等下有位置,我立马打电话给你。于是C顾客不用干坐着等,也不用每过一会儿就跑回来看有没有等到,最后也吃
2021-10-06 20:07:32
638
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Redis持久化机制原理&如何实现
Redis 持久化机制概念: 通过持久化机制(RDB、AOF)把内存中的数据同步到硬盘中来保证数据持久化;当 redis 重启后把硬盘文件重新加载到内存,就能达到恢复数据的目的。实现: 单独创建fork的一个子进程,将父进程的数据库复制到子进程的内存中,然后由子进程写入到临时文件中,持久化结束了再用这个临时文件替换上次的快照文件,然后子进程退出,内存释放。RDB(Redis DataBase): rdb是redis默认的持久化方式,按照一定周期策略把内存的数据以快照方式保存到硬盘中(二进制文件),即
2020-08-22 12:12:53
590
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 SpringBoot深入浅出刨析底层自动装配原理
SpringBoot深入浅出刨析底层自动装配原理在大部分的情况下,Spring Boot允许通过配置文件自动装配Bean。那是因为它依赖spring-boot-starter-web包,于是会引入spring-boot-starters包,进而引入spring-boot-autoconfigure包。这个包会提供自动配置的功能,有关自动配置的类很多 a)SpringBoot启动的时候加载主配置类,利用==@EnableAutoConfiguration==注解开启了自动配置功能 b)利用Ena
2020-07-11 17:40:26
1079
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 spring IOC容器 Bean 管理——基于注解方式
IOC 操作 Bean 管理(基于注解方式) 1、什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…) (2)使用注解,注解作用在类上面,方法上面,属性上面 (3)使用注解目的:简化 xml 配置 2、Spring 针对 Bean 管理中创建对象提供注解 下面四个注解功能是一样的,都可以用来创建 bean 实例 (1)@Component (2)@Service (3)@Controller (4)@Repository
2020-07-01 20:17:49
17442
7
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java面试中常问到的设计模式
面试中常问到的设计模式什么是设计模式? 设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。设计模式是代码可用性的延伸单例模式 保证被创建一次,节省系统开销 饿汉式:上来不管有没有对象,都要直接创建一个新的对象。 懒汉式:首先判断有没有创建对象,如果创建对象了就使用原来创建的对象,没有创建的话新创建一个对象。 1)单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime是单例模
2020-05-31 23:50:22
2251
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 MySQL优化性能之explain详细介绍
MySQL高级语法——Explain简介一、概述 Mysql所提供的explain关键词是用于调优排患的一个神器,通过它可以分析查询语句的执行情况,DBA可以通过分析语句的执行结果对查询语句甚至表结构进行优化,例如添加索引,修改索引,使用覆盖索引等等。二、基本结构介绍id id是为select 的序列号,如果有多个select,那么将有多个id,并且id的顺序将根据select出现的顺序而增加。MySQL将select查询分为简单查询和复杂查询。复杂查询分为三类:简单子查询、派生表(f
2020-05-15 23:30:14
487
原创 【Java面试题】什么是死锁?请用代码解释一下。
什么是死锁?请用代码解释一下。死锁概念:两个/多个线程占有锁的前提又去获得其他锁,这样造成的线程无限的循环等待,产生了死锁!死锁产生条件:产生死锁的必要条件① 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。② 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。③ 不剥夺条件:指进程
2020-09-17 21:33:41
852
原创 缓存雪崩、缓存穿透、缓存击穿等redis相关缓存问题解决
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级…一、缓存雪崩(多个key缓存失效)概念: 简单讲,由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。解决办法:大多数系统设计者考虑用加锁( 最多的解决方案)或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落
2020-08-22 12:18:51
493
1
原创 【面试常问】:Java中的equals与==的区别
一、“==”== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。1、比较的是操作符两端的操作数是否是同一个对象。2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。 @Test pub
2020-08-17 19:57:09
373
原创 结合“Ribbon负载均衡算法“底层思想来手写一个负载均衡算法例子
Ribbon负载均衡算法1、原理接口请求的请求次数 % 服务器集群总数量 = 实际调用服务器位置下标(也就是当前获得的服务器),每次服务器重启之后请求接口记数重新从1开始。(参照下图理解)2、自己动手写一个本地的负载均衡算法a)首先创建一个负载均衡的接口(LoadBalancer)public interface LoadBalancer { ServiceInstance instances(List<ServiceInstance> serviceInstances)
2020-07-18 22:58:37
333
1
原创 Eureka(服务注册与发现)简单入门
Eureka(服务注册的与发现)一、Eureka基础知识 1、服务治理是什么? SpringCloud底层封装了Netflix公司开发的Eureka模块来实现服务治理。在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,因此需要使用服务治理。管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等实现服务发现与注册 2、服务注册与发现是什么? Eureka采用了CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他服务,
2020-07-18 15:54:12
1109
原创 SpringBoot中如何实现自己定制错误返回页面
定制异常处理返回错误页面a)通过ErrorMvcAutoConfiguration自动配置类了解异常处理原理 这个自动配置类中存在四个核心处理方法,如下: 1)ErrorPageCustomizer //第一步:系统出现错误以后来到error请求进行处理private static class ErrorPageCustomizer implements ErrorPageRegistrar, Ordered { private final ServerProperties proper
2020-07-12 11:21:09
2824
原创 SpringBoot配置文件基本配置介绍
SpringBoot之配置文件一、配置文件a)基本介绍 ① SpringBoot使用的是一个全局的配置文件,配置文件名是固定的:application.properies;application.yml ② 配置文件的作用是可修改springBoot自动配置的默认值(SpringBoot在底层都给我们自动配置好了)二、YAMLa)基本介绍YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的
2020-07-06 21:48:54
1050
原创 五分钟带你快速入门Spring Boot
带你快速入门Spring Boot1、简介 a)简化spring应用开发的框架;b)整个spring技术栈的一个大整合;c)J2EE开发的一站式解决方案; 优点:1、快速创建独立运行的spring项目以及与主流框架集成 2、使用嵌入式的servlet容器,应用无需打成war包 3、starters自动依赖与版本控制 4、大量的自动配置,简化开发,也可修改默认值 5、无序配置XML,无代码生成,开箱即用 6、准生产环境的运行时应用监控 7、与云计算的天然集成2、搭
2020-07-05 16:12:48
1282
2
原创 Spring5框架新功能(通用日志、函数式表达式、webflux、响应式编程)
Spring5 框架新功能 整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方法在代码库中删除了。1、Spring 5.0 框架自带了通用的日志封装 (1)Spring5 已经移除 Log4jConfigListener,官方建议使用 Log4j2 (2)Spring5 框架整合 Log4j2 第一步 引入 jar 包 第二步 创建 log4j2.xml 配置文件<?xml version="1.0" encoding="UT
2020-07-04 11:00:08
2129
3
原创 Spring中事务的使用与配置
Spring——事务操作1、事务概念 a)什么是事务 (1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操 作都失败 (2)典型场景:银行转账 张三 转账 100 元 给 李四; 张三少 100,李四多 100 b)事务四个特性(ACID) (1)原子性 (2)一致性 (3)隔离性 (4)持久性2、事务操作(模拟事务操作环境) a)创建 service,搭建 dao,完成对象创建和注入关系//(1)service 注入 dao,在 dao 注
2020-07-03 12:02:44
5386
原创 在spring中使用JdbcTemplate进行数据库管理操作
JdbcTemplate1、JdbcTemplate概念及使用 a)Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 b)引入相关 jar 包 c)在 spring 配置文件配置数据库连接池<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" va
2020-07-02 20:06:10
14595
7
原创 Spring-AOP概念及使用教程
Spring-AOP1、AOP 基本概念 (1)面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得 业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 (2)通俗描述:不通过修改源代码方式,在主干功能里面添加新功能 (3)使用登录例子说明 AOP2、AOP(底层原理) a)AOP 底层使用动态代理 ,动态代理有两种情况:第一种 有接口情况,使用 JDK 动态代理 ;创建接口实现类代理对象,增强类的方法第二种 没有接口情况
2020-07-02 13:52:25
16902
1
原创 Spring IOC容器-Bean管理——基于XML方式(续集)
Spring IOC容器-Bean管理——基于XML(续集) 1、IOC 操作 Bean 管理(FactoryBean) 1、Spring 有两种类型 bean,一种普通 bean,另外一种工厂 bean(FactoryBean) 2、普通 bean:在配置文件中定义 bean 类型就是返回类型 3、工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样 第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean 第二步 实现接口里面的方法,在实现的方法
2020-07-01 16:49:58
19579
3
原创 spring IOC容器管理必须知道这些操作——基于XML方式
Spring——IOC(控制反转)一、IOC容器 1、什么是IOC(控制反转) a)把对象创建和对象之间的调用过程,交给Spring进行管理 b)使用IOC目的:为了降低耦合度 2、IOC底层 a)xml解析、工厂模式、反射 3、Spring提供的IOC容器实现的两种方式(两个接口) a)BeanFactory接口:IOC容器基本实现是Spring内部接口的使用接口,不提供给开发人员进行使用(加载配置文件时候不会创建对象,在获取对象时才会创建对象。) b)App
2020-07-01 11:07:59
53474
21
原创 关于Mybatis缓存你真的知道吗?
Mybatis缓存1)一级缓存:(本地缓存):* sqlSession级别的缓存。一级缓存是一直开启的;SqlSession级别的一个Map* 与数据库同一次会话期间查询到的数据会放在本地缓存中。* 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库;** 一级缓存失效情况(没有使用到当前一级缓存的情况,效果就是,还需要再向数据库发出查询):* 1、sqlSession不同。* 2、sqlSession相同,查询条件不同.(当前一级缓存中还没有这个数据)
2020-06-30 15:38:32
259
原创 Mybatis之动态SQL语法详解
Mybatis动态SQL 1、sql_if & sql_where 判断&OGNL表达式 <!-- 查询员工,要求,携带了哪个字段查询条件就带上这个字段的值 --> <!-- public List<Employee> getEmpsByConditionIf(Employee employee); --> <select id="getEmpsByConditionIf" resultType="com.atguigu.mybat
2020-06-29 18:43:15
2072
1
原创 Mybatis中映射配置文件用法介绍
Mybatis映射配置文件 1、获取自增主键的值两个属性: useGeneratedKeys="true" 使用自增主键获取主键值策略 keyProperty 指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给Javabean的哪个属性扩展:Oracle中不支持自增,Oracle使用序列来模拟自增;每次插入数据的主键是从序列中拿到的值,如下所示:<!-- 获取非自增主键的值: Oracle不支持自增;Oracle使用序列来模拟自增; 每次插入的数据的
2020-06-28 23:17:38
1078
2
原创 Mybatis中全局配置文件介绍
其他概念:1、接口式编程 原生: Dao ------------------> DaoImpl Mybatis Mapper -------------> xxMapper.xml 2、SqlSession代表和数据库的一次会话,用完须关闭 3、SqlSession和Connection两者都不是线程安全的,每次使用都应该去获取新的对象 4、Mapper接口没有实现类,但是mybatis会为它生成一个代理对象。(将接口与xml进行绑定) Em
2020-06-28 16:58:27
699
1
原创 JDK8新特性之Optional和新时间日期
Optionala)、Optional 容器类常用方法 Optional.of(T t) 创建一个Optional 实例 Optional.empty() 创建一个空的Optional 实例 Optional.ofNullable(T t) 若 t 不为null,创建Optional 实例,否则创建空实例 isPresent() 判断是否有值 orElse(T t) 如果调用对象包含值,返回该值;否则返回 t orElseG
2020-06-26 21:42:27
478
1
原创 关于JDK8中Stream API的常见使用方法
Stream API 产生一个全新的流,和数据源没有关系(数据源不受影响)a)创建stream方式: 1)collection 例如:new ArrayList<>().stream() 2)数组 Arrays.stream() 3)通过Stream类中的静态方法of() 4)创建无限流//创建无线流 — 迭代方式@Testpublic void test1() { Stream<Integer> stream = Stream.iterate(0,
2020-06-26 15:21:38
1861
2
原创 Lambda开发基础语法常用汇总
Lambda a)Lambda 它是匿名函数,可传递的代码(简洁)、使用Lambda表达式就可以解决匿名内部类 b)“类型推断“ 例子如下: Comparator<Integer> com = (x,y) -> Integer.compare(x,y); List<Integer> list = new ArrayList<Integer>(); List<Integer> list = new ArrayList&l
2020-06-26 00:16:03
939
原创 JDK8新特性快速入门之lambda表达式
JDK8新特性快速入门之lambda表达式 JDK8新特性: 1、速度更快(JVM空间、数据结构的变化)、 2、代码更少(Lambda表达式使得代码更加简洁化)、 3、强大的Stream API、便于并行、最大化减少空指针异常 Optional容器类) 废话少说,往下看代码演示 需求:根据员工的 工资/年龄 来选择输出员工信息//创建一个员工类public class Employee {private String name;private int age;pr
2020-06-25 00:45:07
770
转载 线程是个什么玩意儿?
第一回 初生牛犊我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴。我身边的同伴 0x6900 待的时间比较长,他带着沧桑的口气对我说:“ 我们线程的宿命就是处理包裹。把包裹处理完以后还得马上回到这里,否则可能永远回不来了。”我一脸懵懂,“包裹,什么包裹?”“不要着急,马上你就会明白了,我们这里是不养闲人的。”果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:“0x3704 ,出来!”我一出来就被塞了一个沉甸甸的包裹,上面还附带
2020-06-13 15:11:39
381
1
原创 使用MySQL语句给数据库的表和字段添加注释
给MySQL语句添加注释 MySQL中使用 “comment” 来给数据库表的字段或列添加注释的,以下是给表添加注释的集中情况:一、给表添加注释 1)创建表时添加注释CREATE TABLE table2 ( tname INT COMMENT 'tname字段的注释') COMMENT = 'table2表的注释'; 2)创建表后添加注释ALTER TABLE table2 COMMENT '修改表table2的注释';二、给字段添加注释 1)新建表时给表内字段添加注释C
2020-06-01 16:01:33
11095
转载 spring核心思想之IOC深入浅出介绍
spring核心思想之IOC深入浅出介绍一.依赖倒置原则要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依赖底盘,底盘依赖轮子。这样的设计看起来没问题,但是可维护性却很低。假设设计完工之
2020-05-30 15:39:12
1256
原创 Linux(/)根目录下各个文件夹的含义及使用
Linux根目录下的文件夹1、/- 根每一个文件和目录都是从根目录开始。只有root用户可在该目录下的进行写操作(拥有写权限)。注意:/root是root用户的主目录,这与/.不一样/root:系统管理员root的家目录,系统第一个启动的分区为 /,所以最好将 /root和 /放置在一个分区下2、/bin中 - 用户二进制文件包含二进制可执行文件,主要用于具体应用。在单用户模式下,你需要使用的常见linux命令都位于此目录下。系统的所有用户使用的命令都设在这里。例如:ps、ls、ping
2020-05-27 18:15:37
3807
3
原创 关于事务的四大特性你需要了解清楚
事务四大特性为什么要用事务 使用事务可以保证数据的一致性和完整性,不会出现数据错误或异常。比如银行转账问题,A往B账户转账1000元,需要三步:1、A往账户B转账1000元 2、A账户余额扣除1000元 3、B账户增加1000元。 整个转账业务必须经过这三步才成立,少哪一步都不行。假设只执行了前两步,那么整个业务就失败(出现数据不一致错误/异常),因而使用一个事务将这三步操作进行控制,可保证数据的一致性和完整性。四大特性 ACID(Atomicity:原子性;Consistency:一致
2020-05-26 23:42:50
2467
3
原创 自定义函数调用失败问题[Err] 1318 - Incorrect number of arguments for FUNCTION XXX.xxx expected 0 got 1】
[Err] 1318 - Incorrect number of arguments for FUNCTION tbs_ra_data.GET_NODEORDER_FORMAT; expected 0, got 1出错原因 在调用MySQL自定义的函数时报错,原因在于数据库中自定义的函数中使用了未知的变量,但是没有进行定义,所以执行时会报错。解决办法 给自定义的函数设置变量参数,如下图:...
2020-05-25 22:11:22
8523
4
原创 关于字符串拼接的几种方法
字符串拼接方式1、String中的 +一,使用+拼接字符串在Java中,拼接字符串最简单的方式就是直接使用符号+来拼接。如:String s1 = "hello";String s2 = "world";String s3 = s1 + "," + s2;这里要特别说明一点,有人把Java中使用+拼接字符串的功能理解为运算符重载。其实并不是,Java是不支持运算符重载的。这其实只是Java提供的一个语法糖。后面再详细介绍。概念普及:运算符重载:在计算机程序设计中,运算符重载(英
2020-05-24 11:18:53
16850
1
原创 JS中利用正则表达式对输入框内容进行格式校验
JS输入框格式校验举例如下:/* 条件一:限制输入框内的格式必须为 "PK_NODE00000"(前缀PK_NODE固定,后边为五个数字) 条件二:输入日期不能大于当前年月*/ var PK_NODE="PK_NODE00011"; var REGULAR_TIME="202010"; var reg = new RegExp("^[0-9]*$"); var defa=PK_NODE.slice(0,7); var num=
2020-05-23 20:10:37
1963
转载 JSON和XML之间的一场较量
关于JSON和XML那些事1.定义介绍(1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述
2020-05-20 17:34:51
629
2
原创 MySQL基础用法深入浅出介绍
SQL基础用法介绍1.什么是SQL? Structured Query Language:结构化查询语言 就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。2.SQL通用语法 1. SQL 语句可以单行或多行书写,以分号结尾。 2. 可使用空格和缩进来增强语句的可读性。 3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。 4. 3 种注释 * 单行注释: -- 注释内容 或 # 注释内容(mysql 特有) *
2020-05-18 12:10:49
378
原创 数据库中主外键概念详细介绍
关于数据库的主外键设置问题一、主外键概念主键 1、主键 简单而言,能够唯一的表示表中的每一行数据,这样的列属性成为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改、删除时使用主键来操作,同时也主要用于和其他表之间通过主外键关联建立表之间的联系。例如: 下图这个员工表中对应第一行红色字段为表的主键,它标识出了数据的唯一性 2、主键作用 保证数据库表的唯一性、完整性 用于和其他表之间建立外键关联的关系,从而实现对关联表的控制操作 3、主键设计原则 主键
2020-05-17 18:18:33
10137
原创 idea项目导出出现 in module XXX File is included in 4 contexts
in module XXX File is included in 4 contexts问题: 大概意思是:你的配置文件应该在同一个Application context下解决办法: 1、File——》Project Structure 2、找到Modules,按照顺序进行操作(意思是先删除之前分离的配置文件,之后再将配置文件添加到同一文件下)3、最后点击加号,重新添加...
2020-05-07 14:07:36
5672
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人