`
文章列表

MongoDB学习

MongoDB是基于分布式文件存储的数据库。 由C++编写,目的是为web应用提供"可扩展的高性能数据存储"解决方案。 MongoDB是介于关系数据库和非关系数据库之间的产品。是非关系数据库当中功能最丰富,最像关系数据库的。 1 ...
索引对于查询的速度至关重要,理解索引也是数据库调优的起点。 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. 懒汉: ...
一. 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方 ...
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& ...
1. 线程和进程的区别? 1)什么是进程:例如一个exe文件,一个class文件,一个QQ程序,一个ppt 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。 2)什么是线程:一个程序里的执行路径。(一个程序内部的顺序控制流) 线程可以看做是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,线程切换的开销小。 3)多进程:在操作系统中能通知运行多个任务(程序),如QQ, PPT, Word, ... 4)多线程:在同一应用中有多个顺序流同时执行。 2.如何实现一个线程? 1)JVM启动时,主方法(public static void ma ...

Java并发包学习

1. ConcurrentHashMap 顾名思义,ConcurrentHashMap是应用于高并发场景的HashMap. 由于HashMap是非线程安全的,而HashTable在HashMap的基础上使用了Synchronized, 以此来保证线程安全。但问题在于,HashTable的Synchronized是针对整个Hash表的,即每次锁定整张表让该线程独占,这样虽然保证了线程安全,确造成了巨大的浪费。 综上,ConcurrentHashMap出现了。 ConcurrentHashMap与HashTable的主要区别在于:锁的粒度。 ConcurrentHashMap允许多个线程同时对H ...

Java集合API

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 ...

JVM学习笔记

    博客分类:
  • JVM
一. 走进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 ...
Global site tag (gtag.js) - Google Analytics