一、Java基础
1.怎么理解Java对象?
常说的new一个对象,对象可以认为是在某一类事物中抽象出来某一个特例。通过new操作符来创建对象。
2.如何理解面向对象三大特性:封装、继承、多态?
封装:就是把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,
如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
继承: 使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
子类拥有父类非private的属性和方法
子类可以拥有自己属性和方法,即子类可以对父类进行扩展
子类可以用自己的方式实现父类的方法,
多态:它是指在父类中定义的属性和方法被子类继承够,可以具有不同的数据类型或表现出不同的行为。
Java实现多态有三种必要条件:继承、重写和向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样引用才既能调用父类的方法,又能调用子类的方法 向上转型讲述
3.子类继承了父类,一定不能直接访问父类的私有属性或者方法吗?
- 无法直接访问
- 可通过内部定义类,在父类中定义一个方法进行return 那个属性
- 通过反射机制 getClass()获取对象->class.getDeclaredFields()获取Field[]->for(Field field:fields)遍历->将field.setAccessible置位true->filed.get(类)显示
附:
Super关键字
super可以用来引用直接父类的实例变量。
super可以用来调用直接父类方法。
super()可以用于调用直接父类构造函数
4.重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译。
如public class Overloading {
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
//以下两个参数类型顺序不同
public String test(int a,String s){
System.out.println("test3");
return "returntest3";
}
public String test(String s,int a){
System.out.println("test4");
return "returntest4";
}
public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,
二、MYSQL
5.MYSQL语句官方
基础:
- 查 select * from 表名
- 增 insert into 表名(列1,…) values (值1,…)
- 改 update 表名 set 列1=值1,列2=值2… where 条件范围
- 删 delete from 表名 where 条件 ——删除某行
- 去重复值 select distinct 列名 from 表名 ——从那列中选取唯一不同的值展示
- 运算符 select… where 条件 FirstName=‘Thomas’ AND或OR LastName=‘Carter’
- 排序oder by 字段名
进阶:
- 规定要返回的记录的数目top——select TOP number|percent 列名* from table_name
- select top 2 * from 表名 选取头两条记录
- select top 50 percent * from 表名
- 在where子句中搜索列中的指定模式like—Select * from 表名 where City like ‘N%’ 以N开头的,’%N’以N结尾, ‘%N%’ 包含N
- 通配符% _ [charlist] 搭建like使用
- where FirstName LIKE ‘_eorge’ 希望表中选取名字的第一个字符之后是 “eorge” 的人:
- WHERE LastName LIKE ‘C_r_er’,希望选取的这条记录的姓氏以 “C” 开头,然后是一个任意字符,然后是 “r”,然后是任意字符,然后是 “er”:
- 字符列中的任何单一字符 [charlist]
- where City LIKE ‘[ALN]%’ 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人
- IN 操作符允许我们在 WHERE 子句中规定多个值 select 列名 from 表名 where 列名 in (value1,value2…) 因为有一个列很多字段
- Between … And 在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
- WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’ 以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人 这里不同的数据库有不同的显示,用NOT BETWEEN ‘Adams’ AND
‘Carter’ 反验证
- 可以为列名称和表名称指定别名As
- 用于根据两个或多个表中的列之间的关系,从这些表中查询数据Join=inner join 例子
- JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- Union 操作符用于合并两个或多个 SELECT 语句的结果集。注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
- SELECT 列名 FROM 表名 UNION SELECT 列名 FROM 表名
- 与 UNION ALL不同的是,All会把重复的 也显示出来
- 用于创建表的备份复件 select into
- SELECT *(字段) INTO 表 FROM 表
- SELECT *INTO 表 IN '另一个库.mdb’FROM 表
- 创建数据库create database database_name
- 创建数据库中的表CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,…)
- 约束用于限制加入表的数据的类型
- 列名称 数据类型 NOT NULL 不能为空
- UNIQUE 和PRIMARY KEY 约束均为列或列集合提供了唯一性的保证
- FOREIGN KEY 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
- CHECK 约束用于限制列中的值的范围 CHECK (Id_P>0)
- DEFAULT 约束用于向列中插入默认值 City varchar(255) DEFAULT ‘Sandnes’
- create index 索引名 on 表名(列名)
- CREATE INDEX PersonIndex ON Person (LastName DESC) 以降序索引某个列中的值
- CREATE INDEX PersonIndex ON Person (LastName, FirstName) 索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开
- 可以轻松地删除索引、表和数据库 drop
- ALTER TABLE table_name DROP INDEX index_name
- 用于在已有的表中添加、修改或删除列 ALTER
- 会在新记录插入表中时生成一个唯一的数字 Auto-increment
- P_Id int NOT NULL AUTO_INCREMENT,
- 创建、更新和删除视图
- CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName FROM Products WHERE Discontinued=No
- Date函数
- now() 当前的日期
- Curdate()当前的时间
- date() 提取日期或日期/时间表达式的日期部分
- extract() 返回日期/时间按的单独部分
- date_add() 给日期添加指定的时间间隔
- date_sub() 从日期减去指定的时间间隔
- dateDIFF()返回两个日期之间的天数
- date——format()用不同的格式显示日期/时间
- NULL操作符-默认地,表的列可以存放 NULL 值
- SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL
- 数据类型:文本、数字和日期/时间类型
- Text类型
- char 保存固定长度的字符串,最多255个字符
- varchar 保存可变长度的字符串
- TINYTEXT 存放最大长度为 255 个字符的字符串。
- TEXT 存放最大长度为 65,535 个字符的字符串。
- Number 类型
- Int和TINYINT
- FLOAT
- DOUBLE
- DECIMAL 小数
- Date类型
- DATE() -YYYY-MM-DD
- DATETIME() -YYYY-MM-DD HH:MM:SS
- TIMESTAMP() -YYYY-MM-DD HH:MM:SS
- TIME() -HH:MM:SS
- YEAR()
SQL函数
- AVG(*) 返回平均值
- select avg(列名) from 表名
- count(*) 函数返回匹配指定条件的行数。
- select count(distinct 列名) from 表名—— 去掉列的重复值
- select count(列名) from 表名 where 列名=’ 特定值’
- first() 函数返回指定的字段中第一个记录的值
- SELECT FIRST(列名) FROM table_name
- LAST() 函数返回指定的字段中最后一个记录的值。
- MAX() 函数 函数返回一列中的最大值,NULL 值不包括在计算中
- MIN 函数返回一列中的最小值。NULL 值不包括在计算中
- SUM 函数返回数值列的总数(总额)
- GROUP BY 用于结合合计函数,根据一个或多个列对结果集进行分组
- SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY 列名/字段名
- 先分组后排序
- HAVING 增加 HAVING 子句原因是:WHERE 关键字无法与合计函数一起使用
- SELECT 字段,SUM(字段) FROM 表 GROUP BY 字段
HAVING SUM(字段)<2000
- SELECT 字段,SUM(字段) FROM 表 GROUP BY 字段
- UCASE 函数把字段的值转换为大写
- SELECT UCASE(LastName) as LastName,FirstName FROM Persons
- LCASE 函数把字段的值转换为小写
- MID 函数用于从文本字段中提取字符
- SELECT MID(列名,start,length) FROM table_name
- LEN(列名)函数返回文本字段中值的长度
- ROUND 函数用于把数值字段舍入为指定的小数位数
- SELECT ROUND(column_name,decimals) FROM table_name 要舍入的字段和规定要返回的小数位数。
- NOW 函数返回当前的日期和时间。
- SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
- FORMAT 函数用于对字段的显示进行格式化。
- SELECT FORMAT(column_name,format) FROM table_name
- SELECT ProductName, UnitPrice, FORMAT(Now(),‘YYYY-MM-DD’) as PerDate
FROM Products
三、计算机网络
1.Tcp/Ip的四层协议
- 应用层(各种病应用层协议如支持万维网HTTP 域名系统DNS等)
- 应用进程间通信和交互来完成特定网络任务,交互的数据单元为报文
- 运输层(TCP或UDP)
- 负责向两台主机中进程之间的 通信提供通用的数据传输服务。
- 传输控制协议TCP:面向连接的、可靠的数据传输服务,传输单位报文段
- 用户数据报协议UDP:提供无连接的、不保证数据可靠的传输服务。单位:用户数据包
- 网络层(IP ICMP ARP)
- 为分组交换网上的不同主机提供通信服务,把运输层产生的报文段或用户数据报封装成分组或包进行传送
- 数据链路层
-IP数组组装成帧,每一帧包含(同步信息、地址信息、差错控制),从中获取数据部分上交给网络层
2.TCP与IP的区别
- Tcp:传输控制协议,一种面向连接的,端对端的,可靠的,基于ip的传输层协议、主要特点是三次握手,四次挥手。
- IP:又叫因特网协议,ip协议位于网络层,ip协议规定了数据传输时的基本单元(数据包)和格式,ip协议还定义了数据包的递交办法和路由选择。
总结: 整个网络中的传输流程是:IP层接收由更底层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层TCP层,IP层也把从TCP接收来的数据包传送到更底层。
TCP和IP的关系是:IP提供基本的数据传送,而高层的TCP对这些数据包做进一步加工,如提供端口号等等。
图解TCP/IP通信传输流过程及原理
通信传输过程(以HTTP为例)
1.首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求
2.为了传输方便,在传输层(TCP协议)把从应用层处接收到数据(HTTP请求报文)进行分割,并在各个报文上打上标志序号及端口号后转发给网络层。
3.在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
4.接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求。
3.HTTP协议与TCP/IP协议的关系
- HTTP的长连接和短连接本质上是TCP长连接和短连接。
- HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
- IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。
4.什么是长连接、短连接?
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。