- 博客(29)
- 收藏
- 关注
原创 Zookeeper实现分布式锁
一.zookeeper是一款分布式协调框架,简单的说,zookeeper=文件系统+通知机制。,主要作用:1.命名服务 2.配置管理(数据发布与订阅) 3.集群管理 4.分布式锁 5.队列管理。我最开始了解zookeeper是源于我们的RPC框架Pigeon,里面使用它作为协调管理工具,管理服务实现者和服务请求者。本机下载安装zookeeper还是挺容易的,参考http://blog...
2018-02-24 19:41:56
476
2
原创 MySQL小结
1.Mysql的索引采用B+Tree B/B+树又叫平衡多路查找树MySQL中,索引属于存储引擎级别的概念,常见的2个引擎是MyISAM和InnoDB(默认)。https://www.cnblogs.com/tgycoder/p/5410057.html1).MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结...
2018-02-23 15:59:59
216
原创 MySQL的锁机制
MySQL数据库是一种常见的小型关系数据库,在网站的搭建中经常用到。MySQL现在属于ORACLE公司,最新版本是5.6。说道它的锁机制,首先要先说一下MySQL的存储引擎。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 在O
2015-06-29 08:59:02
544
原创 Java的内存溢出(OOM)
JAVA内存区域中不同的结构会由于不同的原因而导致内存溢出。JAVA内存主要分为堆,栈,方法区和程序计数器四个部分。
2015-06-07 17:36:20
496
原创 二叉树的遍历
二叉树的遍历应该说是非常常见的,用递归的话程序非常简单明了,而有的时候需要写非递归的遍历程序,这个时候就需要对此有一定的了解。二叉树的遍历根据根节点和左右子节点遍历顺序的不同,可以分为三种:前序遍历,中序遍历,后序遍历。前序遍历就是先根节点->左节点->右节点。非递归前序遍历编写最简单,最难的是后续遍历。下面就来一一写出它们的程序,这里用的是Java。非递归遍历是一种DFS(深度优先搜素),从
2015-05-09 22:26:03
424
原创 比较排序算法的Java实现
在我们熟知的排序算法中,最早接触的就是冒泡排序和选择排序,后来又有了插入排序,但是这些排序算法都是二次时间的,对于大量数据的排序效率不是很高。因此后面就有了如希尔排序,归并排序,堆排序和快速排序。这里总共有7种,因为它们在排序时都会进行比较,因此也是比较排序算法,而比较排序的最快时间也要Ω(NlogN)。这时根据比较的决策树得到。N个元素,它的排序有N!种情况,将它放入到二叉树中,N!情况都在树叶...
2015-04-30 00:50:28
503
原创 线性排序的Java实现
线性排序算法是不用进行元素比较的算法,因此它的时间复杂度不受Ω(NlogN)的限制,它的排序时间复杂度是线性 。这里将会介绍最常见的三种线性排序算法:桶排序,计数排序,基数排序。一 桶排序桶排序(bucke sort)假设输入数据服从均匀分布,平均情况下它的时间代价为O(N),最坏为O(N^2)。桶排序将[0,1)区间换分为k个相同大小的子区间,也叫桶。然后根据输入的数据,将它们放在各个桶
2015-04-26 21:39:35
701
原创 动态规划初探
最先听说动态规划还是在研究生的最优控制课上,课上介绍了用动态规划解决最优问题。其实动态规划(dynamic programming/DP)和分治方法类似,都是通过组合子问题来求解原问题。不过动态规划应用于问题重叠的情况,即不同的子问题具有公共的子子问题,每个子问题只求一次,而不必重新计算。就我个人的理解:动态规划就是将所求的问题分步,每一步的最优解是由当前解和之前的最优解组成。求到最后,也就求
2015-04-21 22:45:07
402
原创 设计模式---结构型
在23种设计模式中,创建型有5种,结构型有7种。这里就简单介绍一下结构型的7种设计模式。这7种模式是:适配器模式,装饰器模式,代理模式,组合模式,桥接模式,外观模式和享元模式。1.适配器模式定义: 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。这个模式我在《深入分析Java Web》这本书中看过,这里就介绍一个j
2015-04-12 20:01:15
443
转载 转:——Windows和Linux进程间通信区别
http://blog.sina.com.cn/s/blog_7bbb91b70100uui2.html 进程间通信多进程和多线程本质上就是将原来一个进程或者线程处理的任务分给了多个进程或者线程,也可以说是将原来一个CPU处理的任务分给了多个CPU处理,类似于随着生产力的发展,原来一个人包打天下的个人英雄主义时代被分工合作的团队取代一样。既然是一个团队
2015-04-01 16:27:56
2402
原创 Python爬取CSDN博客
当时学习Python的主要原因,就是为了学习爬虫,从网上爬取自己想要的内容。Python作为一种脚本语言,学习起来方便简单,而且语言格式简练,很多C++,java要写很长的程序,用Python也许几行就搞定了。这篇就来说说用Python编写爬虫的过程。其实用其他语言也可以写爬虫,只不过用Python非常简单。 1.最简单的爬虫 新建一个python脚本,命名为csdn.py。先
2015-03-31 15:29:39
1124
原创 Java序列化的几点注意
从Java1.1开始就支持序列化的操作,序列化就是将对象转换为字节流,用来存储或者进行传输。这样对象就可以被持久化。Java序列化一个类非常简单,该类实现一个Serializable接口或者Externalizable接口。Externalizable是Serializable的子类。Serializable接口没有任何方法,它只是一个标志。1.单例模式下序列化要加上readR
2015-03-22 13:50:59
395
转载 数据仓库
原文链接:http://www.cnblogs.com/xugang2008/archive/2009/07/09/1519777.html什么是数据仓库 目前,数据仓库一词尚没有一个统一的定义,著名的数据仓库专家W.H.Inmon在其著作《Building the Data Warehouse》一书中给予如下描述:数据仓库(Data Warehouse)是一个面向主题的(
2015-03-21 13:04:04
558
原创 《大型网站技术架构》总结---架构技术
上一篇写到了网站架构的演化过程,一个小型网站是如何发展成为大型网站的。里面用到了很多的技术,很多是我在看这本书的时候第一次遇到,因此有必要做一个总结。一.大型网站的架构模式 模式的关键在于模式的可重复性,问题和场景的可重复性带来解决方案的可重复使用。1.分层分层是最常用的的一种架构模式,将系统在横向维度上分为几个部分,每个部分负责相对单一的职责,然后通过上层对下层的依赖
2015-03-14 13:20:38
400
原创 算法题集锦
过年在家没怎么发博客,现在3月份在学校又被老板逼着做他的控制理论。时间正是金钱,能挤出一点就是一点,下面是我自己遇到的比较好的算法题,有的是leetcode上的题目,有的是一些公司的面试题目。一.查询已排序的两个数组的中位数 这也是leetcode的第二题,看似很简单(如果不考虑时间因素的话确实很容易),但是考虑效率的话,这不就是随便看看就能出来的。我一看到这道题,就想起我之前
2015-03-08 16:44:42
492
原创 《大型网站技术架构》总结---架构演化
趁着放假,终于把《大型网站技术架构核心原理与案例分析》这本书看完了。这本书给了我对于网站架构的全新认识,整本书写的比较浅显易懂,让入门的人比较容易理解。里面介绍了很多技术概念。向反向代理和CDN等等。我写两篇文章,是看完之后的总结。这本书的第一章就写了大型网站架构演化,写明了一个小网站是如何一步步的演化发展成一个大网站。大型网站的特点:高并发,大流量;高可用;海量数据;用户分布广泛,网络情
2015-02-05 10:12:59
758
转载 MapReduce:详解Shuffle过程
最近看了很多书籍和资料,关于shuffle的说法都说的不清楚,找到了下面这篇文章,写的浅显易懂。原文地址 http://langyu.iteye.com/blog/992916 MapReduce:详解Shuffle过程Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方。要想理解MapReduce, Shuffle是必须要了解的。我看过很多相关的资料,
2015-01-29 14:11:40
376
原创 Java多线程---线程池源码分析及其实现
之前Java线程池的文章都是关于基本知识和JUC下的类。这篇主要来说一下线程池,并自己来实现一个线程池。 一.线程池介绍 学习过程中会遇到各种池,有线程池,数据库连接池,内存池,常量池等等。下面来一次介绍。线程池:用来管理线程的一个集合(池),作用是用来提高线程的使用效率。如果一个线程的创建和销毁的成本比运行该线程里面的程序的成本要高,则就需要用到线程池。在线程池中,里面的线程可以重用
2015-01-22 23:03:33
871
原创 Java多线程---JUC包下的常见类
这篇文章主要是关于java.util.concurrent类包下的常用类,会给出相应的介绍并给出实例。 JUC是JDK1.5才引入的并发类库。1.CountDownLatch 这个类是一个同步计数器,主要用于线程间的控制,当CountDownLatch的count计数>0时,await()会造成阻塞,直到count变为0,await()结束阻塞,使用countDown()
2015-01-20 19:22:01
13635
原创 设计模式----创建型
1.生产者消费者模式:在计算机科学中,我们将生产者消费者问题描述为:一群生产者在生产消息,并将此消息提供给消费者去消费。它们中间设了具有N个缓存区的缓冲池,生产者每次可将生产的消息放入一个缓存区内,消费者每次可将一个缓存区内的消息拿出来消费。但这个过程有两个条件:任何一方操作一个缓冲区时不能有其它同时对该缓冲区进行操作;只有当缓冲区还有空余,生产者才能生产,只有当缓冲区至少有一个产品,
2015-01-15 00:29:25
317
原创 Java多线程---CAS和锁优化
一 .CAS 在学习java.util.concurrent(简称JUC)包下的类时,了解到了CAS这个概念,整个JUC包的基础也是CAS,ReentrantLock也是基于它的。学习CAS,先从synchronized关键字说起,synchronized关键字能保证最基本的互斥同步。同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一个线程使用。而互斥是实现同步的
2015-01-13 14:25:32
3094
原创 Java多线程---Lock类
上一篇文件讲了java多线程的基础知识,同步处理使用synchronized关键字。从Java5开始,引入了Lock类,改类在包java.util.concurrents.locks下面。使用该包下的类也可以进行并发编程。其中Lock和ReadWriteLock是两个最基本的接口,我们经常使用的是ReentrantLock类和ReentrantReadWriteLock类,它们分别是...
2015-01-10 12:57:56
589
原创 Java多线程---基本知识
Java的多线程学习 这里主要是对我之前学习java多线程知识的一个总结,之前的内容都记在笔记本上。一.线程的概念线程是轻量化的进程,而进程就是运行中的程序。一个程序至少包含一个进程,而一个进程至少包含一个线程。线程是进程的执行单元。进程(Process):是一个动态概念,拥有完整的地址空间,不依赖于线程而独立存在。线程(Thread):属于进程的一部分,不能单独运行
2015-01-05 23:34:52
504
原创 红黑树的Java实现
之前一直在复习数据结构中的树,从最开始的二叉树,到二叉查找树,再到平衡二叉树(AVL),到最后的红黑树。要说复杂度,红黑树确实比之前的AVL树要复杂好多,特别是删除操作。但其实弄懂了红黑树的平衡原理,插入和删除看起来也就没那么复杂了。我主要看的是《算法导论》和《数据结构》这两本书,前者对于红黑树的描述更加准确并且提供了相应的伪代码。而我自己将原理弄懂之后,就对应着伪代码写出了红黑树的Java程序。
2015-01-03 15:26:16
436
原创 Hadoop学习之安装篇
今天收到了在网上两本书,一本是《Hadoop权威指南》,还有一本是《Hadoop实战》。最近也打算开始学习大数据方面的知识,因为数据在当今的信息社会就是价值的体现。各个大公司都理解数据对自己的作用。看了看书对Hadoop的介绍,其实它就是用Java编写的一个分布式框架,里面的核心是HDFS和MapReduce。HDFS用于数据的分布式存储,MapReduce则用于数据的分析,Hadoop项目还有其
2014-12-25 20:56:21
440
原创 栈的应用---平衡符号的检测
栈在数据结构中用处非常大,它就是一种先入后出的结构。可以用数组或者链表来完成栈的编程。具体选用哪种得看你的应用场景。Java内存中的栈用来存放已知生命周期和大小的数据,局部变量都存放在栈中。它也是是用来进行方法处理的一个数据区域,一个方法从调用到完成对应了一个栈帧从入栈到出栈的过程。 这篇文章主要说明了栈的一个应用---平衡符号的检测。括号都是成对成对出现的,比如( ),{ },[
2014-12-23 13:43:40
774
原创 AVL树的Java实现(递归方法)
AVL树是一种自平衡的二叉查找树。首先它是一种二叉查找树,满足任意一个节点(叶子节点除外)的值大于它左子树上任意一个节点,且小于它右子树上任意一个节点。因为二叉查找树的深度可能为O(N),这样的效率较低,因此衍生出了AVL树,它具有自平衡的效果,能保持树的深度为O(logN)。AVL树满足:任意一个节点它的左子树的高度和右子树的高度差不超过1。(假设叶子节点的高度为0,null节点的高度为-1)
2014-12-18 10:59:25
634
原创 正式开启博客
读研都1年了,才知道开博客,会不会有点后知后觉。之前的学习一直喜欢把笔记写在笔记本上,或者把自己写的代码用word保存起来。不过作为一个以后选择IT行业的人来说,了解技术的最好选择还是个大论坛网站,因此,在2015年来临之前,正式开启自己的CSDN博客,以后争取将自己所学到的东西都记录在这个博客里面,不仅是供自己回忆,也可以分享给别人。选择了软件行业,我自己感兴趣的是Java和Web方面的开发
2014-12-13 14:14:45
319
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人