![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
概念知识点
广州浪神
谢谢大家的关注
展开
-
Redis是否存在线程安全问题
关于这个问题,从两个方面回答第一个,从Redisd的服务端层面,Redis Server本身是一个线程安全的K-V数据库,也就是说在Redis Server端去执行指令的时候,不需要任何的同步机制,它不会存在任何线程安全的一个问题,虽然Redis 6.0里面增加了多线程的模型,但是增加了多线程模型呢只是去处理网络的IO事件,对于指令的执行过程,仍然是采用主线程来处理的,所以它并不会存在多个线程同时去执行操作指令的一个情况,为什么Redis没有采用多线程来执行指令,我认为呢,有几个方面的原因,首先呢Redi原创 2022-04-25 09:10:30 · 3000 阅读 · 0 评论 -
Java 如何重写对象的 equals 方法和 hashCode 方法
一、需求:对比两个对象是否相等。对于下面的 User 对象,只需姓名和年龄相等则认为是同一个对象。二、解决方案:需要重写对象的 equals 方法和 hashCode 方法package com.yule.user.entity;import org.springframework.util.StringUtils;/** * 用户实体 * * @author yule * @date 2018/8/6 21:51 */public class User { privat转载 2021-11-16 16:48:47 · 327 阅读 · 0 评论 -
你不知道的GET与POST请求
1.get请求,它的数据是放在url当中的,所以get有长度限制,而post请求呢它的数据是放在请求体body当中,所以没有长度限制2.get请求的安全性不如post,但是传输速度呢比post快3.get请求可以少产生一个tcp包,相当于一次性到货,但是呢post需要两个4.get请求可以被缓存,但是post不能5.get请求是可以被反复刷新的,但是呢,post如果反复刷新的话就会重新提交数据...原创 2021-08-19 08:40:08 · 51 阅读 · 0 评论 -
缓存雪崩、击穿、穿透,面试无压力
今天讲点Redis安全相关,同时也是面试中经常会问到的知识点.**缓存穿透**产生背景: 缓存穿透是指使用不存在的key进行大量的高并发查询,导致缓存无法命中,每次查询都会穿透到后端数据库查询,使得数据库的压力非常大。解决方案:1.接口实现api的限流、防御ddos攻击、网关实现黑名单2.在数据库和Redis都查询不到的情况下,将数据库的空值写入到缓存中,加上短时间的有效性(只适合单个key,不适合随机产生不同的key,假如过段时间生成的key就是空的key,会影响正常的使用)3.布隆过滤器原创 2021-08-14 15:56:19 · 79 阅读 · 0 评论 -
MyBatis一级缓存详解
什么是缓存缓存就是内存中的一个对象,用于对数据库查询结果的保存,用于减少与数据库的交互次数从而降低数据库的压力,进而提高响应速度。什么是MyBatis中的缓存MyBatis 中的缓存就是说 MyBatis 在执行一次SQL查询或者SQL更新之后,这条SQL语句并不会消失,而是被MyBatis 缓存起来,当再次执行相同SQL语句的时候,就会直接从缓存中进行提取,而不是再次执行SQL命令。MyBatis中的缓存分为一级缓存和二级缓存,一级缓存又被称为 SqlSession 级别的缓存,二级缓存又被称为表原创 2020-08-14 11:25:23 · 171 阅读 · 0 评论 -
静态方法上加上synchronized,用的是什么锁?
public class Test {public synchronized void sale{xxx}}等价于public class Test {public static void sale{synchronized(this){}}}public class Test {public static synchronized void sale{xxx}}等价于public class Test {public static void sale{synchr原创 2020-08-06 20:37:44 · 479 阅读 · 0 评论 -
通俗易懂理解数据库三范式
第一范式就是属性不可分割,每个字段都应该是不可再拆分的。比如一个字段是姓名(NAME),在国内的话通常理解都是姓名是一个不可再拆分的单位,这时候就符合第一范式;但是在国外的话还要分为FIRST NAME和LAST NAME,这时候姓名这个字段就是还可以拆分为更小的单位的字段,就不符合第一范式了。第二范式就是要求表中要有主键,表中其他其他字段都依赖于主键,因此第二范式只要记住主键约束就好了。比如说有一个表是学生表,学生表中有一个值唯一的字段学号,那么学生表中的其他所有字段都可以根据这个学号字段去获取,依赖主原创 2020-08-06 15:33:41 · 137 阅读 · 0 评论 -
总结最好的序列化与反序列化概述
序列化:把对象转化成字节的过程,成为对象序列化反系列化:把字节恢复成对象的过程,成为反序列化1.对象的持久化概念:将对象转化成字节,保存在硬盘上永久存放2.网络传输对象的概念:客户端将对象序列化为字节的形式(序列化),变成二进制的的形式发送到服务端,服务端接收到字节对象后,反序列化成对象注意:序列化的类必须要实现Serializable接口 transient修饰对象不被序列化...原创 2020-08-05 17:38:56 · 121 阅读 · 0 评论 -
简述Java8新特性
1.Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。2.方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。3.默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。4.新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。5.tream API −新添加的Stream API(java.util.原创 2020-08-04 23:26:22 · 161 阅读 · 0 评论 -
简单概述下拦截器与过滤器之间有哪些区别
相同点:拦截器与过滤器都是基于AOP技术,对方法实现增强,都可以拦截请求方法不同点:1.过滤器属于servlet自己研发的,而拦截器技术是属于springMVC自己研发的2.过滤器属于拦截web请求,而拦截器不仅可以拦截请求还可以拦截普通方法3.过滤器会比拦截器先执行,拦截器封装的方法会比过滤器拦截使用起来更加简单实际开发中绝大多数情况下,都会使用拦截器拦截器:权限控制、日志打印、参数验证、会话过滤器:编码转换、跨域解决、xss攻击...原创 2020-08-04 15:46:19 · 159 阅读 · 0 评论 -
使用LinkedList实现1.7版本HashMap
public interface YouthMap<K,V> { /** * 集合的大小 * @return */ int size(); /** * 添加元素 * @param key * @param val * @return */ V put(K key,V val); /** * 根据key查询 * @param key * @re原创 2020-08-03 23:44:29 · 132 阅读 · 0 评论 -
简单描述下SpringMVC执行流程
SpringMVC工作流程描述1.用户向服务器发送请求,请求被前端控制器DispatcherServlet捕获;2.DispatcherServlet对请求uri进行解析,得到请求资源标识符(uri),然后根据该uri,调用HandlerMapping获得该Handler配置的相关对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;3.DispatcherServlet根据获得的Handler,选择一个适合的Handler.原创 2020-08-02 22:04:27 · 230 阅读 · 0 评论 -
简单描述下SpringBean的生命周期
1.Spring对Bean进行实例化(相当于程序中的new Xx())2.Spring将值和Bean的引用注入进Bean对应的属性中3.如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法(实现BeanNameAware主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)4.如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanDactory(BeanFactory原创 2020-08-02 20:53:50 · 238 阅读 · 0 评论 -
Spring核心技术之事物
事物的概述1.原子性:原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。2.一致性:一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。3.隔离性:隔离性是当多个用户并发访原创 2020-08-01 17:28:21 · 82 阅读 · 0 评论 -
Spring核心技术之IOC与AOP
Spring的核心技术:IOC、DI、AOP与事物管理、事物传播行为Spring的核心原理:反射技术+解析xml(dom4J)什么是Spring:管理每个bean(对象)与bean(对象)之间的关系,使用Spring进行管理Spring的好处:解耦、单例(节约内存,不过线程不安全)什么是IOC:控制反转,将bean对象的创建交给Spring容器进行管理什么是ID:依赖注入,解决对象之间的依赖关系...原创 2020-08-01 17:13:28 · 100 阅读 · 0 评论 -
详解@Resource与@Autowired区别
1.@Resource与@Autowired都可以用来装配bean,都可以写在字段上,或者写在setter方法上。2.@Autowired默认按照类型进行装备(属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如@Autowired(required=false),如果我们想使用名称装配可以结合@Qualifier注解进行使用,如1. @Autowired() @Qualifier("baseDao") 2. priv原创 2020-08-01 17:05:34 · 132 阅读 · 0 评论 -
ThreadLocal的使用与思考
一、什么是ThreadLocal:ThreadLocal提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存了一个变量副本,每个线程的变量都不同。ThreadLocal相当于提供了一种线程隔离,将变量与线程相绑定。ThreadLocal适用于在多线程的情况下,可是实现传递数据,实现线程隔离二、Threadlocal 核心API:1.set 设置当前线程绑定的局部变量2.get 获取当前线程绑定的局部变量3.remove 移除当前线程绑定的变量Threadlocal简单用原创 2020-07-31 17:37:11 · 119 阅读 · 0 评论 -
简单描述强引用 、弱引用的概念
强引用:被引用关联的对象永远不会被垃圾回收机制回收弱引用:只要被弱引用关联的对象,当垃圾回收机制触发时,就会清理改内存例子: User user1=new User("Youth",25); //强引用 User user2=user1; user1=null; System.out.println(user2); System.gc(); System.out.println(user2);输出结果:name=Youth,age=25name=Youth,age=25User原创 2020-07-31 16:29:33 · 169 阅读 · 0 评论