04 2017 档案
摘要:将结果来作为另一个查询的参数 创建和使用返回单值的子查询 在多表查询中使用子查询 在student表查询“计算机入门”课程的学生学号、姓名和成绩,使用连接表的方法,如下: select sno,sname,mark from student as s inner join course as c o
阅读全文
摘要:本章用到三张表:teacher,course,student 创建表teacher 插入数据 创建表course 插入数据 创建表student 插入数据 显示数据 表的基本连接 简单的二表连接 在teacher和course两张表查找课程编号相等的记录 select tname,dname,cna
阅读全文
摘要:创建表 插入数据 查询所有数据 聚合分析 对表中的某列进行统计分析 聚合函数 求和函数SUM() 比如求所有男性教师的总工资: select sum(sal) as boysal from teacher where tsex='男'; 比如年龄大于40的教师工资总数 select sum(sal)
阅读全文
摘要:算法原理 a和b的最大公约数一定等于b和a除b的余数(a%b)的最大公约数。比如63和28的最大公约数等于28和63%28=7的最大公约数,即等于28和7的最大公约数,又等于7和28%7=0的最大公约数7 代码如下
阅读全文
摘要:单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 概述 某些情况下,我们需要某个类只能创建一个对象。 模式的结构 单例类包含自身声明的类变量,这个变量是单例类唯一的实例 单例类的构造方法访问权限是private,保证其他类无法创建该类的实例 单例类负责创建自己唯一的实例,并提供访问的
阅读全文
摘要:工厂方法模式(别名:虚拟构造):定义一个用于创建对象的接口,让其子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 概述 书上的例子个人觉得不是很好,因此这里我用Java集合里的一个例子来说明: Java集合中有两个接口Collections和Iterator。现在有一个LinkedLi
阅读全文
摘要:责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 概述 使用多个对象处理用户请求,这些对象组织成一条责任链A-B-C-D。收到用户请求时,A先接收到用户请求,根据需要处理,这时可以直接响应用户
阅读全文
摘要:适配器模式(别名:包装器):将一个类的接口装化成客户希望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 概述 比如A型螺母可以使用A型螺丝,B型螺母可以使用B型螺丝,现在需要在A型螺母上使用B型螺丝,这时必须使用适配器。 模式的结构 目标(Target):一个接口,该接口是
阅读全文
摘要:定义一系列算法,把它们一个个封装起来,并且它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 概述 比如,设计一个Army类,该类有一个int数组,数组表示士兵的号码,该类中有一个lineUp()方法,该方法用于将士兵按照号码从小到大排列。但有时候需要将士兵按照从大到小排列,此时要么新增一个
阅读全文
摘要:装饰模式(别名:包装器):动态的给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。 概述 许多时候,我们需要改进某个对象的功能。例如麻雀类的实例能连续飞行100米,如果用麻雀类创建了5个麻雀,想让其中一只飞行150米,在不修改麻雀类的代码前提下,怎么做? 装饰模式是动态地扩展一个对象
阅读全文
摘要:观察者模式:定义对象之间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动更新。 概述 观察者模式是关于多个对象想知道一个对象中数据变化情况的一种成熟的模式。模式中有一个“主题”和若干个“观察者”。当主题状态发生变化时,观察者得到通知。 模式的结构 模式的使用 下面
阅读全文
摘要:创建型 创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式、单例模式、生成器模式和原型模式。 结构型 用于帮助将多个对象组织成更大的结构。结构型模式主
阅读全文
摘要:命令模式(别名:动作,事务):将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化。对请求排队或记录请求日志,以及支持可撤销的操作。 概述 当一个对象请求另一个对象调用其方法达到某种目的,如果请求者不希望或无法直接与被请求者打交道,可以使用命令模式。 模式的结构 包含四种角色: 1)接
阅读全文
摘要:概述 前一章介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈和本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一帧分配多少内存基本在类结构确定下来时就已知了,因此这几个区域的内存分配和回收具有确定性,线程结束时,内存就跟着回
阅读全文
摘要:运行时数据区域 程序计数器 较小的内存空间,是当前线程所执行的字节码的行号指示器。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间的计数器互不影响。 Java虚拟机栈 线程私有。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于
阅读全文
摘要:比如[1,2,3,4,5],排列结果可以是[1,5,3,4,2] 代码:
阅读全文
摘要:给定整数n,依次输出1,2,3,……直到n位最大整数。 比如n=2,输出应该是:1,2,3,……,98,99 这道题中如果ntebie大,则不能使用数字来表示,因为可能会溢出。因此需要使用数组来表示。 当n=2时,用数组array={0,0}来表示可能的值。则array可能的情况有{0,0},{0,
阅读全文
摘要:有如下公式: 因此我们求解a^n时,可以先求解r=a^(n/2) 比如求解r=3^5,先求解3^(5-1)/2=3^2=9,因此3^5=9×9×3=243 注:我们需判断a是否为零,n的正负情况 代码:
阅读全文
摘要:比如数组[3,4,5,1,2就是已排序数组[1,2,3,4,5]的一个旋转数组。找出最小元素使用二分法,复杂度最小,为O(logn)。 旋转数组有以下三种情况 (1)最小值在首部,如[1,2,3,4,5] (2)最小值不在首部,如[3,4,5,1,2] (3)无法二分查找的特例,如[1,1,0,1,
阅读全文
摘要:给定一个已排序的二维数组array,在其中查找一个元素value 查找策略如下图: (1)将value和数组的右上角的值比较,如果大于右上角的值,则移除数组的第一行。 (2)将value和数组的左下角的值比较,如果大于左下角的值,则移除数组的第一列。 (3)直到查找完毕,已经找不到符合(1)(2)的
阅读全文
摘要:题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 分析 如下图所示,先将每个节点复制后,放到该节点后面,完成复制后,再拆分。
阅读全文
摘要:二叉树 每个节点都不能有多于两个的儿子。 二叉树的五个性质 1.在二叉树的第i层上最多有2 i-1 个节点 。(i>=1) 2.二叉树中如果深度为k,那么最多有2k-1个节点。(k>=1) 3.n0=n2+1 n0表示度数为0的节点 n2表示度数为2的节点 4.在完全二叉树中,具有n个节点的完全二叉
阅读全文