- 博客(67)
- 收藏
- 关注
原创 如何编写快速高效的SQL查询(四)——优化特定类型的查询与样例
这一节,我们将介绍如何优化特定类型的查询。本节介绍的多数优化技巧都和特定的版本有关,所以对于未来MySQL的版本未必适用。毫无疑问,某一天优化器自己也会实现这里列出的部分或者全部优化技巧。
2023-05-29 14:42:30
690
原创 如何编写快速高效的SQL查询(三)——高性能索引策略与样例
是时候开始讨论使用索引了!正确地创建和使用索引是实现高性能查询的基础,现在我们一起来看看如何真正地发挥这些索引的优势。
2023-05-26 16:25:30
1415
原创 如何编写快速高效的SQL查询(二)——为什么查询速度会慢与优化数据访问样例
我们现在已经知道MySQL优化器帮我们做了什么了,在尝试编写快速的查询之前,需要清楚一点,真正重要的是响应时间。如果把查询看作一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数,要么让子任务运行得更快。
2023-05-25 11:44:17
925
原创 如何编写快速高效的SQL查询(一)——MySQL8.0优化器查询优化处理与样例
当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行。
2023-05-24 18:00:46
737
转载 一种基于Myers‘diff算法的文本比对工具的实现
github实现效果源码diff.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD> <TITLE>文本比较</TITLE> <SCRIPT SRC="javascript/diff_match_patch.js"></SCR
2022-03-08 18:10:51
415
原创 数据中台概述
数据中台定义数据中台概念由阿里提出,即实现数据分层和水平解耦,沉淀公共数据能力,提供数据模型、数据服务与数据开发功能。数据中台到底是什么?是一种产品?还是一种解决方案型产品?数据中台其实更像一种企业架构方法论,是以"共享"(Sharing)为目标的"业务流程再造"(Business Process Re-engineering)和"企业组织重构"(Organizational Restructuring)过程。数据中台不单单指系统或者工具,而是一个职能部门,通过一系列平台、工具、流程、规范来为整个组织
2022-01-11 11:28:28
7489
1
原创 Zookeeper源码分析
一、算法基础Zookeeper 是如何保证数据一致性的?1.1 拜占庭将军问题拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。1.2
2021-09-09 11:35:54
1180
原创 Zookeeper入门教程
一、Zookeeper 入门1.1 概述Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。Zookeeper工作机制1.2 Zookeeper特点1.3 数据结构ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个ZNode 都可以通过其路径唯一标识。1.4 应用场景提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服
2021-09-07 17:41:19
1942
原创 Elasticsearch入门教程
一、Elasticsearch 概述1.1 Elasticsearch 是什么The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到
2021-08-10 23:49:27
1179
1
原创 Nginx入门教程
一、Nginx简介1.1 概述Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,nginx 的并发能力在同类型的网页服务器中表现较好,中国大陆使用 nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等1.2 Nginx 作为 web 服务器Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专
2021-08-08 23:41:43
1698
3
原创 使用树莓派搭建低成本NAS
一、背景在公司办公有时需要访问家里电脑里的数据或想要将公司电脑中的数据传输到家中,了解相关技术后有了搭建NAS想法。X宝一搜,动辄4位数价格的NAS和近百分贝的噪音让我望而却步,又不想买矿渣。我的日数据量较少,买个NAS放家里宛如大炮打蚊子。二、需求支持浏览器访问轻量化上传/下载速度够快足够安静价格尽量低功率尽量小三、搭建私人网盘经过需求分析后,我决定使用树莓派搭建私人网盘。1、安装CloudreveCloudreve是一个国人开发的网盘系统,能以最低的成本快速搭建公私兼备的网盘
2021-07-05 09:50:02
1933
原创 Typora——强大又简洁的Markdown编辑器
Typora 是一款支持实时预览的 Markdown 文本编辑器。它有 OS X、Windows、Linux 三个平台的版本,并且完全免费。Typora 的极简的设计理念是我最喜爱的地方。它的功能之强大、设计之冷静、体验之美妙、理念之先进,我认为值得所有笔记应用厂商学习。正如Typora官网首页所说的「A truly minimal markdown editor.New way to read &write markdown.」Typora官网地址https://www.typor
2021-07-02 14:57:54
684
原创 免费临时网页邮箱(可丢弃式邮箱)
1.10分钟邮箱https://10minutemail.net/?lang=zh-cn2.临时邮箱https://www.linshiyouxiang.net/3.临时匿名电子邮件https://temp-mail.org/zh/
2021-07-01 16:20:57
3596
原创 从零开始的树莓派生活(树莓派4B的组装与系统安装)
一、组装从X宝等平台购买的树莓派除了主板外一般带有散热片、电源、风扇、外壳等配件,不同店家不同型号的套装稍有不同,以我自己购买的树莓派4B为例,组装步骤大致分为:1.安装散热片2.安装亚克力外壳亚克力外壳一共九层,从下到上包含主板一共十层,按序拼接即可。3.安装小风扇根据树莓派4b的引脚图可知,小风扇的红线应接在第4个针脚的位置,黑线接在第六根针脚的位置。随意插接有可能导致主板短路。4.完成二、安装系统树莓派无内置存储空间,因此我们需要准备一张SD卡存放树莓派系统。推荐容量32G
2021-06-30 00:26:18
9002
6
原创 Linux sftp远程连接
简介SFTP(SSH File Transfer Protocol)安全文件传送协议。有着与FTP几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。SFTP与FTP主要区别FTPSFTP链接方式使用TCP的21端口通过SSH协议(TCP端口22)安全性明文传输使用加密传输认证信息和传输的数据效率较高较低SFTP常用命令登录以root用户登录sftp sftp xxx.xxx.xxx.xxx
2021-06-29 16:42:35
12312
原创 在Windows中使用Linux(WSL)
在编程时很多时候我们需要使用Linux环境,但是由于开发工具等程序在Windows环境中也不能抛弃Windows。如果使用双系统来回切换非常麻烦,用虚拟机又存在性能损耗。有没有什么办法能在Windows中运行Linux环境的同时不会造成性能损耗呢?有的!WSL(Windows Subsystem for Linux) 适用于Linux的Windows子系统WSL项目由微软公司开发,集成与Windows系统中,因此不需要我们安装任何第三方软件来提供支持,这也是它的优点之一。一、配置环境要求:WSL
2021-06-28 18:00:00
3418
3
原创 select、poll、epoll区别
selectpollepoll操作方式遍历遍历回调底层实现数组链表红黑树IO效率每次调用都进行线性遍历,时间复杂度为O(n)每次调用都进行线性遍历,时间复杂度为O(n)事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪fd放到readyList里面,时间复杂度O(1)最大连接数1024(x86)或2048(x64)无上限无上限fd拷贝每次调用select,都需要把fd集合从用户态拷贝到内核态每次调用poll,都需要把f...
2021-01-12 14:43:49
92
原创 MySQL学习笔记
一、索引B+ Tree 原理1. 数据结构B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 keyi 且
2021-01-12 09:59:08
235
原创 JVM学习笔记
一、运行时数据区域程序计数器记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。Java 虚拟机栈每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小,在 JDK 1.4 中默认为 256K,而在 JDK 1.5+ 默认为 1M:java -Xss2M HackTheJa
2021-01-11 09:30:47
116
原创 引用类型
一、强引用之前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。比如下面这段代码中的object和str都是强引用:Object object = new Object();String str = “StrongReference”;如果一个对象具有强引用,那就类似于必不可少的物品,不会被垃圾回收器回收。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不回收这种对象。public class StrongReference {public
2021-01-08 08:45:15
353
原创 物理分页与逻辑分页
一 概述1.物理分页物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,Oracle的rownum。不同数据库使用不同关键字。程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。2.逻辑分页逻辑分页依赖的是程序员编写的代码,所有数据库都统一。数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的
2021-01-06 17:14:13
289
原创 在idea中使用log4j输出日志
1.创建Maven工程2.在pom.xml文件中添加依赖 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>3.在resources目录下新建log4j.properties配置
2021-01-04 08:37:47
1076
2
转载 最短包含字符串的长度
给定字符串str1和str2,求str1的字串中含有str2所有字符的最小字符串长度。输入描述:输入包括两行,第一行一个字符串,代表str1,第二行也是一个字符串,代表str2。输出描述:输出str1的字串中含有str2所有字符的最小字符串长度,如果不存在请输出0。示例1输入abcdeac输出3说明“abc”中包含“ac”,且“abc”是所有满足条件中最小的。示例2输入12345344输出0public class MinLength { public s
2020-12-24 21:59:59
1154
1
原创 数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32
2020-12-16 11:02:00
102
原创 二进制中1的个数
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 0
2020-12-16 10:18:26
180
原创 剪绳子 II
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1
2020-12-16 10:01:52
95
原创 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4
2020-12-15 20:27:46
96
原创 kill与kill -9的区别
kill pidkill pid的作用是向进程号为pid的进程发送SIGTERM(这是kill默认发送的信号),该信号是一个结束进程的信号且可以被应用程序捕获。若应用程序没有捕获并响应该信号的逻辑代码,则该信号的默认动作是kill掉进程。这是终止指定进程的推荐做法。kill -9 pidkill -9 pid则是向进程号为pid的进程发送SIGKILL(该信号的编号为9),SIGKILL既不能被应用程序捕获,也不能被阻塞或忽略,其动作是立即结束指定进程 。通俗地说,应用程序根本无法“感知”SIGK
2020-12-10 19:06:40
688
1
原创 jdk7与jdk8的HashMap区别
1.jdk7中使用数组+链表实现,jdk8使用数组+链表+红黑树实现(解决链表过长问题)。2.新节点插入链表的顺序不同,jdk7是头插法,jdk8是尾插法。3.hash算法简化。jdk8以后引入红黑树后大大提高了遍历速度,继续采用复杂的hash算法也就没太大意义,反而还要消耗性能4.resize逻辑修改(jdk7会出现死循环,jdk8不会)。...
2020-12-10 10:54:07
251
原创 Mybatis一级缓存和二级缓存
1.一级缓存(默认开启)Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存。 一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,只执行一次SQL,使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果之前没有执行commit操作,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。每次sqlS
2020-12-10 10:37:56
74
原创 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:比较,加入,最后把剩下的链表一次性加入/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *
2020-12-09 11:46:34
109
原创 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:模拟,新链表的值=两链表值之和+进位,注意一下链表末尾进位情
2020-12-09 11:22:18
135
原创 缩写校验
给定⼀个⾮空字符串 s 和⼀个缩写 abbr,请校验它们是否匹配。 假设字符串中只包含⼩写字⺟,缩写中只包含⼩写字⺟和数字。缩写中的数字 表示其缩略的字符数;连续多位数字表示⼀个多位数。例如,字符串 “word” 的缩写有且仅有以下这些:[“word", “1ord”, “w1rd”,“wo1d”, “wor1”, “2rd”, “w2d”, “wo2”, “1o1d”, “1or1”, “w1r1”, “1o2”, “2r1”,“3d”, “w3”, “4"]。例 1:输⼊:s = “inte
2020-12-08 21:16:40
314
原创 合并时间区间
给定⼀个按开始时间从⼩到⼤排序的时间区间集合,请将重叠的区间合并。时间区间集合⽤⼀个⼆维数组表示,⼆维数组的每⼀⾏表示⼀个时间区间(闭区 间),其中 0 位置元素表示时间区间开始,1 位置元素表示时间区间结束。例 1:输⼊:[ [1, 3], [2, 6], [8, 10], [15, 18] ]返回: [ [1, 6], [8, 10], [15, 18]]解释:时间区间 [1, 3] 和 [2, 6] 有部分重叠,合并之后为 [1, 6]例 2:输⼊:[[1, 4], [4, 5]]
2020-12-08 20:39:16
484
原创 机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m = 3
2020-12-07 20:37:24
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人