1、排序中:快速排序最快,但很占内存
2、使用位运算、位移运算是最快的,因为是在内存中运算
3、对函数的调用是要开辟栈的,能减少调用就减少(代码重用)
4、有并发的问题要做成一个原子块
5、文件操作时使用byte[]数组作缓冲区的作用
6、数据库的选择:
1.成本
2.功能多不多
3.并发性(最终用户是多少)
4.安全性
7、数据库char类型定长中没有使用到的长度会使用空格补全;如果可以确定一个字段的长度,则使用char类型,使用char类型查询时会很快;
8、带汉字的字段使用nvarchar,全英文或符号的用varchar;nvarchar处理汉字或其他unicode字符集的速度比varchar快
9、 存放小数建议使用numeric;
10、查询使用别名(需要计算的列数据)可以提高效率,因为可以减少计算次数:select sum(A) SA from table group by B having SA>1000
11、SQL语句优化原则:尽量把能减少结果集的条件写在右边(把能迅速排查的条件、能减少大量查询结果的条件写右边)
12、delete删除表记录会写日志,表结构还在,是可以恢复的,速度慢;drop可以删除表的结构和数据;truncate删除表中所有记录,表结构还在,不写日志,无法找回删除记录,速度快;
13、在经常查询、where子句或是连接条件上经常引用的列上建索引;
第01讲(介绍java)
java语言是面向对象的、高性能的、跨平台(操作系统)的(一次编译,到处运行)
jdk包括jre(java运行环境)、一堆java工具和java基础的类库(3600多个类,常用150多个)
一个java文件中只能有一个public类
编写java文件>编译为字节码class文件>加载到JVM中执行
-----------------------------------------------------
第02讲(变量)
类型 字节 范围
byte 1 -128到127
short 2 -32768到32767
int 4 -2147483648到2147483647
long 8 -9223372036854775808到9223372036854775807
char中a是97,小写字母从97开始;A是61,大写字母从61开始;
char在进行运算时,直接当做ascii码对应的整数对待;
高精度到低精度可以自动转换,低到高需要强制转换,转换原则:byte<short<int<long<float<double
当一个高精度和一个低精度运算时,值向高精度转变;
-----------------------------------------------------
第03讲和第04讲(变量、流程控制、分支控制、循环)
%运算可以取到两个整数相除的余数
switch中可用数据类型主要是:byte、short、int、char、enum等;
-----------------------------------------------------
第05、06、07讲(类和对象,成员属性、成员方法、构造方法)
对象是总是存在内存中的;
-----------------------------------------------------
第09、第10讲(类方法、封装,重载、覆盖、封装继承)
静态区域块下的代码只执行一次;
包的三大作用
①区分相同名字的类
②可以很好的管理类
③控制访问范围
java中常用包:
java.lang.*; 自动引入
java.util.*; 工具包
java.net.*; 网络开发包
java.awt.*; 窗口工具包
方法重载注意事项:
①方法名相同
②方法的参数类型,个数,顺序只要有一项不同
③方法返回类型可以不同
④方法的修饰符可以不同
-----------------------------------------------------
第11、12讲(丢手帕例子,多态)
多态中父类new子类的引用是自动转换的
-----------------------------------------------------
第13、14讲(抽象类和接口和final)
接口体现了程序设计的多态和高内聚低耦合的设计 思想;
接口不能继承类,但是可以继承别的接口;
接口中的变量不能用private和protected修饰
实现接口可以看作是对继承的一种补充;
实现接口可在不打破继承关系的前提下,对某个类工功能进行扩展,非常灵活;
final修饰的父类方法不能被子类覆盖,被修饰的类不能被继承;
第17、18、19讲(数组,排序、查找、二维数组)
数组可以理解为执行数组首地址的引用;
对象数组在定义后,赋值时需要再次为每个对象分配空间;
数组大小必须事先指定;
排序分为内部排序和外部排序法;
内部排序:交换式排序法(冒泡排序、快速排序)、选择式排序法(选择排序、堆排序)、插入式排序法(插入排序、谢耳排序、二叉树排序);
外部排序:合并排序法和直接合并排序法;
查找
顺序查找
二分查找(使用了递归)
二维数组:int arr[][]=new int[4][5];
-----------------------------------------------------
(重点)第20讲(二进制、位运算、位移运算)
1字节=8byte
二进制(原码、反码、补码)概念:
二进制的最高位是符号位:0正数,1负数
正数的原码、反码、补码都一样
负数的反码=它的原码符号位不变,其他位取反;
负数的补码=它的反码+1
0的反码、补码都是0
java没有无符号数
计算机运算的时候都是以补码的方式运算
-----------------------------------------------------
第21、22、23讲(集合)
常用集合类:List、ArrayList、Vector、LinkedList、hashMap、hashTable
ArrayList和Vector的区别
Vector是同步的,保证了Vector中的对象是线程安全的;而ArrayList则是异步的,因此不是线程安全的;
Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以如果要在集合中保存大量的数据使用Vector有优势一点,因为可以通过设置集合的初始化大小来避免不必要的资源开销;
HashTable和HashMap的区别
HashTable是同步的,是线程安全的;而HashMap是异步的,因此不是线程安全的。因为同步的要求会影响执行的效率,所以如果不需要线程安全的集合,那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。
总结
⒈如果要求线程安全,使用Vector、hashTbale;
⒉如果不要求线程安全,使用ArrayList、LinkedList、HashMap;
⒊如果要求键值对,则使用HashMap、hashTable;
⒋如果数据量大,又要线程安全考虑Vector;
-----------------------------------------------------
第25讲(泛型、异常)
泛型的优点:类型安全、向后兼容、层次清晰、性能较高;用泛型Java编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件;
异常
1、编译异常
2、运行时异常
3、error错误(环境错误、外部影响)
finally不会被执行的情况
(1)finally块中发生了异常;
(2)程序所在线程死亡;
(3)在前面的代码中用了System.exit();
(4)关闭CPU;
-----------------------------------------------------
第29讲(swing介绍)
布局管理
流式布局管理器
边界布局管理器
网格布局管理器
卡片布局管理器
网格包布局管理器
开发GUI程序步骤
1.继承JFrame
2.定义需要的组件
3.创建组件
4.设置布局管理器
5.添加组件
6.显示窗体
-----------------------------------------------------
第35讲(事件处理)
java事件处理机制
java.awt.Event.*;
java事件处理是采取“委派事件模型”;
-----------------------------------------------------
第38讲(线程)
线程是进程中的一个实体,一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。
线程有就绪、堵塞和运行三种进本状态;
①线程是轻量级的进程
②线程没有独立的地址空间(内存空间)
③线程是由进程创建的
④一个进程可以拥有多个线程——这就是多线程编程
⑤线程的状态:新建状态(new)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、死亡状态(Dead)
对象的标志位就是对象锁
同步机制:如果有多个线程因等待一个对象的标志位而处于阻塞状态时,当该对象的标志位恢复到1状态时,只会有一个线程能够进入同步代码执行,其他的线程仍然处于阻塞状态。
-----------------------------------------------------
第43、44讲(IO编程)
字节流:用于读写二进制文件及任何类型文件byte
字符流:用于读写文本文件,不能操作二进制文件
类名最后是ready和write就是字符流
-----------------------------------------------------
第53讲(数据库)
DBA:数据库管理员
数据库基本结构的三个层次:
(1)物理数据层
(2)概念数据层
(3)逻辑数据层
数据库的基本特点
(1)实现数据共享
(2)减少数据的冗余度
(3)数据实现集中控制
(4)数据一致性和可维护性,以确保数据的安全性和可靠性
(5)故障恢复
主流数据库
微软:SQL Server、access
瑞典AB公司:MySQL(适合Linux)
ibm公司:db2(海量数据)、informix(安全性很好,银行喜欢用)
美国Sybase公司:Sybase
美国oracle公司:Oracle
SQL语言包含4个部分:
数据定义语言(DDL):create、drop、alert
数据操作语言(DML):insert、update、delete等
数据查询语言(DQL):select语句
数据控制语言(DCL):grant、remove、commit、rollback等
数据库的选择:
1.成本
2.功能多不多
3.并发性(最终用户是多少)
4.安全性
unicode编码:用两个字节表示一个字符
非unicode编码:用一个字节表示一个字母,用两个字节表示一个汉字;
字符型
类型 大小(字符) unicode编码
char 8000 非
varchar 8000 非
ntext 1073741823 是
text 2147483647 非
nchar 4000 是
nvarchar 4000 是
text是字节格式存储英文的,也可以存中文但可能会出现乱码
ntext是多字节格式存储unicode,可存储各种文字
isNull(comm,0):comm为null返回0,否则返回原值
-----------------------------------------------------
第62讲(复杂查询)
在from字句中使用子查询时,该子查询会作为一个临时表来对待,必须指定别名。
左外连接:左边表的记录全部显示,如果没有匹配的记录就用null填;
右外连接:右边表的记录全部显示,如果没有匹配的记录就用null填;
-----------------------------------------------------
第84讲(网络基础)
tcp/ip:网络通讯协议,由网络层的IP协议和传输层的TCP协议组成;
TCP/IP四层:
应用层(application)
传输层(transport)
网络层(ip)
链路层(link)
端口范围:0-65535
0号是保留端口,1-1024是固定端口,1025-65535是动态端口(可以使用)
端口注意事项
在计算机(尤其是做服务器的电脑)要尽可能的少开端口
一个端口只能被一个程序监听
如果使用netstat-an可查看本机有那些端口在监听
可以使用netstat-anb来查看监听端口的pid,在结合任务管理器关闭不安全的端口
url概念:统一资源定位符;每一个网页的唯一的名称标识符;
url的组成
(1)协议(http,https)
(2)ip地址(32位)
(3)端口号(16位)0-65535
(4)资源名称
单工:单工数据传输只支持数据在一个方向上传输
半双工:允许数据在两个方向上传输,但不能同时传输;
全双工:允许数据同时在两个方向上传输数据;
——————————————JSP部分——————————————————————
第01讲(JSP)
jsp是什么?
1.jsp运行在服务器
2.jsp(java server page)
3.jsp的基础是servlet(相当于对servlet进行一个包装)
4.jsp是综合技术(jsp=html+css+javascript+java代码+jsp标签)
服务器如果是第一次访问该jsp文件,就会把demo.jsp翻译成一个Servletdemo_jsp.java,再编译成demo_jsp.class,然后在把class加在到内存中;
如果是第二次访问,就直接访问内存中的实例;
如果某个jsp文件被修改了,就需要重新访问该jsp文件(即相当于第一次);
小脚本<% %>中的变量会成为jsp.java文件中的service函数的局部变量;
jsp九大内置对象:
1.out 向客户端输出数据,字节流
2.request 接受客户端的http请求
3.response 封装jsp的产生的回应
4.session 会话,保存用户信息跟踪用户的行为
5.application 全局的,多个用户共享该对象,可以作计数器(count)
6.pageContext jsp页面的上下文,域对象
7.exception 代表运行时的一个异常
8.page 代表jsp实例本身
9.config 代表jsp对应的servlet的配置,可以得到web.xml中的参数
contentType和pageEncoding的区别
contentType指定网页以什么形式显示; pageEncoding不仅可以指定网页的显示形式,还能指定web服务器以什么方式来翻译servlet
在开发jsp过程中宏,我们通常把jsp放入WEB-INF目录,目的是为了防止用户直接访问这些jsp文件;在WebRoot下我们有一个index入口页面,它主要是做转发跳转:<jsp:forward page="/WEB-INF/jsp页面.jsp"></jsp:forward>;
动态引入:<jsp:include file=""></jsp:include>
静态引入:<%@ include file="" %>
相同点:把一个文件引入到另一个文件
区别:静态引入把两个jsp翻译成一个Servlet,所以被引入的文件不要包含<body><html>;
动态引入把两个jsp分别翻译,所以被引入的jsp包含有<body><html>也可以;
注释:
<!-- -->会在servlet中对应生成out.write("<!-- -->"),返回给浏览器的静态页面也有,不过用户看不到;
<%-- --%>在servlet中没有输出,是jsp专用注释方法,建议使用;
正则表达式中使用test验证则表达式不要带/g
防止用户请求重复提交: 使用response.sendRedirect()跳转到保存转发跳转页面的servlet;
当我们的java对象和数据库关联的时候使用java.sql.Date;如果是service类,则使用java.util.Date
——————————————Oracle部分——————————————————————
1、oracle安装成功会默认生成三个用户
sys:超级管理员,dba权限最高角色
system:系统管理员
scott:普通用户
2、sys与system相比sys有create databse权限,其他类似;
3、删除用户时,如果删除的用户中有表的话就需要在删除时代一个参数cascade;
4、系统权限:用户对数据库的相关权限;
对象权限:用户对其他用户的数据对象操作的权限;
5、oracle的系统权限有140多种,对象权限25种;
6、profile管理用户口令可以对用户进行限制,比如限制用户登陆时最多可输入密码的次数等;profile命令一般用dba的身份执行;
7、delete删除表记录会写日志,表结构还在,是可以恢复的,速度慢;drop可以删除表的结构和数据;truncate删除表中所有记录,表结构还在,不写日志,无法找回删除记录,速度快;
8、大量添加数据语句:insert into Users(字段,字段,字段) select * from Users
9、all表示要比其中的条件都大;any只要比其中的任意一个条件大即可;
10、(多行子查询)查询与SMITH的部门和岗位完全相同的所有雇员:select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH';
11、如何显示高于自己部门平均工资的员工的信息:select e1.ename,e1.sal,e1.deptno,e2.avgsal from emp e1,(select deptno,avg(sal) avgsal from emp group by deptno) e2 where e1.deptno=e2.deptno and e1.sal>e2.avgsal;
12、oracle分页:select * from (select e1.*,rownum rn from (select * from emp) e1 where rownum<=10) t where t.rn>=6; 指定查询列或需要对列进行排序时只需要修改最里层的子查询;
13、使用查询结果创建一个新表:create table newEmp(id,name,sal,job) as select from id,name,sal,job from emp;
14、快速update:update emp set(job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT';
15、事物的几个重要操作:
设置保存点 savepoint a
取消部分事务 rollback to a
取消全部事务 rollback
16、设置只读事务
set transaction read only;只读事务是指只允许执行查询的操作,而不允许执行任何其他DML操作的事务;
17、如果没有表可使用dual表进行函数测试:
select abs(n) from dual;
18、字符函数
lower(char):转小写
upper(char):转大写
length(char):获取字符长度
substr(char,m,n):从字符的m位截取n个字符
数学函数
round(n,[m]):四舍五入
trunc(n,[m]):截取小数
mod(m,n):用m数%n数
floor(n):向下取整
ceil(n):向上取整
日期函数
sysdate:返回当前时间
add_months(d,n):给指定日期加上n个月
last_dat(d):返回指定日期所在月份的最后一天
19、索引的建立原则:
在大表上建立索引才有意义
在where子句或是连接条件上经常引用的列上建索引
索引的层次不要超过4层
20、索引的缺点
建立索引系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引;
更新数据的时候,系统必须要有额外的时间来同事对索引进行更新,以维护数据和索引的一致性,因此要花更多的系统时间;
21、在以下情况不应建立索引
很少或从不引用的字段
逻辑型的字段,比如男或女(是或否)等
22、B树索引建立在重复值很少的列上,而位图索引则建立在重复值很多、不同值相对固定的列上;
23、查看某个角色包括哪些系统权限:select * from role_sys_privs where role='DBA'
24、存储过程命名规范:
定义变量建议用v_作为前缀v_sal
定义常量建议用c_作为前缀c_rate
定义游标建议用_cursor作为后缀emp_cursor
定义例外建议用e_作为前缀e_error
25、PL/SQL有 存储过程、函数、包(可组合过程和函数);
26、复合类型
结构体:
declare type_record_type is record(
name emp.ename%type,sal emp.sal%type);
sp_record emp_record_type;
将emp_record_type类型赋值给sp_record变量,sp_record可以接收emp_record_type类型中定义的所有类型的值;
数组:
declare
type sp_table_type is table of emp.ename%type index by binary_integerl;
sp_table sp_table_type;
将这个复合类型赋值给sp_table变量,sp_table作为数组通过下标保存值;
游标:
了解不写了;
27、PL/SQL的循环有look、while和for循环;
28、第30讲是存储过程的分页
29、例外的分类
预定义例外:常见的oracle错误(20多个)
非预定义例外:预定义例外不能处理的例外
自定义例外:与oracle错误无关的其他情况