- 博客(122)
- 资源 (3)
- 收藏
- 关注
转载 大型网站应用之海量数据解决方案
海量数据的解决方案:1. 使用缓存;2. 页面静态化技术;3. 数据库优化;4. 分离数据库中活跃的数据;5. 批量读取和延迟修改;6. 读写分离;7. 使用NoSQL和Hadoop等技术;8. 分布式部署数据库;9. 应用服务和数据服务分离;10. 使用搜索引擎搜索数据库中的数据;11. 进行业务的拆分;一、使用缓存 网站访问数据的特点大多数呈现为“二八定律”:80%的业务
2017-04-28 00:27:32 3696
转载 Sql优化
为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。 这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:1、SELE
2017-04-23 17:44:36 3276
转载 MySql面试题
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句;2、MySQL中m
2017-04-23 17:43:11 4508
转载 Java中的垃圾回收
虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。年轻代: 所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象
2017-04-23 17:38:22 2518
转载 JVM调优
一、堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。 典型设置: 1. java -Xmx3550m
2017-04-23 17:36:57 5890 1
转载 Java中的NIO实现原理
一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 假如现在你对阻塞I/O已有了一定了解,我们知道阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时(或超时)才会返回;同样,在调用ServerSocket.accept()方法时,也会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会启动一个线程去处理该客户端的请求。阻塞I
2017-04-23 17:30:07 3339
原创 Java中的IO流
1、文件流:I/O流 Java中文件表示:d:/../…或者d:\..\.. File 类没有无参构造方法. 2.i/o流的分类: 输入流,输出流 字节流,字符流 传输的数据单位是字节,也意味着字节流能够处理任何一种文件。 字节流的组成: 类inputStream,子类:fileinputStream outputStream,子类:fileoutputStream InputS
2017-04-23 17:25:29 1743
原创 Java虚拟机的组成
Java虚拟机主要分为以下五个区: 一、方法区: 1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载 2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据。 3. 该区域是被线程共享的。 4. 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池
2017-04-22 22:56:54 5606
转载 简述DCL失效原因,解决方法
DCL单例模式针对延迟加载法的同步实现所产生的性能低的问题,我们可以采用DCL,即双重检查加锁(Double Check Lock)的方法来避免每次调用getInstance()方法时都同步。实现方式如下:public class LazySingleton { private int someField; private static LazySingleton instance;
2017-04-22 22:52:11 5222 4
转载 Java内存模型
Java的内存模型JMM(Java Memory Model)JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存由缓存和堆栈两部分组成,缓存中保存的是主存中变量的拷贝,缓存可能并不总和主存同步,也就是缓存中变量
2017-04-22 22:46:59 1905
原创 Java中的泛型(Generic)
一、泛型作用* JDK5中的泛形允许程序员在编写集合代码时,就限制集合的处理类型,从而把原来程序运行时可能发生问题,转变为编译时的问题,以此提高程序的可读性和稳定性(尤其在大型程序中更为突出)。* 注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,
2017-04-22 22:25:44 476
原创 Java中的异常
异常: 子类继承父类的方法重写时,子类抛出异常不能多于父类抛出的异常。子类抛出的异常需要更具体。也就是父类同名方法子异常。异常的父类都是:throwable 子类:error,exception;1、异常(throwable):程序运行过程中出现不正常的现象。 2、子类;error(针对进程,导致jvm停止)、Exception(针对线程) 3、非检查异常(非受检异常、为检查异常)运行时异常
2017-04-22 22:19:25 2479 1
转载 Java中的String,StringBuffer,StringBuilder区别
String(大姐,出生于JDK1.0时代) 不可变字符序列 StringBuffer(二姐,出生于JDK1.0时代) 线程安全的可变字符序列 StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列 String源码:public final class String implements java.io.Serializable, Co
2017-04-22 22:12:54 3250 2
转载 Java中的equals和hashCode
equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复。 这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashCode()有可能相等。(我的理
2017-04-22 22:10:16 1972
转载 Java中的值传递与引用传递
1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。 基本类型的变量保存原始值,即它代表的值就是数值本身; 而引用类型的变量保存引用值,”引用值”指向内存空间的地址,代表了某个对象的引用,而不是对象本身, 对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,
2017-04-22 22:06:19 2627
原创 Java面试题——继承,多态
一、面向对象的思想 Java是一门纯粹的面向对象的语言。面向对象这种程序设计模式它将现实世界中的一切事物都看作是对象,例如,一个人是一个对象,汽车、飞机、小鸟等等,都是对象;它强调从对象出发,以对象为中心用人类的思维方式来认识和思考问题。每个对象都具有各自的状态特征(也可以称为属性)及行为特征(方法),java就是通过对象之间行为的交互来解决问题的。 类是面向对象中一个重要的概
2017-04-22 21:59:45 11639 1
转载 Java 30道经典笔试题
转自云栖社区——茶花盛开:https://yq.aliyun.com/articles/73655?utm_content=m_17183 下面都是我自己的答案非官方,仅供参考,如果有疑问或错误请一定要提出来,大家一起进步啦~~~下面哪些是Thread类的方法() A start() B run() C exit() D getPriority()答案:AB
2017-04-22 21:52:57 18416 4
原创 Redis初探06——Redis的有序集合sorted set类型及操作
Sorted Sets类型及操作: sorted set是set的一个升级版本,它在set的基础上桑增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。1、zadd 向zset中添加value,score用于排序。如果元素存在,则更新其顺序,不更新
2017-04-13 00:13:58 392
转载 mysql中左连接,右连接,内连接查询,以及与where之间关系
左连接,右连接,内连接 现有表a有10条数据,表b有8条数据,那么表a与表b的笛尔卡积是多少? select * from ta,tb //输出结果为8*10=80条 1、左连接 以左表为准,去右表找数据,如果没有匹配的数据,则以null补空位,所以输出结果数>=
2017-04-11 17:54:56 1680
原创 Redis初探05——Redis的sets类型及操作
sets类型及操作 set是集合,他是String类型的无序集合。set是通过hashtable实现的,添加、删除和查找的复杂度都是O(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog中的tag功能。没有重复元素。 1、sadd 向名称为key的set中添加元素。 sadd set集合名称 元素。若添加的重复元素则不替换,返回0;127.0.0.1:
2017-04-11 17:51:46 331
原创 数据结构之双向链表
双向链表,每个节点除了保存了对下一个节点的引用,同时还保存这对前一个节点的引用。 其结点跟单链表相似,如图所示: 设计双向链表的操作: 1、结点数据:/** * 链表节点,相当于火车的车厢 * @author Administrator * */public class MyNode { //数据域 public long data; //指针域 pub
2017-04-11 17:47:48 282
原创 Redis初探04——Redis的list类型及操作
List是一个链表结构,主要功能是push,pop,获取一个范围的所有值等等,操作中key理解为链表的名字。redis的list类型起其实就是一个每个子元素都是String类型的双向链表。我们可以通过push,pop操作从链表的头部或者尾部添加元素、删除元素,这样list既可以作为栈,又可以作为队列。 操作: 指向头的方向为前。 1、lpush 在key对应的list的头部添加字符串元素。l
2017-04-11 00:43:38 348
原创 JDK 1.8下内部类的问题
今天在复习内部类的时候,发现了两个问题: 第一个是方法内部类: JDK 1.7以前,方法内部类中,方法的参数和局部变量,必须有final修饰才可以访问。但是我今天用JDK1.8后发现,貌似不需要用final修饰了。。。public class MethodInnerClass { private String str="我是外部类的成员变量"; private String out
2017-04-10 23:06:50 3615 2
转载 在一个千万级的数据库查寻中,如何提高查询效率?
在一个千万级的数据库查寻中,如何提高查询效率?1)数据库设计方面: a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,
2017-04-06 00:15:35 3906
原创 数据结构之双端链表
双端链表指的是双向链表中头结点始终保持着对尾结点的引用。 准备数据: 一、结点类:/** * 链表节点,相当于火车的车厢 * @author Administrator * */public class MyNode { //数据域 public long data; //指针域 public MyNode next; /** * 前指针
2017-04-06 00:10:40 306
原创 数据结构之双向链表
双向链表,每个节点除了保存了对下一个节点的引用,同时还保存这对前一个节点的引用。 其结点跟单链表相似,如图所示: 设计双向链表的操作: 1、结点数据:/** * 链表节点,相当于火车的车厢 * @author Administrator * */public class MyNode { //数据域 public long data; //
2017-04-05 23:57:36 282
原创 java多线程: 子线程循环10次,主线程接着循环100次,如此循环50次
package com.view04.alternate.print;/** * 子线程循环10次,主线程接着循环100次,如此循环50次的问题 * @author zhaojw_420 * */public class AlternateThread { public static void main(String[] args) { final Bussies bussi
2017-04-01 00:21:24 3967
原创 数据结构之单链表
由于顺序表再插入或者删除时需要移动大量数据,并且如果表比较大, 会比较难分配连续的存储空间导致存储数据失败。因此可以采用链表结构,链表结构是一种动态存储分配的结构形式,可以根据需要动态的申请所需的存储单元。 链表又分为单链表,双向链表,以及单循环链表,多重链的循环链表。本文先介绍单链表。 典型的单链表结构如图所示: 链表每个结点都应包括如下内容:数据部分,保存的是该结点的实际数据。
2017-03-31 23:59:46 834
原创 Redis初探03——Redis的hash数据类型及操作
Redis hash是一个String类型的field和value的映射表。他的添加、删除操作都是O(1)(平均)。hash特别适用于存储对象。相较于将对象的每个字段存成单个String类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。 操作: 1、hset 设置hash field的指定值,如果key不存在则先创建。hset hash表名称 field va
2017-03-30 12:48:02 322
原创 数据结构之顺序表
顺序表就是按照顺序存储方式存储的线性表,该线性表的结点按照逻辑次序一次存放在计算机的一组连续的存储单元中如下图: 由于顺序表是一次存放的,只要知道了该顺序表的首地址以及每个数据元素所占用的存储长度,那么我们就很容易计算出任何一个数据元素(也就是数据系结点)的位置。 1、结点数据类型:public class MySeqNode { String key; //关键字 S
2017-03-30 12:44:09 2418
原创 Redis初探02——Redis的String数据类型及操作
String类型是最简单的类型,一个key对应一个value,Stirng类型是二进制安全的。Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。 操作: 1、set 设置key对应的值为String类型的value。 例:设置一个name=zhaojw的键值对,然后在get出name的值,再次设置name=zhaojw01,再get后发现值被覆盖:127.0.0.1:
2017-03-29 16:24:19 375
原创 Redis初探01——Redis介绍,安装与配置文件解析
一、NoSQL(Not Only SQL)介绍: NoSQL不仅仅为sql,意为反sql运动,是一项全新的数据库革命性运动,早期就有人提出,它指的是非关系型的数据库。适用于超大规模的和高并发的网站。 NoSql是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准,ACID属性(事务相关),表结构等,这类数据库主要有以下特点:非关系型
2017-03-29 16:19:52 2517
转载 生产者/消费者问题的多种Java实现方式
生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类: (1)采用某种机制保护生产者和消费者之间的同步; (2)在生产者和消费者之间建立一个管道。 第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于
2017-03-29 01:19:11 2241
转载 实现Java线程同步的五种方法
线程同步概念 Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不明确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。 一、 同步方法 使用synchronized关键字修饰的方法。由于java的每个对象都有一个内置锁,当用关键字修饰此方法时,内置锁会保
2017-03-29 01:16:09 7533
原创 多线程六种状态
线程可以有如下六种状态: 1、New(新创建) 2、Runable(可运行) 3、Blocked(被阻塞) 4、Waiting(等待) 5、Timed waiting(计时等待) 6、terminated(被终止) 状态图如图: 一、新创建线程 当用new操作符创建一个新线程时,如new Thread(thread),改线程还有没有开始运行,此时他的状态是new。当一个线
2017-03-29 01:12:47 555 1
原创 汉诺塔问题
import java.util.Scanner;/** * 汉诺塔问题 * 不考虑中转,只考虑起始柱子到目标柱子的移动 * 记住始终一点:中间一个不管是啥柱子,都是中转,盘子移动只发生在起始到目标柱子 * @author Administrator * */public class HanoiTest { private static long count=0; @Sup
2017-03-17 01:04:11 257
原创 常用数据结构
1、数组(Array) 数组是一种聚合数据类型,是将具有相同类型的若干变量有序的组织在一起的集合。数组可以分为整形数组、字符型数组、浮点型数组、对象型数组等。数组还可以有一维,二维数组、多维第表现形式。 2、栈(Stack) 栈是一种特殊的线性表,其中能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据,先插入的数据将被压入栈底,最后插入的数据
2017-03-05 21:33:19 309
原创 Hadoop——序列化
序列化是指将结构化对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程。反序列化是指将字节流传回结构化对象的逆过程。 序列化在分布式数据处理的两大领域经常出现:进程间通信和永久存储。 在Hadoop中,系统中多个节点上进程间的通信是通过“远程过程调用”(RPC)实现的。RPC协议将消息序列化成二进制流后发送到远程节点,远程节点接着将二进制流反序列化为原始消息。 RPC序列化格式特点:1
2017-03-03 11:50:01 498
原创 Hadoop分布式文件系统HDFS——Flume和Sqoop导入数据,distcp并行复制,Hadoop存档
一、Flume和Sqoop导入数据 Apache Flume是一个将大规模流数据导入HDFS的工具,最典型的应用是从另外一个系统中手机日志数据。比如银行的网络服务器。其特性如下:1、 Flume能够支持大量的数据源,其中的一些通常用于包含tail(通过管道的方式将本地文件写入Flume中),syslog和apache log4j(允许java应用通过Flume将事件写入HDFS中的文件)
2017-03-03 11:25:15 1411
原创 Hadoop分布式文件系统——HDFS回收站
一、HDFS的Trasg回收站 和Linux系统的回收站一样,HDFS会为每一个用户创建一个回收站目录:/user/用户名/.Trash/,每一个被用户通过shell删除的文件/目录。在系统的回收站中都有一个周期。也就是当系统回收站的文件/目录在一段时间之后没有被用户回收的话,HDFS就会自动的把这个文件/目录彻底删除,之后,用户就永远找不回找个文件/目录了。 配置:在每个节点(不仅仅
2017-03-03 11:22:14 451
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人