
java
文章平均质量分 77
纸巾 ya
本人博客为自己的笔记,仅供参考,如有错误欢迎各位大佬帮忙纠正
展开
-
分布式ID生成的几种方案(后续待补充)
使用数据库的ID自增策略,如MySQL的auto_increment。并且可以使用两台数据库分别设置不同步长,生成不重复ID的策略来实现高可用。Redis的所有命令操作都是单线程的,本身提供像incr和increby这样的自增原子命令,所以能保证生成的ID肯定是唯一有序的;算法核心思想是结合机器的网卡、当地时间、一个随机数来生成UUID;高可用性:确保任何时候都能正确的生成ID;本地生成,生成简单且性能好,没有网络消耗;唯一性:确保生成的ID是全网唯一的;原创 2024-04-09 11:55:55 · 591 阅读 · 0 评论 -
spring Security初体验
security整合原创 2022-08-29 16:13:08 · 159 阅读 · 0 评论 -
nginx和gateway的区别
gateway与nginx的区别原创 2022-08-24 18:47:22 · 5680 阅读 · 1 评论 -
redis数据类型
五种常见类型:string、hash、list、set、zsetstring大多数场景可以用作缓存,value为json字符串hash购物车(用户ID作为hashKey,商品ID为内层key,商品的简单信息json作为value)listStack(栈) = LPUSH + LPOPQueue(队列) = LPUSH + RPOPBlocking MQ (阻塞队列) = LPUSH + BRPOP(有数据进来才读取,实现类似监听的功能)使用场景:微博消息,公众号消息,使用栈的结构,先进原创 2022-05-23 17:48:42 · 105 阅读 · 0 评论 -
消息的可靠传递
检查是否丢失消息的方法我们可以利用消息队列的有序性来检验是否丢失消息:在producer端,我们给每个消息附加一个连续的递增序号,然后在consumer端来检查这个序号的连续性。如果消息没有丢失,consumer收到消息的序号必然是连续递增的,否则,我们可以通过确实的序号来确定丢失的是哪条消息,方便进一步排查大多数消息队列的客户端序号注入到消息中,在consumer收到消息的拦截器检测序号的连续性,这样不会入侵代码,也方便这部分检测的逻辑关闭或者删除。在分布式环境下需要注意以下这几个问题:首先,像原创 2022-05-17 16:48:02 · 216 阅读 · 0 评论 -
分布式事务
事务四大特性:1、原子性:事务作为一个整体,要么全部成功要么全部失败2、隔离性:多个事务并发执行时,事务与事务间相互独立,互不影响3、一致性:数据库操作的前后数据要保持一致4、持久性:已经提交的事务对数据库的修该是永久的。为什么要使用分布式事务当一个服务中有多个数据库操作,而且需要调用别的微服务的时候,本地的事务管理器无法管理本项目外的事务;当本项目中出现异常需要回滚时,无法回滚本项目外的事务,这就导致的数据不一致,本质上来说分布式事务就是为了保证数据库的数据一致性;CAP定理C:一致性原创 2022-05-13 10:38:00 · 377 阅读 · 0 评论 -
几种消息中间件的对比
消息队列的本质是将同步处理结果转换成异步处理,一步会带来相应的好处,但也有弊端。好处:1、可以在模块、服务、接口等不同粒度上实现解耦2、订阅/消费模式可以在数据粒度上解耦3、可提高系统的并发能力,集中力量办大事(同步部分),碎片时间做小时(异步部分)4、可提高系统可用性,因为缓冲了系统负载弊端:1、降低了数据一致性,如要保持强一致性,需要高代价的补偿(如分布式事务,对账)2、有数据丢失风险,如宕机重启,如果要保障队列可用,需要额外机制保障(如双或容灾)总体来说,消息队列的使用场景很多,如秒原创 2022-05-12 20:57:43 · 492 阅读 · 1 评论 -
关于JVM的垃圾回收
堆内存划分:老年代:年轻代:Eden区:Survivor区:(1)From(2)To分配策略1:优先在Eden区分配多数情况下,对象在Eden区分配,当Eden区没有足够空间分配时,虚拟机将发起一次minorGCMinor GC和Full GCMinor GC也称为Young GC 指发生新生代的垃圾收集动作,回收频率较高,回收速度快Full GC也成为了Major GC 一般会回收老年代、年轻代、方法区的垃圾,回收速度比Minor GC慢十倍。分配策略2:大对象直接进入老年代原创 2022-05-12 10:58:02 · 154 阅读 · 0 评论 -
JVM内存模型
1.类加载器启动类加载器扩展类加载器应用程序类加载器自定义加载器双亲委派模型如果一个类接受到请求,他首先将请求交给父类加载器,直至找到启动类加载器,如果父类加载器加载失败,当前类加载器才会自己加载类。2.运行时数据区线程共享:方法区、堆线程私有:虚拟机栈、本地方法栈、程序计数器3.执行引擎4.本地库接口类加载器将代码转换成字节,然后通过运行时数据区将字节码加载到内存中,执行引擎在内存中将字节码翻译成系统能够执行的命令,交由CPU执行而这个过程需要使用对应语言的本地库接口。...原创 2022-05-07 11:06:33 · 217 阅读 · 0 评论 -
spring bean 生命周期
1.实例化bean对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入一个尚未初始化的依赖容器会调用createBean进行实例化。对于ApplicationContext容器,当容器启动结束后,便实例化所有的bean,容器通过获取BeanDefinition对象中的信息进行实例化。并且这一步仅仅是简单的实例化,并未进行依赖注入,实例化对象呗包装在BeanWrapper对象中,BeanWrapper提供了设置对象属性的接口,从而避免了使用反射机制.原创 2022-05-07 10:42:16 · 92 阅读 · 0 评论 -
springboot源码解读
springboot:parent依赖原理起步依赖:spring-boot-starter-parent项目环境属性锁定:spring-boot-dependencies锁定依赖版本:小结:我们的项目继承spring-boot-starter-parent父级的作用是什么从上面可以看出:管理项目的maven插件锁定框架的依赖版本管理springboot配置文件spr...原创 2020-04-04 22:58:20 · 205 阅读 · 0 评论 -
POI常用API
依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> ...原创 2020-03-20 20:49:36 · 1802 阅读 · 0 评论 -
Shiro-Shiro的架构
摘自官网:shiro的架构图:shiro的组成:Authentication:身份认证/登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;Session Manager:话管理,即用户登录后就是...原创 2020-03-14 19:05:58 · 230 阅读 · 0 评论 -
springMVC源码解读
web.xml找到前端控制器:DispatcherServlet可以看到底层是HttpServlet,最底层为Servlet,所以我们找service方法找到FrameworkServlet的service要不走父类(HTTPServlet)的service,要不走processRequest方法;我们知道,HTTPServlet最终调用的是doget或者dopost之类的方法,而F...原创 2020-02-29 22:43:54 · 212 阅读 · 0 评论 -
jQuery的keyCode大全
字母和数字键的键码值(keyCode)按键键码按键键码按键键码按键键码A65J74S83149B66K75T84250C67L76U85351D68M77V86452E69N78W87553F70O79X88654G71P80Y897...原创 2020-01-20 19:50:37 · 633 阅读 · 0 评论 -
JSP底层探究
首先书写一个jsp页面:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>查...原创 2020-01-13 21:01:09 · 122 阅读 · 0 评论 -
mybatis缓存
一级缓存:一级缓存在mybatis是默认开启的;一级缓存的作用范围只在会话级别,即会话死亡,缓存也会跟着清空缓存清空的时机:执行添加,修改,删除,提交,关闭会话等操作会情况SQLSession张红的一级缓存数据;注:当没有配置连接池的时候,同一个会话里面查询两次才会使用一级缓存,这样就显得比较鸡肋但是当我们配置了线程池以后,连接池中有一定数量的常驻会话,这些会话是会循环使用不会关闭的...原创 2020-01-09 20:18:47 · 134 阅读 · 0 评论 -
mybatis框架的简单实现
本mybatis只是简单实现,实现mybatis的一部分核心功能。思路:解析配置文件,得到数据库配置及mapper相关信息创建实体类封装解析到的数据通过动态代理执行sql语句mapper实体类封装UserMapper.xml的数据:package com.zhijin.framwork;public class Mapper { private String id ;...原创 2019-12-29 22:51:11 · 97 阅读 · 0 评论 -
网络编程
UDPUDP协议的特点面向无连接的协议发送端只管发送,不确认对方是否能收到。基于数据包进行数据传输。发送数据的包的大小限制64KB以内因为面向无连接,速度快,但是不可靠。会丢失数据!UDP协议的使用场景:在线视频,网络语音等UDP协议相关的两个类DatagramPacket:数据包对象作用:用来封装要发送或要接收的数据,比如:集装箱DatagramSocket:发送对象...原创 2019-12-19 21:30:40 · 125 阅读 · 0 评论 -
注解
自定义注解格式:@interface 注解名 {}注解属性:属性的格式(适用八种数据类型和String类型)格式1:数据类型 属性名();格式2:数据类型 属性名() default 默认值;注解可以有属性,属性名必须带()在用注解的时候,属性必须赋值,除非这个属性有默认值!!value属性,如果只有一个value属性的情况下,使用value属性的时候可以省略value名称不写...原创 2019-12-19 21:09:38 · 113 阅读 · 0 评论 -
IO流
基础流:FileInputStream:字节输入流FileOutPutStream:字节输出流FileReader:字符输入流FileWriter:字符输出流包装流:BufferedInputStream:缓冲字节输入流:高效BufferedOutPutStream:缓冲字节输出流:高效BufferedReader:缓冲字符输入流:高效BufferedWriter:缓冲字符输出...原创 2019-12-19 20:57:53 · 93 阅读 · 0 评论 -
反射入门级
反射的概念反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的所有成员:构造方法(Constructor),成员方法(Method),成员变量(Field)使用反射的前提:获得要操作类的字节码文件对象,也就是.class文件。使用场景:反射技术主要是用于通用型技术,在各大框架底层广泛使用反射的核心思想和关键就是:得到编译后的class文件对象获取类对象:获得类对象...原创 2019-12-19 20:39:43 · 100 阅读 · 0 评论 -
设计模式
概述动态代理简单来说是:拦截对真实对象方法的直接访问,增强真实对象方法的功能代理类:java.lang.reflect.Proxy;具体创建并返回代理对象的方法:public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)参数一:类...原创 2019-12-19 20:39:20 · 96 阅读 · 0 评论 -
线程02-线程安全
线程02-线程安全线程安全的实行方式:同步代码块同步方法显性锁线程安全的实行方式:同步代码块同步方法显性锁同步代码块synchronized (这里放一个唯一的对象) {}synchronized 方法的参数在实例方法中一般取this,在静态方法中一般取类名.class public void drawMoney(double moeny){ Stri...原创 2019-12-13 23:19:37 · 127 阅读 · 0 评论 -
线程01
线程01线程数和CPU核心数的关系:线程与进程线程的创建方式:继承Thread类弊端:优点实现Runnable接口弊端:优点实现Callable接口优点线程数和CPU核心数的关系:核心数:线程数=1:1,使用了超线程技术后为1:2CPU时间 片轮询机制又称RR机制,会导致上下文切换线程与进程进程:是程序执行的最小单位,进程内部有多个线程,会共享这个进程的资源线程:是CPU调度的最小单...原创 2019-12-13 20:46:15 · 109 阅读 · 0 评论 -
枚举
枚举小结枚举的作用:格式:枚举类反编译以后源代码:枚举的特点枚举的常用API:枚举的使用:枚举的好处枚举的作用:用于标志和分类格式: 修饰符 enum 枚举名称{ 第一行都是罗列枚举实例的名称。}枚举类反编译以后源代码: public final class Season extends java.lang.Enum<Season> { publi...原创 2019-12-09 23:08:36 · 101 阅读 · 0 评论 -
java的常见数据结构
java的常见数据结构栈(stack)队列数组链表红黑树二叉树查找二叉树/排序二叉树平衡二叉树旋转红黑树数据存储的常用结构有:栈、队列、数组、链表和红黑树栈(stack)特点:先进后出,后进先出存储数据叫做压栈或者入栈删除数据叫做弹栈或者出栈队列特点:先进先出,后进后出数组数组是内存中连续的存储区域,分成若干等分区域,存在索引(可以根据索引快速计算出元素的地址:索引*单位长...原创 2019-12-09 21:00:37 · 155 阅读 · 0 评论 -
集合相关
集合笔记集合架构Collection(接口):API:遍历方式:Set(接口):HashSet:HashSet研究的两个问题:LinkedHashSet:TreeSet:TreeSet的排序:List(接口):ArrayList:遍历方式LinkedList:遍历方式:同ArrayList(略)LinkedList和ArrayList的区别Vector:(淘汰)遍历方式:同ArrayList(略)...原创 2019-12-09 20:29:37 · 187 阅读 · 0 评论