- 浏览: 17782 次
- 性别:
- 来自: 北京
最新评论
-
qindongliang1922:
代码可以加上格式
读写锁总结
文章列表
MongoDB是基于分布式文件存储的数据库。
由C++编写,目的是为web应用提供"可扩展的高性能数据存储"解决方案。
MongoDB是介于关系数据库和非关系数据库之间的产品。是非关系数据库当中功能最丰富,最像关系数据库的。
1 ...
MySQL学习(索引、引擎、优化)
- 博客分类:
- 数据库
索引对于查询的速度至关重要,理解索引也是数据库调优的起点。
1. 建立索引前,先设计好建立索引列的数据类型。
1)越小的数据类型性能越好:因为越小的数据类型对于硬盘读取、内存、CPU缓存都需要更少的空间,处理起来更快。
2)简单的数据类型更好:整型比字符型更好。
3)尽量避免使用NULL: 建立索引的列最好是Not Null约束的,如果一定要用NULL,可以用0或者某特殊值替代。因为在MySQL中,对于NULL的值很难进行查询优化,因为他们使得索引的计算更加复杂。
2. 索引概述:
对于任何关系型数据库,索引都是进行优化的最主要因素。对于少量的数据,不必使用索引。
如果对于多列进行索引(组合 ...
1. 饿汉:
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
缺点:不是线程安全的。
2. 懒汉:
...
Oracle数据库性能调优
- 博客分类:
- 数据库
一. SQL优化
1. Where中条件语句的放置顺序:
Oracle是自后向前解析,所以要把能过滤掉最大记录数的条件放在最后面。例如“主键ID=?”这样的条件。
2. select语句中不要使用*
Oracle在解析时,会把*转换成所有的列名,这个工作是通过查询数据字典完成的,这会耗费更多的时间。
3. 使用索引:
使用索引的好处:可提高查询的效率
使用索引的坏处:索引需要空间来存储,也需要花费代价来维护:每当有记录增减时,索引本身也需要被修改。所以不必要的索引反而是反应时间变慢。
使用索引需要注意的地方:
1)避免在索引列上使用NOT或函数
Not的副作用和函数相同,Oracle系统发 ...
1. 模拟实现Spring.
为什么要使用Spring呢?先考虑下最常用的访问数据库的框架:
1)POJO层有一个类User
2)Service层有一个类UserService,里面有一个成员变量User u,一个addUser(User u)方法
3)DAO层用来访问数据库(数据库可以在MySQL和Oracle之间任意切换):有一个UserDao接口(里面有一个addUser(User u)方法),该接口下面有两个实现类UserDaoMySQL, UserDaoOracle, 分别实现了addUser方法。
这样,在UserService中调用DAO层来访问数据库的时候,需要在addUser方 ...
java设计模式(二)
- 博客分类:
- 设计模式
2. 代理模式(Proxy)
适用场景:秀才让小六代其求婚
abstract class QiuHun{
public abstract void songHua ();
}
class XiuCanQiuHun extends QiuHun {
@Override
public void songHua() {
System.out.println("秀才送花");
}
}
class Proxy extends QiuHun {
XiuCaiQiuHun xcqh;
@Override
pu ...
一。java基础
1. 输出一个字符串中的大写英文字母数、小写英文字母数、非英文字母数。
2. 输出一个字符串中,指定字符串出现的次数。
3. 在命令行中以树状结构展现特定的文件夹及子文件(夹)。
4. 比较对象的大小(实现Comparable接口,重新compareTo, hashCode方法)
预备知识:UML图
1. 泛化generation,也就是继承。表示"is-a"关系。用实线+空心箭头表示。
如:老虎类继承自动物类
2. 实现realization,也就是实现接口。用虚线+空心箭头表示。
如:大雁类实现了飞翔接口
3. 聚合aggregation。表示"has-a"关系,聚合是弱包含关系。
如:雁群里面有大雁。
Class YanQun {
private DaYan[] daYanArray;
}
聚合用空心菱形+直线表示。空心菱形在“雁群”端。
4. 组合composition。表示"contains-a& ...
Java线程基础学习
- 博客分类:
- Java JDK
1. 线程和进程的区别?
1)什么是进程:例如一个exe文件,一个class文件,一个QQ程序,一个ppt
每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
2)什么是线程:一个程序里的执行路径。(一个程序内部的顺序控制流)
线程可以看做是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,线程切换的开销小。
3)多进程:在操作系统中能通知运行多个任务(程序),如QQ, PPT, Word, ...
4)多线程:在同一应用中有多个顺序流同时执行。
2.如何实现一个线程?
1)JVM启动时,主方法(public static void ma ...
1. ConcurrentHashMap
顾名思义,ConcurrentHashMap是应用于高并发场景的HashMap.
由于HashMap是非线程安全的,而HashTable在HashMap的基础上使用了Synchronized, 以此来保证线程安全。但问题在于,HashTable的Synchronized是针对整个Hash表的,即每次锁定整张表让该线程独占,这样虽然保证了线程安全,确造成了巨大的浪费。
综上,ConcurrentHashMap出现了。
ConcurrentHashMap与HashTable的主要区别在于:锁的粒度。
ConcurrentHashMap允许多个线程同时对H ...
1. ArrayList
(1) 当List<String> list = new ArrayList<String> ();
其构造器执行:
this.elementData = new Object[10];
即创建一个大小为10的Object类型的数组。
(2) add(E): 用传入的对象填充数组的下一个位置。
若数组长度不够用了怎么办呢?
1) minCapacity = 数组中已有元素的数目 + 1;
2) 用minCapacity与数组的大小比较(注:数组中元素的数目不一定等于数组的大小)
若 minCapacity > 数组的大小(oldCapa ...
学习计划:
1. java基础 -- 不必把马士兵视频全部看一遍,但要过一遍笔记,注意一些重要的编程例子,例如如何比较两个对象的大小(实现compartable接口)
2. JVM底层:包括内存分配,垃圾回收,JavaAPI的底层实现。 还要复习classL ...
一. 走进Java
1. JavaEE方向的Java语言学习大致可分为三部分:
a) 支撑Java程序运行的虚拟机 b) 为各开发领域提供接口支持的java API c) Java语言及第三方Java框架(如Struts, Spring等)
2. 为什么必须掌握JVM?
一般情况下,程序 ...
一。为什么要学习数据结构?
数据结构是编程的基础。
编程水平 = 数据结构基础 + 算法 + 设计模式
1.什么是数据结构?
数据结构是研究非数值计算的程序中的操作对象,以及这些操作对象之间的关系与操作。
2. 时间复杂度大小比较:
O(1) < O(logn) < O(n) < O(nlogn) < O(n的平方)< O(n的立方) < O(2的n次方) < O(n!) < O(n的n次方)
O(log(n)) 的时间复杂度:如对二叉树的查找,每次可排除一半。
int count = 1;
while (count < n) {
c ...