JavaWeb
JavaWebJavaWeb的概念是指,所有通过Java语言编写可以通过浏览器访问的程序的总称
是基于请求和响应开发的
请求:客户端给服务器发送数据,Request
响应:服务器给客户端回传数据,Response
响应与请求的关系:成对出现
Web资源的分类
静态资源:html、css、js、txt、mp4、jpg
动态资源:jsp页面,Servlet程序
反射:框架设计的灵魂
框架:半成品软件,可以在框架的基础上进行软件的开发,简化代码
反射:将类的各个组成部分封装为其他对象
好处:
可以在程序运行的过程中,操作这些对象
可以解耦,提高程序的可扩展性
MavenMaven是专门用于管理和构建Java项目的工具,它的主要功能有
提供了一套标准化的项目结构
提供了一套标准化的构建流程 (编译,测试,打包,发布……)
提供了一套依赖管理机制
常用命令
compile
clean
test
package
install
maven坐标
是资源的唯一标识
使用坐标来定义项目或引入项目中的依赖
组成
groupID:定义当前Maven项目隶属组织名称
art ...
JDBC
JDBCJDBC 简介JDBC(Java DataBase Connectivity)(Java数据库连接)是java语言操作关系型数据库的一套API
JDBC 入门
创建工程,导入jar包
注册驱动
1Class.forName("com.mysql.jdbc.Driver");
获取连接
1234String url = "jdbc:mysql://127.0.0.1:3306/jdbc_test";String username = "root";String password = "cz";Connection conn = DriverManager.getConnection(url,username,password);
定义SQL语句
1String sql = "update account set money = 2000 where id =1";
获取执行SQL对象
1Statement statement = conn.createState ...
MySQL
MySQL服务启动与关闭:net start mysql,net stop mysql
连接到MySQL服务的指令:mysql -h localhost -P 3306 -u root -pcz
表的一行称之为一条记录,在java中,一行记录往往使用对象表示
MySQL结构:数据库的三层结构
数据库管理系统(DBMS)
数据库
表
SQL语句的分类
DDL:数据定义语句[create]
DML:数据操作语句[增加insert,修改update,删除delete]
DQL:数据查询语句[select]
DCL:数据控制语句[管理数据库]
数据库创建数据库CREATE DATABASE [IF NOT EXISTS];
[DEFAULT] CHARACTER SET :指定数据库采用的字符集,如果不指定字符集,默认utf-8
COLLATE:指定数据库字符集的校对规则(常用的utf8_bin(区分大小写)、utf8_general_ci(不区分大小写))
筛选SELECT * FROM dbtest WHERE NAME = 'tom';
查看、删除数 ...
Java网络
网络InetAddress类
获取本机InetAddress对象:getLocalHost()
根据指定主机名/域名获取ip地址对象:getByName()
获取InetAddress对象的主机名:getHostName()
获取InetAddress对象的地址:getHostAddress()
1234567891011121314151617public class API_ { public static void main(String[] args) throws UnknownHostException { InetAddress localHost = InetAddress.getLocalHost(); System.out.println(localHost); InetAddress byName = InetAddress.getByName("MaxLifetime-LAPTOP"); System.out.println(byName); ...
代理模式
代理模式静态代理静态代理是一种设计模式,它可以在不修改原始类的情况下增强其功能。静态代理的好处有以下几点:
它可以实现对目标对象的访问控制,比如说只有满足一定条件的用户才能调用目标对象的方法。
它可以实现对目标对象的功能扩展,比如说在目标对象的方法执行前后添加一些额外的逻辑,比如日志、缓存、事务等。
它可以实现对目标对象的解耦,比如说将目标对象和调用者分离,使得调用者不需要知道目标对象的具体实现细节。
例如:
使用黄牛代理,帮我买演唱会门票
Human.java
123456789package Thread.StaticProxy;public interface Human { void sleep(); void eat(); void lookConcert();}
Me.java
12345678910111213141516171819package Thread.StaticProxy;public class Me implements Human{ @Override public void s ...
查找(全)
查找基本概念
查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找
查找表(查找结构):用于查找的数据集合称为查找表,它由同一类型的数据元素(或记录)组成
关键字:数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的
查找表的常见操作
查找符合条件的数据元素(静态查找表)
插入、删除某个元素数据(动态查找表)
查找算法的效率评价
查找长度:在查找运算中,需要对比关键字的次数称为查找长度
平均查找长度(ASL):所有查找过程中进行关键字的比较次数的平均值$$ASL=\sum_{i=1}^nP_iC_i$$$$P_i$$:查找第i个元素的概率
$$C_i$$:查找第i个元素的查找长度
通常认为查找任何一个元素的概率都相同
评价一个查找算法的效率时,通常考虑查找成功/查找失败两种情况的ASL
线性表的查找顺序查找顺序查找,又叫”线性查找“,通常用于线性表
线性表:
顺序表
链表
算法思想思想:从头到尾挨个找
算法实现普通实现:
实现(哨兵)
算法优化顺序查找的优化(对有序表)
(被查概率不相等)将被 ...
查找(只含代码)
查找线性表的查找顺序查找顺序查找 1顺序查找 21234567891011int SerchSqList(SqList &L,int e){ for(int i = 0;i<L.length;i++) { if(e == L.elem[i]){ cout<<"已找到元素"<<L.elem[i]<<endl; return e; } } return 0;}12345678910int SearchSqList2(SqList &L,int e){ int i; L.elem[0] = e; for(i = L.length;L.elem[i] != e;--i){ } cout<<"元素的位置为"<<i+1<<endl; return 0;}
折半查找/二分查找
注意:二分查找仅适用于有序递增或递减
1234567891011 ...
Java面向对象编程
方法什么是方法
方法是程序中最小的执行单元
方法的定义:把一些代码打包在一起
方法的格式1234public static 返回值类型 方法名(参数){ 方法体 return 0;}
方法的重载
在同一个类中,定义多个同名的方法
每个方法都有不同的参数类型或参数个数,同名的方法之间就构成了重载关系
123456public static void rus(int a,int b){ }public static void rus(int a,int b,int c){ }
方法的内存Java内存分配
栈
方法运行时使用的内存,方法进栈运行,运行完毕出栈(先进后出)
变量
堆
new出来,并产生地址
方法区:字节码文件加载是进入的内存
本地方法栈
寄存器
构造方法1.构造方法有什么作用?构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建,以及实例变量的初始化。换句话说:构造方法是用来创建对象,并且同时给对象的属性赋值。注意:实例变量没有手动赋值的时候,系 ...
C++模板
模板模板的概念模板就是建立通用的模具,大大提高复用性
模板的特点:
模板不可以直接使用,它只是一个框架
模板的通用并不是万能的
函数模板
C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板
C++提供两种模板机制:函数模板和类模板
函数模板语法函数模板作用:
建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
语法:
12template<typename T>函数声明或定义
解释:
template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用class代替
T — 通用的数据类型,名称可以替换,通常为大写字母
示例:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950//交换整型函数void swapInt(int& a, int& b) { int temp = a; a = b; b = temp; ...
C++中&和*的区别
C++中*和&的区别
*是取值运算符,对地址使用可以获得地址中储存的数值。 对于指针a,*a表示取a中的值
&是地址运算符,对变量使用可以获得该变量的地址。对于变量b,&b表示取b的地址
在定义时,* 是一个标识符,声明该变量是一个指针,比如说int *p; 那p就是一个指向int型的指针;在调用时,*p是指针p指向的那个变量,比如说之前有int a=5;int *p=a;那么p的值是a的地址,也就是指针p指向a,*p则等于a的值,即*p=5。而&,则是引用,比如说有定义int a=5;再定义int b=&a;那么这里的b则引用a的值,即b=5,而再给b赋值:b=10,a的值也会变为10。