自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 MySQL常用数据库函数

一. 常用的函数分类 • 数学函数 • 聚合函数 • 字符串函数 • 日期时间函数 二. 常用的数学函数 1.rand() 返回0到1的随机数 mysql> select rand(); +--------------------+ | rand() | +--------------------+ | 0.2819034413266028 | +--------------------+ 1 row in set (0.00 sec) mod(x,y) 返回x除以y以后的

2020-09-13 12:34:30 1115

原创 Sharding-JDBC 执行原理

1. 基本概念 逻辑表 水平拆分的数据表的总称。例:订单数据表根据主键尾数拆分为10张表,分别是 t_order_0 、 t_order_1 到t_order_9 ,他们的逻辑表名为 t_order 。 真实表 在分片的数据库中真实存在的物理表。即上个示例中的 t_order_0 到 t_order_9 。 数据节点 数据分片的最小物理单元。由数据源名称和数据表组成,例: ds_0.t_order_0 。 绑定表 指分片规则一致的主表和子表。例如: t_order 表和 t_order_item 表,均按照

2021-04-24 11:52:09 590

原创 一文读懂分库分表

** 一文读懂分库分表 ** 随着公司业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫。分析一下问题出现在哪儿呢? 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。 方案1: 通过提升服务器硬件能力来提高数据处理能力,比如增加存储容量 、CPU等,这种方案成本很高,并且如果瓶颈在MySQL本身那么提高硬件也是有很的。 方案2: 把数据分散在不同的数据

2021-04-24 11:12:41 385

原创 Springmvc源码解析---执行流程(2)

面试题:当接口定义的是下面这种方式的时候是用什么调用的?为什么?如何调用的? @Controller public class UserController { @RequestMapping("/getUser") public Object getUser(String name){ System.out.println("getuser"); return "success"; } } 我们试想一下,一个类调用另一个类有几种方法,一是通过new

2020-12-29 22:49:12 231

原创 springmvc源码解析----执行流程(1)

该流程是基于继承controller来编写的接口来解析的: 根据Servlet规范,当用户请求到达应用时,由Servlet的service()方法进行处理,对于Spring MVC而言,处理用户请求的入口为DispatcherServlet,通过其父类FrameworkServlet的service()拦截处理。 FrameworkServlet 用户请求的入口方法为service(request,response),源码如下: org.springframework.web.servlet.Framew

2020-12-29 16:28:42 214

原创 springmvc源码解析--- 启动过程

说到java的mvc框架,struts2和springmvc想必大家都知道,struts2的设计基本上完全脱离了Servlet容器,而springmvc是依托着Servlet容器元素来设计的,同时springmvc基于Spring框架,Spring框架想必搞java的同学都很熟悉。 前期准备: /** *后台处理器 */ public class Controller1 implements Controller{ //要想让适配器去执行后端控制器就必须实现Controller接口 @Overri

2020-12-26 01:33:09 301

原创 mybatis源码详细解析(2)---- 一级,二级缓存

Mybatis缓存的作用 每当我们使用 MyBatis 开启一次和数据库的会话,MyBatis 会创建出一个 SqlSession 对象表示一次数据库会话。 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了完全相同的查询,那么它们的结果极有可能完全相同,由于查询一次数据库的代价很大,这有可能造成很大的资源浪费。 为了解决这一问题,减少资源的浪费,MyBatis会在表示会话的SqlSession对象中建立一个简单的

2020-12-22 13:46:10 215

原创 mybatis源码详细解析(1)

mybatis是当前最流行的持久层框架之一 Mybaties是orm框架,那orm框架是什么? 用于实现面向对象编程语言里,不同类型系统的数据之间的转换 (篇幅较长,要耐心看完。) 一、从 XML 中构建 SqlSessionFactory 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。它是mybatis的核心类,也是mybatis的运行入口,spring继承mybatis时需要配置SqlSessionFactoryBean和扫描mapper的Mapper

2020-12-20 01:03:55 385 1

原创 Java 代理模式--详解

所谓代理模式,是指客户端(Client)并不直接调用实际的对象,而是通过调用代理(Proxy),来间接的调用实际的对象。 代理模式的使用场合,一般是由于客户端不想直接访问实际对象,或者访问实际的对象存在技术上的障碍,因而通过代理对象作为桥梁,来完成间接访问。 静态代理 //账户接口 public interface AccountDao { public void queryCount();//查询账户 public void updateCount();//修改账户 } /** * 委托类(代理类

2020-12-19 11:44:14 1008 3

原创 java代码实现elasticsearch搜索

DSL(Domain Specific Language)是ES提出的基于json的搜索方式,在搜索时传入特定的json格式的数据来完成不 同的搜索需求。 DSL比URI搜索方式功能强大,在项目中建议使用DSL方式来完成搜索。 1. ES客户端 ES提供多种不同的客户端: 1、TransportClient ES提供的传统客户端,官方计划8.0版本删除此客户端。 2、RestClient RestClient是官方推荐使用的,它包括两种:Java Low Level REST Client和 Java Hi

2020-12-14 22:22:55 1048

原创 es创建索引库,映射,文档

1. 创建索引库 ES的索引库是一个逻辑概念,它包括了分词列表及文档列表,同一个索引库中存储了相同类型的文档。它就相当于 MySQL中的表,或相当于Mongodb中的集合。 关于索引这个语: 索引(名词):ES是基于Lucene构建的一个搜索服务,它要从索引库搜索符合条件索引数据。 索引(动词):索引库刚创建起来是空的,将数据添加到索引库的过程称为索引。 下边介绍两种创建索引库的方法,它们的工作原理是相同的,都是客户端向ES服务发送命令。 1)使用postman或curl这样的工具创建: put htt

2020-12-13 11:49:00 2107

原创 Elasticearch安装ik分词器

使用IK分词器可以实现对中文分词的效果。 下载IK分词器: (Github地址:https://github.com/medcl/elasticsearch-analysis-ik/releases) 下载Zip包: 注:分词器版本需要跟Elasticearch使用的版本保持一致。 解压,并将解压的文件拷贝到ES安装目录的plugins下的ik目录下(如果没有ik文件夹,自建一个) 如果Elasticearch以docker方式运行,则运行: sudo docker cp [ 文件夹所在位置 ] [容

2020-12-12 23:01:17 363

原创 Elasticearch简介及安装

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,

2020-12-12 19:25:26 449

原创 nginx 设计负载均衡

什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。 负载均衡的几种常用方式 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2、权重(weight) 指定轮询几率

2020-11-15 12:18:08 196

转载 用nginx反向代理tomcat服务器

什么是代理服务器? 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。 为什么要使用代理服务器? 提高访问速度 由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。 防火墙作用 由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在

2020-11-14 21:54:20 369

原创 nginx简介及虚拟主机配置(基于docker)

什么是 Nginx Nginx 是一款高性能的 HTTP 服务器/反向代理服务器及电子邮件代理服务器。由俄罗斯的程序设计师 Igor Sysoev 所开发,官方测试 Nginx 能够支支撑 5 万并发链接,并且 CPU、内存等资源消耗却非常低,运行非常稳定。 Nginx 的应用场景 虚拟主机:可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。 反向代理,负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以 使用 Nginx 做反向代理。并且多台

2020-11-14 18:06:17 466

原创 基于docker搭建redis高可用集群版

什么是 Redis Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis 支持的键值数据类型如下: • string(字符串) • hash(哈希) • list(列表) • set(集合) • zset(有序集合) Redis 的应用场景 • 缓存(数据查询、短连接、新闻内容、商品内容等等) • 分布式集群架构中的 session 分离 • 聊天室的在线好友列表 • 任务队列(秒杀、抢购、12306

2020-11-14 12:34:54 410

原创 Docker Compose简介及安装

简介 Docker Compose 是 Docker 官方编排项目之一,负责快速的部署分布式应用。 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。 通过之前的介绍,我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要

2020-11-08 11:56:43 244

转载 【Mysql】图解左、右、内与全连接

一、前言 使用学生表与成绩表来演示Mysql中的各种连接查找 学生表的建表语句如下: CREATE TABLE student( id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增序号', st_id int(11) DEFAULT NULL COMMENT '学生id', st_name varchar(255) DEFAULT NULL COMMENT '学生姓名', PRIMARY KEY (`id`) USING BTREE ) ENGINE

2020-11-06 23:02:51 234

原创 部署服务到容器

当我们项目开发完毕后,需要将服务部署到服务器以便测试端进行相关测试或者上生产,这时我们可以将我们的项目制作成镜像,以容器方式运行,这也是目前很流行的一种运行方式。 这里以eureka为例,部署服务到容器中运行: 第一步:将项目先打包成jar包并传值linix系统中 打包命令:mv clean package (或者再idea上直接打包) 注:服务的pom文件中需要添加main的地址 第二步:编辑dockerfile文件 vi Dockerfile # 以openjdk为基础镜像 FROM openjdk

2020-11-03 23:47:48 491

原创 Dockerfile 常用指令详解

COPY 复制文件 格式: • COPY <源路径>… <目标路径> • COPY ["<源路径1>",… “<目标路径>”] COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。比如: COPY package.json /usr/src/app/ <目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)。

2020-11-01 17:42:16 830

原创 docker 常用命令

docker -v / version /info //查看docker版本信息 docker images //镜像列表 docker ps //查看所有正在运行的容器 docker ps -a //查看所有容器 docker ps -l //最后运行容器 docker export 容器id &

2020-10-22 11:13:47 115

原创 基于Ubuntu 安装 Docker

Docker 分为: Docker CE 社区版 免费版 Docker EE 企业版 收费版 Docker CE 可以安装在 64 位的 x86 平台或 ARM 平台上。Ubuntu 发行版中,LTS(Long-Term-Support)长期支持版本,会获得 5 年的升级维护支持,这样的版本会更稳定,因此在生产环境中推荐使用 LTS 版本 卸载旧版本 (如果没有安装过,可忽略) 旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本: $ sudo apt

2020-10-22 11:08:23 179

原创 Mysql 日志

在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件。MySQL 也不例外,在 MySQL 中,有 4 种不同的日志,分别是错误日志、二进制日志(BINLOG 日志)、查询日志和慢查询日志,这些日志记录着数据库在不同方面的踪迹。 1 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。 该日

2020-10-13 23:23:53 122

原创 MySQL语句优化

1.大批量插入数据 对于 InnoDB 类型的表,有以下几种方式可以提高导入的效率 1) 主键顺序插入 因为InnoDB类型的表是按照主键的顺序保存的,所以将导入的数据按照主键的顺序排列,可以有效的提高导入数据的效率。如果InnoDB表没有主键,那么系统会自动默认创建一个内部列作为主键,所以如果可以给表创建一个主键,将可以利用这点,来提高导入数据的效率。 例如:当前有两个数据,各有十万数据 脚本文件介绍 : sql1.log ----> 主键有序 sql2.log ----> 主键无序 将文件加

2020-10-11 16:52:08 851

原创 优化SQL步骤

在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的 SQL 语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化. 当面对一个有 SQL 性能问题的数据库时,我们应该从何处入手来进行系统的分析,使得能够尽快定位问题 SQL 并尽快解决问题。 查看SQL执行频率 MySQL 客户端连接成功后,通过 show [session|globa

2020-10-11 16:36:17 147

原创 存储过程,函数跟触发器

目录存储过程存储函数触发器 存储过程 存储函数 触发器 存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程和函数的区别在于函数必须有返回值,而存储过程没有。 函数 : 是一个有返回值的过程 ; 过程 : 是一个没有返回值的函数 ; 存储过程 创建存储过程: CREATE PROCEDURE procedure_name ([proc_parameter[

2020-09-26 11:37:00 337

原创 基于spring框架实现多线程

为什么还要使用Spring来实现多线程呢?有两个原因,第一使用Spring比使用JDK原生的并发API更简单。第二我们的应用环境一般都会集成Spring,我们的Bean也都交给Spring来进行管理,那么使用Spring来实现多线程更加简单,更加优雅。 从Spring3同时也是新增了Java的配置方式,而且Java配置方式也逐渐成为主流的Spring的配置方式,因此后面的例子都是以Java的配置进行演示。 首先定义配置类 import org.springframework.context.annotati

2020-09-06 15:26:34 1132 6

原创 MySQL数据库基本操作

1.登录MySQL 进入数据库的方法一: mysql -uroot -pmysql # mysql 数据库密码(显示) 进入数据库的方法二: mysql -uroot -p # 隐藏密码输入 2.数据库的基本操作 显示数据库版本(记得加;) select version(); 显示当前的时间 select now(); 查看所有数据库 show databases; 创建数据库 create database 数据库名 charset=utf8; 创建淘宝数据库 create database tao

2020-09-05 15:48:25 211

原创 多线程-基础(2)

第三种方式:使用内部类的方式 这并不是一种新的实现线程的方式,只是另外的一种写法。比如有些情况我们的线程就想执行一次,以后就用不到了。那么像上面两种方式(继承Thread类和实现Runnable接口)都还要再定义一个类,显得比较麻烦,我们就可以通过匿名内部类的方式来实现。使用内部类实现依然有两种,分别是继承Thread类和实现Runnable接口。 /** * 匿名内部类的方式创建线程 */ public class CreateThread_Anonymous { public static v

2020-08-08 18:10:04 149

原创 多线程-基础(1)

电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的。比如我们电脑中的QQ、微信,网易播放器、电脑管家等等. 什么是线程? 进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。 什么是多线程? 提到多线程这里要说两个概念,就是串行和并行,搞清楚这个,我们才能更好地理解多线程。 所谓串行,其实是相对于单条线程来执行多个任务来说的,我们就拿下载文件来举个例子:当我们下载多个文件时,在串行中它是按照一定的顺序去进行下载的,也就是

2020-08-02 18:05:29 217

原创 字符流与字节流,以及缓存流的基本了解,使用

什么是流? 流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道。 输入流是相对程序而言的,外部传入数据给程序需要借助输入流。 输出流是相对程序而言的,程序把数据传输到外部需要借助输出流。 什么是字节流? 字节流–传输过程中,传输数据的最基本单位是字节的流。 什么是字符流? 字符流–传输过程中,传输数据的最基本单位是字符的流 字节流 字节流的类通常以stream结尾 常用的字节输入流主要有: InputStream FileInputStream Buffered

2020-08-02 17:16:54 637

原创 Java之常用设计模式

设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 工厂模式: 工厂模式是Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 步骤 1: /**抽象.

2020-07-26 15:46:39 199

原创 浅谈ArrayList,LinkedList和Vector的区别

ArrayList,LinkedList和Vector都继承自List接口。ArrayList和Vector的底层是动态数组,LinkedList的底层是双向链表. ArrayList,LinkedList的区别: 通过上图,我们看出数组是通过索引进行操作,数组分配的是一块连续的内存空间,只要拿到对应的索引就能拿到数据,例:拿到1就能得到A2,当然在A2后面插入数据,就需要移动后面的所有数据;而链表不一样,数据的地址是在前一个链表中,例:要得到A2就必须得到A1,再得到索引B1,得到B1才能得到A2的地

2020-07-19 00:32:27 234

原创 List集合的常用操作

集合添加方法是:.add(e);  获取方法是:.get(index);太简单,在这里不做显示。。。 如何对List集合去重(面试题) 1.最普遍的方法是循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = l

2020-07-12 19:16:55 475

原创 java集合-基础

从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,是单列集合,另一种是图(Map),存储键/值对映射,是双列结合。 Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。 Set和List的区别 • 1. Set 接口实例存.

2020-07-12 15:55:52 184

原创 浅谈关于String,StringBuilder,StringBuffer的区别

由上一篇我们知道,String是不能被继承,且char[] value也是被final修饰的,那也就意味着value是不可变数组,长度定义多少就是多少,不能扩容,只能初始化一次,但实际工作中难免有对字符串进行必要的操作,每次对字符串的操作并不是对原字符串的操作,而是在常量池中创建了新的字符串对象,再把原来的地址引用到该字符串上,不仅操作繁琐,且严重占用内存。 以String中substring()方法为例: 如果beginIndex=0则返回原串,否则创建一个新的字符串返回。 StringBui...

2020-07-05 12:29:40 202

原创 关于String类的一些浅谈

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2020-07-05 11:27:34 247

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除