- 博客(73)
- 资源 (1)
- 收藏
- 关注
原创 [高性能MySQL]--查询缓存
简单点说,就是对于相同SQL可以跳过SQL解析和执行计划生成阶段,直接返回缓存的结果。也就是缓存完整的SELECT 查询结果。1. MySQL查询缓存:缓存存放在一个哈希表中,通过一个哈希值引用。哈希值包括:查询本身、当前查询数据库、客户端协议等等。 但是需要注意的是SQL语句的任何不同都会导致缓存命中失败(空格、注释、变量名不同)但是查询缓存也有严重的性能问题: (1)读查询之前必须检查是否命中
2017-02-28 13:38:58 600
原创 [高性能MySQL]-特定类型查询的优化
这一节主要是对于一些特定类型的优化查询: (1)count查询优化; (2)关联查询 (3)子查询 (4)GROUP BY 和 DISTINCT优化 (5)LIMIT 分页优化count查询优化COUNT()聚合函数的作用: (1)统计某一个列值的数量,也可以统计行数。需要注意的是统计列值时要求列值是非空的(不统计NULL)(2)统计结果集的行数。当列值不可能为空时
2017-02-28 11:33:39 635
原创 [MySQL]--查询性能分析工具-explain关键字
explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。explain的使用方法很简单,只需要在select查询语句前面加上explain关键字就行。下面给出一个实例:下面给出回显的数据的含义: (1)id:SELECT识别符,这是SELECT查询序列号。(2)select_type:select类型,它有以下几种...
2017-02-28 09:33:47 2849 3
原创 [MySQL]--查询性能优化
对于高性能数据库来说:库表结构优化、索引优化和查询优化需要齐头并进 1.为什么查询的速度会慢?查询其实就是一系列的子任务组成,优化查询实际上就是:要么消除一些子任务,要么减少子任务执行的次数。 2.慢查询基础:优化数据访问(1)是否向数据库请求了不需要的数据1)查询了不需要的数据: 比如我们通过select 查询出了大量的结果,获取前面的N行之后就关闭结果集,实际上MySQL会查询出所有的结果集
2017-02-28 00:45:10 488
原创 [b.d]--算法题-求含有min函数的栈的实现
带有min函数的栈1. 空间复杂度是O(n)这种情况没什么好说的,利用一个同等大的辅助栈,如果入栈数据的数据比辅助栈辅助栈栈顶数据小,就更新辅助栈数据,如果大于或则等于辅助栈的栈顶,就直接吧辅助栈的栈顶复制一次再入辅助栈就行了。这种方法比较简单,没什么说的,也不给出实现了,百度一大堆。2. 空间复杂度的优化版本前面的一种解法,存在大量的重复元素被插入辅助栈,辅助栈是可以进行优化的。下面给出优化算法
2017-02-27 15:40:46 527
原创 [b.d]--算法题-求万级别的电话号码的排序
先给出问题的描述以及解决思路:/** * Created by louyuting on 2017/2/24. * * Question: 对某公司员工的所有电话号码进行排序, 数据量级别明显是万级别的. * * category: 大数据量进行排序 * * solution: (1)首先根据电话号码的号段进行分类, 分为130-139, 150-159, 180-189 也就是30个
2017-02-27 13:41:30 2731
原创 [大型网站系统与Java中间件实践]--分布式服务框架(RPC)
本文涉及到的内容: (1)架构中引入服务框架的概念 (2)服务框架的设计与实现 (3)服务框架在实战中的优化 (4)为服务框架护航的服务治理 其实这一篇博客就是介绍分布式服务框架的设计与实现原理,当然只是一些原理的介绍,具体的实现还得我们自己去开发。本文思路来源于《大型网站系统与Java中间件实践》一书。1. 架构中引入服务框架的概念在最初的网站中,业务都是直接访
2017-02-26 20:39:28 2203
原创 [大型网站系统与Java中间件实践]--构建Java中间件的基础
本文主要包括以下内容: (1)Java中间件的定义与三大类型 (2)构建Java中间件涉及到的Java基础知识 (3)分布式系统中的Java中间件 本文涉及到的具体知识并不会在本文博客中给出,很多都在其余博客中进行了讲解,比如构建Java中间件涉及到的Java基础知识,本文只是做一个概括。1.Java中间件的定义与三大类型在前面我们讲了大型网站的发展路程,从数据库的读写
2017-02-26 15:34:15 1141
原创 [大型网站系统与Java中间件实践]--大型网站系统的演进
今天读了下 《大型网站系统与Java中间件实践》 这本书,然后对大型网站系统的演进做了一个演进,画了一个思维导图,分享如下:具体的图片如果不清晰可以点击这个链接:
2017-02-26 14:37:56 748
原创 Java中网络IO的实现方式-BIO、NIO、AIO
在网络编程中,接触到最多的就是利用Socket进行网络通信开发。在Java中主要是以下三种实现方式BIO、NIO、AIO。 关于这三个概念的辨析以前一直都是好像懂,但是表达的不是很清楚,下面做个总结完全辨析清楚。1. BIO方式首先我用一个较为通俗的语言来说明: BIO 就是阻塞IO,每个TCP连接进来服务端都需要创建一个线程来建立连接并进行消息的处理。如果中间发生了阻塞(比如建立连
2017-02-26 13:25:33 2755
原创 [MySQL]--索引操作常见的SQL
这篇博文主要是做一些记录,关于MySQL中索引操作的一些常用命令的使用:1. 查看某个表的索引show index from table_name;show keys from table_name;2. 创建索引-- index_name可以省略, 创建普通索引ALTER TABLE table_name ADD INDEX index_name (column_list,column_li
2017-02-25 16:23:48 469
原创 [高性能MySQL]-创建高性能的索引
本文是关于创建索引的的内容: (1) 索引的类型 (2)索引的优点 (3)优化索引的策略这里给出一个索引的思维导图: 索引是存储引擎用于快速找到记录的一种数据结构。索引是对 查询性能优化 最有效的手段了,索引能够轻松将查询性能提升几个数量级。索引我们一般都是对某一列加索引。存储引擎先在索引中找到对应值,然后根据匹配的索引记录上的rowid找到对应的数据行。比如运行如下查询语句:
2017-02-25 00:19:59 804
原创 [高性能MySQL]-存储引擎MyISAM与InnoDB基本区别
这篇博文主要是总结关于MyISAM与InnoDB的区别InnoDB和MyISAM是使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为: (1)MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持事务。(2)InnoDB支持数据行锁定;MyISAM不支持行锁定,只支持锁定整个表。这里需要注意的是InnoDB表的行锁也不是绝对的,假如在执行一个SQ
2017-02-24 20:33:49 395
原创 [高性能MySQL]-事务与隔离界别
本文主要包括一下内容: (1) 事务的概念与ACID (2)事务的隔离级别 (3)MySQL中的事务1. 事务与ACID理解事务是其它高级概念的基础。 事务:事务就是一组原子性的SQL查询,或则说是一个独立的执行单元,要么全部成功,要么全部失败,如果失败了就回滚到事务之前的状态。下面来理解一下数据库中关于ACID的概念:原子性、一致性、隔离性、持久性。 (1)原子性:事务
2017-02-24 20:17:18 940
原创 [高性能MySQL]--MySQL的架构与概念
1.MySQL的逻辑架构 最上面不是MySQL特有的,所有基于网络的C/S的网络应用程序都应该包括连接处理、认证、安全管理等。中间层是MySQL的核心,包括查询解析、分析、优化和缓存等。同时它还提供跨存储引擎的功能,包括存储过程、触发器和视图等。最下面是存储引擎,它负责存取数据。服务器通过storage engine API可以和各种存储引擎进行交互。1.1、查询优化和执行(Optimizatio
2017-02-20 09:34:04 504
原创 [netty]--Reactor线程模型以及在netty中的应用
说道netty的线程模型,我们第一反应就是经典的Reactor线程模型,下面我们就来一起探讨一下三种经典的Reactor线程模型: 这里我们需要理解的一点是Reactor线程模型是基于同步非阻塞IO实现的。对于异步非阻塞IO的实现是Proactor模型。 本文主要包括 (1)Reactor单线程模型 (2)Reactor多线程模型 (3)主从Reacto
2017-02-19 17:16:46 7862 1
原创 [netty]--最通用TCP黏包解决方案:LengthFieldBasedFrameDecoder和LengthFieldPrepender
前面已经说过: TCP以流的方式进行数据传输,上层应用协议为了对消息进行区分,往往采用如下4种方式。 (1)消息长度固定:累计读取到固定长度为LENGTH之后就认为读取到了一个完整的消息。然后将计数器复位,重新开始读下一个数据报文。 (2)回车换行符作为消息结束符:在文本协议中应用比较广泛。 (3)将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结...
2017-02-19 15:02:11 37287 10
原创 [netty核心类]--ChannelPipeline和ChannelHandler源码分析
本文主要包括: (1)ChannelPipeline的功能说明和源码分析; (2)ChannelHandler的功能说明和源码分析;在netty中的ChannelPipeline和ChannelHandler的机制就很类似于J2EE中的Servlet和Filter过滤器,这类拦截器就很类似于责任链模式的一种变形。核心就是事件的拦截和用户业务逻辑的定制。netty中channel过滤器实
2017-02-19 13:27:06 1742
原创 [netty核心类]--Channel和Unsafe类
主要内容: (1)Channel 功能说明 (2)Unsafe 功能说明 (3)Channel的主要实现子类源码分析 (4)Unsafe主要实现子类源码分析1.Channel功能说明channel是netty网络IO操作抽象出来的一个接口,主要功能有:网络IO的读写,客户端发起连接、主动关闭连接,链路关闭,获取通信双方的网络地址等。下面分类进行介绍:网络IO操作 (1)C
2017-02-18 00:59:50 3853 1
原创 [m.t]--算法-求数组中最接近0的子序列
Question:求一个无序数组中最近接0的子序列。1. 暴力算法:求最接近于0的子数组序列,那么数组中的任何一个元素都有可能成为这个子数组的起点,那么我们可以使用双重for循环求出以每个元素为开头的最接近0的子数组。其实就是两轮for循环,具体的算法就不给出了。2. 优化算法:优
2017-02-17 12:20:52 1677
原创 [剑指Offer]-求序列中最小的k个数
问题描述: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。解法一:利用快速排序,快速排序每轮排序 可以找出基准的位置,基准前面的序列都小于基准,右边的都大于基准。利用这个特性求解。但是这种解法会改变数组的结构。暂时先不给出这种实现的源码。解法二:适用于大数据下比如在5000千万个数据下,找出这5000千万个数据中最下的1
2017-02-15 00:48:25 755 1
原创 J.U.C--ThreadLocal的应用与使用原理
今天在电面网易游戏的时候,面试官问到了ThreadLocal的作用,感觉自己答的不好,只答除了作用,关于ThreadLocal底层的具体实现并没有说明白,于是赶忙看了下源码,从源码层次理解一下ThreadLocal的实现原理。1. 首先说说ThreadLocal有什么作用?ThreadLocal是为解决多线程环境下变量的并发访问提出的另外一种思路(相对于加锁来说)。当使用ThreadLocal维
2017-02-14 20:17:25 587
原创 3. [netty-RPC]--服务端程序设计
下面一步步讲解服务端程序的设计,先借用前面一节关于服务端程序设计流程图: 1. 业务核心线程池的实现在服务端的线程池,我自己基于JDK的ThreadPoolExecutor做了一个自我定制,实现了核心业务线程池,实现源码如下:package com.netty.rpc.core;import java.util.concurrent.Executor;import java.util.concu
2017-02-10 17:24:23 786
原创 2. [netty-RPC]--消息的请求、响应与接口和实现的映射容器
首先来说说服务端和客户端交互的中介,也就是消息的请求和响应的定义 以及 服务端对接口和实现的映射容器。RPC请求消息结构先给出源码:package com.netty.rpc.model;import org.apache.commons.lang3.builder.ReflectionToStringBuilder;import java.io.Serializable;/** * 消息的请求
2017-02-10 15:04:11 1456
原创 [leetcode-动态规划]--96. Unique Binary Search Trees
Question 96. Unique Binary Search Trees Given n, how many structurally unique BST’s (binary search trees) that store values 1…n? For example, Given n = 3, there are a total of 5 unique BST’s.
2017-02-10 14:05:06 721
原创 1. 基于netty的高性能RPC服务器技术简介
RPC(Remote Procedure Call Protocol) 远程过程调用协议,是一种通过网络,向远程计算机程序上请求服务,而不必了解底层网络技术的协议。简单点说就是客户端在不必知道调用细节的前提下,调用远程计算机上运行的某个对象,使用起来就像调用本地的对象一样。目前典型的RPC框架有Facebook开源的Thrift、阿里巴巴的Dubbo等等。RPC针对网络协议和网络IO是透明的,对于调
2017-02-09 23:53:04 962
原创 [leetcode-二叉查找树的修正]--99. Recover Binary Search Tree
Question 99. Recover Binary Search Tree Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Note: A solution using O(n) sp
2017-02-09 15:15:53 540
原创 [leetcode-二叉树层次遍历并统计每层节点数]--103. Binary Tree Zigzag Level Order Traversal
Question 103. Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next leve
2017-02-09 14:10:30 1862
原创 [leetcode-二叉树层次遍历并统计每层节点数]--107. Binary Tree Level Order Traversal II
Question 107. Binary Tree Level Order Traversal II Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).
2017-02-09 13:35:09 1632
原创 [leetcode-二叉树层次遍历并统计每层节点数]--102. Binary Tree Level Order Traversal
Question 102. Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level). For example: Given binary
2017-02-09 13:22:07 2981
原创 [leetcode-二叉树后序遍历]--145. Binary Tree Postorder Traversal
Question 145. Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes’ values. For example: Given binary tree {1,#,2,3}, 1 \ 2
2017-02-09 11:05:10 678
原创 [leetcode-二叉树中序遍历]--94. Binary Tree Inorder Traversal
Question 94. Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes’ values. For example: Given binary tree [1,null,2,3], 1 \ 2
2017-02-09 11:00:47 583
原创 [leetcode-二叉树先序遍历]--144.Binary Tree Preorder Traversal
Question 144. Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes’ values. For example: Given binary tree {1,#,2,3}, 1 \ 2
2017-02-09 10:53:29 989
原创 [排序算法]--桶排序的Java实现
今天在刷leetcode的时候,在41题 First Missing Positive 发现了在排序算法中还有一个桶排序,顺便做个总结。 桶排序关于桶排序先做几点说明: 1)桶排序是稳定的; 2)桶排序是常见排序算法中最快的一种,大多数情况下比快排和归并排序还要快 3)桶排序非常快但是也非常消耗空间,典型的以空间换时间,基本上是最耗内存的一种排序算法。桶排序中:无序数组有个要求,
2017-02-08 21:09:04 10913 11
原创 Java的static关键字
这篇博文详细的总结Java中 static 关键字的作用。 1) static 变量 2)static 方法 3)static 代码块 4)static 静态内部类
2017-02-08 20:20:35 326
原创 Java的数组
本文主要说明关于Java的以下问题: (1) 数组的初始化 (2) 二维数组获取行数和列数 (3)返回数组1. 数组的初始化对于数组的定义有两种形式:int[] a1;//或则是:int a1[];在Java中我们更加倾向于使用第一种。 因为它表示是一个数组的数据类型。编译器在定义时不允许指定数组的大小,因为在定义时并没有给数组分配任何的空间,只是定义了一个对数组的引用。 对
2017-02-08 19:24:45 436
原创 [leetcode-查找]--74. Search a 2D Matrix
Question 74. Search a 2D Matrix Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: (1) Integers in each row are sorted from left
2017-02-08 16:53:01 461
原创 [leetcode-查找]--35. Search Insert Position
Question 35. Search Insert Position Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You
2017-02-08 16:01:29 430
原创 [查找算法]--二分查找的Java实现
二分查找算法思想:又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。下面给出两种实现方式: 1. 非递归实现:/** * 非递归方式查找 * @param array * @param a *
2017-02-08 14:57:22 1634
原创 [leetcode-二分查找]--34. Search for a Range
Question 34. Search for a Range Given an array of integers sorted in ascending order, find the starting and ending position of a given target value. Your algorithm’s runtime complexity must be i
2017-02-08 14:49:43 844
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人