自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 session、cookie、token 以及JWT的介绍

当 server 收到浏览器传过来的 token 时,它会首先取出 token 中的 header + payload,根据密钥生成签名,然后再与 token 中的签名比对,如果成功则说明签名是合法的,即 token 是合法的。在用户登录成功之后,服务器会生成一个token,并将其返回给客户端。token:首先请求方输入自己的用户名,密码,然后 server 据此生成 token,客户端拿到 token 后会保存到本地,之后向 server 请求时在请求头带上此 token 即可。

2024-04-03 16:38:14 571

原创 数据库调优----分库分表

分库分表后表之间的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表, 结果原本一次查询能够完成的业务,可能需要多次查询才能完成。读写分离:将数据库的写操作和读操作进行分离, 使用多个从库副本(Slaver)负责读,使用主库(Master)负责写, 从库从主库同步更新数据,保持数据一致。联合查询不仅困难,而且可以说是不可能,因为两个相关联的表可能会分布在不同的数据库,不同的服务器中。表中的字段较多,一般将不常用的、 数据较大、长度较长的拆分到“扩展表”

2024-04-03 16:23:51 323

原创 如何保证缓存和数据库一致性----缓存双删

d.弱一致性可以考虑修改后删除,如果业务场景不需要满足强一致性,那么可以给缓存都加上过期时间,比如说过期2s,那么这个数据不一致,最多只存在于2s。c.对强一致性要求特别高需要加业务锁,只要有修改请求进来,立马上一把锁,分布式锁禁止查询///或者加个版本号。如果是修改,并发修改数据场景,先改缓存的有可能后改库,先改库的也可能后改缓存。如果缓存和数据库负载很高,主从同步很慢,很有可能不能在延时的时间内实现同步。确实有这问题,要知道这是最终一致,并不是强一致,最后一次删除就是为了最终一致。

2024-04-03 16:21:45 660

原创 多线程下hashmap为什么会死循环

当我们往HashMap中put元素的时候,先根据key的hash值得到这个元素在数组中的位置(即下标),然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位置上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的元素放在链头,而先前加入的放在链尾。如果现在size已经超过了threshold,那么就要进行resize操作,新建一个更大尺寸的hash表,然后把数据从老的Hash表中迁移到新的Hash表中。多线程的话如果线程2rehash,可能会出现环形指向。

2024-04-03 16:18:43 379

原创 hashtable和currenthashmap

读操作没有加锁(但是使用了volatile保证内存读取结果),只是写操作进行加锁,加锁的方式仍然是是用synchronized,但是不是锁整个对象,而是“锁桶”(用每个链表的头结点作为锁对象),大大的降低了锁冲突的概率;ConcurrentHashMap中的分段锁称为Segment,它即类似于HashMap的结构,即内部拥有一个Entry数组,数组中的每个元素又是一个链表,同时又是一个ReentrantLock(Segment继承了ReentrantLock)一个可重入的互斥锁。

2024-04-03 16:09:59 176

原创 hashmap和hashtable

7.迭代器不同:HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。9.同步性不同: Hashtable是同步(synchronized)的,适用于多线程环境,而hashmap不是同步的,适用于单线程环境。而如果没有正确的同步的话,多个线程是不能共享HashMap的。4.初始化容量不同:HashMap 的初始容量为:16,Hashtable 初始容量为:11,两者的负载因子默认都是:0.75。

2024-04-03 16:06:41 324

原创 JAVA类加载机制

类加载过程、双亲委派机制

2024-04-03 16:03:01 509

原创 什么是线程安全、怎么保证线程安全

当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。

2024-04-03 15:57:36 904

原创 数据库调优 --- 冷热分类

冷热分离就是在处理数据的时候,将数据分为冷库和热库,冷库存放到走到终态的数据,不经常使用的数据,热库存放还需要修改和经常使用的数据。1,数据走到终态后,只有读的需求,没有写的需求,比如说订单走到终态,就不会再有状态变更。2,用户能接受新旧数据分开查询,比如某些电商默认只让查3个月以内的订单,要想查询3个月以外的,就得访问其他的页面。也就是说不会出现同时查询冷、热数据的需求。

2023-09-01 20:16:30 315

原创 敏感接口权限校验

先看登录人有没有访问这个接口的权限,如果有,就执行逻辑,返回数据,如果没有,报个错误,或者返回个空数据。(从前端或者从token里面拿一下),看一下用户有没有这个页面的权限(但是一般不用,因为nodejs也可以写后端,但是放到前端去校验不安全)暴露一个接口,去看这个人(token) ,有没有权限去访问这个接口。不能用网关,网关不能掺杂特定的业务逻辑(if eise),因为他属于公用型的。2. 用springmvc web拦截器(拦截add的,放行exclude的)1. 用自定义注解+aop(切面)

2023-09-01 01:30:59 741

原创 双亲委派机制

当Application ClassLoader 收到一个类加载请求时,他首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器Extension ClassLoader去完成。保证java核心API不被篡改,提高了安全性(如果有人想篡改String类,类加载器优先让启动加载器加载,发现已经加载过了,就不会再加载)当Extension ClassLoader收到一个类加载请求时,他首先也不会自己去尝试加载这个类,而是将请求委派给父类加载器Bootstrap ClassLoader去完成。

2023-08-30 17:03:19 500

原创 线程和之间的通讯方式、进程之间的通讯方式、线程之间如何同步

条件变量的方法是,当线程在等待某些满足条件时使线程进入睡眠状态,一旦条件满足,就唤醒,这样不会占用宝贵的互斥对象锁,实现高效条件变量允许线程阻塞并等待另一个线程发送信号,一般和互斥锁一起使用。互斥锁 是最常见的线程同步方式,它是一种特殊的变量,它有 lock 和 unlock 两种状态,一旦获取,就会上锁,且只能由该线程解锁,期间,其他线程无法获取。读写锁处于读模式的锁(未加锁)状态时,有另外的线程试图以写模式加锁,则读写锁会阻塞读模式加锁的请求,这样避免了读模式锁长期占用,导致的写模式锁长期阻塞的情况;

2023-08-30 16:56:54 172

原创 原子操作的原理和实现

它包含了三个参数:V,A,B。其中,V表示要读写的内存位置,A表示旧的预期值,B表示新值。CAS指令执行时,当且仅当V的值等于预期值A时,才会将V的值设为B,如果V和A不同,说明可能是其他线程做了更新,那么当前线程就什么都不做,最后,CAS返回的是V的真实值。流水线就会先将所有任务中的相同的基本指令一起执行完之后,再更换线路来执行其他相同的指令,这样减少了线路的切换,而线路切换需要的时间很长)(流水线可能导致顺序错乱问题,在同一个线程中,代码的底层执行顺序可能是乱的,可能执行顺序是先第二行再第一行)

2023-08-30 15:48:47 145

原创 锁的升级(Synchronized重量级转换)详细介绍

如果成功,当前线程获得锁,如果失败,表示其他线程竞争锁,当前线程便尝试使用自旋来获取锁。是一种简化的加锁和释放锁的过程。加偏向锁之后,当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储锁偏向的线程ID,以后该线程在进入和退出同步块时不需要进行CAS操作来加锁和解锁,只需简单地测试一下对象头的Mark Word里是否存储着指向当前线程的偏向锁。所以当高并发时,竞争锁失败时进入阻塞队列,在就绪队列全部释放锁后,从阻塞队列挑一个执行,虽然加锁释放锁的过程麻烦,但是对cpu的损耗少,总体时间少。

2023-08-30 15:40:52 113

原创 synchronized、volatile关键字详解

a.重量级锁,功能完整的锁b.修饰类、方法、静态方法、代码块,但不可以在声明的时候修饰c.synchronized是实现同步的基础,Java中不管是对象还是方法,都可加上锁。synchronized分为三种:对于普通同步方法,锁是当前实例对象。①、在一个线程访问一个对象中一个加synchronized的非静态方法时,会将整个对象都锁住。整个对象中加锁的方法之间都互斥,加锁的和不加锁的不互斥。加锁的方法之间不能在两个线程之间同时运行,需要一个运行完另一个在运行。

2023-08-30 15:28:50 89

原创 es(Elasticsearch)介绍

Elasticsearch简称es,是由Elastic和search组成。Elastic的意思是有弹性的,search的意思是搜索。弹性:es是一个天生支持分布式,不需要借助zk等其他的三方组件就能实现的分布式,理论上讲可以无限进行扩容搜索: es是一个搜索引擎。(和mysql的搜索区分开)。es是一个由java开发的,借助qpi提供服务mysql是关系型数据库,每个表中的一些字段都有关联,数据库三大范式。所以mysql更适合做业务相关的关联查询。而es是非关系型数据库,更擅长做搜索。

2023-08-30 14:09:02 1180

原创 JVM---垃圾回收算法介绍

开发门槛低、安全:性能问题。c和c++可以自己操控内存等,性能更高垃圾回收学的是算法,垃圾回收有很多种算法,学完这个的目标一个是需要学习人家的思路,第二个是需要根据自己的业务特色去选用特定的垃圾回收算法。

2023-08-15 22:53:13 948 1

原创 JVM---理解jvm之对象已死怎么判断?

对象引用的四个等级:为什么说要有这个设置:为了满足当内存空间还足够时,能保留在内存之中,如果内存空间在进行垃圾收集后仍然非常紧张,那就可以抛弃这些对象。强引用:new Object(),只有当判断对象已经死的时候,才回收软引用:在系统要发生oom,会回收所有的软引用对象,如果回收完,还是放不上这个对象,才溢出。,每次垃圾回收的时候,如果对象还没死,就不回收,但是在oom之前,不管有没有死,都会被回收。系统要发生oom,会回收所有的软引用对象,如果回收完,还是放不上这个对象,才溢出。

2023-08-14 22:37:17 788

原创 springboot集成mybatis-plus

mybatis-plus和mysql、lonmbok是为了写代码更方便,里面有@Data可以直接生成get set。配置数据库IP地址端口号、数据库名、用户名、密码。

2023-08-13 16:45:37 152

原创 项目配置中心介绍

配置中心就是用来管理项目当中所有配置的系统,也是微服务系统当中不可或缺的一部分。项目的配置文件不放到本地了,放到配置中心。

2023-08-13 16:36:07 609

原创 JVM---jvm里的内存溢出

String::intern()是一个本地方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用;否则,会将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。判断是否是真的内存溢出,先判断这个对象是不是正常的,如果不是,就得修复,如果是:要么去调优,通过优化逻辑来减少对象的大小;如果虚拟机的栈内存允许动态扩展,当扩展栈容量无法申请到足够的内存时,将抛出OutOfMemoryError异常。

2023-08-13 16:12:30 543

原创 线程池的创建和使用

加上@Configuration:告诉spring这是个配置类,需要在启动的时候加载@Bean//ExcutorService线程池这里的意思是: 在启动的时候创建这个类的这个方法,这个方法会返回一个对象,把这个对象交给spring去管理。

2023-08-10 15:20:05 332

原创 自定义实现spring源码

自定义注解(Annontation)_qq_52240237的博客-CSDN博客/*** @return*/System.out.println("这里是test类");return "";System.out.println("这里是test类的index1方法");return "";

2023-08-09 13:22:13 220

原创 自定义注解(Annontation)

注解是用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。是一种说明、配置、描述性的信息,与具体业务无关,也不会影响正常的业务逻辑。注解在Java程序中是作为标记的作用,有特定的程序来发现标记元注解是专门用来注解其他注解的注解,听起来有些绕口,实际上就是专门为自定义注解提供的注解。@Documented – 注解是否将包含在JavaDoc中@Retention – 什么时候使用该注解@Target – 注解用于什么地方。

2023-08-09 11:29:06 721

原创 Java反射和代理定义和应用详解

反射就是能够获取类信息的能力给目标对象提供一个代理对象并且由代理对象控制对目标对象的引用。

2023-08-09 10:42:59 98

原创 Kafka介绍

1,自动提交:默认配置(配置中心公共配置)为自动提交,即每隔一段时间(默认5s)提交一次,自动提交可以很大程度上降低Kafka服务端的压力,并且减少客户端的网络开销,如果消费逻辑做好了业务幂等,尽可能选择自动提交。操作系统里面的进程有两种类型,一个是操作系统级别的,一个是用户级别的。1,操作系统从磁盘中拿到数据,放到内核缓冲区,2,然后再从内核缓冲区复制数据到用户缓冲区,3,然后再用用户缓冲区放到socket缓冲区(也是系统级别的,用户进程无法直接操作),4,最后再从socket缓冲区通过网卡发送出去。

2023-08-06 11:07:20 1401

原创 springboot框架中配置文件的使用(application、yml)

②、配置文件有优先级:外置的config文件夹里的配置文件》外置的配置文件》内置的配置文件(内置的配置文件中.properties文件的优先级高于.xml文件(为了方便,我们一般直接删除.properties文件);d、将src/main/resources/中的配置文件放到服务器中(打包的时候打进去的叫内置的配置文件,这里在文件包中找到的叫外置的配置文件)e、外置的配置文件优先于内置的配置文件,会按照外置的配置文件来。生产环境的配置文件不能走本地的,只需要在外置的配置文件里面修改即可。

2023-08-06 09:47:48 183

原创 AOP面向切面编程介绍和应用

i、面向切面编程的好处:可以最大可能的提高编程效率(假如要打印所有方法的入参和出参,每个方法都需要在开头和结尾写log.info,而切面可以让我们直接生成)@AfterReturning:用于指定【advice】的类型,功能与@After类似,不同点是可以捕获切点方法的返回值并进行增强处理(具体咋回事也没弄懂)@Around:增强处理,用于指定【advice】的类型,是Around、Before、After、AfterReturning这四种类型中能力最强的一种。* 防重复操作过期时间,默认1s。

2023-08-05 22:42:53 193

原创 Linux常用命令

linux常用命令及其使用场景

2023-08-05 22:27:17 176

原创 redis的配置和使用、redis的数据结构以及缓存遇见的常见问题

缓存、redis的定义、服务器安装redis、redis在springboot中的集成、redis的数据结构、缓存常见问题

2023-08-05 21:47:10 1523

原创 telnet检验网络能不能通

telnet检测网络能不能通(ip地址+端口号)

2023-08-05 21:11:31 480

原创 怎样将项目jar包放到服务器上

父项目中添加子项目的依赖后子项目才属于父项目,子项目中的配置文件加version,打包的时候就传这个version。而且如果version中的值相同时,再次打包到数据库后会覆盖,每个版本都保留了,后面的数字为时间戳。(原因:所有的包都有version版本号,加上这个标签会自动检测版本号中带有SNAPSHOT(大写)字样,则传到快照包(即开发包)的仓库;如果不带,则传到正式包(即生产包)的仓库)

2023-08-05 20:53:12 1760

原创 java中的Set及其应用

java中的Set及其应用,HashSet、LinkedHashSet、TreeSet的应用

2023-08-04 14:32:04 50

原创 java中list及其应用

java中list的特点及其使用,ArraysList和LinkedList的特点

2023-08-04 13:07:00 45

原创 java中Map及其使用

Java中map及其使用,包含hashmap、treemap、tablemap

2023-08-04 11:11:54 58

原创 dubbo服务实现远程调用

⑥、mysql、redis、kafka、zk都是存数据的,但是他们的数据结构不同。zk数据结构是树形的,和目录一样,更适合做管理。b、定义dubbo的接口:new一个interface(一个服务对应一个dubbo接口)(注:dubbo服务的interface统一用Facade结尾)⑤、在service中新建一个配置文件application.yml(现在的文件图标和之前的不一样是因为我们没有引spring相关的依赖)①、服务消费者、服务提供者(a访问b,a是服务消费者,b是服务提供者)

2023-08-03 11:25:13 1661

原创 Kafka的配置和使用

e KAFKA_ZOOKEEPER_CONNECT=172.21.10.10:2181/kafka 配置zookeeper管理kafka的路径172.21.10.10:2181/kafka。⑧、每条消息都有一个主题,消费者指定监听哪个主题的消息,如果进来消息队列的是我们指定监听的主题,就消费,否则不消费(topic这里指定的生产和消费的主题)-e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己。b、在开一个页面,运行kafka消费者发送消息。

2023-08-03 10:40:52 3732

原创 sentinel组件

①、丰富的应用场景:Sertinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范圆)、消息削峰绩谷(让流量平均一些,在流量高于阈值时禁止超出部分访问,在之后少的时候在访问)、集群流量控制、实时婚断下游不可用应用等,2.sentinel监控的是各服务处Java方法的并发数,每一个方法有预期的多少人访问,设有访问阈值,流量达到服务阈值之后,流量就进不到服务了,会被打回,从而不会被高流量压垮服务。②、完备的实时监控:Sentinel同时提供实时的监控功能。

2023-08-03 09:25:49 972

原创 xxljob分布式任务调度实现定时任务

⑤、 浏览器localhost:8089打开页面(8089为自己配置的端口号)用户名:admin 密码:123456。②、配置端口号和数据库(端口号自己设置,数据库设为自己放xxljob数据库的位置、sql文件项目里有)分布式任务调度xxl-job:在分布式任务系统中的定时任务,xxljob是一个开源的项目。a、@XxlJob("aaaa")中的参数aaaa填入JobHandler。c、用xxljob写一个定时任务。③、建立文件夹放配置文件、开始、项目jar包。③、将配置里的复制到要集成项目的配置里。

2023-08-03 09:12:15 1049

原创 MQ(Message Queue)消息队列的作用、优缺点,了解几种常见的消息队列

消息队列:一般我们会简称它为MQ(Message Queue)。Message Query(MQ),消息队列中间件,很多初学者认为,MQ通过消息的发送和接受来实现程序的异步和解耦,mq主要用于异步操作,这个不是mq的真正目的,只不过是mq的应用,mq真正的目的是为了通讯。他屏蔽了复杂的通讯协议,像常用的dubbo,http协议都是同步的。这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。

2023-07-31 20:58:32 152

空空如也

空空如也

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

TA关注的人

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