- 博客(415)
- 资源 (53)
- 收藏
- 关注
原创 Nginx的常见应用
跨域处理跨域其实是浏览器对网站的一种保护机制,具体原理是,浏览器不允许通过ajax的方式去加载其他域名下的资源。跨域主要有两种解决方案:通过jsonp的方式,但是这种方式需要前后端公共协作完成。通过cors的方式来解决,这种方式w3c组织制定的一种解决方案。Nginx主要是通过cors方式来解决的,主要原理是:当发起非本域名下的ajax请求时,浏览器会先询问服务器是否允许该域名下的ajax请求,如果浏览器返回可以,那么这次请求就是被允许的,不会被拦截。nginx跨域配置server {
2020-05-15 15:14:59 1021
原创 Nginx基础
Nginx是俄罗斯人编写的一款高性能的HTTP和反向代理服务器,在高连接并发的情况下,它能够支持高达50000个并发连接数的响应,但是内存、CPU等系统资源消耗却很低,运行很稳定。Nginx的优势为什么选择Nginx?因为它具有以下特点:速度快,先天的事件驱动型设计、全异步的网络I/O处理机制、极少的进程间切换。扩展性强,它支持很多第三方模块。可靠性好,Nginx是基于多进程设计,每个worker进程相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供
2020-05-11 10:40:20 520
原创 MySQL性能优化
MySQL性能优化主要考虑几个方面:CPU、内存、硬盘、操作系统、文件系统等。CPU数据库的应用类型一般可以分为OLTP(OnlineTransaction Processing,在线事务处理)和OLAP(Online Analytical Processing,在线分析处理。OLTP主要用来解决事务性应用,如银行交易,在线商品交易等,所以对CPU需求较低;OLAP一般需要执行复杂的SQL语...
2020-05-07 19:56:41 784
原创 MySQL高可用化
服务在运行过程中存在很多意外情况,如:如服务器宕机、磁盘损坏、RAID卡损坏等。如何保证数据库在服务发生意外的情况下数据不丢失呢?服务还能继续提供服务呢?我们一般通过备份的方式来解决数据丢失问题,通过复制来解决MySQL的高可用问题。备份备份的方法不同可以将备份分为:Hot Backup(热备,在线备份):在数据运行过程中进行备份,对数据库操作没有影响。Cold Backup(冷备,离...
2020-05-07 14:42:22 1984 1
原创 MySQL的日志类型
重做日志(redo log)作用重做日志用来实现事务的持久性,即事务ACID中的D。其由两部分组成:一是内存中的重做日志缓冲(redo log buffer),其是易失的;二是重做日志文件(redo log file),其是持久的。原理InnoDB是事务的存储引擎,其通过Force Log at Commit机制实现事务的持久性,即当事务提交(COMMIT)时,必须先将该事务的所有日志写入...
2020-05-06 18:18:30 743
原创 MySQL事务
事务是访问并更新数据库中各种数据的最小单元,在事务的操作中,要么都修改成功,要么都修改失败。它的主要目的是:将数据库从一个一直状态转换成另一种一直状态。事务的四个特性是:原子性(atomicity):原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作都执行成功,才算整个事务成功。一致性(consistency):一致性指事务将数据库从一种状态转变为下一种一致的状态。...
2020-05-02 15:53:21 512
原创 MySQL索引原理
定义索引(Index)是帮助MySQL高效获取数据的数据结构。那么什么数据结构可以用来高效的获取数据呢?查看索引mysql> show index from user;+-------+------------+------------------+--------------+-------------+-----------+-------------+----------+--...
2020-04-23 11:00:14 466
原创 MySQL中各数据类型占用字节数
数字类型类型字节数TINYINT1 字节SMALLINT2 个字节MEDIUMINT3 个字节INT4 个字节INTEGER4 个字节BIGINT8 个字节FLOAT(X)4 如果 X < = 24 或 8 如果 25 < = X < = 53FLOAT4 个字节DOUBLE8 个字节D...
2020-04-22 10:01:23 7895 4
原创 InnoDB存储引擎
InnoDB体系架构后台线程分类Master Thread主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。Master Thread具有最高的线程优先级别。其内部由多个循环(loop)组成:主循环(loop)、后台循环(backgroup loop)、刷新循环(flush loop)、暂停循环(suspendloop)。Master Thread会根据数据库运行的状态在loop、...
2020-04-21 09:21:54 332
原创 MySQL常见的存储引擎
查看存储引擎查看当前mysql所支持的所有存储引擎mysql> show engines;+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine ...
2020-04-20 11:36:59 246
原创 MySQL查询的执行过程
Mysql 的逻辑架构MySQL执行一个查询的过程如图:客户端发送一个查询给服务器。服务器先检查查询缓存,如果命中,则直接返回缓存中的结果。如果没有没有命中,则进入下一阶段(解析器)。服务器由解析器检查sql语法是否正确,然后由预处理器检查sql中的表和字段是否存在,最后由查询优器生成执行计划。这一步很耗资源。mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询。...
2020-04-20 10:00:16 434
原创 MySQL优化 - EXPLAIN
EXPLAIN是我们最常用的SQL分析工具,在使用工具之前我们需要先了解下工具中每一项代表的含义,如下是EXPLAIN中的所有列:mysql> explain select * from user u1 left join user u2 on u1.id=u2.id where u1.name='wyh';+----+-------------+-------+-----------...
2020-04-14 17:00:43 304
原创 Mysql 数据库压力测试工具 - MySqlSlap
MySQLSlap是从MySQL的5.1.4版引入的压力测试工具。该工具我们可以在Mysql的安装目录的bin目录里面找到,如C:\Program Files\MySQL\MySQL Server 5.7\bin>。名词解释TPS:Transactions Per Second(每秒传输的事物处理个数),这是指服务器每秒处理的事务数,支持事务的存储引擎如InnoDB等特有的一个性能指标...
2020-04-11 16:56:02 642
原创 为什么表设计时必须把字段定义为NOT NULL并设默认值
空间占用的坑空’'在存储过程中是不会占用空间的,但是NULL会。就像一个杯子,空表示杯子是真空的,NULL表示装的空气。mysql> SELECT length('1'),length(NULL),length('');+-------------+--------------+------------+| length('1') | length(NULL) | length('...
2020-04-10 10:49:23 3408
转载 58到家MySQL军规升级版
转载 2018-03-30 58到家DBA 架构师之路一、基础规范表存储引擎必须使用InnoDB表字符集默认使用utf8,必要时候使用utf8mb4解读:通用,无乱码风险,汉字3字节,英文1字节utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它禁止使用存储过程,视图,触发器,Event解读:对数据库性能影响较大,互联网业务,能让站点层和服务层干的事情...
2020-04-10 09:43:51 293
原创 IDEA 插件开发遇到的坑
文档地址https://www.jetbrains.org/intellij/sdk/docs/basics/action_system.htmlhttps://v.youku.com/v_show/id_XNDQ4MjgzMTEwOA==.html?spm=a2hbt.13141534.app.55!25!2555!255!25!25!255!2Agradle需要使用 5.5.X 版本...
2020-03-31 15:07:40 4352 1
原创 GitFlowPlus4Idea插件
插件是一款基于分支管理流程的Idea插件,它最主要的作用是用来简化分支管理流程,最大限度的防止误操作。主要功能如下:插件配置文件可以加入GIT版本管理,在团队内部共享;基于origin/master新建开发分支和修复分支;基于origin/master重建测试分支和发布分支;开发完成后将开发分支合并到测试分支;支持在本地发起Merge Request;测试完成后将开发分支合并到发布分支;发布完成后将发布分支合并到origin/master分支;
2020-03-27 21:11:28 5166 7
原创 Arthas 查看方法调用路径上的每个节点上耗时
文档:https://alibaba.github.io/arthas/githut:https://github.com/alibaba/arthas/blob/master/site/src/site/sphinx/index.md安装快速安装wget https://alibaba.github.io/arthas/arthas-boot.jar && java -j...
2020-03-18 10:12:27 5870
原创 Arthas watch 方法执行数据观测
watch 让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。参数说明watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象参数名称参数说明class-pattern类名表达式匹配method-pattern方法名表达式匹配express观察表达式condi...
2020-03-18 10:10:40 5786
原创 EasyCode 简介
EasyCode是基于IntelliJ IDEA Ultimate版开发的一个代码生成插件,主要通过自定义模板(基于velocity)来生成各种你想要的代码。通常用于生成Entity、Dao、Service、Controller。如果你动手能力强还可以用于生成HTML、JS、PHP等代码。理论上来说只要是与数据有关的代码都是可以生成的。使用文档https://gitee.com/makejav...
2020-03-13 14:23:24 3108 1
原创 深入理解JVM - 系统性能优化
系统性能优化并不是一上来就是JVM优化,相反JVM优化几乎是最后的手段了。影响一个系统的性能的因素非常多,如图:从服务本身来看,影响服务性能的主要包扣:我们写代码时所选择的数据结构和算法服务开启的线程时是否合理WEB应用,WEB服务JVM方面的影响最后是操作系统的影响从整个服务架构上来看还有:数据持久化服务间的远程调用消息缓存等中间件的选择常用的性能测试指标响应时...
2020-03-04 17:39:06 597
原创 深入理解JVM - JVM编译器
编译器类型编译器最终的目的是将我们写的源代码编译成机器能识别的机器码。 在JVM 中有三个非常重要的编译器,它们分别是:前端编译器、JIT 编译器和AOT编译器。前端编译器将源代码转化成字节码,如javac;我们一般称 javac 编译器为前端编译器,因为其发生在整个编译的前期。javac编译过程大致可以分为1个准备过程和3个处理过程,它们分别如下所示。准备过程:初始化插入式注解处理器,...
2020-03-04 14:45:50 795
原创 在RedisTemplate中使用scan代替keys指令
SCAN 简介SCAN 命令及其相关的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):SCAN 命令用于迭代当前数据库中的数据库键。SSCAN 命令用于迭代集合键中的元...
2020-02-22 12:15:43 2367 4
原创 深入理解JVM - 方法调用
方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还未涉及方法内部的具体运行过程。一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(也就是之前说的直接引用)。解析所有方法调用的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引...
2020-02-19 16:50:48 394
原创 深入理解JVM - 类加载机制
类加载过程一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking),如图:加载、验证、准备、初始化和...
2020-01-20 17:25:49 748
原创 深入理解JVM - Class类文件的结构
Class文件是Java虚拟机执行引擎的数据入口,也是Java技术体系的基础支柱之一。Class文件本质Class文件本质上是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。Class文件格式Class文件格式采用一种类似于C语言结构体的伪结构...
2020-01-18 17:44:43 477
原创 深入理解JVM - 虚拟机字节码指令集
常量入栈指令指令码操作码(助记符)操作数描述(栈指操作数栈)0x01aconst_null将 null推送至栈顶0x02iconst_m1将 -1(int)推送至栈顶0x03iconst_0将 0(int)推送至栈顶0x04iconst_1将 1(int)推送至栈顶0x05iconst_2将 2(int)推送至栈顶...
2020-01-18 14:43:12 538
原创 Docker加速器 DaoCloud
由于众所周知的原因,从Docker Hub难以高效地下载镜像。除了使用VPN或代理之外,最为有效的方式就是使用Docker国内镜像。DaoCloud是首个提供国内免费Docker Hub镜像的团体,可以使用DaoCloud团队提供的Docker Hub Mirror服务。Docker加速器简介Docker加速器是 DaoCloud 推出的 Docker Hub Mirror ...
2020-01-18 12:52:25 1092
原创 Spring 源码(十二)Spring 中核心的后置处理器
BeanFactoryBeanFactoryPostProcessor:BeanFactory后置处理器ConfigurationClassPostProcessor:解析配置类的BeanFactory后置处理器BeanBeanPostProcessors:Bean 初始化前后执行的后置处理器InstantiationAwareBeanPostProcessor:Bean实例化前...
2020-01-14 15:30:12 1119 1
原创 深入理解JVM - ZGC垃圾收集器
如果下面的一些概念有些不清楚的可以先看深入理解JVM - 垃圾收集器和深入理解JVM - Shenandoah垃圾收集器。ZGC(Z Garbage Collector)是一款由Oracle公司研发的,以低延迟为首要目标的一款垃圾收集器。它是基于动态Region内存布局,(暂时)不设年龄分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的收集器。在JDK 11新加入,还...
2020-01-13 10:19:35 6021 3
原创 深入理解JVM - Shenandoah垃圾收集器
如果下面的一些概念有些不清楚的可以先看深入理解JVM - 垃圾收集器。Shenandoah是一款只有OpenJDK才会包含的收集器,最开始由RedHat公司独立发展后来贡献给了OpenJDK,相比G1主要改进点在于:支持并发的整理算法,Shenandoah的回收阶段可以和用户线程并发执行;Shenandoah 目前不使用分代收集,也就是没有年轻代老年代的概念在里面了;Shenandoah...
2020-01-11 12:45:09 2854 3
原创 深入理解JVM - 内存分配策略
对象优先在Eden分配对象优先在Eden分配,如果说Eden内存空间不足,就会发生Minor GC大对象直接进入老年代大对象:需要大量连续内存空间的Java对象,比如:很长的字符串和大型数组。大对象带来的副作用:当没有足够的连续空间来存放大对象的时候,就需要提前出发一次Full GC在内存回收过程中,会进行大量的内存复制-XX:PretenureSizeThreshold参数 ,...
2020-01-09 18:21:13 280
原创 深入理解JVM - 垃圾收集器
垃圾回收主要是要解决3件事情:那些内存需要回收?如何回收?什么时候回收?那些内存需要回收在强引用的情况下已经“死”了的对象就需要回收,在非强引用的情况下视情况回收。在java里面,几乎所有的对象实例都是在堆上分配,所以垃圾收集器第一件事情就是要判断堆上的这些实例那些是“死去”的,那些还“活着”。判断对象是否存活主要有两种算法,一种是“引用计数算法”,一种是“可达性分析算法”。“死...
2020-01-09 17:04:42 1112
原创 OkHttp 工具类
OkHttp 工具类/** * OkHttpClient工具 * * @author yuhao.wang3 */public abstract class OkHttpClientUtil { private static final Logger logger = LoggerFactory.getLogger(OkHttpClientUtil.class); p...
2020-01-07 16:36:36 793
转载 如何成为优秀的技术主管?你要做到这三点
转至:https://mp.weixin.qq.com/s/0LVj1IcWMWAuUeY6U7r4hg阿里妹导读:技术主管,又叫「技术经理」,英文一般是 Tech Leader ,简称 TL。随着工作经验的不断积累,能力的不断提升,每个人都有机会成为Team Leader。然而在机会到来前,我们必须提前做好准备,对TL的工作职责有一定了解。当然,这也会为当下更好地配合TL工作打下基础。今天,......
2020-01-03 14:30:38 656
原创 深入理解JVM - 内存溢出实战
Java堆溢出Java堆用于存储对象实例,只要不断地创建对象,当对象数量到达最大堆的容量限制后就会产生内存溢出异常。最常见的内存溢出就是存在大的容器,而没法回收,比如:Map,List等。出现下面信息就可以断定出现了堆内存溢出。java.lang.OutOfMemoryError: Java heap space保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象...
2019-12-31 14:27:39 967 4
原创 StackOverflowError 栈溢出实战
栈溢出的原因在解决栈溢出问题之前,我们首先需要知道一般引起栈溢出的原因,主要有以下几点:是否有递归调用,循环依赖调用是否有大量循环或死循环全局变量是否过多局部变量过大,如:数组、List、Map数据过大问题现象我们一个很老的接口(近一年没有动过)在线上运行一段时间后报了StackOverflowError栈溢出,其他接口又能正常提供服务,错误日志:java.lang.Stack...
2019-11-28 11:37:47 2164 1
原创 Mybatis 源码(六)Mybatis-Spring框架实现原理
我在使用mybatis-spring过程中一直有一个疑问,在Mybatis 源码(一)总揽中我提到过,SqlSession和Mapper对象的声明周期是方法级别的,也就是每个请求的SqlSession和Mapper对象是不一样的,是一个非单例的Bean。但是与Spring集成后,为什么我们可以直接注入Mapper对象,如果通过直接注入的话Mapper对象却成了单例的了?我们带着疑问来看下Myba...
2019-11-28 11:35:47 369
汽车电子控制系统实例
2012-08-25
CAN技术规范
2012-08-25
consul_1.7.3_windows\mac\linux.zip
2020-06-02
git-flow-plus-4idea-1.0.7.zip
2020-05-07
ScreenToGif.rar
2020-03-13
logback 中文手册
2017-03-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人