- 博客(47)
- 资源 (10)
- 收藏
- 关注
原创 java中JDK SPI源码解析
一、SPI概述SPI全称是Service Provider Interface,是一种服务发现机制,用于被第三方实现或者扩展的APIJDK SPI的使用:在META-INF/services目录创建一个以"接口全限定名"为命名的文件,内容为接口"实现类的全限定名"eg:文件名:com.union.jd.SpiService文件内容:com.union.jd.ASpiServi...
2019-09-02 18:07:07
313
原创 Java常用获取类加载器的三种方式和区别
一、获取类加载器的三种方式//获取当前类的加载器ClassLoader classLoader = Test.class.getClassLoader();//获取当前线程上下文类加载器ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();//获取系统类加载器ClassLoader...
2019-09-02 18:05:02
2750
原创 网络IO 零拷贝解析
一、传统网络IO(read/write方式)场景:将一张本地图片展示给用户,首先将本地图片从磁盘中拷贝出来放到内存buffer中,然后将这个buffer通过socket传递给用户,这个过程抽象成下面的过程:read(file, tmp_buf, len);write(socket, tmp_buf, len);首先调用read将本地图片,读取到jvm内存中,然后调用write将jvm内存...
2019-08-07 14:45:07
686
原创 高并发请求处理流程
一、概述普通业务场景我们可能会通过唯一索引、insertOrUpdate之类的操作保证数据的准确性,但是当并发起来会大量唯一索引报错,会导致mysql CPU上涨导致整个数据源崩溃;tip:可以通过先查后插操作,降低唯一索引报错的情况,但是不能根本解决问题;二、高并发请求处理流程前端过滤无效请求,避免大量无效请求到达后端,占用cpu资源;网关再次对恶意请求进行过滤,比如重复ip大量...
2019-07-18 19:02:18
4268
原创 匿名内部类的参数需用使用final修饰
一、闭包一个依赖于自由变量的函数处在含有这些自由变量的一个外围环境这个函数能够访问外围环境里的自由变量**内部类:**通过包含一个指向外部类的引用,做到自由访问外部环境类的所有字段,变相把环境中的自由变量封装到函数里,形成一个闭包。二、匿名内部类实现匿名内部类通过capture-by-value实现的,就是会将局部变量拷贝一份到匿名类中,在匿名类中要update只能updat...
2019-07-15 21:12:50
3880
1
原创 MySQL 使用order by limit 分页重复问题
一、问题描述执行以下sql,在数据没有插入删除的情况下,返回的数据可能不一致,导致线上出现重复数据select xxx from table where xxx order by xxx limit offset二、产生原因在mysql 5.6版本,mysql对order by limit 做了一个优化,使用了priority queue,priority queue使用的是堆排序策...
2019-06-26 15:19:51
5300
原创 五层模型笔记
一、五层模型二、应用层**作用:**是体系结构中的最高。直接为用户的应用进程提供服务。**协议:**HTTP、FTP、SMTP、Telnet、DNS三、传输层传输单元: 报文段作用: 提供应用进程之间的逻辑通信(即端到端的通信),由于一个主机可同时运行多个进程,因此运输层有复用和分用的功能。复用和分用 复用:指发送方不同的应用进程都可以使用同一传输层协议传送数据。 分用:指接...
2019-06-25 21:18:28
4718
原创 CentOS7安装redis-4.0.6
下载redis安装包wget http://download.redis.io/releases/redis-4.0.6.tar.gz解压压缩包tar -zxvf redis-4.0.6.tar.gzyum安装gcc依赖(一定要装,不然启动不了会报错)yum install gcc跳转到redis解压目录下 cd redis-4.0.6编译安装 mak...
2019-06-25 21:09:56
5384
原创 逃逸分析
一、逃逸分析逃逸分析的作用:分析对象动态作用域。逃逸分析的对象:方法中的变量。逃逸分析的分类:方法逃逸:一个对象在方法中定义后,他可能被外部方法所引用,譬如作为调用参数传递到其他方法中,称为方法逃逸。线程逃逸:一个对象在方法中定义后,他可能被外部线程所访问,譬如赋值给类变量或可以在其他线程中访问到的实例变量,称为线程逃逸。二、逃逸分析带来的优化当证明一个对象不会逃逸到...
2019-06-25 20:56:12
4800
原创 log4j2.xml配置详解与实例
一、关于配置文件的名称以及在项目中的存放位置log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".系统选择配置文件的优先级(从先到后)如下:classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.classpath下的名为log4j2-t...
2019-06-25 20:53:57
4998
原创 Linux环境下设置MySQL的max_allowed_packe属性
查看MySQL进程是否启动:ps -aux | grep mysql查看MySQL的运行状态: systemctl status mysqld.service登录MySQL:mysql -u root -p查看max_allowed_packe属性:show VARIABLES like ‘%max_allowed_packet%’;说明:以上说明目前的配置是:1M...
2019-06-25 20:45:22
9060
原创 linux文件操作基本命令
一、基本命令vim 命令:vim - 创建文件vim newfilevim - 光标移动通过 ↑↓←→按键进行光标的移动。如果没有 ↑↓←→按键,可以通过 k上 h左 j下 l右 来进行移动。vim - 退出保存并退出 wq + 回车键 保存并退出 ZZ不保存退出 q! +回车键vim - 删除在视图模式下删除当前光标处的文本 x键在视图模式下删除当前...
2019-06-25 20:38:44
4859
原创 计算机网络---TCP三次握手
一、TCP数据报格式二、名称解释ACK:仅当ACK=1时确认号字段才有用。当ACK=0时,确认号无效。ack:确认号,是期望收到对方下一个报文段的第一个数据字节的序号。SYN:在建立连接时用来同步序号,当SYN置为1就表示这是一个连接请求或连接接受报文。seq:随机生成一个初始序号,后续的分组会基于这个序号递增。FIN:当FIN=1,表示此报文段的发送方的数据已经发送完毕,并要求释放...
2019-06-25 20:24:06
5020
原创 记一次linux环境下mysql错误排查
mysql服务启动报错:Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details.按提示通过"systemctl status mysqld.se...
2019-06-25 20:06:24
4681
原创 ArrayList中迭代器(Iterator)源码解析
一、迭代器接口(java.util.Iterator)JDK中的定义:对 collection 进行迭代的迭代器。Iterator取代了 Java Collections Framework 中的 Enumeration。Iterator与Enumeration有两点不同:迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。方法名称得到了改进。...
2019-06-25 19:11:18
5440
原创 Java中加载类并不一定初始化
假设有class Student一、加载类不初始化的情况Test.class.getClassLoader().loadClass("Student");Class clazz = Student.class;这两种情况下,加载类,但是不会“链接“和”初始化”通过命令:java -verbose:class test查看类加载器加载类情况可知类被加载了。但是这个类的静态属性在方法区...
2019-06-25 19:04:13
5547
原创 简单工厂模式、工厂方法模式、抽象工厂模式
涉及代码地址:https://gitee.com/w1402943677/Factory涉及代码地址:https://gitee.com/w1402943677/Factory一、简单工厂模式、工厂模式、抽象工厂模式的区别简单工厂模式:① 一个抽象产品类,可以派生出多个具体产品类。 ② 一个具体工厂类。 ③ 这个具体工厂类能选择创建一个具体产品类的实例。工厂方法...
2019-06-25 18:59:10
4619
原创 InnoDB---体系架构
一、后台线程后台线程作用:负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据,并将已修改的数据文件刷新到磁盘文件中。分类:Master Thread:负责将缓冲池中的数据异步刷新到磁盘中,保证数据的一致性。IO Thread:负责InnoDB存储引擎中使用的AIO(Async IO 异步非阻塞)请求的回调(call back)处理。Purge Thread:负责回收已经使用...
2019-06-25 18:51:18
4625
原创 InnoDB---CheckPoint(检查点)技术
CheckPoint的意义:缩短数据库的恢复时间缓冲池不够用是,将脏页刷新到磁盘重做日志不可用是,刷新脏页CheckPoint分类:Sharp CheckPoint刷新时机:当数据库关闭时将所有脏页都刷新回磁盘,这是默认的方式。Fuzzy CheckPoint刷新时机:1、Master Thread Checkpoint以每秒或每十秒的速度从缓冲池的脏页列表中刷新一...
2019-06-25 18:46:43
4933
原创 InnoDB---关键特性
一、插入缓冲(insert buffer)Insert Buffer 给InnoDB带来的是性能上的提升对于非聚集索引的插入和更新,不是每一次直接插入索引页中,而是首先判断插入的非聚集索引页是否在缓冲池中,如果在,则直接插入,否则,先放入一个插入Insert Buffer 对象中。好似欺骗数据库这个非聚集的索引已经插入到叶子节点了,然后再以一定的频率执行插入Insert Buffer和非聚集索...
2019-06-25 18:42:22
4648
原创 InnoDB---文件
一、参数文件—my.cnf(linux环境下的根目录下的/var/etc目录下)意义:告诉MySQL实例启动时在哪里找数据库文件,并且指定某初始化参数,这些参数定义了某种内存结构的大小设置,还会介绍各种参数类型。二、日志文件意义:用来记录MySQL实例对某种条件做出响应时写入的文件分类:错误日志(error log):对MySQL的启动、运行、关闭过程进行记录。 通过命令:show...
2019-06-25 18:31:43
4614
原创 InnoDB---表
一、索引组织表在InnoDB存储引擎中,表是根据主键顺序组织存放的,这种存储方式称为索引组织表。每张表都有主键,如果创建表时没有显示创建主键,InnoDB会按一下规则创建主键:首先选择表中第一个定义的非空唯一索引(Unique NOT NULL)作为该表的主键。如果不满足1,InnoDB存储引擎会自动创建一个6字节大小的指针。eg:创建表:插入元素:查询:单主键是只有单...
2019-06-25 18:28:01
4720
原创 InnoDB---约束
一、数据完整性实体完整性:保证表中有一个主键。要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。域完整性:保证数据每列的值满足特定的条件。指数据库表中的列必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等规定。表中的CHECK、FOREIGN KEY 约束和DEFAULT、 NOT NULL定义都属于域完整性的范畴。...
2019-06-25 17:54:31
4692
原创 InnoDB---索引
InnoDB存储引擎支持的索引:B+树索引哈希索引全文索引一、B+树索引注意:B+树索引不能找到一个给定键值的具体行,只能找到数据行所在的页,然后数据库通过把页读入到内存中,再在内存中进行查找。B+树具有高扇出性,因此在数据库中B+树的高度一般在2~4层。B+树分类:聚集索引:按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的行记录数据。注:一张表只有...
2019-06-25 17:24:22
4585
原创 InnoDB---锁
InnoDB存储引擎中的两种---行级锁共享锁(S Lock):允许事务读一行数据。排他锁(X Lock):允许事务删除或更新一行数据。InnoDB存储引擎中的两种---表级锁意向共享锁(IS Lock):事务想要获得一张表中某几行的共享锁,等于加S之前必须加IS。意向排他锁(IX Lock):事务想要获得一张表中某几行的排他锁,等于加X之前必须加IX。 ...
2019-06-25 17:12:21
4654
原创 中缀表达式转前缀表达式java实现
中缀表达式转前缀表达式java实现准备知识:前缀、中缀、后缀表达式http://note.youdao.com/noteshare?id=c27a0ee6222c18ec60cf5bb2154b0744&sub=4CEC6E1E196B4B228839B9220F9F673C前缀、中缀、后缀表达式和二叉树的关系http://note.youdao.com/noteshare?id...
2019-06-25 17:08:08
5481
原创 Swing监听器(ActionListener)中观察者模式源码解析
switch源码解析---jdk1.8一、switch介绍switch (表达式) { case 常量表达式或枚举常量: 语句; break; case 常量表达式或枚举常量: 语句; break; ...... default:...
2019-06-25 16:54:44
4766
原创 Thread源码解析---创建线程流程、start()之后回调run()方法流程
一、线程的两种创建方式继承Thread类:通过new MyThread();无参构造方法创建对象;【MyThread是Thread类的继承类】 实现Runnable接口:通过new Thread(new MyThread());有参构造方法创建对象;【MyThread是Runnable接口的实现类】二、Thread源码创建Thread对象流程无参构造方法和有参构造方法:两个...
2019-06-25 16:39:34
4942
原创 (二)、Redis的基本数据结构---Redis设计与实现读书笔记
一、简介Redis 有 5 种基础数据结构为:string (字符串)、list (列表)、 hash (字典)、和 set (集合)、zset (有序集合)容器类型数据结构通用规则:create if not exists:如果容器不存在,那就创建一个,再进行操作。比如 rpush 操作刚开始是没有列表的,Redis 就会自动创建一个,然后再 rpush 进去新元素。d...
2019-06-25 16:35:27
4684
原创 count(*)和count(1)对比评测
背景:表:wfp_test字段:id — int(11)、name — varchar(255)、text_msg — varchar(2048)数据量:300015条元组一、count(*)、count(1)在没有索引的情况下在没有索引的情况下count(*)、count(1)都全表扫描,效率一致 # 300000条记录,平均14s SELECT count(*) FROM...
2019-01-22 15:36:11
5978
原创 RESTful API
一、概述起源:REST,即Representational State Transfer的缩写,翻译为"表现层状态转化"。其中省略了主语,“表现层"其实指的是"资源”(Resources)的"表现层"。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。RESTful AP 的设计是以资源为核心,每一个URI代表一种资源。【因此:URI不饱包含动词,只能...
2019-01-22 11:46:18
4848
原创 Maven包冲突排查思路
maven 树命令:mvn dependency:tree结果:groupId:artifactId:version[INFO] +- com.jd.ads.union.mng:union_mng-auth:jar:1.0.3-SNAPSHOT:compile[INFO] | +- com.jd.common:sso-uim-spring:jar:1.0.0-SNAPSHOT:com...
2018-12-05 16:31:49
4796
原创 Linux文件权限
一、用户与用户组在linux系统中文件对User、Group、Other三种身份设置对应的权限User:文件所有者,即用户Group:文件所有者所在的组,即用户组Other:不在文件所有者所在组的用户被称为Other一个用户可以属于多个用户组【1:*】一个用户组可以包含多个用户【1:*】二、文件权限文件权限由10个字符组成,第一个字符标识这个文件是"目录、文件或链接文件等...
2018-10-28 16:19:15
4644
原创 (二)、Redis Sentinel 架构【慕课视频笔记-第七章】
1、概述Sentinel(哨兵)是Redis高可用的解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主从节点,实现故障判断、故障转移、通知客户端。2、流程多个sentinel发现并确认master有问题。选举出一个sentinel作为领导。选出一个slave作为master。通知其余slave成为新的master的slave通知客户端主从变化...
2018-09-29 15:23:39
4725
原创 (一)、主从复制【慕课视频笔记-第七章】
1、单机的问题机器故障容量瓶颈QPS瓶颈2、主从复制的特点一个master可以有多个slave一个slave只能有一个master数据流向是单向的,master到slaver3、主从复制的实现命令实现建立主从关系从服务器:slaveof ip port取消主从关系从服务器:slaveof no one配置实现从服务器:修改配置文件...
2018-09-25 11:32:17
4622
原创 (七)、主重复制---Redis设计与实现读书笔记
1、概述一个服务器去复制另一个服务器,被复制服务器为主服务器(master)、对主服务器进行复制的服务器为从服务器(slave)。命令:SLAVEOF “主服务器IP” “主服务器端口号”2、2.8之前版本主从复制实现Redis的主从复制功能分为"同步"和"命令传播"用户向从服务器发送SLAVEOF命令时,从服务器对主服务器执行同步操作,主从服务器数据达到一致性状态主服...
2018-09-23 15:14:00
4607
原创 IO复用模型epoll
一、简介epoll是Linux多路复用IO接口select/poll的加强版,e对应的英文单词就是enhancement【增强】定义:epoll是一种当文件描述符的内核缓冲区非空的时候,发出可读信号进行通知,当写缓冲区不满的时候,发出可写信号通知的机制二、方法epoll_create :创建epoll实例,会创建所需要的红黑树,以及就绪链表,以及代表epoll实例的文件句柄e...
2018-09-18 10:59:53
4762
原创 (六)、Redis的AOF持久化---Redis设计与实现读书笔记
redisServer关于AOF的数据结构/** *Redis 服务器类 */struct redisServer{ ... //AOF缓存区 sds aof_buf; ...}当服务器执行完一个写命令后,会一协议格式将被执行的写命令追加到服务器类的aof_buf缓存区的末尾。AOF文件的写入、同步写入、同步概念写入:为了提...
2018-08-29 00:00:12
5095
原创 (五)、Redis的RDB持久化---Redis设计与实现读书笔记
两个用于生成RDB文件的命令save:会阻塞Redis服务器进程,直到RDB文件创建完毕,在阻塞期间,服务器不能处理任何命令请求bgsave:会派生出一个子进程,然后由子进程负责创建RDB文件,服务器经常(父进程)可以继续处理请求 save、bgsave命令本质都是调用rdb.c/rdbSave函数完成RDB文件的创建,只是内部逻辑不一样。RDB文件载入RDB文件会...
2018-08-28 19:37:40
4649
原创 (四)、Redis删除策略---Redis设计与实现读书笔记
过期键的删除策略定时删除:在设置键的过期时间时,同时创建一个==定时器==,让定时器在键过期时间来临时执行对键的删除操作【redis未使用该策略】惰性删除:当客户端从键空间中获取键时,通过==db./expireIfNeeded==函数检查键是否过期,过期则删除,否则返回该键定期删除:Redis服务器周期性操作==redis.c/serverCron==函数执行,会调用==redis.c...
2018-08-28 15:26:08
6785
很好的Shell总结教程
2018-10-28
算法设计与分析屈婉玲视频完整版
2017-11-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人