- 博客(84)
- 资源 (7)
- 收藏
- 关注
原创 建索引的原则-以innodb为例
一、写在前面 随着开发、测试任务进入尾声,大家都在整理一些项目发布前的一些准备工作,其中一个重要的工作就是为之前写的一些sql语句建立索引,这高并发、高访问量的环境下是非常有必要的,建立一个好的索引能够极大地提高sql语句的查询效率,那么问题来了,到底什么是索引,怎样才能建立一个好的索引呢?本文以mysql Innodb存储引擎为例,结合实际的项目来看一下,如何建立一个好的而索引。 二
2015-08-16 12:01:31
2376
原创 提高数据库查询速度的几个思路
提高数据库查询速度的几个思路 :1、缓存,在持久层或持久层之上做缓存;2、数据库表的大字段剥离,保证单条记录的数据量很小; 3、恰当地使用索引;4、必要时建立多级索引; 5、分析Oracle的执行计划,通过表数据统计等方式协助数据库走正确的查询方式,该走索引就走索引,该走全表扫描就走全表扫描; 6、表分区和拆分,无论是业务逻辑上的拆分(如一个月一张报表、分库)还是无业务含义的分区(如根据ID取模分
2015-07-08 23:05:01
3094
原创 Direct Buffer vs. Heap Buffer
1、 劣势:创建和释放Direct Buffer的代价比Heap Buffer得要高; 2、 区别:Direct Buffer不是分配在堆上的,它不被GC直接管理(但Direct Buffer的JAVA对象是归GC管理的,只要GC回收了它的JAVA对象,操作系统才会释放Direct Buffer所申请的空间),它似乎给人感觉是“内核缓冲区(buffer in kernel)”。Heap Buffe
2015-06-09 12:49:48
1562
转载 PreparedStatement与Statement
PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时PreparedStatement还
2015-06-09 11:24:03
1214
原创 乐观锁与悲观锁及应用举例
最近因为在工作中需要,学习了乐观锁与悲观锁的相关知识,这里我通过这篇文章,把我自己对这两个“锁家”兄弟理解记录下来; - 悲观锁:正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)的修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即
2015-01-25 21:15:40
7846
原创 MySQL中采用类型varchar(20)和varchar(255)对性能上的影响
1.MySQL建立索引时如果没有限制索引的大小,索引长度会默认采用的该字段的长度,也就是说varchar(20)和varchar(255)对应的索引长度分别为20*3(utf-8)(+2+1),255*3(utf-8)(+2+1),其中"+2"用来存储长度信息,“+1”用来标记是否为空,加载索引信息时用varchar(255)类型会占用更多的内存; (备注:当字段定义为非空的时候,是否为空的标记将
2014-12-17 16:27:49
12047
转载 介绍Amazon分布式存储引擎Dynamo
Dynamo 是 Amazon 公司的一个分布式存储引擎。 那么这个什么引擎又是什么?首先,假设一个场景,你的网站要存储用户登陆的IP。这个问题怎么解决呢?传统的方法是用数据库。数据库提供了方便的操作接口,复杂的查询能力以及事物的保证。好,现在假设大家都很喜欢你的网站,访问的人越来越多。一个数据库已经处理不过来了。于是你安装了3台数据库主机,把用户分成了三类(男人,女人,IT人;总是有某种方法把用
2014-10-26 21:44:37
3047
原创 mysql子查询慢的问题
当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现“DEPENDENT SUBQUERY”时,你要注意了,你已经掉入了mysql子查询慢的“坑"。。。下面我们来看一个具体的例子 有这样一条查询语句: SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid
2014-10-25 21:39:20
2933
原创 跨库事务一致性问题的解决方案(例)
我们看一个跨库事务一致性的问题,这是一个简单的场景:有新老两个系统,对应新老两套数据库,新数据库采用分库分表的设计,考虑到项目发布之后可能存在风险,采取了新老系统的并行方案。这个系统的业务比较简单:接收来自外部的数据,然后对数据进行核对处理。为了保证新老系统能够并行,在接收数据的时候必须实现双写方案,从而导致了跨库事务的一致性问题。 下面一幅图展示这一简单的场景 这里面会存在一个小问题
2014-10-09 17:52:56
9316
原创 JAVA动态代理
JAVA的动态代理代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种
2014-05-15 13:23:56
1664
转载 常见面试之机器学习算法思想简单梳理
前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大。 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺
2013-11-12 22:11:09
4901
原创 vmstat命令
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。一般vmst
2013-09-08 13:14:21
1593
原创 C语言中的内存泄露,如何避免,如何检测
有些程序并不需要管理它们的动态内存的使用。当需要内存时,它们简单地通过分配来获得,从来不用担心如何释放它。这类程序包括编译器和其他一些运行一段固定的(或有限的)时间然后终止的程序。当这种类型的程序终止时,所有内存会被自动回收。细心查验每块内存是否需要回收纯属浪费时间,因为它们不会再被使用。其他程序的生存时间要长一点。有些工具如日历管理器、邮件工具以及操作系统本事经常需要数日及至数周连续运行,并
2013-09-08 13:09:28
8749
原创 集成学习---bagging and boosting
作为集成学习的二个方法,其实bagging和boosting的实现比较容易理解,但是理论证明比较费力。下面首先介绍这两种方法。所谓的集成学习,就是用多重或多个弱分类器结合为一个强分类器,从而达到提升分类方法效果。严格来说,集成学习并不算是一种分类器,而是一种分类器结合的方法。1.baggingbagging算是很基础的集成学习的方法,他的提出是为了增强分类器效果,但是在处理不平衡问题上
2013-08-30 16:38:32
2144
原创 Boosting算法简介
一、Boosting算法的发展历史 Boosting算法是一种把若干个分类器整合为一个分类器的方法,在boosting算法产生之前,还出现过两种比较重要的将多个分类器整合为一个分类器的方法,即boostrapping方法和bagging方法。我们先简要介绍一下bootstrapping方法和bagging方法。 1)bootstrapping方法的主要过程 主要步骤:
2013-08-30 16:28:43
4430
原创 Quasi-Newton Method--LBFGS
Quasi-Newton Method Quasi-Newton Method每一步计算过程中仅涉及到函数值和函数梯度值计算,这样有效避免了Newton Method中涉及到的Hessian矩阵计算问题。于Newton Method不同的是Quasi-Newton Method在每点处构建一个如下的近似模型: 从上面的近似模型我们可以看出,该模型用B_k代替了Newton Metho
2013-08-30 16:22:12
4145
转载 Map/Reduce 算法面试问题列表
1. Map/Reduce方式实现矩阵相乘http://www.norstad.org/matrix-multiply/index.html 2. Map/Reduce方式实现PageRank算法http://blog.ring.idv.tw/comment.ser?i=369http://code.google.com/p/map-reduce-assig
2013-08-27 11:05:28
2203
原创 C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i;
2013-08-25 20:18:59
1358
原创 【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
【C/C++】内存分配函数:malloc,calloc,realloc,_allocamalloc:原型:extern void *malloc(unsigned int num_bytes); 头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc
2013-08-23 10:11:18
5522
原创 内存对齐与ANSI C中struct型数据的内存布局
当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。 首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段的首
2013-08-13 12:07:19
2364
原创 返回指向局部变量的指针或引用的带来的问题讨论
返回局部变量没问题 如果返回局部变量有问题,函数的意义还有吗? 全局变量还用返回吗? 返回指向局部变量的指针才有问题, 函数退栈之后,局部变量消失, 指针将指向未知区域,所以出现问题。返回局部变量的引用也是绝对不可以的。 引用只是变量的一个别名,变量本体都不存在了,引用当然也没有任何意义。 还有,如果是堆空间,可以返回,即在函数中用new申请的空间,是可以返回的。
2013-08-10 19:31:06
8809
7
原创 进程、过程调用、函数调用、堆、栈
我们在这里拿最典型且开源的Unix/Linux平台举例:1. 进程进程:程序的一次动态执行过程,是操作系统管理系统活动的基本单位。从内核的角度看,进程是系统中的一个对象,它对应一个程序的执行流并且是一个资源分配(包括内存和文件等)的单位。在Linux中,一个进程包括四个部分内容:指令段(正文段):存放程序的CPU指令代码。用户数据段:存放程序所需要的数据。用户堆栈段:程序执行所需要的堆
2013-08-10 18:08:42
1880
原创 C++初始化列表
何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的克访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。struct foo{ string name ; int id ; foo(
2013-08-07 23:13:00
1251
原创 为什么静态成员必须在类外初始化
为什么静态成员不能在类内初始化在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样。class A{ private: static int count ; // 类内声明};int A::count = 0 ; // 类外初始化,不必再加static关键字为什么?因为静态成员属于整个类,而不属于某个对象,如
2013-08-07 23:10:34
1658
原创 海量数据处理
海量数据处理是基于海量数据上的存储、处理、操作。 所谓海量,就是数据量很大,可能是TB级别甚至是PB级别,导致无法一次性载入内存或者无法在较短时间内处理完成。面对海量数据,我们想到的最简单方法即是分治法,即分开处理,大而化小,小而治之。我们也可以想到集群分布式处理。1 海量数据的存储:为大数据分析做准备传统关系型数据库
2013-08-02 18:56:54
1594
原创 Bit Map解析
1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这
2013-08-02 18:53:17
1688
原创 经典排序算法实现
排序算法是经常使用的算法,在STL中也有一个比较牛X的快速排序(sort),但是我们不能只会调用sort呀!?作为一个好学的同学,我们要知道各种排序的内部是怎么实现滴~~~提到排序算法我们要知道两个经常提到的概念:(1)排序算法的稳定性:所谓“稳定性”是指,在待排序数组出现的两个相同的元素,排序之后相对维持保持不变。比如:待排序数组为arr[] = {1,4,3,1},排序之后元素变为ar
2013-08-01 22:34:43
952
原创 C++new/delete相关知识点详解
每个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或堆(heap)。C语言用一堆标准库函数malloc和free在自由存储区中分配存储空间,而C++则用new和delete表达式实现相同的功能。 一、new和delete创建和释放动态数组:数组类型的变量有三个重要的限制:数组长度固定,在编译时必须知道其长度,数组只在
2013-07-31 23:17:15
1954
原创 C++检查内存溢出的方法
一: ps vx| grep 进程号 ----看size和rss段是否在增加。 方法二:http://www.ibm.com/developerworks/cn/aix/library/au-mallocdebug.html如果是AIX服务器 :引言在编写应用程序时进行动态内存分配是非常必要的。它可以在程序运行的过程中帮助分配所需的内
2013-07-30 15:12:57
7059
原创 对C++默认构造函数的理解
在文章开始之前,首先指出对于c++新手的两个常见的误解: 一、任何class如果没有定义default constructor,就会被合成出一个来。 二、编译器合成出来的default constructor会明确设定'“class内每一个data member的默认值”。 首先我们来讨论第一个误解。编译器并不是给任何一个没有use
2013-07-30 14:23:59
1003
原创 海量数据处理算法总结
1. Bloom Filter【Bloom Filter】Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。它是一个判断元素是否存在集合的快速的概率算法。Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元素不再集合,那肯定不在。如果判断元素存在集合中,
2013-07-29 21:13:32
2023
转载 Linux的SOCKET编程详解
Linux的SOCKET编程详解1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有
2013-07-29 21:05:05
1227
原创 搜索引擎利用机器学习排序
从使用的数据类型,以及相关的机器学习技术的观点来看,互联网搜索经历了三代的发展历程。 第一代技术,将互联网网页看作文本,主要采用传统信息检索的方法。 第二代技术,利用互联网的超文本结构,有效地计算网页的相关度与重要度,代表的算法有 PageRank 等。 第三代技术,有效利用日志数据与统计学习方法,使网页相关度与重要度计算的精度有了进一步的提升,代表
2013-07-29 20:52:15
4324
原创 对面向对象程序设计(OOP)的认识
前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释:面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。 简略来说,面向对象程序设计,指采用了面向对象的方法来进行程序设计。设计
2013-07-29 19:21:53
2510
原创 梯度、梯度下降法、随机梯度下降法
一、梯度gradient在标量场f中的一点处存在一个矢量G,该矢量方向为f在该点处变化率最大的方向,其模也等于这个最大变化率的数值,则矢量G称为标量场f的梯度。在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。更严格的说,从欧氏空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似。在这个意义上,梯
2013-07-29 15:48:27
6071
原创 机器学习十大算法的每个算法的核心思想、工作原理、适用情况及优缺点
简述机器学习十大算法的每个算法的核心思想、工作原理、适用情况及优缺点等。1)C4.5算法:ID3算法是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的归纳分类。ID3算法计算每个属性的信息增益,并选取具有最高增益的属性作为给定的测试属性。C4.5算法核心思想是ID3算法,是ID3算法的改进,改进方面有:1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取
2013-07-29 15:35:36
2981
原创 机器学习算法之CART(分类回归树)概要
分类回归树 classification and regression tree(C&RT) racoon优点(1)可自动忽略对目标变量没有贡献的属性变量,也为判断属性变量的重要性,减少变量数据提供参考;(2)在面对诸如存在缺失值、变量数多等问题时C&RT 显得非常稳健(robust);(3)估计模型通常不用花费很长的训练时间; (4) 推理过程完全依据属性变量的取值
2013-07-29 11:37:56
3016
转载 操作系统中的内存管理-分区、页式、段式
1. 内存管理方法 内存管理主要包括虚地址、地址变换、内存分配和回收、内存扩充、内存共享和保护等功能。 2. 连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间。连续分配有单一连续存储管理和分区式储管理两种方式。2.1 单一连续存储管理 在这种管理方式中,内存被分为两个区域:系统区和用户区。应用程序装入到用户区,可
2013-07-29 11:25:19
2711
转载 curse of dimensionality维数灾难
curse of dimensionality维数灾难或者翻译成维度的咒语,这个咒语出现在很多方面:sampling采样如果数据是低维的,所需的采样点相对就比较少;如果数据是高维的,所需的采样点就会指数级增加,而实现中面对高维问题时往往无法获得如此多的样本点(即使获得了也无法处理这么庞大数据量),样本少不具有代表性自然不能获得正确的结果。combinator
2013-07-28 13:43:41
3970
原创 C4.5决策树
C4.5决策树C4.5决策树在ID3决策树的基础之上稍作改进,请先阅读ID3决策树。C4.5克服了ID3的2个缺点:1.用信息增益选择属性时偏向于选择分枝比较多的属性值,即取值多的属性2.不能处理连贯属性OutlookTemperatureHumidityWindyPlayGolf?sunny
2013-07-28 13:40:10
1771
面试解决网络技术问题的好书
2013-09-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人