- 博客(126)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 深入理解mysql索引(四)之索引使用原则
上一篇学习了索引的具体2种落地,这一篇学习索引的使用原则,我们在日常sql调优的时候,第一个想到的可能就是“加个索引”,但是你有没有考虑过这样的做法有没有问题,任何事物都是物极必反,什么东西都不是越多越好的,索引也是如此我们都知道,在mysql中,索引也是存储在文件中,并且索引是一种树型的数据结构,他的这种数据结构是需要维护的,所以,如果一个表中的索引太多的话(一般一张表不超过10个索引),那么这张表的索引就占用很大的空间,并且,在这样表增删改的时候,也会消耗大量的资源,引起性能问题。索引的使用原则1
2020-09-06 17:14:53 767 4
原创 深入理解mysql索引(三)之B+Tree 落地形式
接上一篇,上一篇主要学习了B+Tree的各种优点,这一篇,一起学习下mysql中B+Tree的落地形式B+Tree 落地形式一、MySQL 架构MySQL 是一个支持插件式存储引擎的数据库。在 MySQL 里面,每个表在创建的时候都可以指定它所使用的存储引擎。MySQL中最常用的两个存储引擎:InnoDBMyISAMMySQL 的数据都是文件的形式存放在磁盘中的,我们可以找到这个数据目录的地址。在 MySQL 中有这样一个参数,SHOW VARIABLES LIKE 'datadir';
2020-09-06 10:31:32 246
原创 深入理解mysql索引(一)
在工作当中,我们经常遇到慢sql需要优化的场景,往往的,我们第一反应就是:加个索引!确实是,加个索引确实要比原先快很多,但是如果不懂底层原理而一味的去加索引,往往会适得其反,不是长久之计。
2020-09-03 10:54:49 367
原创 JVM底层原理学习(六)之调优方法
上一篇:JVM底层原理学习(五)之调优工具JVM调优方法预防规范化的代码,性能更高的代码. 从点滴做起变量作用域for (int i = 0; i <10000000 ; i++) { int mid = 10000;}字符串的操作建议使用Stringbuffer 或者 StringBuilderfront =front + “hello” + “wolrd” + “a” + “b” + “c” + “d”;会在常量池中建立 hello wolrd a b c d字
2020-08-25 22:21:11 356
原创 JVM底层原理学习(四)之垃圾回收
java程序员好像从来都不像c++程序员一样在代码中写任何关于垃圾回收的代码,使程序员可以更加专注业务逻辑的开发,那这么说,是不是意味着JAVA在运行过程中没有垃圾?其实不然,这要归功于JVM的垃圾回收机制垃圾回收对象的引用类型强引用(强引用对象不能被回收,出现OOM)对于强引用对象,就算是出现了OOM也不会对该对象进行回收强引用是我们最常见的普通对象引用,只要还要强引用指向一个对象,就表明这个对象还活着,垃圾收集器不会回收这种对象。弱引用(只要有GC,就回收)弱引用需要用到java.lan
2020-08-22 21:12:18 470
原创 JVM底层原理学习(三)之JVM内存区域
上一篇主要学习了类加载子系统,这一篇学习JVM的运行时数据区JVM底层原理(二)运行时数据区(Run-Time Data Areas)JVM的设计者将不同的类型的内容存储在JVM规划的不同区域.这些区域总结起来就是运行时数据区(Run-Time Data Areas)如下图。The Java Virtual Machine defines various run-timedata areas that are used during execution of aprogram. Some of
2020-08-22 12:04:01 524 2
原创 JVM底层原理学习(二)之类加载子系统
接上一篇文章上一篇文章主要分析了为什么JVM可以跨平台,以及一个java文件的编译与反编译的过程。这一篇主要是介绍JVM的类加载子系统类文件到虚拟机(类加载子系统)
2020-08-16 17:53:58 340
原创 JVM底层原理学习(一)之JVM概述
白话JVM底层原理作为一个Java程序猿,如果每天都在用java去跟业务逻辑做周旋,而不知其中奥妙所在,实在是一件遗憾的事情。不论是为了面试、调优、亦或是为了理解整个java的运行体系,都应该对java平台的基石–JVM有一个了解,要知其然,知其所以然。这样学知识才能通透,如果死记硬背,那就会像鱼的记忆一样,7秒就忘。
2020-08-15 16:47:05 556
原创 window搭建本地mongo数据库并导入数据
官网:www.mongodb.com选择 Products > Community Edition 就能进入社区版在这里下载 windows 版对应的安装包注意:6.0.1 版本的 MongoDB 配置环境变量有问题,并且我不知道怎么解决,如果想要避免出问题,建议使用 6.0 版本以下的。
2024-03-07 09:48:52 1346 1
原创 查看linux服务器性能
查看物理cpu核心数cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l查看每个物理cpu中的core个数# output为12,说明当前服务器的每个物理CPU封装的物理核数为12个cat /proc/cpuinfo |grep "cpu cores"|wc -l逻辑cpu的个数# output为12,说明该服务器有12个逻辑CPU# 物理cpu个数*核数=逻辑cpu个数(不支持超线程技术的情况下)cat /proc/.
2022-05-13 16:34:15 301
原创 数据库连接数查询
Oracle使用DOS命令链接Oracle假设有一个 Oracle 数据库信息如下:IP:192.168.0.1SID:orcl端口号:1521用户名:testuser密码:123456在本地客户端中配置的服务名为:server11、通过服务名连接数据库sqlplus userName/userPassword@netServiceName例:sqlplus testuser/123456@server12、通过IP 连接数据库:sqlplus userName/userPa
2022-01-21 18:49:34 2563
原创 java多实例热备线程设计
需求:多实例的热备线程,保证多个实例间只有一个线程在执行,并且在主线程挂掉的情况下,备线程可以自动启动并继续执行任务方案一:使用mysql分布式锁 get_lock1.基础知识mysql中提供了两个函数get_lock(‘key’, timeout):timeout单位为秒,超时时间如果设置为0表示立即返回release_lock(‘key’)来实现分布式锁,可以根据key来加锁,这是一个字符串,可以设置超时时间(单位:秒),当调用release_lock(‘key’)或者客户端断线的时候释放锁
2022-01-19 10:10:18 240
原创 java中日志的级别说明
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。ALL:最低等级的,用于打开所有日志记录。TRACE: designates finer-grained informational events than theDEBUG: 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。(DEBUG.Since:1.2.12,很低的日
2021-09-28 10:54:48 7601
原创 Dubbo学习(三)之Dubbo架构
1. Dubbo架构图https://dubbo.apache.org/zh/docs/v2.7/dev/design/#%E6%95%B4%E4%BD%93%E8%AE%BE%E8%AE%A12. Dubbo源码分析Dubbo源码中模块的说明cluster路由层,包含负载均衡、容错common公共包compatible, com.alibaba.dubbo / org.apache.dubboconfig加载配置,然后提供统一的对外的配置的类。config- center动态配置中心,
2021-08-07 12:36:22 148
转载 使用docker在linux上安装oracle数据库
转载于:https://www.cnblogs.com/zhaoxiangjun/p/14197957.html使用docker在linux上安装oracle数据库背景因为最近公司要使用oracle数据库,所以自己尝试着安装一下oracle这里遇见了好多坑,希望可以帮到有需要的人1、安装oracledocker search oracle这里使用的是国内的镜像安装的docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
2021-08-05 22:11:04 470
原创 Dubbo应用(二)之高级特性
1.前言上一篇文章介绍了如何快速构建一个dubbo的简单应用,以及配合nacos注册中心实现服务的注册。是最基本的应用,这一篇文章学习Dubbo的高级特性2.Dubbo的高级特性2.1 dubbo支持多协议dubbo远程通信服务不仅支持自身的dubbo协议,他还支持配置多种协议(场景主要用在老项目切换到dubbo框架,但是老的服务协议还不能变,新的服务要使用dubbo协议)如下:dubboresthessianthrift…2.2 dubbo的负载均衡dubbo自身就支持负载均衡,
2021-08-04 07:11:37 249
原创 超简单Docker的安装教程
准备工作先准备一个CentOs 7.6,(博主这里是7.6,小伙伴可以自己选择,尽量选在7以上版本的)1. 进入Docker官网,按步骤安装https://docs.docker.com/engine/install/centos/官网里面详细的介绍了各种操作系统的安装文档先卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \
2021-07-29 21:53:44 1828
原创 Dubbo(一)之简单应用
为什么要用Dubbo服务治理框架服务的监控服务的注册发现服务的通信服务的容错服务的负载均衡Dubbo架构图1. Dubbo的简单使用构建两个项目(服务提供者、服务消费者)构建一个公共的接口模块,两个项目都依赖此接口maven中引入Dubbo包配置dubbo配置文件(发布的ip和端口以及服务接口)可以选择配置注册中心,或者选择不配置注册中心,直连远程调用2. Dubbo项目搭建2.1 创建项目2.2 创建模块先删除项目中多余的src文件夹2.2.1
2021-07-29 21:13:54 118
原创 UML时序图知识
1. 时序图(Sequence Diagrams)时序图描述对象之间消息的发送顺序,强调时间顺序。时序图是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。用箭头表示消息、用竖虚线表示对象生命线。2. 时序图的作用展示对象之间交互的顺序。将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收的来动态展示对象之间的交互;相对于其他 UML 图,时序图更强调交互的时间顺序;可以直观的描述并发进程。3. 时序图组成元素角色(Actor)系统
2021-07-24 19:13:55 8592
原创 Linux环境配置jdk
1. 下载JDK8官网手动下载下载Linux环境下的jdk1.8http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html![image.png](https://img-blog.csdnimg.cn/img_convert/138a847d43a76f0eded5ddd7c78de317.png#align=left&display=inline&height=432&am
2021-07-14 11:03:03 245
原创 Linux常用命令
1 Linux 下清空或删除大文件内容的 5 种方法在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件。那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空文件内容的方法。注意:在我们进一步深入了解这些方法之前,请记住: 由于在 Linux 中一切皆文件,你需要时刻注意,确保你将要清空的文件不是重要的用户文件或者系统文件。清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误。****1.1
2021-07-05 15:43:27 306 2
转载 finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?链接:https://www.nowcoder.com/questionTerminal/d8eab06913084e42b515633604eef7cd?pos=28&mutiTagIds=570&orderByHotValue=0&done=0来源:牛客网参考:《深入理解Java虚拟机》对于Java而言:调用时机:当垃圾回收器要宣告一个对象死亡时,至少要经过两次标记过程:如果对象在
2021-07-03 14:46:34 546
转载 遍历map的四种方式
public static void main(String[] args) {// 循环遍历Map的4中方法Map<Integer, Integer> map = new HashMap<Integer, Integer>();map.put(1, 2);// 1. entrySet遍历,在键和值都需要时使用(最常用)for (Map.Entry<Integer, Integer> entry : map.entrySet()) {System.out.pr
2021-04-30 15:02:23 381 1
原创 UML类图
1. UML类图示例2. 类与类之间的关系2.1 泛化(Generalization)泛化(Generalization)表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系2.1.1 继承表示方法:继承使用空心三角形+实线表示。示例:鸟类继承抽象类动物2.1.2 实现介绍:实现表示一个class类实现interface接口(可以是多个)的功能。表示方法:1)矩形表示法使用空心三角形+虚线表示比如:汽车改装音响,就要实现低音炮()接口2)棒棒糖表示法
2021-04-01 11:26:50 651
原创 YML配置文件
使用了springboot之后,我们xml已经不怎么用了,yml才是主流,现在记录下yml的详细用法1. YML的优点YML易于人们阅读。YML数据在编程语言之间是可移植的。YML具有表现力和可扩展性。YML易于实现和使用。YML节省空间(没有多余的标签)2. YML的语法2.1 约定写法k: v 表示键值对关系,冒号后面必须有一个空格使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的区分大小写缩进时不允许使用Tab键,只允许使用
2021-03-30 15:53:24 459
原创 SpringCloud Eureka注册中心的应用与原理
前言我们知道,在微服务架构中,每个微服务都是以集群的形式存在的,我们要做负载的话,需要知道这些服务的ip地址和端口号,在之前的两篇文章中,在学习Ribbon的时候,我们的每个服务的ip地址都是写死在application.properties文件中,如图所示这样在节点比较少的情况下可能还可以,但是如果节点特别多的话,如果都用文件配置的话,可维护性太差,并且,这种方式并不能支持服务的上下线动态感知。怎么办的?这时候,就该用到注册中心了。1.Eureka是什么?Spring-Cloud Eureka
2021-03-22 10:57:33 289 1
原创 springcloud学习之Open Feign (声明式的伪RPC远程调用)
1. Open Feign 是什么?Feign,假装、伪装。OpenFeign可以使消费者将提供者提供的服务名伪装为接口进行消费,消费者只需使用“Service接口 + 注解”的方式即可直接调用Service接口方法,而无需再使用RestTemplate了2. Ribbon与OpenFeignRibbon是Netflix公司的一个开源的负载均衡项目,是一个客户端负载均衡器,运行在消费者端。OpenFeign也是运行在消费者端的,使用Ribbon进行负载均衡,所以OpenFeign直接内置了Ribbo
2021-03-20 17:52:50 470
原创 SpringCloud Netflix Ribbon 负载均衡
1. Ribbon 是什么?Spring Cloud Ribbon 是一套实现客户端负载均衡的工具。注意是客户端。负载均衡就是将用户的请求平摊的分配到多个服务上,从而达到系统的高可用。再说的通俗一点,就是可以在配置文件中列出 LB 后面所有的机器(即服务),Ribbon 会自动根据某种规则(如轮询、随机等等)去连接这些机器(即服务),我们也可以自定义一些负载均衡算法。再简单点,Ribbon 就是一个类库,集成在服务消费方,消费方从服务注册中心获知有哪些地址(即服务)可用,然后消费方通过 Ribbon
2021-03-19 12:18:17 164
原创 技术人如何去优雅的面对HR
1.准备工作1.1 STAR法则介绍自己(了解自己)1.1.1 situation 场景1.1.2 target 目标1.1.3 action 任务1.1.4 result 结果1.2 了解应聘公司1.3 6W2H 法则询问工作有关事宜(了解应聘岗位)1.3.1 who汇报对象+团队成员1.3.2 what这个岗位做什么?重点需要我解决什么问题?1.3.3 which用人标准1.3.4 when上班时间,项目时间1.3.5 where上班地点1.3.6 why为什么招这
2021-03-15 10:16:59 103
原创 动态代理的实现原理分析
1. 代理模式类图2.JDK 动态代理原理jdk代理是通过实现接口3.CGlib 动态代理原理通过继承需要被代理的类,去动态生成业务类的子类,重写业务方法实现代理的
2021-03-14 22:18:36 200
原创 Thread.join的实现原理
1.代码可以保证线程按顺序执行,J.U.C中的Condition,await、signal也可以实现让线程按顺序执行public class ThreadJoin { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(()->{ System.out.println("t1"); });
2021-03-14 18:28:26 282
原创 Java线程-守护线程与用户线程
1.用户线程与守护线程Java 线程分为 守护线程(DaemonThread) 和 用户线程(UserThread) 两类.通常情况下,我们使用Thread 创建的线程在默认情况下都属于用户线程, 当在启动线程之前, 执行thread.setDaemon(true)时, 线程会变成守护线程。其实在本质上,用户线程和守护线程并没有太大区别,唯一的区别就是会影响虚拟机的退出(程序的终止)。当jvm中只剩下守护线程时,虚拟机会退出,及程序终止;而当jvm中至少拥有一个用户线程时,jvm都不会退出。2.守护
2021-03-14 18:03:18 205
原创 ThreadLocal的原理
1. ThreadLocal是什么?早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。其实,ThreadLocal是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。从线程的角度看,Thr
2021-03-14 17:16:40 90
原创 什么是幂等?如何实现
1. 什么是幂等在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次一个订单状态更新接口,调用方连续发送了两个消息,一个是已创建,一个是已付款。但是你先接收到已付款,然后又接收到了已创建在支付完成订单之后,需要发送一条短信,当一台机器接收到短信发送的消息之后,处理较慢
2021-03-13 22:12:43 12182
原创 BIO,NIO,AIO的分析
1.BIO (Blocking IO 同步阻塞IO)在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端会线程会等待请求结束后才继续执行。阻塞I/O 数据处理流程图片转载至:https://my.oschina.net/u/2307589/
2021-03-13 12:04:49 175
原创 乐观锁和悲观锁的原理及应用
1. 乐观锁乐观锁,顾名思义,就是这把锁很乐观,认为自己再执行任务的时候,不会有人来抢占资源,所以默认不加锁。但是等真正有人来抢占资源的时候,也会采取一些策略。乐观锁的实现原理java层面 CAS数据库方面:version(MVCC)应用:写比较少的情况(查询功能,预订单查询)2.悲观锁悲观锁,认为每次都会有线程来抢资源,每次都加锁select * from table where id= for update ;如果id有索引,锁行,如果没索引,就会锁表应用:写多的情况(修改功能,修
2021-03-13 10:03:28 218
一个一心想学好安卓的普通大三学生的问题
2016-05-14
打开Eclipse 出现Warning
2016-03-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人