JAVA知识梳理2021-01-09演讲人01项目中的架构项目中的架构前端运维持久层消息队列全局搜索项目中的架构前端VueHtmlAja x项目中的架构运维nginx分发DockerZookeeper(cp原则)Redis1234Zookeeper(cp原则)持久化节 点PERSISTENT持久化节点:所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点。否则不会因为 创建该节点的客户端会话失效而消失。Zookeeper(cp原则)持久化有序节点PERSISTENT_SEQUENTIAL持久顺序 节点:这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记 录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会自动为给定节点名加 上一个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最大值。在创建节点的时候只需要传入节点“/test_”,这样之后 ,zookeeper自动会给”test_”后面补充数字。Zookeeper(cp原则)临时节点EPHEMERAL临时节点:和持 久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到 的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。这里还要注意一件事,就是当你客户端会话失效后,所产生的节点也不是 一下子就消失了,也要过一段时间,大概是10秒以内,可以试一下,本机操作生成节点,在服务器端用命令来查看当前的节点数目,你会 发现客户端已经stop,但是产生的节点还在。Zookeeper(cp原则)临时有序节点EPHEMERAL_SEQUENTIAL 临时自动编号节点:此节点是属于临时节点,不过带有顺序,客户端会话结束节点就消失设计目的030102实时性最终一致性可靠性060 405等待无关(wait-free)原子性顺序性https://www.wps.cn设计目的最终一致性client无论连接到那一台 server,那么它得到的都是同样的视图,这是zookeeper最重要的性能设计目的可靠性简单、健壮、良好的性能,如果一个消息被一 台服务器接受,那么它将被所有的服务器接受设计目的实时性Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息, 或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应 该在读数据之前调用sync()接口。设计目的等待无关(wait-free)慢的或者失效的client不得干预快速的clie nt的请求,使得每个client都能有效的等待。设计目的原子性更新只有成功或者失败设计目的顺序性全局顺序偏序Redis支持 数据格式CABDE1.string:最基本的数据类型,二进制安全的字符串,最大512M。2.list:按照添加顺序保持顺序的字符串 列表。2^32-1(4GB)3.set:无序的字符串集合,不存在重复的元素。2^32-1(4GB)4.sortedset:已排 序的字符串集合。2^32-1(4GB)5.hash:key-value对的一种集合。2^32-1(4GB)Redis穿透指的是:访 问不存在的key,导致直接穿透缓存,访问数据库雪崩指的是:存在redis中的key同一时间失效,导致流量全部访问数据库限流,降级 ,本地ehcache缓存击穿缓存中的热点key突然失效,原本走缓存的大量请求直接打向了数据库,就好像在缓存中击穿了一个洞 1.在被查询的数据上加互斥锁,这样其他的请求只能等待Redis内存优化尽可能使用散列表(hashes),散列表(是说散列表里面存 储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用 户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面.项目中的架构持久层010203myb atisdruidhibernatemybatis#{}和${}的区别是什么?优点缺点030102手写sql灵活、高效能够很好的集 成spring学习简单,半ORM框架移植性差sql能力要求较高#{},是预处理,替换成?使用PreparedStatement替 换值${}直接替换值项目中的架构消息队列RabbitMq项目中的架构全局搜索Elasticsearch(ES)02多线程多线程线 程池volatile作用ReentrantLock与SynchronizedJUCAQS(AbstractQuenedSynch ronizer)多线程线程池SingleThreadExecutorFixedThreadPoolCachedThreadPo olScheduledThreadPool1234SingleThreadExecutor这个线程池只有一个核 心线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程 因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的 执行顺序按照任务的提交顺序执行FixedThreadPool固定线程池:只有核心线程。 每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程 池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束 ,那么线程池会补充一个新线程。CachedThreadPool无边界线程池,会回收空闲的的线程,任 务增加时也会新建线程(数量由JVM指定),通常用于短任务ScheduledThreadPool核心线程池固定,大 小无限的线程池。多线程volatile作用线程间可见:当一个线程修改值后,其它线程立即可见禁止指令重拍AB多线程 ReentrantLock与Synchronized特点:要么不占,要么独占reentrantLock优点等待可中断超时直 接返回可判断是否有其他线程等待该锁可实现公平锁高竞争的情况下,性能维持常态缺点不可以自动释放锁,需要手动unlocksyn chronized优点JVM底层实现,异常可自动释放锁低竞争的情况下,性能比renntrantLock要好缺点高竞争的情 况下,性能下降比较快多线程JUC010203CountDownLatchCyclicBarrierSemaphorCountD ownLatch阻塞当前线程,等所有的线程都处理后,在运行CyclicBarrier循环栅栏:主要调用await方法,每调用 一次减一,计数为0的时候,解除阻塞;Semaphor限制同一时间,访问资源的线程数量;aquire获取许可,releas e释放许可多线程AQS(AbstractQuenedSynchronizer)构建同步锁的框架03数据库数据库030102索 引最左侧原则簇拥索引与非簇拥索引060405innoDbMyISAM事务https://www.wps.cn数据库设计范式数据库最 左侧原则针对复合索引,先使用复合索引最前面的索引(精确查找),直到范围查找数据库簇拥索引与非簇拥索引簇拥索引:数据和索引放在一起非 簇拥索引:数据与索引分开放数据库索引010203hash索引Btree索引有序数组hash索引对于哈希索引来说,底层的数据结构就是 哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引;Btree 索引B树叶子节点存储多个元素(包含key和value)B+树叶子节点只存key,非叶子节点存储值;有序数组有序数组在等值查询 和范围查询场景中的性能都非常优秀。用二分法就可以快速找到(时间复杂度为O(logN))。但是如果要往中间插入一条数据,则必须挪动后 面的所有记录,成本较高。因此,有序数组只适用于静态存储引擎,即数据表一旦建立后不再会修改。数据库innoDb优点索引组织表存储方式 索引使用的是B+树优点支持事务行级锁存储方式共享表空间存储所有表的数据文件和索引文件都保存在一个表空间里,一个表空间可以有多个文 件,通过innodb_data_file_path和innodb_data_home_dir参数设置共享表空间的位置和名字,一般共 享表空间的名字叫ibdata1-n。多表空间存储以表名为文件名称存储数据库MyISAM优点缺点堆表优点支持FULLTEXT类型 的全文索引缺点不支持事务不支持外键不支持行级锁(只支持表级锁)堆表在磁盘存储上有三个文件,每个文件名以表名开头,扩展名指出文件类型 2.MYI用于存放表索引.frm用于存储表的定义.MYD用于存放数据数据库事务ABCD原子性持久性一致性隔离性事务隔离未授权 读取,也称脏读,在数据修改的时候允许读取授权读取,也称提交后读取可重复读取:禁止不可重复读取和脏读取,但是有时可能出现幻读数据。读 取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。可以通过“共享读锁”和“排他写锁”实现。序列化:提供严格的事 务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制 保证新插入的数据不会被刚执行查询操作的事务访问到。幻读不可重复事务隔离脏读事务隔离幻读针对多个数据事务隔离不可重复针对单个数据事务 隔离脏读读取了另一个事务未提交的数据数据库设计范式第一范式:所有的字段都是最小的,不可拆分;例如高级职称可分为教授与副教授 (不符合第一范式)9,300Million单击此处添加标题第二范式:表中所有列都依赖于主键,也就是说一张表只描述一件事情单击此处 输入你的正文,文字是您思想的提炼,为了最终演示发布的良好效果,请尽量言简意赅的阐述观点;根据需要可酌情增减文字,以便观者可以准确理 解您所传达的信息。第三范式:数据不能存在传递关系,例如:学号,班级就是属于传递04加密对称加密加密与解密都使用同一个秘钥,只有一 个秘钥,称为私钥DES算法AES算法3DES算法非对称加密加密与解密使用不同的秘钥,公钥和私钥(互为解密)RSAECC05 分布式架构分布式架构mysql分库分表CAPConsistency(一致性)Availability(可用性)Partitio ntolerance(分区容错性)06虚拟机虚拟机Native方法栈堆javajvm栈010203程序计数器方法区垃圾回收算法 040506虚拟机程序计数器线程切换,CPU调度可以正确的回到原来的线程虚拟机方法区类的信息,以及staticfinal变量 虚拟机垃圾回收算法010203复制算法标记清除标记整理07dubbodubbo08集合类集合类09SpringSpring事务 的实现、传递性优点Bean设计模式Spring优点12代码低侵入性对象之间的依赖交于框架,降低耦合34支持主流框架,自成体系提供 AOP服务,更好的复用代码优点代码低侵入性优点对象之间的依赖交于框架,降低耦合优点支持主流框架,自成体系提供AOP服务,更好 的复用代码JDK动态代理不支持普通类支持接口Cglib支持普通类支持接口SpringBean生命周期Bean生命周期06016 .使用Bean1.初始化Bean05025.init初始化方法2.属性依赖注入04034.beanPostProcesser3. aware接口Bean生命周期7.销毁前方法8.销毁Spring设计模式工厂模式代理模式0102单例模式观察者模式0304设计模式工厂模式代理模式BeanFactoryAop观察者模式单例模式定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现--ApplicationListener。Bean默认为单例10微服务拆分时机业务痛点,并发,迭代可以进行灰度发布,不影响使用数据库不会连表查询,如果过度偶尔则拆分不开微服务拆分条件应用无状态11排序算法,时间、空间复杂度排序算法,时间、空间复杂度logo12类加载机制类加载机制13IO流IO流14数据结构数据结构链表链表reverse二叉树感谢聆听 |
|