- 博客(72)
- 收藏
- 关注
原创 正则表达式入门到熟练使用
1、正则表达式介绍用来处理复杂的字符串文本,例如查找、匹配、分割、替换等。大部分语言都有内置的支持,例如:Java、C++。我会使用工具RegexBuddy进行演示2、普通字符在正则表达式中,字母、数字、下划线、以及没有特殊定义的标点符号都是普通字符。正则表达式中的普通字符在匹配的时候会匹配一个与之相等的一个字符。上图中,上面的正则表达式 hello 就匹配到了对应下面字符...
2020-01-30 19:17:49
459
原创 Spring动态数据源与运行时动态添加数据源
1、多数据源与动态数据源当项目不只是要用到一个数据库的时候就需要使用到多个数据源了,这种场景很多,比如要查找的数据不在同一个数据库库中,或者是要做数据库读写分离。应对上面的问题主要有两种解决方法。第一种:在Spring中注入多个DataSource,然后根据不同的DataSource生成不同的SqlSessionFactory,把要操作不同数据库的mapper接口放在不同的包下,并且使用M...
2019-08-05 11:34:36
6732
9
原创 MySQL系列-优化之分页查询
1.分页查询之前先按索引排序我们经常会上一些小说网站看小说,他们总是会把最近更新了的小说放在最前面,也就是第一页,而很久没更新的就放在后面了。那么这样网站是如何实现的呢?我的猜想有一张小说表,表里面一个last_update表示最后更新字段,并且对这个字段建立了索引,按last_update从大到小排序之后再按需求的页面大小进行分页。那为什么分页查询总是要排序呢?由上面的例子可以看出,...
2018-07-30 15:26:33
1011
原创 MySQL系列-优化之join多表连接
1.先看一个单表案例有如下下数据表,只有主键id执行sql【explain select id,n1 from tb where n2='f' and n4>'c' order by n3 desc limit 1;】通过explain分析:不光是ALL全表扫描,而且还产生了一次内部排序using filesort,效率及其底下。那么如何建立索引呢?首先n2这个字...
2018-07-30 10:22:55
6985
原创 MySQL系列-优化之精准解读in和exists
1.解读in和exists这两个关键字的区别主要是在于子查询上面,in是独立子查询,exists是相关子查询,例如:用in查询有员工的部门 :select dept_name from dept where id in (select dept_id from emp);用exists查询有员工的部门:select dept_name from dept where exi...
2018-07-26 17:42:02
1580
原创 MySQL系列-优化之count()
1.count()函数的作用count()函数有两个作用,一是统计表数据的行数,二是统计某列非空值得数量。我们用count(*)来统计行数,当然这个*可以是任意的常量,比如 1 'x' 666 之类的。count(row)用来统计某列非空值得数量,这个row是列名。2.count(1)会比count(*)快吗?答案是不会,起码在我的mysql5.5上是这样的。【当MyS...
2018-07-24 09:40:52
1173
原创 MySQL系列-优化之like关键字
like关键字我们也是经常使用,用来模糊查询用户名,那么like如何进行优化呢?这篇博客就简单讨论一下like的优化,但是真实的生产环境要比这复杂多了。1.%号不放最左边先创建表和索引。然后进行查询【explain select * from tb where name like 'e%';】可以看到我们的查询使用上了idx_name这个索引,因为我们的 'e%' 规定了只...
2018-07-23 11:55:17
15084
4
原创 MySQL系列-优化之覆盖索引
1.什么是覆盖索引我们知道MySQL的B+Tree索引是用我们字段的数据来建立索引的,比如说我们的主键id字段,就是用所有的id来组织这颗索引树,如果我们再对name字段建立索引的话,这个二级索引就是用name字段的数据来组织这颗索引树。那么问题就来了,我们知道对于二级索引而言他的叶子节点存储了对应数据行的id(MySQL系列-B+Tree索引详解),也就是说最后我们的查询还是要通过主键id来...
2018-07-23 10:22:42
4487
4
原创 MySQL系列-优化之查询索引优化
这篇博客我们来谈谈如何正确使用索引以及正确建立索引,当然在开发当中情况比这个复杂多了,还要根据业务实际情况来,这篇博客就只能算是入门了,要想继续进阶的话可以和公司的DBA混个两年,前提是他愿意要带你玩。话不多说,进入正题。如果不了解explain执行计划可以看我之前的文章MySQL系列-优化之explain执行计划详解说明:我使用的是mysq5.5,windows10操作系统。可能实验测试...
2018-07-22 22:27:23
460
原创 MySQL系列-优化之explain执行计划详解
1.id介绍这个id不是主键的意思,他是用来标识select查询的序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序。会出现以下情况:id相同:按从上到下顺序执行id不同:id值越大,优先级越高,越先被执行id相同不同的同时存在:优先执行id值大的,如果id值相同,则按从上到下的顺序执行id为null表示是用来合并结果集的,在sql使用union关键字合并...
2018-07-07 17:37:42
6439
5
原创 MySQL系列-优化之再谈索引及explain简介
1.再谈索引前面我出了一篇关于索引的博客MySQL系列-B+Tree索引详解,索引太重要了可以多谈谈,简单来说索引是排好序的快速查找的数据结构。一般来说一张表建立的索引不要超过5个,数据规模没有达到百万级别,建不建索引也没太大区别。2.索引的优势索引具备两个优势一 、可以快速查找二、他已经按建立索引的字段排好序了。3.索引的劣势一、索引也是存储在磁盘中的,需要占的空间比...
2018-07-04 23:39:06
357
原创 MySQL系列-innoDB行锁详解
一直都很想讨论一下innoDB的行锁,但是看到了何登成大神的博客之后发现他的研究更深入说的更好,是一篇非常优秀的博客,但是需要对索引有比较深入的了解,因此看他的博客之前可以先看看我的一篇关于索引的文章MySQL系列-B+Tree索引详解。同时也深感数据库易学难精,一条SQL下去可能发生了很多你不知道的细节,要想学的很透彻靠博客和书籍是不够的,还是得直接阅读源码,这是一个非常漫长的路。下面是大神的博...
2018-07-01 21:28:17
1058
1
原创 MySQL系列-事务及乐观锁悲观锁
以下我们针对innoDB存储引擎进行分析,作为MySQL的默认存储引擎,innoDB越来越重要了。1.什么是事务数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全地不执行。比如说简单的转账事务包含两个SQL语句,一条是给转账人减钱,另一条是给被转账人加钱,这俩条SQL要么都执行,要么读不执行,不允许中间因为停电或者出...
2018-07-01 00:40:26
5310
1
原创 MySQL系列-MyISAM表锁详解
1.S锁和X锁S锁(共享锁)又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改,除非先获取A的X锁。X锁(排他锁)又称写锁,若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T...
2018-06-24 23:33:02
3036
1
原创 MySQL系列-查询语句练习题
先准备4张表:学生表老师表课程表成绩表1.查询选修课程'8105'且成绩在80到90之间的所有记录解析:简单题答案:select * from sc where cno='8105' and grade <=90 and grade >=80;2.查询成绩为79、89、或99的记录解析:简单题答案:2. select * from sc where grade in('79','89'...
2018-06-15 22:03:45
3223
原创 MySQL系列-查询语句
先准备两张表:tb1tb21.查询所有字段select * from tb1;2.查询指定的列select id from tb1;3.给表取别名 select id from tb1 t1; 或者 select id from tb1 as t1;4.给列取别名select id as ip from tb2 as t1 where t1.id=1;在sql语句里面要t1.id获取id这一列,但...
2018-06-11 22:50:28
426
原创 MySQL系列-详解DDL语句
DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。下面具体介绍各种常用DDL语句:1.数据库级别显示所有数据库:show databases;进入某个数据库:use db_name;创建一个数据库:create databse db_na...
2018-06-10 20:55:47
2484
原创 MySQL系列-使用JDBC操作MySQL常用数据类型
MySQL常用数据类型有这些 MySQL系列-常用数据类型1.插入和获取日期类型表的设计如下表中数据如下:如何从结果集中获取这些类型的数据呢?第一个date类型,我们可以使用getDate()方法获取。例如:Date d = resultSet.getDate(1);//返回 java.sql.Date 但是 java.sql.Date extends java.util.Date打印结果为201...
2018-06-10 11:31:38
883
原创 MySQL系列-正确使用原生JDBC
一般我们也很少原生JDBC,都是在ORM框架上做二次开发,确实框架帮我们做了很多事情,但是原生JDBC我们还是需要掌握的,网上很多代码为了省事写的很不规范,很容易误导第一次接触的人JDBC的人,接下来我详细解释一下使用原生JDBC的每个步骤,以及规范的编写代码,以MySQL为例。主要分为以下六个步骤:1.加载数据库驱动2.根据配置的信息(用户、密码等等)获取链接3.根据链接获取向数据库发送SQL语...
2018-06-08 14:45:10
684
原创 MySQL系列-常用数据类型
1.MySQL常用数据类型分类日期类型 数字类型(整数和小数) 字符类型 二进制类型2.日期类型MySQL数据类型字节数含义date3字节日期,格式:2014-09-18time3字节时间,格式:08:42:30datetime8字节日期时间,格式:2014-09-18 08:42:30timestamp4字节 格式和datetime一样但是它可以根据mysql设置的时区自动修改year1字节年份...
2018-06-08 01:18:11
480
原创 MySQL系列-B+Tree索引详解
1.什么是B+Tree?介绍B+Tree前我们先聊一下在数据结构课程当中学习到的其他树结构,二叉搜索树,平衡二叉树搜索树(红黑树、AVL树),不懂的同学可以先去了解一下。我们知道平衡二查搜索树是对二叉搜索树的一次改进,防止退化成线性表和树高度过高的情况,使其搜索单个值的复杂度为O(logN),这也就意味着在数据必须是可排序的,同时这也是Java的TreeMap(使用的是红黑树结构)不能存null值...
2018-05-31 21:41:13
2618
1
原创 MySQL系列-系统架构及存储引擎介绍
1.什么是MySQL?MySQL是一款性能高、成本低、可靠性好的最流行的开源数据库,被各大互联网公司使用,目前MySQL属于Oracle公司。同时MySQL也迎来了目前为止的最大版本更新MySQL8.0,就像Java8一样,MySQL直接从5.7跳到8.0了,同时也意味着这是一次革命性的版本。2.MySQL的架构图这是MySQL的基本架构图,其实很多架构都是相通的,这个就非常类似于MVC的架构,做...
2018-05-31 10:41:32
420
原创 网易2019实习生招聘编程题集合—牛牛的背包问题(分治+二分查找)
[编程题] 牛牛的背包问题时间限制:1秒空间限制:32768K牛牛准备参加学校组织的春游, 出发前牛牛准备往背包里装入一些零食, 牛牛的背包容量为w。牛牛家里一共有n袋零食, 第i袋零食体积为v[i]。牛牛想知道在总体积不超过背包容量的情况下,他一共有多少种零食放法(总体积为0也算一种放法)。输入描述:输入包括两行第一行为两个正整数n和w(
2018-05-08 12:10:13
1190
原创 网易2019实习生招聘编程题集合—矩形重叠(线段树)
[编程题] 矩形重叠时间限制:1秒空间限制:32768K平面内有n个矩形, 第i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])。如果两个或者多个矩形有公共区域则认为它们是相互重叠的(不考虑边界和角落)。请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠。输入描述:输入包括五行
2018-05-08 11:57:19
689
原创 算法总结—最大流
题目链接点击打开链接直接套模板就好了,如果求二分图的最大匹配的话可以设置一个超级原点和超级汇点把容量设为1的有向图,跑一次最大流即可。#include<iostream>#include<cstdio>#include<vector>#include<algorithm>using namespace std;//如果是无向图,建图时,把反...
2018-05-07 12:02:41
286
原创 算法总结—字符串匹配
字符串匹配的算法很多,我也只会两种特别典型的,KMP和AC自动机,KMP是单模式匹配是AC自动机的退化版,在单匹配的时候比AC自动机更快一点,实现更简单。AC自动机是多模式匹配,又快又牛逼。KMP模板如下:#include<iostream>#include<string>using namespace std;string pat,text;int Next[10...
2018-05-02 13:11:25
250
原创 算法总结—线段树
HDU1556点击打开链接比较简单的一道题,直接查询的时候从上到下把value累加就行。//hdu 1556 线段树 单点查询 #include#include#include#includeusing namespace std;int N;typedef struct node { int value; int left,right;}node;node tree
2018-04-22 12:02:01
285
原创 算法总结—最小生成树算法
克鲁斯卡尔算法(本质:边的排序+并查集判断是否成环)代码模板:typedef struct node { int u,v;//克鲁斯卡尔需要边 但是不需要图 int len;}node;vector edges;int n,m;int bs[105];//并查集 //findint ask(int ch) { if(bs[ch]==ch) { return ch
2018-03-04 19:02:37
352
原创 算法总结—最短路径算法
针对 优先级队列优化过的dijkstra算法 以及 SPFA算法 进行讨论一号选手:优先级队列优化过的dijkstra算法 先贴出该算法的实现模板:void dijkstra(int start) { for(int i=1;i<=T;i++) { dis[i]=inf; } dis[start]=0; priority_queue<node> pq; node...
2018-02-25 15:03:25
397
原创 JavaThink读书笔记
1:首先了解到的就是java泛型可以用来做元组,就行c++里的pair那样。public class pair { F first , S scond ...};2:泛型类或接口的继承或者实现,这个简单一点,如果不指定泛型的话,直接被当做object。类似这样的都可以很快的理解 A extends B ... 3:泛型的方法,泛型方法自己就有泛化能力,在返回值前加 or
2017-10-30 14:47:26
487
原创 HeadFirst设计模式读书笔记
简单的做下笔记,以后找起来方便。1 策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 设计原则:找出应用中可能需要变化的部分,把他们独立出来,不要和哪些不需要变化的代码混在一起。 设计原则:针对接口编程,而不是针对实现编程。 设计原则:多用组合,少用继承。 简单图片说明:
2017-10-29 14:10:28
528
原创 斐波那契第k项
按自己风格写的,以后就直接用了。#include#includeusing namespace std;typedef long long ll;const ll mod=1e9+7;// [fn] = [1,1] * [fn-1]// [fn-1] [1,0] [fn-2]// 以0作为第一项 ll m[3][3],g[3][3
2017-09-12 13:54:15
424
原创 HDU6201(树上dp)
给定的图有 n 个节点,n-1 条边,这个图是一棵树。任意一个节点都可以作为根节点,先处理叶子节点在处理上一层,这样处理下来就是一次后序dfs过程了。对于每个节点来说,有一个最优买入价格(分为两种情况,1:从该节点的所有子树中挑一个最优买入价格+该路径代价,2:从自己这里买),举个例子,设父节点为 u ,子树的根节点为 v,那么 u 的最优买入价格= 所有的 v 的最优买入价格 +
2017-09-12 12:02:54
864
4
原创 HDU6165(tarjan算法 强连通缩点,拓扑排序)
这里说明一下,tarjan是一个人,他发明的算法都以他命名,所以,tarjan后面要加后缀,不然不知道是哪个算法。一道比较标准的模板题,这里有篇很好的讲强 tarjan求连通分量 的博客点击打开链接我这里直接把新图构建出来了,然后拓扑排序即可,只要那一层出现两个入度为0的点即不能到达。#include#include#include#include#include#inclu
2017-08-30 10:36:53
652
原创 hdu6181 Two Paths
一道A*算法求第k短路的模板题,但是!我有话要说。可能因为学校老师比较水,我们讲迪杰斯特拉算法的时候老师讲了个n^2算法实现的,教科书上也他妈n^2,我也没细想后来比赛的时候我自己优化了,结果一百度发现直接优先级队列,elogn。。。。。伤心,错过一道水题。自己做了个模板,以后直接用。对了,A*算法确实有复杂的用法,但是我们这里只要利用他求第k短就行了。至于估值函数 F=G+H 这
2017-08-25 19:32:22
392
原创 网易2017春招笔试编程题 分饼干
编程题] 分饼干时间限制:1秒空间限制:32768K易老师购买了一盒饼干,盒子中一共有k块饼干,但是数字k有些数位变得模糊了,看不清楚数字具体是多少了。易老师需要你帮忙把这k块饼干平分给n个小朋友,易老师保证这盒饼干能平分给n个小朋友。现在你需要计算出k有多少种可能的数值 输入描述:输入包括两行:第一行为盒子上的数值k,模糊的数位用X表示,长度小于1
2017-08-21 16:04:08
760
原创 2017年校招全国统一模拟笔试(第四场)_逃离农场
[编程题] 逃离农场时间限制:2秒空间限制:32768K牛牛在农场饲养了n只奶牛,依次编号为0到n-1, 牛牛的好朋友羊羊帮牛牛照看着农场.有一天羊羊看到农场中逃走了k只奶牛,但是他只会告诉牛牛逃走的k只奶牛的编号之和能被n整除。你现在需要帮牛牛计算有多少种不同的逃走的奶牛群。因为结果可能很大,输出结果对1,000,000,007取模。例如n = 7 k =
2017-08-18 14:19:51
654
原创 2017 Multi-University Training Contest - Team 7 hard challenge
比赛的时候没有主攻这道题,其实这个题目的关键是那个 l * r 大家都没想出来,遗憾。角度排序,枚举角度即可。这里利用对称性进行了代码优化。 #include #include #include #include #include #include using namespace
2017-08-16 19:21:13
288
原创 腾讯2017秋招笔试编程题_编码
[编程题] 编码时间限制:1秒空间限制:32768K假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy 其中a的Index为0
2017-08-16 16:36:03
401
原创 网易2018校招内推编程题_小易喜欢的数列
[编程题] 小易喜欢的数列时间限制:1秒空间限制:32768K小易非常喜欢拥有以下性质的数列:1、数列的长度为n2、数列中的每个数都在1到k之间(包括1和k)3、对于位置相邻的两个数A和B(A在B前),都满足(A 例如,当n = 4, k = 7那么{1,7,7,2},它的长度是4,所有数字也在1到7范围内,并且满足第三条性质,所以小易是喜欢
2017-08-15 11:04:10
1205
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人