![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java开发工程师
jerryq0323
这个作者很懒,什么都没留下…
展开
-
深入理解java虚拟机总结
第二章:Java内存区域和内存溢出异常1. 内存区域程序计数器:线程私有。指示当前线程执行的字节码的行号。是jvm中唯一不会发生oom的区域。栈:线程私有(每个线程有一个栈)。对于每个方法会创建一个栈帧,栈帧是虚拟机进行方法调用和方法执行的数据结构,栈帧包括局部变量表、操作数栈等。可能会有超出栈深度的异常和oom异常。堆:线程共享。存放实例变量,分为新生代和老年代,可以是内存中不连...原创 2018-09-18 14:24:56 · 485 阅读 · 0 评论 -
分布式常问问题
分布式系统zk使用场景配置信息管理。类似dubbo的注册中心,有provider路由信息等。分布式锁。HA。主备服务都在zk中有,主服务挂了zk有感知,然后切换到备用服务。分布式锁1. redis实现分布式锁1.1 基础实现主要就是加锁和解锁两个操作。加锁:set(key 随机值 NX PX 30000) //key 锁的key //随机值 锁的value,...原创 2019-02-20 14:16:58 · 193 阅读 · 0 评论 -
缓存和redis
分布式缓存1.为什么使用缓存 使用缓存最大的一个原因是为了提高性能,如果不用缓存每次查询都要去数据库查询,性能差,使用缓存之后可以将查询的数据放入缓存,这样下次查询不需要访问数据库。 在因学项目中,课程、教室的查询都用了缓存,因为这些信息类似商品,发布之后改动不大,更多的是用户的查询。2.redis的数据类型及使用场景数据类型形式特点StringKey-val...原创 2019-02-20 14:14:39 · 227 阅读 · 0 评论 -
消息队列和RocketMQ
消息队列&RocketMQ1. 消息队列的作用、业务场景 解耦:对于一个消息,producer发送给MQ之后,consumer根据需要自己去MQ取消息,而不是consumer直接去调用producer的消息,通过发布/订阅这种模式,就可以实现producer和consumer的解耦。 削峰:对于一些一小段时间的高并发请求,可以交给MQ,然后让这些大量请求慢慢消费,不至于让服务挂掉...原创 2019-02-20 14:13:49 · 629 阅读 · 0 评论 -
数据库索引和几种树结构的对比
数据库索引参考博客1 参考博客21. 什么是索引?为什么要用索引? 对于一个表如果没有索引,那么查询这个表中的一条数据,需要顺序查找一条一条对比,数据库存储的数据是在外存中的,并且是以块为存储单位的,那么可能需要依次访问每个数据块,指针的寻址等操作极费时间,使得查询效率差;索引是指对字段进行排序,并建立类似b+树这样的数据结构来增快查询效率,索引的原理可以参照b+树。2....原创 2019-02-20 14:12:48 · 405 阅读 · 0 评论 -
队列实现栈和栈实现队列
两个队列实现一个栈和两个栈实现一个队列参考博客两个队列实现一个栈 push方法:直接将新的元素放入queue1的队尾。 pop方法:两个队列一定是一个队列为空,一个队列非空;将非空的队列中的元素放到另一个队列,直到只剩下一个元素,将这个元素弹出即可。public class Queue2Stack{ private LinkedList<Integer> que...原创 2019-02-20 14:10:00 · 118 阅读 · 0 评论 -
数据结构总结
数据结构的逻辑结构和存储结构 逻辑结构:线性表(1对1)、树(1对多)、图(多对多) 存储结构:顺序存储和链式存储线性表 顺序存储的线性表。时间复杂度:索引取值O(1);据值查找O(n);插入O(n);删除O(n)。 链式存储的线性表。有单链表、双向链表、循环链表。时间复杂度:索引取值O(n);据值查找O(n);插入O(1);删除...原创 2019-02-20 14:02:51 · 609 阅读 · 0 评论 -
spring springmvc mybatis 知识点总结
IOC、DI IOC:控制反转。是将原来对象的创建交给spring容器来管理。没有IOC的话,对象的创建一般通过在代码里面new一个对象这种方式;有了IOC,对象的创建或者说bean,是被spirng管理的,有自己的生命周期。 DI:依赖注入。DI是在spring创建对象的时候,动态的将依赖对象注入到对bean组件。BeanFactory、Application...原创 2019-02-20 14:01:31 · 198 阅读 · 0 评论 -
java集合知识点汇总
集合和数组的区别数组只能存放基本数据类型和引用类型;集合只能存放引用类型。 数组是固定长度;集合是可变长度。集合框架API Collection List ArrayList Vector LinkedList...原创 2019-02-20 13:58:18 · 3364 阅读 · 1 评论 -
java线程知识点汇总
线程状态 线程的状态可以分为5种:新建new、可运行runnable、正在运行running、阻塞blocked和死亡dead。 新建new:当一个线程新建出来,例如 Thread thread = new Thread() 此时,线程状态就是new。 可运行Runnable:当新建的线程调用start方法,线程状态就变为runnable,此时线...原创 2019-02-20 13:55:45 · 3302 阅读 · 0 评论 -
IO和Netty
BIO、NIO、AIO BIO:一个连接一个线程。会对每个客户端连接分配一个线程。 NIO:一个请求一个线程。客户端的所有连接都注册到一个多路复用器上,多路复用器采用不断轮询的方式查询连接中是否有IO操作,当连接有IO操作才会启动一个线程进行处理。 AIO:一个有效请求一个线程。客户端的IO操作是由操作系统接收处理,处理完了才通知应用程序去启动线程处...原创 2019-02-20 13:54:14 · 116 阅读 · 0 评论 -
设计模式02-抽象工厂模式
2.抽象工厂模式核心:基于不同的类型选择产品工厂,进而根据条件选择不同的产品优点:当一个产品族中的多个对象被一起使用,协同工作时,抽象工厂模式能够保证使用的都是同一个产品族的对象(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。)缺点:产品族(产品类factory)扩展困难,需要在抽象工厂中增加代码,工厂创建者中增加代码例如以微信支付和支付宝支付为例,不同的支付方式需...原创 2019-02-13 10:09:05 · 157 阅读 · 0 评论 -
设计模式01-工厂模式
1.工厂模式核心:基于不同的条件,创建不同的实例对象(产品)优点:对象创建对于使用者是透明的,扩展性强(使用方只需要产品的名称,具体创建交给工厂)缺点:每个具体实现(产品)需要增加一个类,使系统复杂例如使用NotPad++或Sublime来写文本这个例子。首先需要一个公共的接口WriterSoftWare,并具有write方法,然后有两个具体的实现类,NotPad和Sublime,这...原创 2019-02-13 10:06:19 · 124 阅读 · 0 评论 -
基于docker部署canal+es集群
0.整体架构1. 安装docker就需要几行命令,参考菜鸟教程2. 创建本次demo需要的网络环境docker network create --subnet=172.18.0.0/16 canal-demo3. mysql镜像和配置pull镜像并且运行docker run -d --name mysql --net canal-demo --ip 172.18.0.2 -p 3...原创 2019-08-11 19:28:50 · 2077 阅读 · 0 评论