- 浏览: 38629 次
- 性别:
- 来自: 北京
最新评论
文章列表
一
1: 面对大量用户,高并发,高效率语言,大型数据库。当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访问量大,并发量高,海量数据的问题
2: 集中式 和 分布式
单机网站 : 应用在一台机器中
分布式 : 将应用部署到多台机器中
3: 负载均衡 : 将负载进行平衡,分摊到多个操作单元
二 负载均衡的原理
1 : 纵向和衡向扩展
2 : 应用集群 : 将同一个应用部署到多台机器上,组成处理集群,接受负载均衡设备的请求。
3: 负载均衡设备,将用户访问的请求,根据负载均衡算法,发送到集群中的一台服务器
...
1 :是nosql ,面向列的数据库, 物理表
表结构由下面几部分组成
2 : rowkey
3 :列族
4: 列标示符
5: 版本号
java端如何使用redis
- 博客分类:
- redis 缓存
1.引入pom依赖(如果没用maven的话,自行引入jar包吧)
2.在容器中配置RedisTemplate实例
3: 客户端实现类
Redis与Memcached
1: value 值
Redis 支持的值比较多
支持: 字符串、列表、集合、散列、有序集合
2: 网络IO模型
Redis 是单线程
Memcached是多线程,非阻塞
3:内存管理方面
Redis使用现场申请内存的方式来存储数据
Memcached使用预分配的内存池的方式
4: 磁盘管理
memcached 不支持写入磁盘
5: 聚合函数
redis的聚合数据可以是整数或浮点
memcached 只能是整数
使用场景
1.Redis使用最佳方式是全部数据in-memory。 ...
1: 装饰者模式
包装一个对象,已提供新的行为
2: 迭代器模式
访问一个集合,而不暴露集合的实现
3: 策略模式
封装可以相互的行为,并使用委托在行为之间切换
4:代理模式
包装对象,以控制对此对象的访问
5: 工厂模式
由子类决定要创建的具体类是哪一个
6:抽象工厂
运行创建一个家族,而无需指定他们的具体类
7:适配器
封装对象,并提供不同的接口
8:观察者模式
9:单例
只创建一个对象
10:模板方法
由子类决定如何一个算法的步骤
mysql 查询优化
- 博客分类:
- Mysql
一 优化数据访问
1:查询需要的记录 (可以在查询最后 加上 limit 10)
2: 多表关联时返回全部列 (只取需要的列)
3: 总是取出全部列 (select * 会带来额外的I/0)
二 Mysql 是否在扫描额外的记录
三 重构查询的方式
1 : 一个复杂查询还是多个简单查询
2 : 切分查询
3 : 分解关联查询
一、数据库锁
1: 共享锁(读锁): 多个客户在同一时刻可以同时读取同一个资源
2: 排他锁(写锁): 一个写锁会阻塞其他的其它的写锁和读锁
二、锁粒度
1: 表锁 : 锁定整张表
2: 行级锁: 锁定行,支持高并发
三、事务 (原子、一致、隔离、持久)
1:本质是一组原子性的sql查询,如果成功执行该组查询的全部语句,那么就执行该组查询。
2: 事务隔离级别:
未提交读: 事务在修改中,即使没有提交,对其它事务也都是可见的。(事务可以读取未提交的数据,脏读)
提交读: 大多数数据库 的 默认设置 , 但不可以重复读
3: 可重复读:mysql ...
java (mapreduce)
- 博客分类:
- Hadoop
一、java mapreduce实现
数据块
1950,0
1950,22
1950,-11
1949,111
1949,78
例如:(1950,0),(1950,22),(1950,-11),(1949,111),(1949,78) 求每年的最大值
伪代码
map函数
public void map(LongWritable key,Text value,Context context)
{
String line = value.toStirng();
context.write ...
排序法
最差时间分析
平均时间复杂度
稳定度
空间复杂度
冒泡排序
O(n2)
O(n2)
稳定
O(1)
快速排序
O(n2)
O(n*log2n)
不稳定
O(log2n)~O(n)
选择排序
O(n2)
O(n2)
稳定
O(1)
二叉树排序
O(n2)
O(n*log2n)
不稳定
O(n)
插入排序
O(n2)
1 : jdk1.5 增加了一种新的机制,ReentrantLock
2 : Lock 与 ReetrantLock : 提供了一种无条件,可轮询,定时的以及可中断的锁获取操作,所有加锁和解锁的方式都是显示的。
3: 内置锁无法实现非阻塞结构的加锁规则
4: 显示锁可以有效的避免死锁情况。
5: ReentrantLock的构造函数中提供了两种公平性选择。非公平的锁和公平的锁(当持有锁的时间比较长的时候,可以使用)
6: 一般当内置锁 不满足要求时,再使用显示锁,显示锁在使用自己加锁和释放锁不安全。
7: 读写锁 一个资源可以被多个读操作访问,或者被一 ...
1: Executor 框架
任务是一组工作单元,而线程是使任务异步执行的机制。
2:任务调度: ScheduledThreadPoolExcutor 类提供了任务调度。
3:Callable和future 是可以带返回值
一: 同步容器都是线程安全的
如vector 和 hashtable ,collections.synchronized 实现线程安全的是通过,将它们的状态封装起来,并对每个公有方法都进行同步。但在一些复合操作时,还是要加锁来保护复合操作。在容器在迭代过程中被修改时,会抛异常
二: 并发容器可以改进一下同步容器的性能: 因为并发容器增加了对一些常见复合操作的支持,迭代器都没有加锁。
1、ConcurrentMap , CopyOnWriteArrayList
2、jdk 1.5 新增容器 :Queue、BlockingQueue
三:ConcurrentMap
...
一: 类加载的时机
1: 加载 java虚拟机中并没有进行强制约束
2:初始化时机,只有下面5种情况,new关键字,反射调用,继承,虚拟机主类的main,动态语言句柄(groovy)
二: 过程
1: 加载 : 将类全限定名生成class,将class文件存储内容加载内存中,方法区中生成Class对象
2: 验证 : 看看虚拟机版本是否满足
3: 准备 : 初始化类变量
4: 解析 : 将常量池中的符号引用,改变为直接引用
5: 初始化 根据程序员设置去初时化变量
6: 使用
7:卸载
三、类加载器
用于实现类加载动作,可以比较两个 ...
class 文件格式
- 博客分类:
- JAVA
一: class 文件是一组以8位字节为基础的二进制流。
二: class 文件格式
包含两种数据类型:
无符号数 : u1 ,u2,u4,u8 代表1个字节、2个字节、4个字节、8个字节的无符号数
表: _info 结尾来表示
包含以下数据项
1: 魔数 (判断是否可以被虚拟机支持)和 版本
2: 常量池 (最大的数据项,也是第一使用表类型数据项)
常量池的容量: 技术不是从1,而是从0开始的
常量池主要放两个类常量: 字面量和符号引用
3: 访问标示
用于识别一些类或者接口层次的访问信息 : public 、 private 、abstra ...
1、高性能硬件上的程序部署策略 :
问题: 在部署上,使用过大的堆内存进行回收时带来的长时间的停顿。
原因:对像的生存周期都应该是请求级或者页面级。能实现在超大堆中正常使用而没有full gc,使用超大堆内存时,网站响应速度才会比较有保证。在使用超大堆的前提是有把握把应用程序的full gc控制足够低。
方法:通过32位jdk集群,每个进程2GB。 通过apache 服务作为前端代理。要求响应速度高,可以使用cms收集器进行垃圾回收。
2、集群间同步导致的内存溢出
问题 : 在集群中使用全局缓存时,出现内存溢出
原因: 当请求特别多的时候,导致集群各 ...