• 看《韩顺平Java》视频的笔记


    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错误无关的其他情况

    纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    《需求分析与系统设计》阅读笔记(四)
    《需求分析与系统设计》阅读笔记(三)
    每周总结(补)【2020/11/22】——自主学习MyBatis与Hive配置
    每周总结【2020/11/08】——————图表联动
    每周总结【2020/11/1】——动态生成树形组件,MapReduce,C++实现文法分析
    “公文流转系统 v1.0”
    统计文本文件(字母、单词、字符)
    动手动脑 第三周(一)
    动手动脑 第三周 (二)
    回文字符串判断
  • 原文地址:https://www.cnblogs.com/chenglangpofeng/p/10643605.html
Copyright © 2020-2023  润新知